" Vim syntax file " Language: PHP 5.3 & up " Maintainer: Paul Garvin " Contributor: Stan Angeloff " URL: https://github.com/StanAngeloff/php.vim " " Former Maintainer: Peter Hodge " Former URL: http://www.vim.org/scripts/script.php?script_id=1571 " " Note: All of the switches for VIM 5.X and 6.X compatability were removed. " DO NOT USE THIS FILE WITH A VERSION OF VIM < 7.0. " " Note: If you are using a colour terminal with dark background, you will probably find " the 'elflord' colorscheme is much better for PHP's syntax than the default " colourscheme, because elflord's colours will better highlight the break-points " (Statements) in your code. " " Options: php_sql_query = 1 for SQL syntax highlighting inside strings " php_html_in_strings = 1 for HTML syntax highlighting inside strings " php_parent_error_close = 1 for highlighting parent error ] or ) " php_parent_error_open = 1 for skipping an php end tag, " if there exists an open ( or [ without a closing one " php_no_shorttags = 1 don't sync as php " php_folding = 1 for folding classes and functions " php_sync_method = x " x=-1 to sync by search ( default ) " x>0 to sync at least x lines backwards " x=0 to sync from start " " Note: " Setting php_folding=1 will match a closing } by comparing the indent " before the class or function keyword with the indent of a matching }. " Setting php_folding=2 will match all of pairs of {,} ( see known " bugs ii ) " " Known Bugs: " - setting php_parent_error_close on and php_parent_error_open off " has these two leaks: " i) A closing ) or ] inside a string match to the last open ( or [ " before the string, when the the closing ) or ] is on the same line " where the string started. In this case a following ) or ] after " the string would be highlighted as an error, what is incorrect. " ii) Same problem if you are setting php_folding = 2 with a closing " } inside an string on the first line of this string. " " - A double-quoted string like this: " "$foo->someVar->someOtherVar->bar" " will highight '->someOtherVar->bar' as though they will be parsed " as object member variables, but PHP only recognizes the first " object member variable ($foo->someVar). if exists("b:current_syntax") finish endif if !exists("main_syntax") let main_syntax = 'php' endif runtime! syntax/html.vim unlet! b:current_syntax " HTML syntax file turns on spelling for all top level words, we attempt to turn off syntax spell default " Set sync method if none declared if !exists("php_sync_method") if exists("php_minlines") let php_sync_method=php_minlines else let php_sync_method=-1 endif endif syn cluster htmlPreproc add=phpRegion syn include @sqlTop syntax/mysql.vim syn sync clear unlet! b:current_syntax syn cluster sqlTop remove=sqlString,sqlComment if exists("php_sql_query") syn cluster phpAddStrings contains=@sqlTop endif if exists("php_html_in_strings") syn cluster phpAddStrings add=@htmlTop endif syn case match " Superglobals syn keyword phpSuperglobals GLOBALS _GET _POST _REQUEST _FILES _COOKIE _SERVER _SESSION _ENV HTTP_RAW_POST_DATA php_errormsg http_response_header argc argv contained " Magic Constants syn keyword phpMagicConstants __LINE__ __FILE__ __DIR__ __FUNCTION__ __CLASS__ __METHOD__ __NAMESPACE__ contained " $_SERVER Variables syn keyword phpServerVars GATEWAY_INTERFACE SERVER_NAME SERVER_SOFTWARE SERVER_PROTOCOL REQUEST_METHOD QUERY_STRING DOCUMENT_ROOT HTTP_ACCEPT HTTP_ACCEPT_CHARSET HTTP_ENCODING HTTP_ACCEPT_LANGUAGE HTTP_CONNECTION HTTP_HOST HTTP_REFERER HTTP_USER_AGENT REMOTE_ADDR REMOTE_PORT SCRIPT_FILENAME SERVER_ADMIN SERVER_PORT SERVER_SIGNATURE PATH_TRANSLATED SCRIPT_NAME REQUEST_URI PHP_SELF contained " === BEGIN BUILTIN FUNCTIONS, CLASSES, AND CONSTANTS =================================== ${code} " === END BUILTIN FUNCTIONS, CLASSES, AND CONSTANTS ===================================== " The following is needed afterall it seems. syntax keyword phpClasses containedin=ALLBUT,phpComment,phpStringDouble,phpStringSingle,phpIdentifier,phpMethodsVar " Control Structures syn keyword phpStatement if else elseif while do for foreach break switch case default continue return goto as endif endwhile endfor endforeach endswitch declare endeclare contained " Class Keywords syn keyword phpType class abstract extends interface implements static final var public private protected const trait contained " Magic Methods syn keyword phpStatement __construct __destruct __call __callStatic __get __set __isset __unset __sleep __wakeup __toString __invoke __set_state __clone contained " Exception Keywords syn keyword phpStatement try catch throw contained " Language Constructs syn keyword phpStatement die exit eval empty isset unset list instanceof insteadof contained " These special keywords have traditionally received special colors syn keyword phpSpecial function echo print new clone contained " Include & friends syn keyword phpInclude include include_once require require_once namespace use contained " Types syn keyword phpType bool[ean] int[eger] real double float string array object null self parent global this stdClass callable contained " Operator syn match phpOperator "[-=+%^&|*!.~?:]" contained display syn match phpOperator "[-+*/%^&|.]=" contained display syn match phpOperator "/[^*/]"me=e-1 contained display syn match phpOperator "\$" contained display syn match phpOperator "&&\|\" contained display syn match phpOperator "||\|\" contained display syn match phpOperator "[!=<>]=" contained display syn match phpOperator "[<>]" contained display syn match phpMemberSelector "->" contained display syn match phpVarSelector "\$" contained display " highlight object variables inside strings syn match phpMethodsVar "->\h\w*" contained contains=phpMethods,phpMemberSelector display containedin=phpStringDouble " Identifier syn match phpIdentifier "$\h\w*" contained contains=phpEnvVar,phpIntVar,phpVarSelector display syn match phpIdentifierSimply "${\h\w*}" contains=phpOperator,phpParent contained display syn region phpIdentifierComplex matchgroup=phpParent start="{\$"rs=e-1 end="}" contains=phpIdentifier,phpMemberSelector,phpVarSelector,phpIdentifierArray contained extend syn region phpIdentifierArray matchgroup=phpParent start="\[" end="]" contains=@phpClInside contained " Boolean syn keyword phpBoolean true false contained " Number syn match phpNumber "-\=\<\d\+\>" contained display syn match phpNumber "\<0x\x\{1,8}\>" contained display syn match phpNumber "\<0b[01]\+\>" contained display " Float syn match phpNumber "\(-\=\<\d+\|-\=\)\.\d\+\>" contained display " SpecialChar syn match phpSpecialChar "\\[fnrtv\\]" contained display syn match phpSpecialChar "\\\d\{3}" contained contains=phpOctalError display syn match phpSpecialChar "\\x\x\{2}" contained display " corrected highlighting for an escaped '\$' inside a double-quoted string syn match phpSpecialChar "\\\$" contained display syn match phpSpecialChar +\\"+ contained display syn match phpStrEsc "\\\\" contained display syn match phpStrEsc "\\'" contained display " Error syn match phpOctalError "[89]" contained display if exists("php_parent_error_close") syn match phpParentError "[)\]}]" contained display endif " Todo syn keyword phpTodo todo fixme xxx note contained " Comment if exists("php_parent_error_open") syn region phpComment start="/\*" end="\*/" contained contains=phpTodo,@Spell else syn region phpComment start="/\*" end="\*/" contained contains=phpTodo,@Spell extend endif if version >= 600 syn match phpComment "#.\{-}\(?>\|$\)\@=" contained contains=phpTodo,@Spell syn match phpComment "//.\{-}\(?>\|$\)\@=" contained contains=phpTodo,@Spell else syn match phpComment "#.\{-}$" contained contains=phpTodo,@Spell syn match phpComment "#.\{-}?>"me=e-2 contained contains=phpTodo,@Spell syn match phpComment "//.\{-}$" contained contains=phpTodo,@Spell syn match phpComment "//.\{-}?>"me=e-2 contained contains=phpTodo,@Spell endif " String if exists("php_parent_error_open") syn region phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell,@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex,phpStrEsc contained keepend syn region phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+ contains=@Spell,@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex,phpStrEsc contained keepend syn region phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@Spell,@phpAddStrings,phpStrEsc contained keepend else syn region phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell,@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex,phpStrEsc contained extend keepend syn region phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+ contains=@Spell,@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex,phpStrEsc contained extend keepend syn region phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@Spell,@phpAddStrings,phpStrEsc contained keepend extend endif " HereDoc syn case match syn region phpHereDoc matchgroup=Delimiter start="\(<<<\)\@<=\z(\I\i*\)$" end="^\z1\(;\=$\)\@=" contained contains=@Spell,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar,phpStrEsc keepend extend syn region phpHereDoc matchgroup=Delimiter start=+\(<<<\)\@<="\z(\I\i*\)"$+ end="^\z1\(;\=$\)\@=" contained contains=@Spell,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar,phpStrEsc keepend extend " including HTML,JavaScript,SQL even if not enabled via options syn region phpHereDoc matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(html\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@=" contained contains=@htmlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar,phpStrEsc keepend extend syn region phpHereDoc matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(sql\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@=" contained contains=@sqlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar,phpStrEsc keepend extend syn region phpHereDoc matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@=" contained contains=@htmlJavascript,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpSpecialChar,phpMethodsVar,phpStrEsc keepend extend syn case ignore " NowDoc syn region phpNowDoc matchgroup=Delimiter start=+\(<<<\)\@<='\z(\I\i*\)'$+ end="^\z1\(;\=$\)\@=" contained keepend extend " Parent if exists("php_parent_error_close") || exists("php_parent_error_open") syn match phpParent "[{}]" contained syn region phpParent matchgroup=Delimiter start="(" end=")" contained contains=@phpClInside transparent syn region phpParent matchgroup=Delimiter start="\[" end="\]" contained contains=@phpClInside transparent if !exists("php_parent_error_close") syn match phpParent "[\])]" contained endif else syn match phpParent "[({[\]})]" contained endif " Clusters syn cluster phpClConst contains=phpFunctions,phpClasses,phpIdentifier,phpStatement,phpOperator,phpStringSingle,phpStringDouble,phpBacktick,phpNumber,phpType,phpBoolean,phpStructure,phpMethodsVar,phpConstants,phpException,phpSuperglobals,phpMagicConstants,phpServerVars syn cluster phpClInside contains=@phpClConst,phpComment,phpParent,phpParentError,phpInclude,phpHereDoc,phpNowDoc syn cluster phpClFunction contains=@phpClInside,phpDefine,phpParentError,phpStorageClass,phpSpecial syn cluster phpClTop contains=@phpClFunction,phpFoldFunction,phpFoldClass,phpFoldInterface,phpFoldTry,phpFoldCatch " Php Region if exists("php_parent_error_open") syn region phpRegion matchgroup=Delimiter start="" contains=@phpClTop else syn region phpRegion matchgroup=Delimiter start="" contains=@phpClTop keepend endif " Fold if exists("php_folding") && php_folding==1 " match one line constructs here and skip them at folding syn keyword phpSCKeyword abstract final private protected public static contained syn keyword phpFCKeyword function contained syn match phpDefine "\(\s\|^\)\(abstract\s\+\|final\s\+\|private\s\+\|protected\s\+\|public\s\+\|static\s\+\)*function\(\s\+.*[;}]\)\@=" contained contains=phpSCKeyword syn match phpStructure "\(\s\|^\)\(abstract\s\+\|final\s\+\)*class\(\s\+.*}\)\@=" contained syn match phpStructure "\(\s\|^\)interface\(\s\+.*}\)\@=" contained syn match phpException "\(\s\|^\)try\(\s\+.*}\)\@=" contained syn match phpException "\(\s\|^\)catch\(\s\+.*}\)\@=" contained set foldmethod=syntax syn region phpFoldHtmlInside matchgroup=Delimiter start="?>" end="" end="\s*$" syn sync match phpRegionSync grouphere NONE "^\s*%>\s*$" syn sync match phpRegionSync grouphere phpRegion "function\s.*(.*\$" elseif php_sync_method>0 exec "syn sync minlines=" . php_sync_method else exec "syn sync fromstart" endif " Define the default highlighting. " For version 5.8 and later: only when an item doesn't have highlighting yet if !exists("did_php_syn_inits") hi def link phpComment Comment hi def link phpSuperglobals Constant hi def link phpMagicConstants Constant hi def link phpServerVars Constant hi def link phpConstants Constant hi def link phpBoolean Constant hi def link phpNumber Constant hi def link phpStringSingle String hi def link phpStringDouble String hi def link phpBacktick String hi def link phpHereDoc String hi def link phpNowDoc String hi def link phpFunctions Identifier hi def link phpClasses Identifier hi def link phpMethods Identifier hi def link phpIdentifier Identifier hi def link phpIdentifierSimply Identifier hi def link phpStatement Statement hi def link phpStructure Statement hi def link phpException Statement hi def link phpOperator Operator hi def link phpVarSelector Operator hi def link phpInclude PreProc hi def link phpDefine PreProc hi def link phpSpecial PreProc hi def link phpFCKeyword PreProc hi def link phpType Type hi def link phpSCKeyword Type hi def link phpMemberSelector Type hi def link phpSpecialChar Special hi def link phpStrEsc Special hi def link phpParent Special hi def link phpParentError Error hi def link phpOctalError Error hi def link phpTodo Todo endif let b:current_syntax = "php" if main_syntax == 'php' unlet main_syntax endif " vim: ts=8 sts=2 sw=2 expandtab