comparison runtime/indent/php.vim @ 7992:78106b0f2c56

commit https://github.com/vim/vim/commit/cbebd4879cc78e670d79b2c57dc33d7b911c962a Author: Bram Moolenaar <Bram@vim.org> Date: Sun Feb 7 23:02:56 2016 +0100 Updated runtime files.
author Christian Brabandt <cb@256bit.org>
date Sun, 07 Feb 2016 23:15:05 +0100
parents 5d89d9b40499
children 214f228718cf
comparison
equal deleted inserted replaced
7991:689d10b97db7 7992:78106b0f2c56
1 " Vim indent file 1 " Vim indent file
2 " Language: PHP 2 " Language: PHP
3 " Author: John Wellesz <John.wellesz (AT) teaser (DOT) fr> 3 " Author: John Wellesz <John.wellesz (AT) teaser (DOT) fr>
4 " URL: http://www.2072productions.com/vim/indent/php.vim 4 " URL: http://www.2072productions.com/vim/indent/php.vim
5 " Home: https://github.com/2072/PHP-Indenting-for-VIm 5 " Home: https://github.com/2072/PHP-Indenting-for-VIm
6 " Last Change: 2014 November 26th 6 " Last Change: 2015 September 8th
7 " Version: 1.57 7 " Version: 1.60
8 " 8 "
9 " 9 "
10 " Type :help php-indent for available options 10 " Type :help php-indent for available options
11 " 11 "
12 " A fully commented version of this file is available on github 12 " A fully commented version of this file is available on github
48 let b:did_indent = 1 48 let b:did_indent = 1
49 49
50 50
51 let g:php_sync_method = 0 51 let g:php_sync_method = 0
52 52
53 if exists('*shiftwidth')
54 function! s:sw()
55 return shiftwidth()
56 endfunction
57 else
58 function! s:sw()
59 return &shiftwidth
60 endfunction
61 endif
53 62
54 63
55 if exists("PHP_default_indenting") 64 if exists("PHP_default_indenting")
56 let b:PHP_default_indenting = PHP_default_indenting * &sw 65 let b:PHP_default_indenting = PHP_default_indenting * s:sw()
57 else 66 else
58 let b:PHP_default_indenting = 0 67 let b:PHP_default_indenting = 0
59 endif 68 endif
60 69
61 if exists("PHP_outdentSLComments") 70 if exists("PHP_outdentSLComments")
62 let b:PHP_outdentSLComments = PHP_outdentSLComments * &sw 71 let b:PHP_outdentSLComments = PHP_outdentSLComments * s:sw()
63 else 72 else
64 let b:PHP_outdentSLComments = 0 73 let b:PHP_outdentSLComments = 0
65 endif 74 endif
66 75
67 if exists("PHP_BracesAtCodeLevel") 76 if exists("PHP_BracesAtCodeLevel")
122 silent! %s/\r$//g 131 silent! %s/\r$//g
123 endif 132 endif
124 133
125 if exists("*GetPhpIndent") 134 if exists("*GetPhpIndent")
126 call ResetPhpOptions() 135 call ResetPhpOptions()
127 finish " XXX -- comment this line for easy dev 136 finish
128 endif 137 endif
129 138
130 139
131 let s:PHP_validVariable = '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*' 140 let s:PHP_validVariable = '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
132 let s:notPhpHereDoc = '\%(break\|return\|continue\|exit\|die\|else\)' 141 let s:notPhpHereDoc = '\%(break\|return\|continue\|exit\|die\|else\)'
133 let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|\%(}\s*\)\?else\>\|do\>\|while\>\|switch\>\|case\>\|default\>\|for\%(each\)\=\>\|declare\>\|class\>\|trait\>\|use\>\|interface\>\|abstract\>\|final\>\|try\>\|\%(}\s*\)\=catch\>\|\%(}\s*\)\=finally\>\)' 142 let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|\%(}\s*\)\?else\>\|do\>\|while\>\|switch\>\|case\>\|default\>\|for\%(each\)\=\>\|declare\>\|class\>\|trait\>\|use\>\|interface\>\|abstract\>\|final\>\|try\>\|\%(}\s*\)\=catch\>\|\%(}\s*\)\=finally\>\)'
134 let s:functionDecl = '\<function\>\%(\s\+'.s:PHP_validVariable.'\)\=\s*(.*' 143 let s:functionDecl = '\<function\>\%(\s\+'.s:PHP_validVariable.'\)\=\s*(.*'
135 let s:endline= '\s*\%(//.*\|#.*\|/\*.*\*/\s*\)\=$' 144 let s:endline= '\s*\%(//.*\|#.*\|/\*.*\*/\s*\)\=$'
136 145
137 146
138 let s:terminated = '\%(\%(;\%(\s*\%(?>\|}\)\)\=\|<<<''\=\a\w*''\=$\|^\s*}\|^\s*'.s:PHP_validVariable.':\)'.s:endline.'\)\|^[^''"`]*[''"`]$' 147 let s:terminated = '\%(\%(;\%(\s*\%(?>\|}\)\)\=\|<<<\s*[''"]\=\a\w*[''"]\=$\|^\s*}\|^\s*'.s:PHP_validVariable.':\)'.s:endline.'\)\|^[^''"`]*[''"`]$'
139 let s:PHP_startindenttag = '<?\%(.*?>\)\@!\|<script[^>]*>\%(.*<\/script>\)\@!' 148 let s:PHP_startindenttag = '<?\%(.*?>\)\@!\|<script[^>]*>\%(.*<\/script>\)\@!'
140 149
141 150
142 151
143 let s:escapeDebugStops = 0 152 let s:escapeDebugStops = 0
198 break 207 break
199 endif 208 endif
200 209
201 210
202 elseif lastline =~? '^\a\w*;\=$' && lastline !~? s:notPhpHereDoc 211 elseif lastline =~? '^\a\w*;\=$' && lastline !~? s:notPhpHereDoc
203 let tofind=substitute( lastline, '\(\a\w*\);\=', '<<<''\\=\1''\\=$', '') 212 let tofind=substitute( lastline, '\(\a\w*\);\=', '<<<\\s*[''"]\\=\1[''"]\\=$', '')
204 while getline(lnum) !~? tofind && lnum > 1 213 while getline(lnum) !~? tofind && lnum > 1
205 let lnum = lnum - 1 214 let lnum = lnum - 1
206 endwhile 215 endwhile
207 elseif lastline =~ '^[^''"`]*[''"`][;,]'.s:endline 216 elseif lastline =~ '^[^''"`]*[''"`][;,]'.s:endline
208 let tofind=substitute( lastline, '^.*\([''"`]\)[;,].*$', '^[^\1]\\+[\1]$', '') 217 let tofind=substitute( lastline, '^.*\([''"`]\)[;,].*$', '^[^\1]\\+[\1]$', '')
312 function! FindTheSwitchIndent (lnum) " {{{ 321 function! FindTheSwitchIndent (lnum) " {{{
313 322
314 let test = GetLastRealCodeLNum(a:lnum - 1) 323 let test = GetLastRealCodeLNum(a:lnum - 1)
315 324
316 if test <= 1 325 if test <= 1
317 return indent(1) - &sw * b:PHP_vintage_case_default_indent 326 return indent(1) - s:sw() * b:PHP_vintage_case_default_indent
318 end 327 end
319 328
320 while getline(test) =~ '^\s*}' && test > 1 329 while getline(test) =~ '^\s*}' && test > 1
321 let test = GetLastRealCodeLNum(FindOpenBracket(test, 0) - 1) 330 let test = GetLastRealCodeLNum(FindOpenBracket(test, 0) - 1)
322 331
326 endwhile 335 endwhile
327 336
328 if getline(test) =~# '^\s*switch\>' 337 if getline(test) =~# '^\s*switch\>'
329 return indent(test) 338 return indent(test)
330 elseif getline(test) =~# s:defaultORcase 339 elseif getline(test) =~# s:defaultORcase
331 return indent(test) - &sw * b:PHP_vintage_case_default_indent 340 return indent(test) - s:sw() * b:PHP_vintage_case_default_indent
332 else 341 else
333 return FindTheSwitchIndent(test) 342 return FindTheSwitchIndent(test)
334 endif 343 endif
335 344
336 endfunction "}}} 345 endfunction "}}}
399 let b:PHP_oldchangetick = b:changedtick 408 let b:PHP_oldchangetick = b:changedtick
400 let UserIsEditing=1 409 let UserIsEditing=1
401 endif 410 endif
402 411
403 if b:PHP_default_indenting 412 if b:PHP_default_indenting
404 let b:PHP_default_indenting = g:PHP_default_indenting * &sw 413 let b:PHP_default_indenting = g:PHP_default_indenting * s:sw()
405 endif 414 endif
406 415
407 let cline = getline(v:lnum) 416 let cline = getline(v:lnum)
408 417
409 if !b:PHP_indentinghuge && b:PHP_lastindented > b:PHP_indentbeforelast 418 if !b:PHP_indentinghuge && b:PHP_lastindented > b:PHP_indentbeforelast
437 let b:PHP_lastindented = v:lnum 446 let b:PHP_lastindented = v:lnum
438 447
439 448
440 if !b:InPHPcode_checked " {{{ One time check 449 if !b:InPHPcode_checked " {{{ One time check
441 let b:InPHPcode_checked = 1 450 let b:InPHPcode_checked = 1
451 let b:UserIsTypingComment = 0
442 452
443 let synname = "" 453 let synname = ""
444 if cline !~ '<?.*?>' 454 if cline !~ '<?.*?>'
445 let synname = IslinePHP (prevnonblank(v:lnum), "") 455 let synname = IslinePHP (prevnonblank(v:lnum), "")
446 endif 456 endif
447 457
448 if synname!="" 458 if synname!=""
449 if synname == "SpecStringEntrails" 459 if synname == "SpecStringEntrails"
450 let b:InPHPcode = -1 " thumb down 460 let b:InPHPcode = -1
451 let b:UserIsTypingComment = 0
452 let b:InPHPcode_tofind = "" 461 let b:InPHPcode_tofind = ""
453 elseif synname != "phpHereDoc" && synname != "phpHereDocDelimiter" 462 elseif synname != "phpHereDoc" && synname != "phpHereDocDelimiter"
454 let b:InPHPcode = 1 463 let b:InPHPcode = 1
455 let b:InPHPcode_tofind = "" 464 let b:InPHPcode_tofind = ""
456 465
457 if synname =~# '^php\%(Doc\)\?Comment' 466 if synname =~# '^php\%(Doc\)\?Comment'
458 let b:UserIsTypingComment = 1 467 let b:UserIsTypingComment = 1
459 else 468 let b:InPHPcode_checked = 0
460 let b:UserIsTypingComment = 0
461 endif 469 endif
462 470
463 if synname =~? '^javaScript' 471 if synname =~? '^javaScript'
464 let b:InPHPcode_and_script = 1 472 let b:InPHPcode_and_script = 1
465 endif 473 endif
466 474
467 else 475 else
468 let b:InPHPcode = 0 476 let b:InPHPcode = 0
469 let b:UserIsTypingComment = 0
470 477
471 let lnum = v:lnum - 1 478 let lnum = v:lnum - 1
472 while getline(lnum) !~? '<<<''\=\a\w*''\=$' && lnum > 1 479 while getline(lnum) !~? '<<<\s*[''"]\=\a\w*[''"]\=$' && lnum > 1
473 let lnum = lnum - 1 480 let lnum = lnum - 1
474 endwhile 481 endwhile
475 482
476 let b:InPHPcode_tofind = substitute( getline(lnum), '^.*<<<''\=\(\a\w*\)''\=$', '^\\s*\1;\\=$', '') 483 let b:InPHPcode_tofind = substitute( getline(lnum), '^.*<<<\s*[''"]\=\(\a\w*\)[''"]\=$', '^\\s*\1;\\=$', '')
477 endif 484 endif
478 else 485 else
479 let b:InPHPcode = 0 486 let b:InPHPcode = 0
480 let b:UserIsTypingComment = 0
481 let b:InPHPcode_tofind = s:PHP_startindenttag 487 let b:InPHPcode_tofind = s:PHP_startindenttag
482 endif 488 endif
483 endif "!b:InPHPcode_checked }}} 489 endif "!b:InPHPcode_checked }}}
484 490
485 491
535 endif 541 endif
536 542
537 elseif last_line =~ '^[^''"`]\+[''"`]$' 543 elseif last_line =~ '^[^''"`]\+[''"`]$'
538 let b:InPHPcode = -1 544 let b:InPHPcode = -1
539 let b:InPHPcode_tofind = substitute( last_line, '^.*\([''"`]\).*$', '^[^\1]*\1[;,]$', '') 545 let b:InPHPcode_tofind = substitute( last_line, '^.*\([''"`]\).*$', '^[^\1]*\1[;,]$', '')
540 elseif last_line =~? '<<<''\=\a\w*''\=$' 546 elseif last_line =~? '<<<\s*[''"]\=\a\w*[''"]\=$'
541 let b:InPHPcode = 0 547 let b:InPHPcode = 0
542 let b:InPHPcode_tofind = substitute( last_line, '^.*<<<''\=\(\a\w*\)''\=$', '^\\s*\1;\\=$', '') 548 let b:InPHPcode_tofind = substitute( last_line, '^.*<<<\s*[''"]\=\(\a\w*\)[''"]\=$', '^\\s*\1;\\=$', '')
543 549
544 elseif !UserIsEditing && cline =~ '^\s*/\*\%(.*\*/\)\@!' && getline(v:lnum + 1) !~ '^\s*\*' 550 elseif !UserIsEditing && cline =~ '^\s*/\*\%(.*\*/\)\@!' && getline(v:lnum + 1) !~ '^\s*\*'
545 let b:InPHPcode = 0 551 let b:InPHPcode = 0
546 let b:InPHPcode_tofind = '\*/' 552 let b:InPHPcode_tofind = '\*/'
547 553
658 664
659 if ind != b:PHP_default_indenting && cline =~# '^\s*else\%(if\)\=\>' 665 if ind != b:PHP_default_indenting && cline =~# '^\s*else\%(if\)\=\>'
660 let b:PHP_CurrentIndentLevel = b:PHP_default_indenting 666 let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
661 return indent(FindTheIfOfAnElse(v:lnum, 1)) 667 return indent(FindTheIfOfAnElse(v:lnum, 1))
662 elseif cline =~# s:defaultORcase 668 elseif cline =~# s:defaultORcase
663 return FindTheSwitchIndent(v:lnum) + &sw * b:PHP_vintage_case_default_indent 669 return FindTheSwitchIndent(v:lnum) + s:sw() * b:PHP_vintage_case_default_indent
664 elseif cline =~ '^\s*)\=\s*{' 670 elseif cline =~ '^\s*)\=\s*{'
665 let previous_line = last_line 671 let previous_line = last_line
666 let last_line_num = lnum 672 let last_line_num = lnum
667 673
668 while last_line_num > 1 674 while last_line_num > 1
670 if previous_line =~ terminated || previous_line =~ '^\s*\%(' . s:blockstart . '\)\|'. s:functionDecl . endline 676 if previous_line =~ terminated || previous_line =~ '^\s*\%(' . s:blockstart . '\)\|'. s:functionDecl . endline
671 677
672 let ind = indent(last_line_num) 678 let ind = indent(last_line_num)
673 679
674 if b:PHP_BracesAtCodeLevel 680 if b:PHP_BracesAtCodeLevel
675 let ind = ind + &sw 681 let ind = ind + s:sw()
676 endif 682 endif
677 683
678 return ind 684 return ind
679 endif 685 endif
680 686
681 let last_line_num = GetLastRealCodeLNum(last_line_num - 1) 687 let last_line_num = GetLastRealCodeLNum(last_line_num - 1)
682 let previous_line = getline(last_line_num) 688 let previous_line = getline(last_line_num)
683 endwhile 689 endwhile
684 690
685 elseif last_line =~# unstated && cline !~ '^\s*);\='.endline 691 elseif last_line =~# unstated && cline !~ '^\s*);\='.endline
686 let ind = ind + &sw 692 let ind = ind + s:sw()
687 return ind + addSpecial 693 return ind + addSpecial
688 694
689 elseif (ind != b:PHP_default_indenting || last_line =~ '^[)\]]' ) && last_line =~ terminated 695 elseif (ind != b:PHP_default_indenting || last_line =~ '^[)\]]' ) && last_line =~ terminated
690 let previous_line = last_line 696 let previous_line = last_line
691 let last_line_num = lnum 697 let last_line_num = lnum
780 if last_line =~ '\S\+\s*{'.endline && last_line !~ '^\s*)\s*{'.endline && last_line !~ '^\s*\%(' . s:blockstart . '\)\|'. s:functionDecl . s:endline 786 if last_line =~ '\S\+\s*{'.endline && last_line !~ '^\s*)\s*{'.endline && last_line !~ '^\s*\%(' . s:blockstart . '\)\|'. s:functionDecl . s:endline
781 let dontIndent = 1 787 let dontIndent = 1
782 endif 788 endif
783 789
784 if !dontIndent && (!b:PHP_BracesAtCodeLevel || last_line !~# '^\s*{') 790 if !dontIndent && (!b:PHP_BracesAtCodeLevel || last_line !~# '^\s*{')
785 let ind = ind + &sw 791 let ind = ind + s:sw()
786 endif 792 endif
787 793
788 if b:PHP_BracesAtCodeLevel || b:PHP_vintage_case_default_indent == 1 794 if b:PHP_BracesAtCodeLevel || b:PHP_vintage_case_default_indent == 1
789 let b:PHP_CurrentIndentLevel = ind 795 let b:PHP_CurrentIndentLevel = ind
790 796
798 if openedparent != lnum 804 if openedparent != lnum
799 let ind = indent(openedparent) 805 let ind = indent(openedparent)
800 endif 806 endif
801 807
802 elseif last_line =~ '^\s*'.s:blockstart 808 elseif last_line =~ '^\s*'.s:blockstart
803 let ind = ind + &sw 809 let ind = ind + s:sw()
804 810
805 811
806 elseif AntepenultimateLine =~ '{'.endline || AntepenultimateLine =~ terminated || AntepenultimateLine =~# s:defaultORcase 812 elseif AntepenultimateLine =~ '{'.endline || AntepenultimateLine =~ terminated || AntepenultimateLine =~# s:defaultORcase
807 let ind = ind + &sw 813 let ind = ind + s:sw()
808 endif 814 endif
809 815
810 endif 816 endif
811 817
812 if cline =~ '^\s*[)\]];\=' 818 if cline =~ '^\s*[)\]];\='
813 let ind = ind - &sw 819 let ind = ind - s:sw()
814 endif 820 endif
815 821
816 let b:PHP_CurrentIndentLevel = ind 822 let b:PHP_CurrentIndentLevel = ind
817 return ind + addSpecial 823 return ind + addSpecial
818 endfunction 824 endfunction