2004-06-13 20:20:40 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								" Vim indent file  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								" Language:	PHP  
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								" Author:	John Wellesz <John.wellesz (AT) gmail (DOT) com>  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								" URL:		https://www.2072productions.com/vim/indent/php.vim  
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								" Home:		https://github.com/2072/PHP-Indenting-for-VIm  
						 
					
						
							
								
									
										
										
										
											2020-03-14 08:19:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								" Last Change:	2020 Mar 05  
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								" Version:	1.70  
						 
					
						
							
								
									
										
										
										
											2004-06-13 20:20:40 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								"  
						 
					
						
							
								
									
										
										
										
											2006-04-30 18:54:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"  
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"	Type :help php-indent for available options  
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"  
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"	A fully commented version of this file is available on github  
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"  
						 
					
						
							
								
									
										
										
										
											2018-05-15 22:25:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"  If you find a bug, please open a ticket on github.com  
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"  ( https://github.com/2072/PHP-Indenting-for-VIm/issues ) with an example of  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"  code that breaks the algorithm.  
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"  
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								" NOTE: This script must be used with PHP syntax ON and with the php syntax  
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"	script by Lutz Eymers (http://www.isp.de/data/php.vim ) or with the  
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"	script by Peter Hodge (https://www.vim.org/scripts/script.php?script_id=1571 )  
						 
					
						
							
								
									
										
										
										
											2010-01-06 20:54:52 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"	the later is bunbdled by default with Vim 7.  
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"  
						 
					
						
							
								
									
										
										
										
											2008-07-13 17:41:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"	In the case you have syntax errors in your script such as HereDoc end  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"	identifiers not at col 1 you'll have to indent your file 2 times (This  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"	script will automatically put HereDoc end identifiers at col 1 if  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"	they are followed by a ';').  
						 
					
						
							
								
									
										
										
										
											2006-04-30 18:54:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"  
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-06 20:54:52 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								" NOTE: If you are editing files in Unix file format and that (by accident)  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"	there are '\r' before new lines, this script won't be able to proceed  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"	correctly and will make many mistakes because it won't be able to match  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"	'\s*$' correctly.  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"	So you have to remove those useless characters first with a command like:  
						 
					
						
							
								
									
										
										
										
											2006-04-30 18:54:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"  
						 
					
						
							
								
									
										
										
										
											2010-01-06 20:54:52 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"	:%s /\r$//g  
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"  
						 
					
						
							
								
									
										
										
										
											2010-01-06 20:54:52 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								"	or simply 'let' the option PHP_removeCRwhenUnix to 1 and the script will  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"	silently remove them when VIM load this script (at each bufread).  
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2004-06-13 20:20:40 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								if  exists ( "b:did_indent" )  
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    finish 
							 
						 
					
						
							
								
									
										
										
										
											2004-06-13 20:20:40 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								endif  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  b :did_indent  =  1  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								let  g :php_sync_method  =  0  
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								if  exists ( "PHP_default_indenting" )  
						 
					
						
							
								
									
										
										
										
											2017-06-13 18:12:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  b :PHP_default_indenting  =  PHP_default_indenting  * shiftwidth ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								else  
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  b :PHP_default_indenting  =  0 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								endif  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								if  exists ( "PHP_outdentSLComments" )  
						 
					
						
							
								
									
										
										
										
											2017-06-13 18:12:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  b :PHP_outdentSLComments  =  PHP_outdentSLComments  * shiftwidth ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								else  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  b :PHP_outdentSLComments  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endif  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								if  exists ( "PHP_BracesAtCodeLevel" )  
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  b :PHP_BracesAtCodeLevel  =  PHP_BracesAtCodeLevel 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								else  
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  b :PHP_BracesAtCodeLevel  =  0 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								endif  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-07-13 17:41:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-11-23 21:25:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								if  exists ( "PHP_autoformatcomment" )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  b :PHP_autoformatcomment  =  PHP_autoformatcomment 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								else  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  b :PHP_autoformatcomment  =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endif  
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-07-30 22:41:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								if  exists ( "PHP_outdentphpescape" )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  b :PHP_outdentphpescape  =  PHP_outdentphpescape 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								else  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  b :PHP_outdentphpescape  =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endif  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								if  exists ( "PHP_noArrowMatching" )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  b :PHP_noArrowMatching  =  PHP_noArrowMatching 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								else  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  b :PHP_noArrowMatching  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endif  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-07-30 22:41:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if  exists ( "PHP_vintage_case_default_indent" )  && PHP_vintage_case_default_indent  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  b :PHP_vintage_case_default_indent  =  1 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-13 17:41:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								else  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  b :PHP_vintage_case_default_indent  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endif  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								if  exists ( "PHP_IndentFunctionCallParameters" )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  b :PHP_IndentFunctionCallParameters  =  PHP_IndentFunctionCallParameters 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								else  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  b :PHP_IndentFunctionCallParameters  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endif  
						 
					
						
							
								
									
										
										
										
											2008-07-13 17:41:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								if  exists ( "PHP_IndentFunctionDeclarationParameters" )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  b :PHP_IndentFunctionDeclarationParameters  =  PHP_IndentFunctionDeclarationParameters 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								else  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  b :PHP_IndentFunctionDeclarationParameters  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endif  
						 
					
						
							
								
									
										
										
										
											2008-07-13 17:41:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								let  b :PHP_lastindented  =  0  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  b :PHP_indentbeforelast  =  0  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  b :PHP_indentinghuge  =  0  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  b :PHP_CurrentIndentLevel  =  b :PHP_default_indenting  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  b :PHP_LastIndentedWasComment  =  0  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  b :PHP_InsideMultilineComment  =  0  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  b :InPHPcode  =  0  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  b :InPHPcode_checked  =  0  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  b :InPHPcode_and_script  =  0  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  b :InPHPcode_tofind  =  ""  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  b :PHP_oldchangetick  =  b :changedtick  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  b :UserIsTypingComment  =  0  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  b :optionsset  =  0  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								setlocal  nosmartindent  
						 
					
						
							
								
									
										
										
										
											2006-04-30 18:54:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								setlocal  noautoindent  
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								setlocal  nocindent  
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								setlocal  nolisp  
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2004-06-13 20:20:40 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								setlocal  indentexpr = GetPhpIndent ( )  
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								setlocal  indentkeys = 0 {, 0 }, 0 ) , 0 ], :, ! ^F , o , O , e , *< Return > , = ?> , = < ?, = */ 
						 
					
						
							
								
									
										
										
										
											2004-06-13 20:20:40 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  s :searchpairflags  =  'bWr'  
						 
					
						
							
								
									
										
										
										
											2004-06-13 20:20:40 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								if  &fileformat  = =  "unix"  && exists ( "PHP_removeCRwhenUnix" )  && PHP_removeCRwhenUnix  
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    silent !  %s /\r$/ /g 
							 
						 
					
						
							
								
									
										
										
										
											2004-06-13 20:20:40 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								endif  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								if  exists ( "*GetPhpIndent" )  
						 
					
						
							
								
									
										
										
										
											2010-01-06 20:54:52 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    call  ResetPhpOptions ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    finish  " XXX -- comment this line for easy dev 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								endif  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-29 13:48:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								let  s :endline  =  '\s*\%(//.*\|#.*\|/\*.*\*/\s*\)\=$'  
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								let  s :PHP_validVariable  =  '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  s :notPhpHereDoc  =  '\%(break\|return\|continue\|exit\|die\|else\|end\%(if\|while\|for\|foreach\|switch\)\)'  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								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\>\)'  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  s :functionDeclPrefix  =  '\<function\>\%(\s\+&\=' .s :PHP_validVariable .'\)\=\s*('  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  s :functionDecl  =  s :functionDeclPrefix .'.*'  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  s :multilineFunctionDecl  =  s :functionDeclPrefix .s :endline  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  s :arrayDecl  =  '\<array\>\s*(.*'  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let  s :multilineFunctionCall  =  s :PHP_validVariable .'\s*(' .s :endline  
						 
					
						
							
								
									
										
										
										
											2017-03-29 13:48:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								let  s :unstated  =  '\%(^\s*' .s :blockstart .'.*)\|\%(//.*\)\@<!\<e' .'lse\>\)' .s :endline  
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-29 13:48:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								let  s :terminated  =  '\%(\%(;\%(\s*\%(?>\|}\)\)\=\|<<<\s*[''"]\=\a\w*[''"]\=$\|^\s*}\|^\s*' .s :PHP_validVariable .':\)' .s :endline .'\)'  
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								let  s :PHP_startindenttag  =  '<?\%(.*?>\)\@!\|<script[^>]*>\%(.*<\/script>\)\@!'  
						 
					
						
							
								
									
										
										
										
											2017-03-29 13:48:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								let  s :structureHead  =  '^\s*\%('  . s :blockstart  . '\)\|' . s :functionDecl  . s :endline  . '\|\<new\s\+class\>'  
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								let  s :escapeDebugStops  =  0  
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								function !  DebugPrintReturn ( scriptLine )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  !  s :escapeDebugStops 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									echo  "debug:"  . a :scriptLine 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  c  =  getchar ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  c  = =  "\<Del>" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  s :escapeDebugStops  =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endfunction  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								function !  GetLastRealCodeLNum ( startline )  " {{{  
						 
					
						
							
								
									
										
										
										
											2006-04-30 18:54:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  lnum  =  a :startline 
							 
						 
					
						
							
								
									
										
										
										
											2006-04-30 18:54:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-01-19 22:09:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  b :GetLastRealCodeLNum_ADD  && b :GetLastRealCodeLNum_ADD  = =  lnum  +  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  lnum  =  b :GetLastRealCodeLNum_ADD 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2006-04-30 18:54:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    while  lnum  >  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  lnum  =  prevnonblank ( lnum ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  lastline  =  getline ( lnum ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  b :InPHPcode_and_script  && lastline  = ~  '?>\s*$' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  lnum  =  lnum  -  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									elseif  lastline  = ~  '^\s*?>.*<?\%(php\)\=\s*$' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  lnum  =  lnum  -  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									elseif  lastline  = ~  '^\s*\%(//\|#\|/\*.*\*/\s*$\)' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  lnum  =  lnum  -  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									elseif  lastline  = ~  '\*/\s*$' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    call  cursor ( lnum ,  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    if  lastline  ! ~  '^\*/' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										call  search ( '\*/' ,  'W' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-11-23 21:25:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    let  lnum  =  searchpair ( '/\*' ,  '' ,  '\*/' ,  s :searchpairflags ,  'Skippmatch2()' ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  lastline  =  getline ( lnum ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    if  lastline  = ~  '^\s*/\*' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  lnum  =  lnum  -  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										break 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									elseif  lastline  = ~ ? '\%(//\s*\|?>.*\)\@<!<?\%(php\)\=\s*$\|^\s*<script\>' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    while  lastline  ! ~  '\(<?.*\)\@<!?>'  && lnum  >  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  lnum  =  lnum  -  1 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										let  lastline  =  getline ( lnum ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    endwhile 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    if  lastline  = ~  '^\s*?>' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  lnum  =  lnum  -  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										break 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-07-30 22:41:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									elseif  lastline  = ~ ? '^\a\w*;\=$'  && lastline  ! ~ ? s :notPhpHereDoc 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-07 23:02:56 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    let  tofind = substitute (  lastline ,  '\(\a\w*\);\=' ,  '<<<\\s*[''"]\\=\1[''"]\\=$' ,  '' ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    while  getline ( lnum )  ! ~ ? tofind  && lnum  >  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  lnum  =  lnum  -  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    endwhile 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									elseif  lastline  = ~  '^\s*[''"`][;,]'  | |  ( lastline  = ~  '^[^''"`]*[''"`][;,]' .s :endline  && IslinePHP ( lnum ,  "" )  = =  "SpecStringEntrails" ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-29 13:48:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  tofind = substitute (  lastline ,  '^.*\([''"`]\)[;,].*$' ,  '^[^\1]\\+[\1]$\\|^[^\1]\\+[=([]\\s*[\1]' ,  '' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  trylnum  =  lnum 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    while  getline ( trylnum )  ! ~ ? tofind  && trylnum  >  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  trylnum  =  trylnum  -  1 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    endwhile 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-29 13:48:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    if  trylnum  = =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										break 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  lastline  = ~  ';' .s :endline 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    while  getline ( trylnum )  ! ~ ? s :terminated  && getline ( trylnum )  ! ~ ? '{' .s :endline  && trylnum  >  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											let  trylnum  =  prevnonblank ( trylnum  -  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    endwhile 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    if  trylnum  = =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											break 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  lnum  =  trylnum 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    end 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									else 
							 
						 
					
						
							
								
									
										
										
										
											2006-04-30 18:54:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    break 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endwhile 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-07-30 22:41:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  lnum = = 1  && getline ( lnum )  ! ~  '<?' 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  lnum = 0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  b :InPHPcode_and_script  && 1  >  b :InPHPcode 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  b :InPHPcode_and_script  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2007-05-05 17:15:44 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  lnum 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endfunction  " }}}  
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-11-23 21:25:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								function !  Skippmatch2 ( )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  line  =  getline ( "." ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  line  = ~  "\\([\"']\\).*/\\*.*\\1"  | |  line  = ~  '\%(//\|#\).*/\*' 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  1 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  0 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-11-23 21:25:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								endfun  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-07-30 22:41:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								function !  Skippmatch ( ) 	" {{{  
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  synname  =  synIDattr ( synID ( line ( "." ) ,  col ( "." ) ,  0 ) ,  "name" ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  synname  = = ? "Delimiter"  | |  synname  = = ? "phpRegionDelimiter"  | |  synname  = ~ ? "^phpParent"  | |  synname  = = ? "phpArrayParens"  | |  synname  = ~ ? '^php\%(Block\|Brace\)'  | |  synname  = = ? "javaScriptBraces"  | |  synname  = ~ ? '^php\%(Doc\)\?Comment'  && b :UserIsTypingComment 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endfun  " }}}  
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								function !  FindOpenBracket ( lnum ,  blockStarter )  " {{{  
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    call  cursor ( a :lnum ,  1 ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  line  =  searchpair ( '{' ,  '' ,  '}' ,  'bW' ,  'Skippmatch()' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  a :blockStarter  = =  1 
							 
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									while  line  >  1 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    let  linec  =  getline ( line ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-29 13:48:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    if  linec  = ~  s :terminated  | |  linec  = ~  s :structureHead 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										break 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  line  =  GetLastRealCodeLNum ( line  -  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									endwhile 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  line 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								endfun  " }}}  
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-29 13:48:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								let  s :blockChars  =  {'{' :1 ,  '[' : 1 ,  '(' : 1 ,  ')' :-1 ,  ']' :-1 ,  '}' :-1 } 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								let  s :blockCharsLUT  =  {'{' :'{' ,  '}' :'{' ,    '[' :'[' ,  ']' :'[' ,    '(' :'(' ,  ')' :'(' } 
						 
					
						
							
								
									
										
										
										
											2017-03-29 13:48:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								function !  BalanceDirection  ( str )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  balance  =  {'{' :0 ,  '[' : 0 ,  '(' : 0 ,  'none' :0 }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  director  =  'none' 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-29 13:48:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  c  in  split ( a :str ,  '\zs' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  has_key ( s :blockChars ,  c ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    let  balance [s :blockCharsLUT [c ]] + =  s :blockChars [c ]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    if  balance [s :blockCharsLUT [c ]]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  director  =  s :blockCharsLUT [c ]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-29 13:48:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endfor 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  balance [director ]
							 
						 
					
						
							
								
									
										
										
										
											2017-03-29 13:48:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								endfun  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								function !  StripEndlineComments  ( line )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  substitute ( a :line , "\\(//\\|#\\)\\(\\(\\([^\"']*\\([\"']\\)[^\"']*\\5\\)\\+[^\"']*$\\)\\|\\([^\"']*$\\)\\)" , '' , '' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endfun  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								function !  FindArrowIndent  ( lnum )   " {{{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  parrentArrowPos  =  -1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  cursorPos  =  -1 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  lnum  =  a :lnum 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  lnum  >  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  last_line  =  getline ( lnum ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  last_line  = ~  '^\s*->' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  parrentArrowPos  =  indent ( a :lnum ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    break 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									else 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    if  b :PHP_noArrowMatching 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										break 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  cleanedLnum  =  StripEndlineComments ( last_line ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    if  cleanedLnum  = ~  ')' .s :endline 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  BalanceDirection ( cleanedLnum )  < =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    call  cursor ( lnum ,  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    call  searchpos ( ')' .s :endline ,  'cW' ,  lnum ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    let  openedparent  =   searchpair ( '(' ,  '' ,  ')' ,  'bW' ,  'Skippmatch()' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    let  cursorPos  =  col ( "." ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    if  openedparent  ! =  lnum 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											let  lnum  =  openedparent 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											continue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    endif 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										else 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    let  parrentArrowPos  =  -1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    break 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    if  cleanedLnum  = ~  '->' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										call  cursor ( lnum ,  cursorPos  = =  -1  ? strwidth ( cleanedLnum )  : cursorPos ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  parrentArrowPos  =  searchpos ( '->' ,  'cWb' ,  lnum ) [1 ] -  1 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										break 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    else 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										let  parrentArrowPos  =  -1 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										break 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endwhile 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  parrentArrowPos  = =  -1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  parrentArrowPos  =  indent ( lnum )  +  shiftwidth ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  parrentArrowPos 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endfun  "}}}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								function !  FindTheIfOfAnElse  ( lnum ,  StopAfterFirstPrevElse )  " {{{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  getline ( a :lnum )  = ~ # '^\s*}\s*else\%(if\)\=\>' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  beforeelse  =  a :lnum 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  beforeelse  =  GetLastRealCodeLNum ( a :lnum  -  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ! s :level 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  s :iftoskip  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  getline ( beforeelse )  = ~ # '^\s*\%(}\s*\)\=else\%(\s*if\)\@!\>' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  s :iftoskip  =  s :iftoskip  +  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  getline ( beforeelse )  = ~  '^\s*}' 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  beforeelse  =  FindOpenBracket ( beforeelse ,  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  getline ( beforeelse )  = ~  '^\s*{' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  beforeelse  =  GetLastRealCodeLNum ( beforeelse  -  1 ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ! s :iftoskip  && a :StopAfterFirstPrevElse  && getline ( beforeelse )  = ~ # '^\s*\%([}]\s*\)\=else\%(if\)\=\>' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  beforeelse 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  getline ( beforeelse )  ! ~ # '^\s*if\>'  && beforeelse > 1  | |  s :iftoskip  && beforeelse > 1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-07-30 22:41:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  s :iftoskip  && getline ( beforeelse )  = ~ # '^\s*if\>' 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    let  s :iftoskip  =  s :iftoskip  -  1 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  s :level  =   s :level  +  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  beforeelse  =  FindTheIfOfAnElse ( beforeelse ,  a :StopAfterFirstPrevElse ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  beforeelse 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endfunction  " }}}  
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-07-30 22:41:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								let  s :defaultORcase  =  '^\s*\%(default\|case\).*:'  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								function !  FindTheSwitchIndent  ( lnum )  " {{{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  test  =  GetLastRealCodeLNum ( a :lnum  -  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  test  < =  1 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-13 18:12:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  indent ( 1 )  -  shiftwidth ( )  * b :PHP_vintage_case_default_indent 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-30 22:41:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    while  getline ( test )  = ~  '^\s*}'  && test  >  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  test  =  GetLastRealCodeLNum ( FindOpenBracket ( test ,  0 )  -  1 ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-30 22:41:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  getline ( test )  = ~  '^\s*switch\>' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  test  =  GetLastRealCodeLNum ( test  -  1 ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-30 22:41:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    endwhile 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-30 22:41:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  getline ( test )  = ~ # '^\s*switch\>' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  indent ( test ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    elseif  getline ( test )  = ~ # s :defaultORcase 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-13 18:12:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  indent ( test )  -  shiftwidth ( )  * b :PHP_vintage_case_default_indent 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-30 22:41:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  FindTheSwitchIndent ( test ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endfunction  "}}}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								let  s :SynPHPMatchGroups  =  {'phpparent' :1 ,  'delimiter' :1 ,  'define' :1 ,  'storageclass' :1 ,  'structure' :1 ,  'exception' :1 } 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								function !  IslinePHP  ( lnum ,  tofind )  " {{{  
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  cline  =  getline ( a :lnum ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  a :tofind = = "" 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  tofind  =  "^\\s*[\"'`]*\\s*\\zs\\S" 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  tofind  =  a :tofind 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  tofind  =  tofind  . '\c' 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  coltotest  =  match  ( cline ,  tofind )  +  1 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  synname  =  synIDattr ( synID ( a :lnum ,  coltotest ,  0 ) ,  "name" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  synname  = = ? 'phpStringSingle'  | |  synname  = = ? 'phpStringDouble'  | |  synname  = = ? 'phpBacktick' 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  cline  ! ~  '^\s*[''"`]'  " ??? XXX 
							 
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    return  "SpecStringEntrails" 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    return  synname 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  get ( s :SynPHPMatchGroups ,  tolower ( synname ) )  | |  synname  = ~  '^php'  | |   synname  = ~ ? '^javaScript' 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  synname 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  "" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								endfunction  " }}}  
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-06 20:54:52 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								let  s :autoresetoptions  =  0  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								if  !  s :autoresetoptions  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  s :autoresetoptions  =  1 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								endif  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-06 20:54:52 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								function !  ResetPhpOptions ( )  
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  !  b :optionsset  && &filetype  = ~  "php" 
							 
						 
					
						
							
								
									
										
										
										
											2005-11-23 21:25:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  b :PHP_autoformatcomment 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    setlocal  comments = s1 :/*,mb:*,ex:*/ , :// , :#
							 
						 
					
						
							
								
									
										
										
										
											2006-04-30 18:54:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-07-13 17:41:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    setlocal  formatoptions - = t 
							 
						 
					
						
							
								
									
										
										
										
											2005-11-23 21:25:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    setlocal  formatoptions + = q 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    setlocal  formatoptions + = r 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    setlocal  formatoptions + = o 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    setlocal  formatoptions + = c 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    setlocal  formatoptions + = b 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  b :optionsset  =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								endfunc  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-06 20:54:52 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								call  ResetPhpOptions ( )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								function !  GetPhpIndentVersion ( )  
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  "1.70-bundle" 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								endfun  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								function !  GetPhpIndent ( )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-01-19 22:09:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  b :GetLastRealCodeLNum_ADD  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  UserIsEditing = 0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if 	b :PHP_oldchangetick  ! =  b :changedtick 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  b :PHP_oldchangetick  =  b :changedtick 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  UserIsEditing = 1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2004-06-13 20:20:40 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  b :PHP_default_indenting 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-13 18:12:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  b :PHP_default_indenting  =  g :PHP_default_indenting  * shiftwidth ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  cline  =  getline ( v :lnum ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-04-30 18:54:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ! b :PHP_indentinghuge  && b :PHP_lastindented  >  b :PHP_indentbeforelast 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  b :PHP_indentbeforelast 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  b :PHP_indentinghuge  =  1 
							 
						 
					
						
							
								
									
										
										
										
											2004-06-13 20:20:40 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  b :PHP_indentbeforelast  =  b :PHP_lastindented 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2004-06-13 20:20:40 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  b :InPHPcode_checked  && prevnonblank ( v :lnum  -  1 )  ! =  b :PHP_lastindented 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  b :PHP_indentinghuge 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  b :PHP_indentinghuge  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  b :PHP_CurrentIndentLevel  =  b :PHP_default_indenting 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  real_PHP_lastindented  =  v :lnum 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  b :PHP_LastIndentedWasComment = 0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  b :PHP_InsideMultilineComment = 0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  b :PHP_indentbeforelast  =  0 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  b :InPHPcode  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  b :InPHPcode_checked  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  b :InPHPcode_and_script  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  b :InPHPcode_tofind  =  "" 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    elseif  v :lnum  >  b :PHP_lastindented 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  real_PHP_lastindented  =  b :PHP_lastindented 
							 
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  real_PHP_lastindented  =  v :lnum 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  b :PHP_lastindented  =  v :lnum 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ! b :InPHPcode_checked  " {{{ One time check 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  b :InPHPcode_checked  =  1 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-07 23:02:56 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  b :UserIsTypingComment  =  0 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-01-19 22:09:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  synname  =  "" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  cline  ! ~  '<?.*?>' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  synname  =  IslinePHP  ( prevnonblank ( v :lnum ) ,  "" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  synname ! = "" 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    if  synname  = = ? "SpecStringEntrails" 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-29 13:48:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										let  b :InPHPcode  =  -1  " thumb down 
							 
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										let  b :InPHPcode_tofind  =  "" 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    elseif  synname  ! = ? "phpHereDoc"  && synname  ! = ? "phpHereDocDelimiter" 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										let  b :InPHPcode  =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  b :InPHPcode_tofind  =  "" 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  synname  = ~ ? '^php\%(Doc\)\?Comment' 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    let  b :UserIsTypingComment  =  1 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-07 23:02:56 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    let  b :InPHPcode_checked  =  0 
							 
						 
					
						
							
								
									
										
										
										
											2004-06-13 20:20:40 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  synname  = ~ ? '^javaScript' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    let  b :InPHPcode_and_script  =  1 
							 
						 
					
						
							
								
									
										
										
										
											2004-06-13 20:20:40 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  b :InPHPcode  =  0 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										let  lnum  =  v :lnum  -  1 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-07 23:02:56 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										while  getline ( lnum )  ! ~ ? '<<<\s*[''"]\=\a\w*[''"]\=$'  && lnum  >  1 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    let  lnum  =  lnum  -  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										endwhile 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-07 23:02:56 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										let  b :InPHPcode_tofind  =  substitute (  getline ( lnum ) ,  '^.*<<<\s*[''"]\=\(\a\w*\)[''"]\=$' ,  '^\\s*\1;\\=$' ,  '' ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  b :InPHPcode  =  0 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    let  b :InPHPcode_tofind  =  s :PHP_startindenttag 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif  "!b:InPHPcode_checked }}} 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    " Test if we are indenting PHP code {{{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  lnum  =  prevnonblank ( v :lnum  -  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  last_line  =  getline ( lnum ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  endline =  s :endline 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  b :InPHPcode_tofind ! = "" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  cline  = ~ ? b :InPHPcode_tofind 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  b :InPHPcode_tofind  =  "" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  b :UserIsTypingComment  =  0 
							 
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    if  b :InPHPcode  = =  -1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  b :InPHPcode  =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  -1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  b :InPHPcode  =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    if  cline  = ~  '\*/' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										call  cursor ( v :lnum ,  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  cline  ! ~  '^\*/' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    call  search ( '\*/' ,  'W' ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-03-22 23:03:44 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-11-23 21:25:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										let  lnum  =  searchpair ( '/\*' ,  '' ,  '\*/' ,  s :searchpairflags ,  'Skippmatch2()' ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										let  b :PHP_CurrentIndentLevel  =  b :PHP_default_indenting 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  b :PHP_LastIndentedWasComment  =  0 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  cline  = ~  '^\s*\*/' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    return  indent ( lnum )  +  1 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										else 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    return  indent ( lnum ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    elseif  cline  = ~ ? '<script\>' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  b :InPHPcode_and_script  =  1 
							 
						 
					
						
							
								
									
										
										
										
											2006-01-19 22:09:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										let  b :GetLastRealCodeLNum_ADD  =  v :lnum 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  1  = =  b :InPHPcode 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ! b :InPHPcode_and_script  && last_line  = ~  '\%(<?.*\)\@<!?>\%(.*<?\)\@!'  && IslinePHP ( lnum ,  '?>' ) = ~ ?"Delimiter" 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    if  cline  ! ~ ? s :PHP_startindenttag 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  b :InPHPcode  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  b :InPHPcode_tofind  =  s :PHP_startindenttag 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    elseif  cline  = ~ ? '<script\>' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  b :InPHPcode_and_script  =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									elseif  last_line  = ~  '^[^''"`]\+[''"`]$'  && last_line  ! ~  '^\s*\%(//\|#\|/\*.*\*/\s*$\)'  " a string identifier with nothing after it and no other string identifier before 
							 
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    let  b :InPHPcode  =  -1 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    let  b :InPHPcode_tofind  =  substitute (  last_line ,  '^.*\([''"`]\).*$' ,  '^[^\1]*\1[;,]$' ,  '' ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-07 23:02:56 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									elseif  last_line  = ~ ? '<<<\s*[''"]\=\a\w*[''"]\=$' 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    let  b :InPHPcode  =  0 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-07 23:02:56 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    let  b :InPHPcode_tofind  =  substitute (  last_line ,  '^.*<<<\s*[''"]\=\(\a\w*\)[''"]\=$' ,  '^\\s*\1;\\=$' ,  '' ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									elseif  ! UserIsEditing  && cline  = ~  '^\s*/\*\%(.*\*/\)\@!'  && getline ( v :lnum  +  1 )  ! ~  '^\s*\*' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  b :InPHPcode  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  b :InPHPcode_tofind  =  '\*/' 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									elseif  cline  = ~ ? '^\s*</script>' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  b :InPHPcode  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  b :InPHPcode_tofind  =  s :PHP_startindenttag 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    endif  " }}} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-04-30 18:54:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  1  >  b :InPHPcode  && ! b :InPHPcode_and_script 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  -1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    " Indent successive // or # comment the same way the first is {{{  
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  addSpecial  =  0 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  cline  = ~  '^\s*\%(//\|#\|/\*.*\*/\s*$\)' 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  addSpecial  =  b :PHP_outdentSLComments 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  b :PHP_LastIndentedWasComment  = =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    return  indent ( real_PHP_lastindented ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  b :PHP_LastIndentedWasComment  =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  b :PHP_LastIndentedWasComment  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif  " }}} 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    " Indent multiline /* comments correctly {{{  
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  b :PHP_InsideMultilineComment  | |  b :UserIsTypingComment 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  cline  = ~  '^\s*\*\%(\/\)\@!' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    if  last_line  = ~  '^\s*/\*' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  indent ( lnum )  +  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  indent ( lnum ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  b :PHP_InsideMultilineComment  =  0 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ! b :PHP_InsideMultilineComment  && cline  = ~  '^\s*/\*\%(.*\*/\)\@!' 
							 
						 
					
						
							
								
									
										
										
										
											2006-01-19 22:09:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  getline ( v :lnum  +  1 )  ! ~  '^\s*\*' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    return  -1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  b :PHP_InsideMultilineComment  =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif  " }}} 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    " Things always indented at col 1 (PHP delimiter: <?, ?>, Heredoc end) {{{  
						 
					
						
							
								
									
										
										
										
											2010-07-30 22:41:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  cline  = ~ # '^\s*<?'  && cline  ! ~  '?>'  && b :PHP_outdentphpescape 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-07-30 22:41:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if 	cline  = ~  '^\s*?>'  && cline  ! ~ # '<?'  && b :PHP_outdentphpescape 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  cline  = ~ ? '^\s*\a\w*;$\|^\a\w*$\|^\s*[''"`][;,]'  && cline  ! ~ ? s :notPhpHereDoc 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif  " }}} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  s :level  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  lnum  =  GetLastRealCodeLNum ( v :lnum  -  1 ) 
							 
						 
					
						
							
								
									
										
										
										
											2006-01-19 22:09:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  last_line  =  getline ( lnum ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  ind  =  indent ( lnum ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ind = = 0  && b :PHP_default_indenting 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  ind  =  b :PHP_default_indenting 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  lnum  = =  0 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  b :PHP_default_indenting  +  addSpecial 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  cline  = ~  '^\s*}\%(}}\)\@!' 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  ind  =  indent ( FindOpenBracket ( v :lnum ,  1 ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  b :PHP_CurrentIndentLevel  =  b :PHP_default_indenting 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  ind 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  cline  = ~  '^\s*\*/' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									call  cursor ( v :lnum ,  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  cline  ! ~  '^\*/' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    call  search ( '\*/' ,  'W' ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-11-23 21:25:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  lnum  =  searchpair ( '/\*' ,  '' ,  '\*/' ,  s :searchpairflags ,  'Skippmatch2()' ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  b :PHP_CurrentIndentLevel  =  b :PHP_default_indenting 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  cline  = ~  '^\s*\*/' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    return  indent ( lnum )  +  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    return  indent ( lnum ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  last_line  = ~  '[;}]' .endline  && last_line  ! ~  '^[)\]]'  && last_line  ! ~ # s :defaultORcase  && last_line  ! ~  '^\s*[''"`][;,]' 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ind = = b :PHP_default_indenting 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    return  b :PHP_default_indenting  +  addSpecial 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									elseif  b :PHP_indentinghuge  && ind = = b :PHP_CurrentIndentLevel  && cline  ! ~ # '^\s*\%(else\|\%(case\|default\).*:\|[})];\=\)'  && last_line  ! ~ # '^\s*\%(\%(}\s*\)\=else\)'  && getline ( GetLastRealCodeLNum ( lnum  -  1 ) ) = ~ ';' .endline 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    return  b :PHP_CurrentIndentLevel  +  addSpecial 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  LastLineClosed  =  0 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  terminated  =  s :terminated 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-29 13:48:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  unstated   =  s :unstated 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ind  ! =  b :PHP_default_indenting  && cline  = ~ # '^\s*else\%(if\)\=\>' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  b :PHP_CurrentIndentLevel  =  b :PHP_default_indenting 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  indent ( FindTheIfOfAnElse ( v :lnum ,  1 ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-07-30 22:41:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    elseif  cline  = ~ # s :defaultORcase 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-13 18:12:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  FindTheSwitchIndent ( v :lnum )  +  shiftwidth ( )  * b :PHP_vintage_case_default_indent 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-13 17:41:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    elseif  cline  = ~  '^\s*)\=\s*{' 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  previous_line  =  last_line 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  last_line_num  =  lnum 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									while  last_line_num  >  1 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-29 13:48:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    if  previous_line  = ~  terminated  | |  previous_line  = ~  s :structureHead 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										let  ind  =  indent ( last_line_num ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if   b :PHP_BracesAtCodeLevel 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-13 18:12:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    let  ind  =  ind  +  shiftwidth ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-04-30 18:54:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return  ind 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    let  last_line_num  =  GetLastRealCodeLNum ( last_line_num  -  1 ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    let  previous_line  =  getline ( last_line_num ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									endwhile 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    elseif  cline  = ~  '^\s*->' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  FindArrowIndent ( lnum ) 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-13 17:41:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    elseif  last_line  = ~ # unstated  && cline  ! ~  '^\s*);\=' .endline 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-13 18:12:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  ind  =  ind  +  shiftwidth ( )  " we indent one level further when the preceding line is not stated 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  ind  +  addSpecial 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    elseif  ( ind  ! =  b :PHP_default_indenting  | |  last_line  = ~  '^[)\]]'  )  && last_line  = ~  terminated 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  previous_line  =  last_line 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  last_line_num  =  lnum 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  LastLineClosed  =  1 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  isSingleLineBlock  =  0 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									while  1 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    if  !  isSingleLineBlock  && previous_line  = ~  '^\s*}\|;\s*}' .endline 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										call  cursor ( last_line_num ,  1 ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  previous_line  ! ~  '^}' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    call  search ( '}\|;\s*}' .endline ,  'W' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										end 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										let  oldLastLine  =  last_line_num 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  last_line_num  =  searchpair ( '{' ,  '' ,  '}' ,  'bW' ,  'Skippmatch()' ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  getline ( last_line_num )  = ~  '^\s*{' 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    let  last_line_num  =  GetLastRealCodeLNum ( last_line_num  -  1 ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										elseif  oldLastLine  = =  last_line_num 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    let  isSingleLineBlock  =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    continue 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										let  previous_line  =  getline ( last_line_num ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										continue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    else 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										let  isSingleLineBlock  =  0 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  getline ( last_line_num )  = ~ # '^\s*else\%(if\)\=\>' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    let  last_line_num  =  FindTheIfOfAnElse ( last_line_num ,  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    continue 
							 
						 
					
						
							
								
									
										
										
										
											2004-06-13 20:20:40 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										let  last_match  =  last_line_num 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										let  one_ahead_indent  =  indent ( last_line_num ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  last_line_num  =  GetLastRealCodeLNum ( last_line_num  -  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  two_ahead_indent  =  indent ( last_line_num ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  after_previous_line  =  previous_line 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  previous_line  =  getline ( last_line_num ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-07-30 22:41:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  previous_line  = ~ # s :defaultORcase .'\|{' .endline 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    break 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  after_previous_line = ~ # '^\s*' .s :blockstart .'.*)' .endline  && previous_line  = ~ # '[;}]' .endline 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    break 
							 
						 
					
						
							
								
									
										
										
										
											2004-06-13 20:20:40 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-04-30 18:54:39 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  one_ahead_indent  = =  two_ahead_indent  | |  last_line_num  <  1 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-13 17:41:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    if  previous_line  = ~ # '\%(;\|^\s*}\)' .endline  | |  last_line_num  <  1 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											break 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									endwhile 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  indent ( last_match )  ! =  ind 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  ind  =  indent ( last_match ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  b :PHP_CurrentIndentLevel  =  b :PHP_default_indenting 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    return  ind  +  addSpecial 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-07-11 22:29:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( last_line  ! ~  '^\s*}\%(}}\)\@!' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  plinnum  =  GetLastRealCodeLNum ( lnum  -  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  plinnum  =  GetLastRealCodeLNum ( FindOpenBracket ( lnum ,  1 )  -  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-07-30 22:41:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  AntepenultimateLine  =  getline ( plinnum ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  last_line  =  StripEndlineComments ( last_line ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ind  = =  b :PHP_default_indenting 
							 
						 
					
						
							
								
									
										
										
										
											2014-12-06 23:33:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  last_line  = ~  terminated  && last_line  ! ~ # s :defaultORcase 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    let  LastLineClosed  =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ! LastLineClosed 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  openedparent  =  -1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-01-06 20:54:52 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-29 13:48:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  last_line  = ~ # '[{(\[]' .endline  | |  last_line  = ~ ? '\h\w*\s*(.*,$'  && AntepenultimateLine  ! ~  '[,(\[]' .endline  && BalanceDirection ( last_line )  >  0 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    let  dontIndent  =  0 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    if  last_line  = ~  '\S\+\s*{' .endline  && last_line  ! ~  '^\s*[)\]]\+\(\s*:\s*' .s :PHP_validVariable .'\)\=\s*{' .endline  && last_line  ! ~  s :structureHead 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 14:08:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										let  dontIndent  =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    if  ! dontIndent  && ( ! b :PHP_BracesAtCodeLevel  | |  last_line  ! ~ # '^\s*{' ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-13 18:12:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										let  ind  =  ind  +  shiftwidth ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    if  b :PHP_IndentFunctionCallParameters  && last_line  = ~  s :multilineFunctionCall  && last_line  ! ~  s :structureHead  && last_line  ! ~  s :arrayDecl 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  ind  =  ind  +  b :PHP_IndentFunctionCallParameters  * shiftwidth ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    if  b :PHP_IndentFunctionDeclarationParameters  && last_line  = ~  s :multilineFunctionDecl 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  ind  =  ind  +  b :PHP_IndentFunctionDeclarationParameters  * shiftwidth ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-07-30 22:41:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    if  b :PHP_BracesAtCodeLevel  | |  b :PHP_vintage_case_default_indent  = =  1 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										let  b :PHP_CurrentIndentLevel  =  ind 
							 
						 
					
						
							
								
									
										
										
										
											2008-07-13 17:41:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									elseif  last_line  = ~  '),' .endline  && BalanceDirection ( last_line )  <  0 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    call  cursor ( lnum ,  1 ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    call  searchpos ( '),' .endline ,  'cW' ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    let  openedparent  =  searchpair ( '(' ,  '' ,  ')' ,  'bW' ,  'Skippmatch()' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    if  openedparent  ! =  lnum 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										let  ind  =  indent ( openedparent ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    endif 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									elseif  last_line  = ~  s :structureHead 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-13 18:12:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    let  ind  =  ind  +  shiftwidth ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-29 13:48:40 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									elseif  AntepenultimateLine  = ~  '{' .endline  && AntepenultimateLine  ! ~ ? '^\s*use\>'  | |  AntepenultimateLine  = ~  terminated  | |  AntepenultimateLine  = ~ # s :defaultORcase 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-13 18:12:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									    let  ind  =  ind  +  shiftwidth ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-22 21:41:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  openedparent  > =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  last_line  =  StripEndlineComments ( getline ( openedparent ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  cline  = ~  '^\s*[)\]];\=' 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									call  cursor ( v :lnum ,  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									call  searchpos ( '[)\]]' ,  'cW' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  matchedBlockChar  =  cline [col ( '.' ) -1 ]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									let  openedparent  =  searchpair ( '\M' .s :blockCharsLUT [matchedBlockChar ],  '' ,  '\M' .matchedBlockChar ,  'bW' ,  'Skippmatch()' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  openedparent  ! =  v :lnum 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									    let  ind  =  indent ( openedparent ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									endif 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-31 21:07:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    elseif  last_line  = ~  '^\s*->'  && last_line  ! ~ ? s :structureHead  && BalanceDirection ( last_line )  < =  0 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-13 18:12:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									let  ind  =  ind  -  shiftwidth ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2005-09-25 22:16:38 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    endif 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    let  b :PHP_CurrentIndentLevel  =  ind 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-21 21:01:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  ind  +  addSpecial 
							 
						 
					
						
							
								
									
										
										
										
											2004-06-13 20:20:40 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								endfunction