SOURCES: php.vim - up to 1.12
arekm
arekm at pld-linux.org
Sat Jun 18 11:42:59 CEST 2005
Author: arekm Date: Sat Jun 18 09:42:59 2005 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- up to 1.12
---- Files affected:
SOURCES:
php.vim (1.3 -> 1.4)
---- Diffs:
================================================================
Index: SOURCES/php.vim
diff -u SOURCES/php.vim:1.3 SOURCES/php.vim:1.4
--- SOURCES/php.vim:1.3 Sun Mar 6 22:53:55 2005
+++ SOURCES/php.vim Sat Jun 18 11:42:53 2005
@@ -2,8 +2,18 @@
" Language: PHP
" Author: John Wellesz <John.wellesz (AT) teaser (DOT) fr>
" URL: http://www.2072productions.com/vim/indent/php.vim
-" Last Change: 2005 February 10th
-" Version: 1.10
+" Last Change: 2005 May 31th
+" Version: 1.12
+"
+" Changes: 1.12 - The bug involving searchpair() and utf-8 encoding in Vim 6.3 will
+" not make this script to hang but you'll have to be
+" careful to not write '/* */' comments with other '/*'
+" inside the comments else the indentation won't be correct.
+" NOTE: This is true only if you are using utf-8 and vim 6.3.
+"
+" Changes: 1.11 - If the "case" of a "switch" wasn't alone on its line
+" and if the "switch" was at col 0 (or at default indenting)
+" the lines following the "case" were not indented.
"
" Changes: 1.10 - Lines beginning by a single or double quote were
" not indented in some cases.
@@ -77,32 +87,6 @@
" should.
" That will be corrected in the next version.
"
-" Changes: improvements with regard to the original version (0.5) by Miles Lott (whose this script was inspired):
-" - Commented part of code or non PHP code no longer break the
-" indent algorithm, the content of those parts are indented
-" separatly
-" - corrected a strange thing (a part of code was duplicated) ->
-" the last version couldn't work.
-" - Folds can be used without problem
-" - multilevel non bracked structures are indented (like
-" in C)
-" Exemple:
-" if (!isset($History_lst_sel))
-" if (!isset($blabla))
-" if (!isset($bloum)) {
-" $History_lst_sel=0;
-" } else
-" $foo="truc";
-" else $bla= "foo";
-" $command_hist = TRUE;
-"
-" - "array( 'blabla'," lines no longer break the indent of the
-" following lines
-" - the options php_noindent_switch and php_indent_shortopentags have been removed
-" (couldn't find any reason why one would want to use them)
-" - PHP open and close tags are always set to col 1 as for the
-" immediate following php code
-"
" 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.
"
@@ -146,6 +130,18 @@
" MUST remove CR when the fileformat is UNIX else the indentation
" won't be correct...
+setlocal nosmartindent
+setlocal nolisp
+
+"This will prevent a bug involving searchpair(), its 'r' flag, utf-8 and vim 6.3
+"from occurring but will forbid you to write other '/*' inside a '/* */' comment.
+if version <= 603 && &encoding == 'utf-8'
+ let s:searchpairflags = 'bW'
+else
+ let s:searchpairflags = 'bWr'
+endif
+
+
if &fileformat == "unix" && exists("PHP_removeCRwhenUnix") && PHP_removeCRwhenUnix
let myul=&ul
silent! %s/\r$//g
@@ -177,20 +173,23 @@
endif
let b:did_indent = 1
-setlocal nosmartindent
+setlocal nosmartindent
setlocal nolisp
+setlocal nocindent
+setlocal autoindent
+
setlocal indentexpr=GetPhpIndent()
setlocal indentkeys=0{,0},0),:,!^F,o,O,e,*<Return>,=?>,=<?,=*/
" Only define the function once.
if exists("*GetPhpIndent")
- finish
+ finish " XXX
endif
let s:endline= '\s*\%(//.*\|#.*\|/\*.*\*/\s*\)\=$'
let s:PHP_startindenttag = '<?\%(.*?>\)\@!\|<script[^>]*>\%(.*<\/script>\)\@!'
-" setlocal debug=msg
+"setlocal debug=msg " XXX
function! GetLastRealCodeLNum(startline) " {{{
@@ -212,8 +211,10 @@
let lnum = lnum - 1
elseif lastline =~ '\*/\s*$' " skip multiline comments
call cursor(lnum, 1)
- call search('\*/\zs', 'W')
- let lnum = searchpair('/\*\zs', '', '\*/\zs', 'bWr', '') " find the most outside /*
+ call search('\*/\zs', 'W') " positition the cursor after the first */
+ let lnum = searchpair('/\*', '', '\*/\zs', s:searchpairflags, '') " find the most outside /*
+ "echo 'lnum skipnonphp= ' . lnum
+ "call getchar()
let lastline = getline(lnum)
if lastline =~ '^\s*/\*' " if line contains nothing but comment
@@ -225,8 +226,8 @@
elseif lastline =~? '\%(//\s*\|?>.*\)\@<!<?\%(php\)\=\s*$\|^\s*<script\>' " skip non php code
" call cursor(lnum, 1)
- " call search('<?\zs', 'W')
- " let lnum = searchpair('?>\zs', '', '<?\zs', 'bW', 'getline(".") =~ "<?.*?>"') " find the most outside /*
+ " call search('<?', 'W')
+ " let lnum = searchpair('?>', '', '<?\zs', 'bW', 'getline(".") =~ "<?.*?>"')
" let lastline = getline(lnum)
while lastline !~ '\(<?.*\)\@<!?>' && lnum > 1
@@ -470,7 +471,7 @@
if cline =~ '\*/' " End comment tags must be indented like start comment tags
call cursor(v:lnum, 1)
call search('\*/\zs', 'W')
- let lnum = searchpair('/\*\zs', '', '\*/\zs', 'bWr', '') " find the most outside /*
+ let lnum = searchpair('/\*', '', '\*/\zs', s:searchpairflags, '') " find the most outside /*
return indent(lnum)
elseif cline =~? '<script\>' " a more accurate test is useless since there isn't any other possibility
let b:InPHPcode_and_script = 1
@@ -576,7 +577,7 @@
" if optimized mode is active and nor current or previous line are an 'else'
" or the end of a possible bracketless thing then indent the same as the previous
" line
- if last_line =~ '[;}]'.endline
+ if last_line =~ '[;}]'.endline && last_line !~# '^\s*\%(default\|case\).*:'
if ind==b:PHP_default_indenting
return b:PHP_default_indenting
elseif b:PHP_indentinghuge && ind==b:PHP_CurrentIndentLevel && cline !~# '^\s*\%(else\|\%(case\|default\).*:\|[})];\=\)' && last_line !~# '^\s*\%(\%(}\s*\)\=else\)' && getline(GetLastRealCodeLNum(lnum - 1))=~';'.endline
@@ -596,7 +597,7 @@
if UserIsEditing && cline =~ '\*/' " End comment tags must be indented like start comment tags
call cursor(v:lnum, 1)
call search('\*/\zs', 'W')
- let lnum = searchpair('/\*\zs', '', '\*/\zs', 'bWr', '') " find the most outside /*
+ let lnum = searchpair('/\*', '', '\*/\zs', s:searchpairflags, '') " find the most outside /*
return indent(lnum)
endif
@@ -730,7 +731,7 @@
let pline = getline(plinnum) " previous to last line
" REMOVE comments at end of line before treatment
- " the first par of the regex removes // from the end of line when they are
+ " the first part of the regex removes // from the end of line when they are
" followed by a number of '"' which is a multiple of 2. The second part
" removes // that are not followed by any '"'
" Sorry for this unreadable thing...
================================================================
---- CVS-web:
http://cvs.pld-linux.org/SOURCES/php.vim?r1=1.3&r2=1.4&f=u
More information about the pld-cvs-commit
mailing list