Author: arekm Date: Tue Mar 7 17:37:21 2006 GMT Module: SOURCES Tag: HEAD ---- Log message: - up to 1.23
---- Files affected: SOURCES: php.vim (1.7 -> 1.8) ---- Diffs: ================================================================ Index: SOURCES/php.vim diff -u SOURCES/php.vim:1.7 SOURCES/php.vim:1.8 --- SOURCES/php.vim:1.7 Wed Nov 30 16:24:50 2005 +++ SOURCES/php.vim Tue Mar 7 18:37:16 2006 @@ -2,13 +2,30 @@ " Language: PHP " Author: John Wellesz <John.wellesz (AT) teaser (DOT) fr> " URL: http://www.2072productions.com/vim/indent/php.vim -" Last Change: 2005 Nobember 21st -" Version: 1.20 +" Last Change: 2006 January 15th +" Newsletter: http://www.2072productions.com/?to=php-indent-for-vim-newsletter.php +" Version: 1.23 +" +" Changes: 1.23 - <script> html tags are now correctly indented the same +" way their content is. +" - <?.*?> (on a single line) php declarations are now +" always considered as non-php code and let untouched. +" +" Changes: 1.22 - PHPDoc comments are now indented according to the +" surrounding code. +" - This is also true for '/* */' multi-line comments +" when the second line begins by a '*'. +" - Single line '/* */' comments are also indented. +" +" +" Changes: 1.21 - 'try' and 'catch' were not registered as block starters so the '{' +" after a 'try' or 'catch' could be wrongly indented... +" (thanks to Gert Muller for finding this issue) " " Changes: 1.20 - Line beginning by a single or double quote followed " by a space would cause problems... this was related " to the bug correction of version 1.10 - Thanks to -" David F. for finding this (he was lucky). +" David Fishburn for finding this (he was lucky). " - Changed the way this script set the 'formatoptions' " setting, now it uses '-=' and '+=' " - New option: PHP_autoformatcomment (defaults to 1), @@ -18,15 +35,14 @@ " setting is set to the type of comments that PHP " supports. " -" " Changes: 1.19 - Indentation of '*/' delimiter of '/**/' won't be broken by " strings or '//' comments containing the "/*" character sequence. " " Changes: 1.182 - I Forgot to register 'interface' and 'abstract' as block starters so the '{' -" after them could be wrongly indented... +" after them could be wrongly indented... " " Changes: 1.181 - I Forgot to register 'class' as a block starter so the '{' -" after a 'class' could be wrongly indented... +" after a 'class' could be wrongly indented... " " Changes: 1.18 - No more problems with Vim 6.3 and UTF-8. " - Opening braces "{" are always indented according to their block starter. @@ -164,7 +180,7 @@ " That will be corrected in the next version. " " If you find a bug, please e-mail me at John.wellesz (AT) teaser (DOT) fr -" with an example of code that break the algorithm. +" with an example of code that breaks the algorithm. " " " Thanks a lot for using this script. @@ -297,7 +313,7 @@ " Only define the functions once per Vim session. if exists("*GetPhpIndent") - finish " XXX + finish " XXX endif let s:endline= '\s*\%(//.*\|#.*\|/\*.*\*/\s*\)\=$' @@ -307,7 +323,14 @@ function! GetLastRealCodeLNum(startline) " {{{ "Inspired from the function SkipJavaBlanksAndComments by Toby Allsopp for indent/java.vim + let lnum = a:startline + + " Used to indent <script.*> html tag correctly + if b:GetLastRealCodeLNum_ADD && b:GetLastRealCodeLNum_ADD == lnum + 1 + let lnum = b:GetLastRealCodeLNum_ADD + endif + let old_lnum = lnum while lnum > 1 @@ -495,7 +518,7 @@ endfunction " }}} let s:notPhpHereDoc = '\%(break\|return\|continue\|exit\);' -let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|else\>\|while\>\|switch\>\|for\%(each\)\=\>\|declare\>\|class\>\|interface\>\|abstract\>\|[|&]\)' +let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|else\>\|while\>\|switch\>\|for\%(each\)\=\>\|declare\>\|class\>\|interface\>\|abstract\>\|try\>\|catch\>\|[|&]\)' " make sure the options needed for this script to work correctly are set here " for the last time. They could have been overriden by any 'onevent' @@ -537,6 +560,9 @@ "########### MAIN INDENT FUNCTION ############# "############################################## + " variable added on 2005-01-15 to make <script> tags really indent correctly (not pretty at all :-/ ) + let b:GetLastRealCodeLNum_ADD = 0 + " This detect if the user is currently typing text between each call let UserIsEditing=0 if b:PHP_oldchangetick != b:changedtick @@ -593,8 +619,11 @@ if !b:InPHPcode_checked " {{{ One time check let b:InPHPcode_checked = 1 - " the line could be blank (if the user presses 'return') - let synname = IslinePHP (prevnonblank(v:lnum), "") + let synname = "" + if cline !~ '<?.*?>' + " the line could be blank (if the user presses 'return') + let synname = IslinePHP (prevnonblank(v:lnum), "") + endif if synname!="" if synname != "phpHereDoc" @@ -669,6 +698,10 @@ elseif cline =~? '<script\>' " a more accurate test is useless since there isn't any other possibility let b:InPHPcode_and_script = 1 + " this will make GetLastRealCodeLNum to add one line to its + " given argument so it can detect the <script> easily (that is + " simpler/quicker than using a regex...) + let b:GetLastRealCodeLNum_ADD = v:lnum endif endif endif @@ -691,7 +724,7 @@ let b:InPHPcode_tofind = substitute( last_line, '^.*<<<\(\a\w*\)\c', '^\\s*\1;$', '') " Skip /* \n+ */ comments execept when the user is currently - " writting them + " writting them or when it is a comment (ie: not a code put in comment) elseif !UserIsEditing && cline =~ '^\s*/\*\%(.*\*/\)[EMAIL PROTECTED]' && getline(v:lnum + 1) !~ '^\s*\*' let b:InPHPcode = 0 let b:InPHPcode_tofind = '\*/' @@ -701,14 +734,16 @@ elseif cline =~? '^\s*</script>' let b:InPHPcode = 0 let b:InPHPcode_tofind = s:PHP_startindenttag + " Note that b:InPHPcode_and_script is still true so that the + " </script> can be indented correctly endif endif " }}} + " Non PHP code is let as it is if !b:InPHPcode && !b:InPHPcode_and_script return -1 endif - " Align correctly multi // or # lines " Indent successive // or # comment the same way the first is {{{ @@ -739,10 +774,12 @@ endif endif - if !b:PHP_InsideMultilineComment && cline =~ '^\s*/\*' + if !b:PHP_InsideMultilineComment && cline =~ '^\s*/\*' && cline !~ '\*/\s*$' " if cline == '/*' + if getline(v:lnum + 1) !~ '^\s*\*' + return -1 + endif let b:PHP_InsideMultilineComment = 1 - return -1 endif " }}} " Some tags are always indented to col 1 @@ -769,6 +806,7 @@ " Find an executable php code line above the current line. let lnum = GetLastRealCodeLNum(v:lnum - 1) + " last line let last_line = getline(lnum) " by default ================================================================ ---- CVS-web: http://cvs.pld-linux.org/SOURCES/php.vim?r1=1.7&r2=1.8&f=u _______________________________________________ pld-cvs-commit mailing list [email protected] http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit
