Mercurial > vim
annotate runtime/indent/php.vim @ 33162:5da7208ea315 v9.0.1863
patch 9.0.1863: wrong format specifiers in e_aptypes_is_null_str_nr
Commit: https://github.com/vim/vim/commit/7db89bdc23e53c7bc43af6f1c7281bc69a6a3098
Author: zeertzjq <zeertzjq@outlook.com>
Date: Mon Sep 4 07:54:02 2023 +0200
patch 9.0.1863: wrong format specifiers in e_aptypes_is_null_str_nr
Problem: wrong format specifiers in e_aptypes_is_null_str_nr
Solution: Fix the wrong format specifier
closes: #13020
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Mon, 04 Sep 2023 08:00:09 +0200 |
parents | 5c220cf30f1f |
children | 345c8a959d76 |
rev | line source |
---|---|
7 | 1 " Vim indent file |
2 " Language: PHP | |
17571 | 3 " Author: John Wellesz <John.wellesz (AT) gmail (DOT) com> |
4 " URL: https://www.2072productions.com/vim/indent/php.vim | |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
5 " Home: https://github.com/2072/PHP-Indenting-for-VIm |
19646 | 6 " Last Change: 2020 Mar 05 |
33052
5c220cf30f1f
runtime: Set b:undo_indent where missing (#12944)
Christian Brabandt <cb@256bit.org>
parents:
32984
diff
changeset
|
7 " 2023 Aug 28 by Vim Project (undo_indent) |
17571 | 8 " Version: 1.70 |
557 | 9 " |
856 | 10 " |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
11 " Type :help php-indent for available options |
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
12 " |
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
13 " A fully commented version of this file is available on github |
409 | 14 " |
15 " | |
13950
741b1feeac9f
patch 8.0.1845: various comment updates needed, missing white space
Christian Brabandt <cb@256bit.org>
parents:
11518
diff
changeset
|
16 " If you find a bug, please open a ticket on github.com |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
17 " ( https://github.com/2072/PHP-Indenting-for-VIm/issues ) with an example of |
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
18 " code that breaks the algorithm. |
409 | 19 " |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
20 |
409 | 21 " NOTE: This script must be used with PHP syntax ON and with the php syntax |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
22 " script by Lutz Eymers (http://www.isp.de/data/php.vim ) or with the |
17571 | 23 " script by Peter Hodge (https://www.vim.org/scripts/script.php?script_id=1571 ) |
2034 | 24 " the later is bunbdled by default with Vim 7. |
409 | 25 " |
26 " | |
1668 | 27 " In the case you have syntax errors in your script such as HereDoc end |
28 " identifiers not at col 1 you'll have to indent your file 2 times (This | |
29 " script will automatically put HereDoc end identifiers at col 1 if | |
30 " they are followed by a ';'). | |
856 | 31 " |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
32 |
2034 | 33 " NOTE: If you are editing files in Unix file format and that (by accident) |
34 " there are '\r' before new lines, this script won't be able to proceed | |
35 " correctly and will make many mistakes because it won't be able to match | |
36 " '\s*$' correctly. | |
37 " So you have to remove those useless characters first with a command like: | |
409 | 38 " |
2034 | 39 " :%s /\r$//g |
7 | 40 " |
2034 | 41 " or simply 'let' the option PHP_removeCRwhenUnix to 1 and the script will |
42 " silently remove them when VIM load this script (at each bufread). | |
5862 | 43 |
44 | |
7 | 45 if exists("b:did_indent") |
532 | 46 finish |
7 | 47 endif |
48 let b:did_indent = 1 | |
49 | |
409 | 50 |
6421 | 51 let g:php_sync_method = 0 |
409 | 52 |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
53 |
409 | 54 if exists("PHP_default_indenting") |
11518 | 55 let b:PHP_default_indenting = PHP_default_indenting * shiftwidth() |
409 | 56 else |
532 | 57 let b:PHP_default_indenting = 0 |
409 | 58 endif |
59 | |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
60 if exists("PHP_outdentSLComments") |
11518 | 61 let b:PHP_outdentSLComments = PHP_outdentSLComments * shiftwidth() |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
62 else |
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
63 let b:PHP_outdentSLComments = 0 |
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
64 endif |
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
65 |
409 | 66 if exists("PHP_BracesAtCodeLevel") |
532 | 67 let b:PHP_BracesAtCodeLevel = PHP_BracesAtCodeLevel |
409 | 68 else |
532 | 69 let b:PHP_BracesAtCodeLevel = 0 |
409 | 70 endif |
71 | |
1668 | 72 |
557 | 73 if exists("PHP_autoformatcomment") |
74 let b:PHP_autoformatcomment = PHP_autoformatcomment | |
75 else | |
76 let b:PHP_autoformatcomment = 1 | |
77 endif | |
7 | 78 |
2442 | 79 if exists("PHP_outdentphpescape") |
80 let b:PHP_outdentphpescape = PHP_outdentphpescape | |
81 else | |
82 let b:PHP_outdentphpescape = 1 | |
83 endif | |
84 | |
14006 | 85 if exists("PHP_noArrowMatching") |
86 let b:PHP_noArrowMatching = PHP_noArrowMatching | |
87 else | |
88 let b:PHP_noArrowMatching = 0 | |
89 endif | |
90 | |
2442 | 91 |
92 if exists("PHP_vintage_case_default_indent") && PHP_vintage_case_default_indent | |
93 let b:PHP_vintage_case_default_indent = 1 | |
1668 | 94 else |
95 let b:PHP_vintage_case_default_indent = 0 | |
96 endif | |
97 | |
17571 | 98 if exists("PHP_IndentFunctionCallParameters") |
99 let b:PHP_IndentFunctionCallParameters = PHP_IndentFunctionCallParameters | |
100 else | |
101 let b:PHP_IndentFunctionCallParameters = 0 | |
102 endif | |
1668 | 103 |
17571 | 104 if exists("PHP_IndentFunctionDeclarationParameters") |
105 let b:PHP_IndentFunctionDeclarationParameters = PHP_IndentFunctionDeclarationParameters | |
106 else | |
107 let b:PHP_IndentFunctionDeclarationParameters = 0 | |
108 endif | |
1668 | 109 |
409 | 110 let b:PHP_lastindented = 0 |
111 let b:PHP_indentbeforelast = 0 | |
112 let b:PHP_indentinghuge = 0 | |
113 let b:PHP_CurrentIndentLevel = b:PHP_default_indenting | |
114 let b:PHP_LastIndentedWasComment = 0 | |
115 let b:PHP_InsideMultilineComment = 0 | |
116 let b:InPHPcode = 0 | |
117 let b:InPHPcode_checked = 0 | |
118 let b:InPHPcode_and_script = 0 | |
119 let b:InPHPcode_tofind = "" | |
120 let b:PHP_oldchangetick = b:changedtick | |
121 let b:UserIsTypingComment = 0 | |
122 let b:optionsset = 0 | |
123 | |
124 setlocal nosmartindent | |
856 | 125 setlocal noautoindent |
409 | 126 setlocal nocindent |
532 | 127 setlocal nolisp |
409 | 128 |
129 setlocal indentexpr=GetPhpIndent() | |
6421 | 130 setlocal indentkeys=0{,0},0),0],:,!^F,o,O,e,*<Return>,=?>,=<?,=*/ |
409 | 131 |
33052
5c220cf30f1f
runtime: Set b:undo_indent where missing (#12944)
Christian Brabandt <cb@256bit.org>
parents:
32984
diff
changeset
|
132 let b:undo_indent = "setl ai< cin< inde< indk< lisp< si<" |
532 | 133 |
134 let s:searchpairflags = 'bWr' | |
409 | 135 |
136 if &fileformat == "unix" && exists("PHP_removeCRwhenUnix") && PHP_removeCRwhenUnix | |
532 | 137 silent! %s/\r$//g |
409 | 138 endif |
139 | |
7 | 140 if exists("*GetPhpIndent") |
2034 | 141 call ResetPhpOptions() |
17571 | 142 finish " XXX -- comment this line for easy dev |
7 | 143 endif |
144 | |
5862 | 145 |
17571 | 146 let s:endline = '\s*\%(//.*\|#.*\|/\*.*\*/\s*\)\=$' |
6421 | 147 let s:PHP_validVariable = '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*' |
17571 | 148 let s:notPhpHereDoc = '\%(break\|return\|continue\|exit\|die\|else\|end\%(if\|while\|for\|foreach\|switch\)\)' |
149 let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|\%(}\s*\)\?else\>\|do\>\|while\>\|switch\>\|case\>\|default\>\|for\%(each\)\=\>\|declare\>\|class\>\|trait\>\|\%()\s*\)\=use\>\|interface\>\|abstract\>\|final\>\|try\>\|\%(}\s*\)\=catch\>\|\%(}\s*\)\=finally\>\)' | |
150 let s:functionDeclPrefix = '\<function\>\%(\s\+&\='.s:PHP_validVariable.'\)\=\s*(' | |
151 let s:functionDecl = s:functionDeclPrefix.'.*' | |
152 let s:multilineFunctionDecl = s:functionDeclPrefix.s:endline | |
153 let s:arrayDecl = '\<array\>\s*(.*' | |
154 let s:multilineFunctionCall = s:PHP_validVariable.'\s*('.s:endline | |
11262 | 155 let s:unstated = '\%(^\s*'.s:blockstart.'.*)\|\%(//.*\)\@<!\<e'.'lse\>\)'.s:endline |
6421 | 156 |
157 | |
11262 | 158 let s:terminated = '\%(\%(;\%(\s*\%(?>\|}\)\)\=\|<<<\s*[''"]\=\a\w*[''"]\=$\|^\s*}\|^\s*'.s:PHP_validVariable.':\)'.s:endline.'\)' |
409 | 159 let s:PHP_startindenttag = '<?\%(.*?>\)\@!\|<script[^>]*>\%(.*<\/script>\)\@!' |
11262 | 160 let s:structureHead = '^\s*\%(' . s:blockstart . '\)\|'. s:functionDecl . s:endline . '\|\<new\s\+class\>' |
409 | 161 |
162 | |
5862 | 163 let s:escapeDebugStops = 0 |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
164 function! DebugPrintReturn(scriptLine) |
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
165 |
6421 | 166 if ! s:escapeDebugStops |
5862 | 167 echo "debug:" . a:scriptLine |
168 let c = getchar() | |
169 if c == "\<Del>" | |
170 let s:escapeDebugStops = 1 | |
171 end | |
172 endif | |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
173 |
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
174 endfunction |
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
175 |
409 | 176 function! GetLastRealCodeLNum(startline) " {{{ |
856 | 177 |
532 | 178 let lnum = a:startline |
856 | 179 |
631 | 180 if b:GetLastRealCodeLNum_ADD && b:GetLastRealCodeLNum_ADD == lnum + 1 |
181 let lnum = b:GetLastRealCodeLNum_ADD | |
182 endif | |
856 | 183 |
532 | 184 while lnum > 1 |
185 let lnum = prevnonblank(lnum) | |
186 let lastline = getline(lnum) | |
409 | 187 |
532 | 188 if b:InPHPcode_and_script && lastline =~ '?>\s*$' |
189 let lnum = lnum - 1 | |
190 elseif lastline =~ '^\s*?>.*<?\%(php\)\=\s*$' | |
191 let lnum = lnum - 1 | |
192 elseif lastline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)' | |
193 let lnum = lnum - 1 | |
194 elseif lastline =~ '\*/\s*$' | |
195 call cursor(lnum, 1) | |
196 if lastline !~ '^\*/' | |
197 call search('\*/', 'W') | |
198 endif | |
557 | 199 let lnum = searchpair('/\*', '', '\*/', s:searchpairflags, 'Skippmatch2()') |
409 | 200 |
532 | 201 let lastline = getline(lnum) |
202 if lastline =~ '^\s*/\*' | |
203 let lnum = lnum - 1 | |
204 else | |
205 break | |
206 endif | |
409 | 207 |
208 | |
532 | 209 elseif lastline =~? '\%(//\s*\|?>.*\)\@<!<?\%(php\)\=\s*$\|^\s*<script\>' |
210 | |
211 while lastline !~ '\(<?.*\)\@<!?>' && lnum > 1 | |
212 let lnum = lnum - 1 | |
213 let lastline = getline(lnum) | |
214 endwhile | |
215 if lastline =~ '^\s*?>' | |
216 let lnum = lnum - 1 | |
217 else | |
218 break | |
219 endif | |
220 | |
409 | 221 |
2442 | 222 elseif lastline =~? '^\a\w*;\=$' && lastline !~? s:notPhpHereDoc |
7992
78106b0f2c56
commit https://github.com/vim/vim/commit/cbebd4879cc78e670d79b2c57dc33d7b911c962a
Christian Brabandt <cb@256bit.org>
parents:
6421
diff
changeset
|
223 let tofind=substitute( lastline, '\(\a\w*\);\=', '<<<\\s*[''"]\\=\1[''"]\\=$', '') |
532 | 224 while getline(lnum) !~? tofind && lnum > 1 |
225 let lnum = lnum - 1 | |
226 endwhile | |
17571 | 227 elseif lastline =~ '^\s*[''"`][;,]' || (lastline =~ '^[^''"`]*[''"`][;,]'.s:endline && IslinePHP(lnum, "") == "SpecStringEntrails") |
11262 | 228 |
229 let tofind=substitute( lastline, '^.*\([''"`]\)[;,].*$', '^[^\1]\\+[\1]$\\|^[^\1]\\+[=([]\\s*[\1]', '') | |
230 let trylnum = lnum | |
231 while getline(trylnum) !~? tofind && trylnum > 1 | |
232 let trylnum = trylnum - 1 | |
5862 | 233 endwhile |
11262 | 234 |
235 if trylnum == 1 | |
236 break | |
237 else | |
238 if lastline =~ ';'.s:endline | |
239 while getline(trylnum) !~? s:terminated && getline(trylnum) !~? '{'.s:endline && trylnum > 1 | |
240 let trylnum = prevnonblank(trylnum - 1) | |
241 endwhile | |
242 | |
243 | |
244 if trylnum == 1 | |
245 break | |
246 end | |
247 end | |
248 let lnum = trylnum | |
249 end | |
532 | 250 else |
856 | 251 break |
409 | 252 endif |
532 | 253 endwhile |
254 | |
2442 | 255 if lnum==1 && getline(lnum) !~ '<?' |
532 | 256 let lnum=0 |
257 endif | |
258 | |
6421 | 259 if b:InPHPcode_and_script && 1 > b:InPHPcode |
532 | 260 let b:InPHPcode_and_script = 0 |
261 endif | |
1120 | 262 |
532 | 263 return lnum |
264 endfunction " }}} | |
409 | 265 |
557 | 266 function! Skippmatch2() |
267 | |
268 let line = getline(".") | |
269 | |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
270 if line =~ "\\([\"']\\).*/\\*.*\\1" || line =~ '\%(//\|#\).*/\*' |
5862 | 271 return 1 |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
272 else |
5862 | 273 return 0 |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
274 endif |
557 | 275 endfun |
276 | |
2442 | 277 function! Skippmatch() " {{{ |
532 | 278 let synname = synIDattr(synID(line("."), col("."), 0), "name") |
14006 | 279 if synname ==? "Delimiter" || synname ==? "phpRegionDelimiter" || synname =~? "^phpParent" || synname ==? "phpArrayParens" || synname =~? '^php\%(Block\|Brace\)' || synname ==? "javaScriptBraces" || synname =~? '^php\%(Doc\)\?Comment' && b:UserIsTypingComment |
532 | 280 return 0 |
281 else | |
282 return 1 | |
283 endif | |
284 endfun " }}} | |
409 | 285 |
5862 | 286 function! FindOpenBracket(lnum, blockStarter) " {{{ |
532 | 287 call cursor(a:lnum, 1) |
5862 | 288 let line = searchpair('{', '', '}', 'bW', 'Skippmatch()') |
289 | |
290 if a:blockStarter == 1 | |
6421 | 291 while line > 1 |
5862 | 292 let linec = getline(line) |
293 | |
11262 | 294 if linec =~ s:terminated || linec =~ s:structureHead |
5862 | 295 break |
296 endif | |
297 | |
298 let line = GetLastRealCodeLNum(line - 1) | |
299 endwhile | |
300 endif | |
301 | |
302 return line | |
532 | 303 endfun " }}} |
409 | 304 |
11262 | 305 let s:blockChars = {'{':1, '[': 1, '(': 1, ')':-1, ']':-1, '}':-1} |
17571 | 306 let s:blockCharsLUT = {'{':'{', '}':'{', '[':'[', ']':'[', '(':'(', ')':'('} |
11262 | 307 function! BalanceDirection (str) |
308 | |
17571 | 309 let balance = {'{':0, '[': 0, '(': 0, 'none':0} |
310 let director = 'none' | |
11262 | 311 |
312 for c in split(a:str, '\zs') | |
313 if has_key(s:blockChars, c) | |
17571 | 314 let balance[s:blockCharsLUT[c]] += s:blockChars[c] |
315 | |
316 if balance[s:blockCharsLUT[c]] | |
317 let director = s:blockCharsLUT[c] | |
318 endif | |
11262 | 319 endif |
320 endfor | |
321 | |
17571 | 322 return balance[director] |
11262 | 323 endfun |
324 | |
14006 | 325 function! StripEndlineComments (line) |
326 return substitute(a:line,"\\(//\\|#\\)\\(\\(\\([^\"']*\\([\"']\\)[^\"']*\\5\\)\\+[^\"']*$\\)\\|\\([^\"']*$\\)\\)",'','') | |
327 endfun | |
328 | |
329 function! FindArrowIndent (lnum) " {{{ | |
330 | |
32984 | 331 let parentArrowPos = -1 |
17571 | 332 let cursorPos = -1 |
14006 | 333 let lnum = a:lnum |
334 while lnum > 1 | |
335 let last_line = getline(lnum) | |
336 if last_line =~ '^\s*->' | |
32984 | 337 let parentArrowPos = indent(a:lnum) |
14006 | 338 break |
339 else | |
17571 | 340 |
341 if b:PHP_noArrowMatching | |
14006 | 342 break |
17571 | 343 endif |
344 | |
345 let cleanedLnum = StripEndlineComments(last_line) | |
346 | |
347 if cleanedLnum =~ ')'.s:endline | |
348 if BalanceDirection(cleanedLnum) <= 0 | |
349 call cursor(lnum, 1) | |
350 call searchpos(')'.s:endline, 'cW', lnum) | |
351 let openedparent = searchpair('(', '', ')', 'bW', 'Skippmatch()') | |
352 let cursorPos = col(".") | |
353 if openedparent != lnum | |
354 let lnum = openedparent | |
355 continue | |
356 else | |
357 endif | |
14006 | 358 else |
32984 | 359 let parentArrowPos = -1 |
17571 | 360 break |
361 end | |
362 endif | |
14006 | 363 |
17571 | 364 if cleanedLnum =~ '->' |
365 call cursor(lnum, cursorPos == -1 ? strwidth(cleanedLnum) : cursorPos) | |
32984 | 366 let parentArrowPos = searchpos('->', 'cWb', lnum)[1] - 1 |
17571 | 367 |
368 break | |
14006 | 369 else |
32984 | 370 let parentArrowPos = -1 |
14006 | 371 break |
372 endif | |
373 endif | |
374 endwhile | |
375 | |
32984 | 376 if parentArrowPos == -1 |
377 let parentArrowPos = indent(lnum) + shiftwidth() | |
17571 | 378 end |
379 | |
32984 | 380 return parentArrowPos |
14006 | 381 endfun "}}} |
382 | |
409 | 383 function! FindTheIfOfAnElse (lnum, StopAfterFirstPrevElse) " {{{ |
532 | 384 |
385 if getline(a:lnum) =~# '^\s*}\s*else\%(if\)\=\>' | |
386 let beforeelse = a:lnum | |
387 else | |
388 let beforeelse = GetLastRealCodeLNum(a:lnum - 1) | |
389 endif | |
409 | 390 |
532 | 391 if !s:level |
392 let s:iftoskip = 0 | |
393 endif | |
394 | |
395 if getline(beforeelse) =~# '^\s*\%(}\s*\)\=else\%(\s*if\)\@!\>' | |
396 let s:iftoskip = s:iftoskip + 1 | |
397 endif | |
398 | |
399 if getline(beforeelse) =~ '^\s*}' | |
5862 | 400 let beforeelse = FindOpenBracket(beforeelse, 0) |
532 | 401 |
402 if getline(beforeelse) =~ '^\s*{' | |
403 let beforeelse = GetLastRealCodeLNum(beforeelse - 1) | |
409 | 404 endif |
532 | 405 endif |
409 | 406 |
407 | |
532 | 408 if !s:iftoskip && a:StopAfterFirstPrevElse && getline(beforeelse) =~# '^\s*\%([}]\s*\)\=else\%(if\)\=\>' |
409 return beforeelse | |
410 endif | |
411 | |
412 if getline(beforeelse) !~# '^\s*if\>' && beforeelse>1 || s:iftoskip && beforeelse>1 | |
413 | |
2442 | 414 if s:iftoskip && getline(beforeelse) =~# '^\s*if\>' |
532 | 415 let s:iftoskip = s:iftoskip - 1 |
409 | 416 endif |
417 | |
532 | 418 let s:level = s:level + 1 |
419 let beforeelse = FindTheIfOfAnElse(beforeelse, a:StopAfterFirstPrevElse) | |
420 endif | |
409 | 421 |
532 | 422 return beforeelse |
409 | 423 |
532 | 424 endfunction " }}} |
409 | 425 |
2442 | 426 let s:defaultORcase = '^\s*\%(default\|case\).*:' |
427 | |
428 function! FindTheSwitchIndent (lnum) " {{{ | |
429 | |
430 let test = GetLastRealCodeLNum(a:lnum - 1) | |
431 | |
432 if test <= 1 | |
11518 | 433 return indent(1) - shiftwidth() * b:PHP_vintage_case_default_indent |
2442 | 434 end |
435 | |
5862 | 436 while getline(test) =~ '^\s*}' && test > 1 |
437 let test = GetLastRealCodeLNum(FindOpenBracket(test, 0) - 1) | |
2442 | 438 |
5862 | 439 if getline(test) =~ '^\s*switch\>' |
440 let test = GetLastRealCodeLNum(test - 1) | |
2442 | 441 endif |
5862 | 442 endwhile |
2442 | 443 |
444 if getline(test) =~# '^\s*switch\>' | |
445 return indent(test) | |
446 elseif getline(test) =~# s:defaultORcase | |
11518 | 447 return indent(test) - shiftwidth() * b:PHP_vintage_case_default_indent |
2442 | 448 else |
449 return FindTheSwitchIndent(test) | |
450 endif | |
451 | |
452 endfunction "}}} | |
453 | |
14006 | 454 let s:SynPHPMatchGroups = {'phpparent':1, 'delimiter':1, 'define':1, 'storageclass':1, 'structure':1, 'exception':1} |
409 | 455 function! IslinePHP (lnum, tofind) " {{{ |
532 | 456 let cline = getline(a:lnum) |
409 | 457 |
532 | 458 if a:tofind=="" |
5862 | 459 let tofind = "^\\s*[\"'`]*\\s*\\zs\\S" |
532 | 460 else |
461 let tofind = a:tofind | |
462 endif | |
409 | 463 |
532 | 464 let tofind = tofind . '\c' |
409 | 465 |
532 | 466 let coltotest = match (cline, tofind) + 1 |
467 | |
468 let synname = synIDattr(synID(a:lnum, coltotest, 0), "name") | |
409 | 469 |
14006 | 470 if synname ==? 'phpStringSingle' || synname ==? 'phpStringDouble' || synname ==? 'phpBacktick' |
17571 | 471 if cline !~ '^\s*[''"`]' " ??? XXX |
6421 | 472 return "SpecStringEntrails" |
5862 | 473 else |
474 return synname | |
475 end | |
476 end | |
477 | |
14006 | 478 if get(s:SynPHPMatchGroups, tolower(synname)) || synname =~ '^php' || synname =~? '^javaScript' |
532 | 479 return synname |
480 else | |
481 return "" | |
482 endif | |
483 endfunction " }}} | |
409 | 484 |
2034 | 485 let s:autoresetoptions = 0 |
486 if ! s:autoresetoptions | |
487 let s:autoresetoptions = 1 | |
7 | 488 endif |
489 | |
2034 | 490 function! ResetPhpOptions() |
6421 | 491 if ! b:optionsset && &filetype =~ "php" |
557 | 492 if b:PHP_autoformatcomment |
493 | |
494 setlocal comments=s1:/*,mb:*,ex:*/,://,:# | |
856 | 495 |
1668 | 496 setlocal formatoptions-=t |
557 | 497 setlocal formatoptions+=q |
498 setlocal formatoptions+=r | |
499 setlocal formatoptions+=o | |
500 setlocal formatoptions+=c | |
501 setlocal formatoptions+=b | |
502 endif | |
532 | 503 let b:optionsset = 1 |
504 endif | |
409 | 505 endfunc |
506 | |
2034 | 507 call ResetPhpOptions() |
508 | |
14006 | 509 function! GetPhpIndentVersion() |
17571 | 510 return "1.70-bundle" |
14006 | 511 endfun |
512 | |
409 | 513 function! GetPhpIndent() |
514 | |
631 | 515 let b:GetLastRealCodeLNum_ADD = 0 |
516 | |
532 | 517 let UserIsEditing=0 |
518 if b:PHP_oldchangetick != b:changedtick | |
519 let b:PHP_oldchangetick = b:changedtick | |
520 let UserIsEditing=1 | |
521 endif | |
409 | 522 |
532 | 523 if b:PHP_default_indenting |
11518 | 524 let b:PHP_default_indenting = g:PHP_default_indenting * shiftwidth() |
532 | 525 endif |
526 | |
527 let cline = getline(v:lnum) | |
409 | 528 |
856 | 529 if !b:PHP_indentinghuge && b:PHP_lastindented > b:PHP_indentbeforelast |
532 | 530 if b:PHP_indentbeforelast |
531 let b:PHP_indentinghuge = 1 | |
532 endif | |
533 let b:PHP_indentbeforelast = b:PHP_lastindented | |
534 endif | |
409 | 535 |
532 | 536 if b:InPHPcode_checked && prevnonblank(v:lnum - 1) != b:PHP_lastindented |
537 if b:PHP_indentinghuge | |
538 let b:PHP_indentinghuge = 0 | |
539 let b:PHP_CurrentIndentLevel = b:PHP_default_indenting | |
409 | 540 endif |
6421 | 541 let real_PHP_lastindented = v:lnum |
532 | 542 let b:PHP_LastIndentedWasComment=0 |
543 let b:PHP_InsideMultilineComment=0 | |
544 let b:PHP_indentbeforelast = 0 | |
409 | 545 |
532 | 546 let b:InPHPcode = 0 |
547 let b:InPHPcode_checked = 0 | |
548 let b:InPHPcode_and_script = 0 | |
549 let b:InPHPcode_tofind = "" | |
409 | 550 |
532 | 551 elseif v:lnum > b:PHP_lastindented |
552 let real_PHP_lastindented = b:PHP_lastindented | |
6421 | 553 else |
554 let real_PHP_lastindented = v:lnum | |
532 | 555 endif |
409 | 556 |
6421 | 557 let b:PHP_lastindented = v:lnum |
558 | |
409 | 559 |
532 | 560 if !b:InPHPcode_checked " {{{ One time check |
561 let b:InPHPcode_checked = 1 | |
7992
78106b0f2c56
commit https://github.com/vim/vim/commit/cbebd4879cc78e670d79b2c57dc33d7b911c962a
Christian Brabandt <cb@256bit.org>
parents:
6421
diff
changeset
|
562 let b:UserIsTypingComment = 0 |
409 | 563 |
631 | 564 let synname = "" |
565 if cline !~ '<?.*?>' | |
566 let synname = IslinePHP (prevnonblank(v:lnum), "") | |
567 endif | |
409 | 568 |
532 | 569 if synname!="" |
14006 | 570 if synname ==? "SpecStringEntrails" |
11262 | 571 let b:InPHPcode = -1 " thumb down |
6421 | 572 let b:InPHPcode_tofind = "" |
14006 | 573 elseif synname !=? "phpHereDoc" && synname !=? "phpHereDocDelimiter" |
532 | 574 let b:InPHPcode = 1 |
575 let b:InPHPcode_tofind = "" | |
409 | 576 |
14006 | 577 if synname =~? '^php\%(Doc\)\?Comment' |
532 | 578 let b:UserIsTypingComment = 1 |
7992
78106b0f2c56
commit https://github.com/vim/vim/commit/cbebd4879cc78e670d79b2c57dc33d7b911c962a
Christian Brabandt <cb@256bit.org>
parents:
6421
diff
changeset
|
579 let b:InPHPcode_checked = 0 |
409 | 580 endif |
581 | |
532 | 582 if synname =~? '^javaScript' |
583 let b:InPHPcode_and_script = 1 | |
584 endif | |
409 | 585 |
532 | 586 else |
587 let b:InPHPcode = 0 | |
409 | 588 |
532 | 589 let lnum = v:lnum - 1 |
7992
78106b0f2c56
commit https://github.com/vim/vim/commit/cbebd4879cc78e670d79b2c57dc33d7b911c962a
Christian Brabandt <cb@256bit.org>
parents:
6421
diff
changeset
|
590 while getline(lnum) !~? '<<<\s*[''"]\=\a\w*[''"]\=$' && lnum > 1 |
532 | 591 let lnum = lnum - 1 |
592 endwhile | |
409 | 593 |
7992
78106b0f2c56
commit https://github.com/vim/vim/commit/cbebd4879cc78e670d79b2c57dc33d7b911c962a
Christian Brabandt <cb@256bit.org>
parents:
6421
diff
changeset
|
594 let b:InPHPcode_tofind = substitute( getline(lnum), '^.*<<<\s*[''"]\=\(\a\w*\)[''"]\=$', '^\\s*\1;\\=$', '') |
532 | 595 endif |
596 else | |
597 let b:InPHPcode = 0 | |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
598 let b:InPHPcode_tofind = s:PHP_startindenttag |
409 | 599 endif |
532 | 600 endif "!b:InPHPcode_checked }}} |
409 | 601 |
602 | |
532 | 603 " Test if we are indenting PHP code {{{ |
604 let lnum = prevnonblank(v:lnum - 1) | |
605 let last_line = getline(lnum) | |
5862 | 606 let endline= s:endline |
409 | 607 |
532 | 608 if b:InPHPcode_tofind!="" |
609 if cline =~? b:InPHPcode_tofind | |
610 let b:InPHPcode_tofind = "" | |
611 let b:UserIsTypingComment = 0 | |
6421 | 612 |
613 if b:InPHPcode == -1 | |
614 let b:InPHPcode = 1 | |
615 return -1 | |
616 end | |
617 | |
618 let b:InPHPcode = 1 | |
619 | |
532 | 620 if cline =~ '\*/' |
409 | 621 call cursor(v:lnum, 1) |
532 | 622 if cline !~ '^\*/' |
623 call search('\*/', 'W') | |
624 endif | |
557 | 625 let lnum = searchpair('/\*', '', '\*/', s:searchpairflags, 'Skippmatch2()') |
409 | 626 |
627 let b:PHP_CurrentIndentLevel = b:PHP_default_indenting | |
628 | |
532 | 629 let b:PHP_LastIndentedWasComment = 0 |
409 | 630 |
532 | 631 if cline =~ '^\s*\*/' |
632 return indent(lnum) + 1 | |
633 else | |
634 return indent(lnum) | |
7 | 635 endif |
532 | 636 |
637 elseif cline =~? '<script\>' | |
638 let b:InPHPcode_and_script = 1 | |
631 | 639 let b:GetLastRealCodeLNum_ADD = v:lnum |
532 | 640 endif |
7 | 641 endif |
532 | 642 endif |
409 | 643 |
6421 | 644 if 1 == b:InPHPcode |
409 | 645 |
14006 | 646 if !b:InPHPcode_and_script && last_line =~ '\%(<?.*\)\@<!?>\%(.*<?\)\@!' && IslinePHP(lnum, '?>')=~?"Delimiter" |
532 | 647 if cline !~? s:PHP_startindenttag |
648 let b:InPHPcode = 0 | |
649 let b:InPHPcode_tofind = s:PHP_startindenttag | |
650 elseif cline =~? '<script\>' | |
651 let b:InPHPcode_and_script = 1 | |
652 endif | |
409 | 653 |
17571 | 654 elseif last_line =~ '^[^''"`]\+[''"`]$' && last_line !~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)' " a string identifier with nothing after it and no other string identifier before |
6421 | 655 let b:InPHPcode = -1 |
5862 | 656 let b:InPHPcode_tofind = substitute( last_line, '^.*\([''"`]\).*$', '^[^\1]*\1[;,]$', '') |
7992
78106b0f2c56
commit https://github.com/vim/vim/commit/cbebd4879cc78e670d79b2c57dc33d7b911c962a
Christian Brabandt <cb@256bit.org>
parents:
6421
diff
changeset
|
657 elseif last_line =~? '<<<\s*[''"]\=\a\w*[''"]\=$' |
532 | 658 let b:InPHPcode = 0 |
7992
78106b0f2c56
commit https://github.com/vim/vim/commit/cbebd4879cc78e670d79b2c57dc33d7b911c962a
Christian Brabandt <cb@256bit.org>
parents:
6421
diff
changeset
|
659 let b:InPHPcode_tofind = substitute( last_line, '^.*<<<\s*[''"]\=\(\a\w*\)[''"]\=$', '^\\s*\1;\\=$', '') |
532 | 660 |
661 elseif !UserIsEditing && cline =~ '^\s*/\*\%(.*\*/\)\@!' && getline(v:lnum + 1) !~ '^\s*\*' | |
662 let b:InPHPcode = 0 | |
663 let b:InPHPcode_tofind = '\*/' | |
409 | 664 |
532 | 665 elseif cline =~? '^\s*</script>' |
666 let b:InPHPcode = 0 | |
667 let b:InPHPcode_tofind = s:PHP_startindenttag | |
668 endif | |
669 endif " }}} | |
670 | |
856 | 671 |
6421 | 672 if 1 > b:InPHPcode && !b:InPHPcode_and_script |
532 | 673 return -1 |
674 endif | |
409 | 675 |
532 | 676 " Indent successive // or # comment the same way the first is {{{ |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
677 let addSpecial = 0 |
532 | 678 if cline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)' |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
679 let addSpecial = b:PHP_outdentSLComments |
532 | 680 if b:PHP_LastIndentedWasComment == 1 |
681 return indent(real_PHP_lastindented) | |
682 endif | |
683 let b:PHP_LastIndentedWasComment = 1 | |
684 else | |
685 let b:PHP_LastIndentedWasComment = 0 | |
686 endif " }}} | |
687 | |
688 " Indent multiline /* comments correctly {{{ | |
689 | |
690 if b:PHP_InsideMultilineComment || b:UserIsTypingComment | |
691 if cline =~ '^\s*\*\%(\/\)\@!' | |
692 if last_line =~ '^\s*/\*' | |
693 return indent(lnum) + 1 | |
694 else | |
695 return indent(lnum) | |
696 endif | |
697 else | |
698 let b:PHP_InsideMultilineComment = 0 | |
699 endif | |
700 endif | |
701 | |
6421 | 702 if !b:PHP_InsideMultilineComment && cline =~ '^\s*/\*\%(.*\*/\)\@!' |
631 | 703 if getline(v:lnum + 1) !~ '^\s*\*' |
704 return -1 | |
705 endif | |
532 | 706 let b:PHP_InsideMultilineComment = 1 |
707 endif " }}} | |
409 | 708 |
709 | |
532 | 710 " Things always indented at col 1 (PHP delimiter: <?, ?>, Heredoc end) {{{ |
2442 | 711 if cline =~# '^\s*<?' && cline !~ '?>' && b:PHP_outdentphpescape |
532 | 712 return 0 |
713 endif | |
409 | 714 |
2442 | 715 if cline =~ '^\s*?>' && cline !~# '<?' && b:PHP_outdentphpescape |
532 | 716 return 0 |
717 endif | |
409 | 718 |
5862 | 719 if cline =~? '^\s*\a\w*;$\|^\a\w*$\|^\s*[''"`][;,]' && cline !~? s:notPhpHereDoc |
532 | 720 return 0 |
721 endif " }}} | |
409 | 722 |
532 | 723 let s:level = 0 |
409 | 724 |
532 | 725 let lnum = GetLastRealCodeLNum(v:lnum - 1) |
631 | 726 |
532 | 727 let last_line = getline(lnum) |
728 let ind = indent(lnum) | |
409 | 729 |
532 | 730 if ind==0 && b:PHP_default_indenting |
731 let ind = b:PHP_default_indenting | |
732 endif | |
409 | 733 |
532 | 734 if lnum == 0 |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
735 return b:PHP_default_indenting + addSpecial |
532 | 736 endif |
409 | 737 |
738 | |
532 | 739 if cline =~ '^\s*}\%(}}\)\@!' |
5862 | 740 let ind = indent(FindOpenBracket(v:lnum, 1)) |
532 | 741 let b:PHP_CurrentIndentLevel = b:PHP_default_indenting |
742 return ind | |
743 endif | |
409 | 744 |
532 | 745 if cline =~ '^\s*\*/' |
746 call cursor(v:lnum, 1) | |
747 if cline !~ '^\*/' | |
748 call search('\*/', 'W') | |
749 endif | |
557 | 750 let lnum = searchpair('/\*', '', '\*/', s:searchpairflags, 'Skippmatch2()') |
532 | 751 |
752 let b:PHP_CurrentIndentLevel = b:PHP_default_indenting | |
409 | 753 |
532 | 754 if cline =~ '^\s*\*/' |
755 return indent(lnum) + 1 | |
756 else | |
757 return indent(lnum) | |
758 endif | |
759 endif | |
760 | |
761 | |
17571 | 762 if last_line =~ '[;}]'.endline && last_line !~ '^[)\]]' && last_line !~# s:defaultORcase && last_line !~ '^\s*[''"`][;,]' |
532 | 763 if ind==b:PHP_default_indenting |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
764 return b:PHP_default_indenting + addSpecial |
532 | 765 elseif b:PHP_indentinghuge && ind==b:PHP_CurrentIndentLevel && cline !~# '^\s*\%(else\|\%(case\|default\).*:\|[})];\=\)' && last_line !~# '^\s*\%(\%(}\s*\)\=else\)' && getline(GetLastRealCodeLNum(lnum - 1))=~';'.endline |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
766 return b:PHP_CurrentIndentLevel + addSpecial |
532 | 767 endif |
768 endif | |
769 | |
770 let LastLineClosed = 0 | |
771 | |
5862 | 772 let terminated = s:terminated |
532 | 773 |
11262 | 774 let unstated = s:unstated |
775 | |
409 | 776 |
532 | 777 if ind != b:PHP_default_indenting && cline =~# '^\s*else\%(if\)\=\>' |
778 let b:PHP_CurrentIndentLevel = b:PHP_default_indenting | |
779 return indent(FindTheIfOfAnElse(v:lnum, 1)) | |
2442 | 780 elseif cline =~# s:defaultORcase |
11518 | 781 return FindTheSwitchIndent(v:lnum) + shiftwidth() * b:PHP_vintage_case_default_indent |
1668 | 782 elseif cline =~ '^\s*)\=\s*{' |
532 | 783 let previous_line = last_line |
784 let last_line_num = lnum | |
785 | |
786 while last_line_num > 1 | |
787 | |
11262 | 788 if previous_line =~ terminated || previous_line =~ s:structureHead |
532 | 789 |
790 let ind = indent(last_line_num) | |
791 | |
792 if b:PHP_BracesAtCodeLevel | |
11518 | 793 let ind = ind + shiftwidth() |
532 | 794 endif |
795 | |
856 | 796 return ind |
532 | 797 endif |
798 | |
5862 | 799 let last_line_num = GetLastRealCodeLNum(last_line_num - 1) |
532 | 800 let previous_line = getline(last_line_num) |
801 endwhile | |
14006 | 802 elseif cline =~ '^\s*->' |
803 return FindArrowIndent(lnum) | |
1668 | 804 elseif last_line =~# unstated && cline !~ '^\s*);\='.endline |
11518 | 805 let ind = ind + shiftwidth() " we indent one level further when the preceding line is not stated |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
806 return ind + addSpecial |
532 | 807 |
6421 | 808 elseif (ind != b:PHP_default_indenting || last_line =~ '^[)\]]' ) && last_line =~ terminated |
532 | 809 let previous_line = last_line |
810 let last_line_num = lnum | |
811 let LastLineClosed = 1 | |
812 | |
5862 | 813 let isSingleLineBlock = 0 |
532 | 814 while 1 |
14006 | 815 if ! isSingleLineBlock && previous_line =~ '^\s*}\|;\s*}'.endline |
532 | 816 |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
817 call cursor(last_line_num, 1) |
5862 | 818 if previous_line !~ '^}' |
819 call search('}\|;\s*}'.endline, 'W') | |
820 end | |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
821 let oldLastLine = last_line_num |
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
822 let last_line_num = searchpair('{', '', '}', 'bW', 'Skippmatch()') |
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
823 |
5862 | 824 if getline(last_line_num) =~ '^\s*{' |
532 | 825 let last_line_num = GetLastRealCodeLNum(last_line_num - 1) |
5862 | 826 elseif oldLastLine == last_line_num |
827 let isSingleLineBlock = 1 | |
828 continue | |
409 | 829 endif |
532 | 830 |
831 let previous_line = getline(last_line_num) | |
7 | 832 |
532 | 833 continue |
834 else | |
5862 | 835 let isSingleLineBlock = 0 |
409 | 836 |
532 | 837 if getline(last_line_num) =~# '^\s*else\%(if\)\=\>' |
838 let last_line_num = FindTheIfOfAnElse(last_line_num, 0) | |
839 continue | |
840 endif | |
409 | 841 |
842 | |
532 | 843 let last_match = last_line_num |
409 | 844 |
532 | 845 let one_ahead_indent = indent(last_line_num) |
846 let last_line_num = GetLastRealCodeLNum(last_line_num - 1) | |
847 let two_ahead_indent = indent(last_line_num) | |
848 let after_previous_line = previous_line | |
849 let previous_line = getline(last_line_num) | |
409 | 850 |
851 | |
2442 | 852 if previous_line =~# s:defaultORcase.'\|{'.endline |
532 | 853 break |
854 endif | |
409 | 855 |
532 | 856 if after_previous_line=~# '^\s*'.s:blockstart.'.*)'.endline && previous_line =~# '[;}]'.endline |
857 break | |
7 | 858 endif |
409 | 859 |
856 | 860 if one_ahead_indent == two_ahead_indent || last_line_num < 1 |
1668 | 861 if previous_line =~# '\%(;\|^\s*}\)'.endline || last_line_num < 1 |
532 | 862 break |
863 endif | |
864 endif | |
865 endif | |
866 endwhile | |
867 | |
868 if indent(last_match) != ind | |
869 let ind = indent(last_match) | |
870 let b:PHP_CurrentIndentLevel = b:PHP_default_indenting | |
871 | |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
872 return ind + addSpecial |
532 | 873 endif |
874 endif | |
875 | |
6421 | 876 if (last_line !~ '^\s*}\%(}}\)\@!') |
877 let plinnum = GetLastRealCodeLNum(lnum - 1) | |
878 else | |
879 let plinnum = GetLastRealCodeLNum(FindOpenBracket(lnum, 1) - 1) | |
880 endif | |
881 | |
2442 | 882 let AntepenultimateLine = getline(plinnum) |
532 | 883 |
14006 | 884 let last_line = StripEndlineComments(last_line) |
532 | 885 |
886 if ind == b:PHP_default_indenting | |
6421 | 887 if last_line =~ terminated && last_line !~# s:defaultORcase |
532 | 888 let LastLineClosed = 1 |
889 endif | |
890 endif | |
891 | |
892 if !LastLineClosed | |
893 | |
14006 | 894 let openedparent = -1 |
895 | |
2034 | 896 |
11262 | 897 if last_line =~# '[{(\[]'.endline || last_line =~? '\h\w*\s*(.*,$' && AntepenultimateLine !~ '[,(\[]'.endline && BalanceDirection(last_line) > 0 |
532 | 898 |
5862 | 899 let dontIndent = 0 |
14006 | 900 if last_line =~ '\S\+\s*{'.endline && last_line !~ '^\s*[)\]]\+\(\s*:\s*'.s:PHP_validVariable.'\)\=\s*{'.endline && last_line !~ s:structureHead |
5862 | 901 let dontIndent = 1 |
902 endif | |
903 | |
904 if !dontIndent && (!b:PHP_BracesAtCodeLevel || last_line !~# '^\s*{') | |
11518 | 905 let ind = ind + shiftwidth() |
532 | 906 endif |
907 | |
17571 | 908 if b:PHP_IndentFunctionCallParameters && last_line =~ s:multilineFunctionCall && last_line !~ s:structureHead && last_line !~ s:arrayDecl |
909 let ind = ind + b:PHP_IndentFunctionCallParameters * shiftwidth() | |
910 endif | |
911 | |
912 if b:PHP_IndentFunctionDeclarationParameters && last_line =~ s:multilineFunctionDecl | |
913 let ind = ind + b:PHP_IndentFunctionDeclarationParameters * shiftwidth() | |
914 endif | |
915 | |
2442 | 916 if b:PHP_BracesAtCodeLevel || b:PHP_vintage_case_default_indent == 1 |
532 | 917 let b:PHP_CurrentIndentLevel = ind |
1668 | 918 |
532 | 919 endif |
920 | |
14006 | 921 elseif last_line =~ '),'.endline && BalanceDirection(last_line) < 0 |
532 | 922 call cursor(lnum, 1) |
14006 | 923 call searchpos('),'.endline, 'cW') |
532 | 924 let openedparent = searchpair('(', '', ')', 'bW', 'Skippmatch()') |
925 if openedparent != lnum | |
926 let ind = indent(openedparent) | |
927 endif | |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
928 |
14006 | 929 elseif last_line =~ s:structureHead |
11518 | 930 let ind = ind + shiftwidth() |
1668 | 931 |
532 | 932 |
11262 | 933 elseif AntepenultimateLine =~ '{'.endline && AntepenultimateLine !~? '^\s*use\>' || AntepenultimateLine =~ terminated || AntepenultimateLine =~# s:defaultORcase |
11518 | 934 let ind = ind + shiftwidth() |
409 | 935 endif |
7 | 936 |
14006 | 937 |
938 if openedparent >= 0 | |
939 let last_line = StripEndlineComments(getline(openedparent)) | |
940 endif | |
532 | 941 endif |
409 | 942 |
14006 | 943 if cline =~ '^\s*[)\]];\=' |
17571 | 944 call cursor(v:lnum, 1) |
945 call searchpos('[)\]]', 'cW') | |
946 let matchedBlockChar = cline[col('.')-1] | |
947 let openedparent = searchpair('\M'.s:blockCharsLUT[matchedBlockChar], '', '\M'.matchedBlockChar, 'bW', 'Skippmatch()') | |
948 if openedparent != v:lnum | |
949 let ind = indent(openedparent) | |
950 endif | |
14006 | 951 |
17571 | 952 elseif last_line =~ '^\s*->' && last_line !~? s:structureHead && BalanceDirection(last_line) <= 0 |
11518 | 953 let ind = ind - shiftwidth() |
532 | 954 endif |
955 | |
956 let b:PHP_CurrentIndentLevel = ind | |
4502
605c9ce57ec3
Updated runtime files, language files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2442
diff
changeset
|
957 return ind + addSpecial |
7 | 958 endfunction |