Mercurial > vim
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 |