views:

32

answers:

3

I'm using an existing snippet in Textmate to reduce the repetition of creating controllers and models. The snippet works great, but I'd love to add a comment to the end of each file. For example:

/* End of file filename.php */  
/* Location: ./system/application/controllers/filename.php */

The first line is easy:

/* End of file ${TM_FILENAME} */

The second part is almost as easy with the TM_FILEPATH variable:

/* Location: ./${TM_FILEPATH} */

The problem is, I don't want the entire file path returned, just anything AFTER 'system' if it exists, or 'application' if not. For instance, using TM_FILEPATH returns this:

/* Location: ./path/from/root/system/application/controllers/filename.php */
-or-
/* Location: ./path/from/root/application/controllers/filename.php */

...when I want:

/* Location: ./system/application/controllers/filename.php */
-or-
/* Location: ./application/controllers/filename.php */

I assume it is going to be some regex trickery, but I have no idea how. Any suggestions please?


UPDATE: I just found the TextMate variable TM_PROJECT_DIRECTORY which contains the info that I want REMOVED from TM_FILEPATH if that makes things any easier.

So, whereas TM_FILEPATH produces this:

/path/from/root/system/application/controllers/filename.php

TM_PROJECT_DIRECTORY produces this:

/path/from/root
A: 

I don't know about Textmate, but could you use the CI constant FCPATH? This is the full server path to the file.

musoNic80
Thanks, but no. This is for raw text CI PHP files being created in TextMate, so the CI constants are not even in play yet.However, I just found the TextMate variable TM_PROJECT_DIRECTORY which contains the info that I want REMOVED from TM_FILEPATH if that makes things any easier.So, whereas TM_FILEPATH produces this: /path/from/root/system/application/controllers/filename.phpTM_PROJECT_DIRECTORY produces this: /path/from/root
TunaMaxx
A: 

I use two different snippets for controllers and models (since the syntax is similar, but just a bit different; I.E.: every controller needs an index function, but models don't). I just hard code them as follows...

Controller:

/* Location: ./application/controllers/${TM_FILENAME} */

Model:

/* Location: ./application/models/${TM_FILENAME} */

Since I always pull the application folder out of the system folder, and put the system folder in a different directory, this works out great. I also added a tabstop on application, just in case I renamed the application directory.

@TM_PROJECT_DIRECTORY: I think this only works if you open your files as a project. I use e text editor, which is based on Textmate, so it might be a little bit different.

Hope this helps.

Mike
I generally pull the applications folder out too, but I'd like to have the snippet be smart enough to work in either case.The TM_PROJECT_DIRECTORY is only set if you are working in a project. I knew that, but hadn't really considered the ramifications of say, adding a controller without being 'in' the project.
TunaMaxx
A: 

Here is the solution I came up with. I have no idea if it is the best way, but it seams to work:

/* End of file ${TM_FILENAME} */
/* Location: ${TM_FILEPATH/(.*?)(\/system)?(\/application.*)/(?1:).$2$3/} */

I'll break it down as much as I understand it ;)

${TM_FILEPATH      - The 'source' string TextMate variable
/                  - Indicates next chars are 'pattern'
(.*?)              - Group 1: Zero or more of any character. ? Makes it non-greedy
(\/system)?        - Group 2: /system but it's optional because of the ?
(\/application.*)  - Group 3: /application and any other characters
/                  - Indicates next chars are 'replacement'
(?1:).$2$3         - If Group 1 is found, replace with blank, then a dot, Group 2, Group 3.
/                  - Indicates regex is finished.
}                  - Closes off TextMate variable.
TunaMaxx