" Vim syntax file
" Language: php PHP 3/4/5
-" Maintainer: Peter Hodge <toomuchphp-vim@yahoo.com>
-" Last Change: June 9, 2006
-" URL: http://www.vim.org/scripts/script.php?script_id=1571
-"
-" Former Maintainer: Debian VIM Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
-" Former URL: http://svn.debian.org/wsvn/pkg-vim/trunk/runtime/syntax/php.vim?op=file&rev=0&sc=0
+" Maintainer: Jason Woofenden <jason@jasonwoof.com>
+" Last Change: Oct 20, 2011
+" URL: https://gitorious.org/jasonwoof/vim-syntax/blobs/master/php.vim
+" Former Maintainers: Peter Hodge <toomuchphp-vim@yahoo.com>
+" Debian VIM Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
"
" 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
" 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).
-"
-"
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
syn cluster phpAddStrings add=@htmlTop
endif
+" make sure we can use \ at the begining of the line to do a continuation
+let s:cpo_save = &cpo
+set cpo&vim
+
syn case match
" Env Variables
syn case ignore
-syn keyword phpConstant __LINE__ __FILE__ __FUNCTION__ __METHOD__ __CLASS__ contained
+syn keyword phpConstant __LINE__ __FILE__ __FUNCTION__ __METHOD__ __CLASS__ __DIR__ __NAMESPACE__ contained
" Function and Methods ripped from php_manual_de.tar.gz Jan 2003
syn keyword phpFunctions ingres_autocommit ingres_close ingres_commit ingres_connect ingres_fetch_array ingres_fetch_object ingres_fetch_row ingres_field_length ingres_field_name ingres_field_nullable ingres_field_precision ingres_field_scale ingres_field_type ingres_num_fields ingres_num_rows ingres_pconnect ingres_query ingres_rollback contained
syn keyword phpFunctions ircg_channel_mode ircg_disconnect ircg_fetch_error_msg ircg_get_username ircg_html_encode ircg_ignore_add ircg_ignore_del ircg_is_conn_alive ircg_join ircg_kick ircg_lookup_format_messages ircg_msg ircg_nick ircg_nickname_escape ircg_nickname_unescape ircg_notice ircg_part ircg_pconnect ircg_register_format_messages ircg_set_current ircg_set_file ircg_set_on_die ircg_topic ircg_whois contained
syn keyword phpFunctions java_last_exception_clear java_last_exception_get contained
+syn keyword phpFunctions json_decode json_encode json_last_error contained
syn keyword phpFunctions ldap_8859_to_t61 ldap_add ldap_bind ldap_close ldap_compare ldap_connect ldap_count_entries ldap_delete ldap_dn2ufn ldap_err2str ldap_errno ldap_error ldap_explode_dn ldap_first_attribute ldap_first_entry ldap_first_reference ldap_free_result ldap_get_attributes ldap_get_dn ldap_get_entries ldap_get_option ldap_get_values_len ldap_get_values ldap_list ldap_mod_add ldap_mod_del ldap_mod_replace ldap_modify ldap_next_attribute ldap_next_entry ldap_next_reference ldap_parse_reference ldap_parse_result ldap_read ldap_rename ldap_search ldap_set_option ldap_set_rebind_proc ldap_sort ldap_start_tls ldap_t61_to_8859 ldap_unbind contained
syn keyword phpFunctions lzf_compress lzf_decompress lzf_optimized_for contained
syn keyword phpFunctions ezmlm_hash mail contained
syn keyword phpLabel case default switch contained
" Statement
-syn keyword phpStatement return break continue exit contained
+syn keyword phpStatement return break continue exit goto contained
" Keyword
syn keyword phpKeyword var const contained
syn keyword phpType bool[ean] int[eger] real double float string array object NULL contained
" Structure
-syn keyword phpStructure extends implements instanceof parent self contained
+syn keyword phpStructure namespace extends implements instanceof parent self contained
" Operator
syn match phpOperator "[-=+%^&|*!.~?:]" contained display
syn region phpIdentifierComplex matchgroup=phpParent start="{\$"rs=e-1 end="}" contains=phpIdentifier,phpMemberSelector,phpVarSelector,phpIdentifierComplexP contained extend
syn region phpIdentifierComplexP matchgroup=phpParent start="\[" end="]" contains=@phpClInside contained
+" Interpolated indentifiers (inside strings)
+ syn match phpBrackets "[][}{]" contained display
+ " errors
+ syn match phpInterpSimpleError "\[[^]]*\]" contained display " fallback (if nothing else matches)
+ syn match phpInterpSimpleError "->[^a-zA-Z_]" contained display
+ " make sure these stay above the correct DollarCurlies so they don't take priority
+ syn match phpInterpBogusDollarCurley "${[^}]*}" contained display " fallback (if nothing else matches)
+ syn match phpinterpSimpleBracketsInner "\w\+" contained
+ syn match phpInterpSimpleBrackets "\[\h\w*]" contained contains=phpBrackets,phpInterpSimpleBracketsInner
+ syn match phpInterpSimpleBrackets "\[\d\+]" contained contains=phpBrackets,phpInterpSimpleBracketsInner
+ syn match phpInterpSimpleBrackets "\[0[xX]\x\+]" contained contains=phpBrackets,phpInterpSimpleBracketsInner
+ syn match phpInterpSimple "\$\h\w*\(\[[^]]*\]\|->\h\w*\)\?" contained contains=phpInterpSimpleBrackets,phpIdentifier,phpInterpSimpleError,phpMethods,phpMemberSelector display
+ syn match phpInterpVarname "\h\w*" contained
+ syn match phpInterpMethodName "\h\w*" contained " default color
+ syn match phpInterpSimpleCurly "\${\h\w*}" contains=phpInterpVarname contained extend
+ syn region phpInterpDollarCurley1Helper matchgroup=phpParent start="{" end="\[" contains=phpInterpVarname contained
+ syn region phpInterpDollarCurly1 matchgroup=phpParent start="\${\h\w*\["rs=s+1 end="]}" contains=phpInterpDollarCurley1Helper,@phpClConst contained extend
+
+ syn match phpInterpDollarCurley2Helper "{\h\w*->" contains=phpBrackets,phpInterpVarname,phpMemberSelector contained
+
+ syn region phpInterpDollarCurly2 matchgroup=phpParent start="\${\h\w*->"rs=s+1 end="}" contains=phpInterpDollarCurley2Helper,phpInterpMethodName contained
+
+ syn match phpInterpBogusDollarCurley "${\h\w*->}" contained display
+ syn match phpInterpBogusDollarCurley "${\h\w*\[]}" contained display
+
+ syn region phpInterpComplex matchgroup=phpParent start="{\$"rs=e-1 end="}" contains=phpIdentifier,phpMemberSelector,phpVarSelector,phpIdentifierComplexP contained extend
+ syn region phpIdentifierComplexP matchgroup=phpParent start="\[" end="]" contains=@phpClInside contained
+ " define a cluster to get all interpolation syntaxes for double-quoted strings
+ syn cluster phpInterpDouble contains=phpInterpSimple,phpInterpSimpleCurly,phpInterpDollarCurly1,phpInterpDollarCurly2,phpInterpBogusDollarCurley,phpInterpComplex
+
" Methoden
syn match phpMethodsVar "->\h\w*" contained contains=phpMethods,phpMemberSelector display
" Include
-syn keyword phpInclude include require include_once require_once contained
+syn keyword phpInclude include require include_once require_once use contained
" Peter Hodge - added 'clone' keyword
" Define
" Float
syn match phpFloat "\(-\=\<\d+\|-\=\)\.\d\+\>" contained display
-" SpecialChar
-syn match phpSpecialChar "\\[abcfnrtyv\\]" contained display
-syn match phpSpecialChar "\\\d\{3}" contained contains=phpOctalError display
-syn match phpSpecialChar "\\x\x\{2}" contained display
+" Backslash escapes
+ syn case match
+ " for double quotes and heredoc
+ syn match phpBackslashSequences "\\[fnrtv\\\"$]" contained display
+ syn match phpBackslashSequences "\\\d\{1,3}" contained contains=phpOctalError display
+ syn match phpBackslashSequences "\\x\x\{1,2}" contained display
+ " additional sequence for double quotes only
+ syn match phpBackslashDoubleQuote "\\[\"]" contained display
+ " for single quotes only
+ syn match phpBackslashSingleQuote "\\[\\']" contained display
+ syn case ignore
+
" Error
syn match phpOctalError "[89]" contained display
" String
if exists("php_parent_error_open")
- syn region phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained keepend
- syn region phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+ contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained keepend
- syn region phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@phpAddStrings contained keepend
+ syn region phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@phpAddStrings,phpBackslashSequences,phpBackslashDoubleQuote,@phpInterpDouble contained keepend
+ syn region phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+ contains=@phpAddStrings,phpIdentifier,phpBackslashSequences,phpIdentifierSimply,phpIdentifierComplex contained keepend
+ syn region phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@phpAddStrings,phpBackslashSingleQuote contained keepend
else
- syn region phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained extend keepend
- syn region phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+ contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained extend keepend
- syn region phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@phpAddStrings contained keepend extend
+ syn region phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@phpAddStrings,phpBackslashSequences,phpBackslashDoubleQuote,@phpInterpDouble contained extend keepend
+ syn region phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+ contains=@phpAddStrings,phpIdentifier,phpBackslashSequences,phpIdentifierSimply,phpIdentifierComplex contained extend keepend
+ syn region phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=@phpAddStrings,phpBackslashSingleQuote contained keepend extend
endif
-" HereDoc
+" HereDoc and NowDoc
if version >= 600
syn case match
- syn region phpHereDoc matchgroup=Delimiter start="\(<<<\)\@<=\z(\I\i*\)$" end="^\z1\(;\=$\)\@=" contained contains=phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
+
+ " HereDoc
+ syn region phpHereDoc matchgroup=Delimiter start="\(<<<\)\@<=\(\"\=\)\z(\I\i*\)\2$" end="^\z1\(;\=$\)\@=" contained contains=phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar keepend extend
+" including HTML,JavaScript,SQL even if not enabled via options
+ syn region phpHereDoc matchgroup=Delimiter start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(html\)\c\(\i*\)\)\2$" end="^\z1\(;\=$\)\@=" contained contains=@htmlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar keepend extend
+ syn region phpHereDoc matchgroup=Delimiter start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(sql\)\c\(\i*\)\)\2$" end="^\z1\(;\=$\)\@=" contained contains=@sqlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar keepend extend
+ syn region phpHereDoc matchgroup=Delimiter start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)\2$" end="^\z1\(;\=$\)\@=" contained contains=@htmlJavascript,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar keepend extend
+
+ " NowDoc
+ syn region phpNowDoc matchgroup=Delimiter start="\(<<<\)\@<='\z(\I\i*\)'$" end="^\z1\(;\=$\)\@=" contained 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 keepend extend
- syn region phpHereDoc matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(sql\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@=" contained contains=@sqlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
- syn region phpHereDoc matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@=" contained contains=@htmlJavascript,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
+ syn region phpNowDoc matchgroup=Delimiter start="\(<<<\)\@<='\z(\(\I\i*\)\=\(html\)\c\(\i*\)\)'$" end="^\z1\(;\=$\)\@=" contained contains=@htmlTop keepend extend
+ syn region phpNowDoc matchgroup=Delimiter start="\(<<<\)\@<='\z(\(\I\i*\)\=\(sql\)\c\(\i*\)\)'$" end="^\z1\(;\=$\)\@=" contained contains=@sqlTop keepend extend
+ syn region phpNowDoc matchgroup=Delimiter start="\(<<<\)\@<='\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)'$" end="^\z1\(;\=$\)\@=" contained contains=@htmlJavascript keepend extend
syn case ignore
endif
endif
syn cluster phpClConst contains=phpFunctions,phpIdentifier,phpConditional,phpRepeat,phpStatement,phpOperator,phpRelation,phpStringSingle,phpStringDouble,phpBacktick,phpNumber,phpFloat,phpKeyword,phpType,phpBoolean,phpStructure,phpMethodsVar,phpConstant,phpCoreConstant,phpException
-syn cluster phpClInside contains=@phpClConst,phpComment,phpLabel,phpParent,phpParentError,phpInclude,phpHereDoc
+syn cluster phpClInside contains=@phpClConst,phpComment,phpLabel,phpParent,phpParentError,phpInclude,phpHereDoc,phpNowDoc
syn cluster phpClFunction contains=@phpClInside,phpDefine,phpParentError,phpStorageClass
syn cluster phpClTop contains=@phpClFunction,phpFoldFunction,phpFoldClass,phpFoldInterface,phpFoldTry,phpFoldCatch
syn keyword phpStorageClass final global private protected public static contained
endif
+" TODO: fold on "trait". For now just make sure it gets colored:
+syn keyword phpStructure trait
+
" ================================================================
" Peter Hodge - June 9, 2006
" Some of these changes (highlighting isset/unset/echo etc) are not so
" critical, but they make things more colourful. :-)
-" corrected highlighting for an escaped '\$' inside a double-quoted string
-syn match phpSpecialChar "\\\$" contained display
-
-" highlight object variables inside strings
-syn match phpMethodsVar "->\h\w*" contained contains=phpMethods,phpMemberSelector display containedin=phpStringDouble
-
" highlight constant E_STRICT
syntax case match
syntax keyword phpCoreConstant E_STRICT contained
HiLink phpType Type
HiLink phpInclude Include
HiLink phpDefine Define
- HiLink phpSpecialChar SpecialChar
+ HiLink phpBackslashSequences SpecialChar
+ HiLink phpBackslashDoubleQuote SpecialChar
+ HiLink phpBackslashSingleQuote SpecialChar
HiLink phpParent Delimiter
+ HiLink phpBrackets Delimiter
HiLink phpIdentifierConst Delimiter
HiLink phpParentError Error
HiLink phpOctalError Error
+ HiLink phpInterpSimpleError Error
+ HiLink phpInterpBogusDollarCurley Error
+ HiLink phpInterpDollarCurly1 Error
+ HiLink phpInterpDollarCurly2 Error
+ HiLink phpInterpSimpleBracketsInner String
+ HiLink phpInterpSimpleCurly Delimiter
+ HiLink phpInterpVarname Identifier
HiLink phpTodo Todo
HiLink phpMemberSelector Structure
if exists("php_oldStyle")
hi phpIdentifier guifg=DarkGray ctermfg=Brown
hi phpIdentifierSimply guifg=DarkGray ctermfg=Brown
else
- HiLink phpIntVar Identifier
- HiLink phpEnvVar Identifier
- HiLink phpOperator Operator
- HiLink phpVarSelector Operator
- HiLink phpRelation Operator
- HiLink phpIdentifier Identifier
- HiLink phpIdentifierSimply Identifier
+ HiLink phpIntVar Identifier
+ HiLink phpEnvVar Identifier
+ HiLink phpOperator Operator
+ HiLink phpVarSelector Operator
+ HiLink phpRelation Operator
+ HiLink phpIdentifier Identifier
+ HiLink phpIdentifierSimply Identifier
endif
delcommand HiLink
unlet main_syntax
endif
+" put cpoptions back the way we found it
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
" vim: ts=8 sts=2 sw=2 expandtab