Created
July 28, 2015 18:57
-
-
Save pauljz/568542bf37b916a4526e to your computer and use it in GitHub Desktop.
embperl vim syntax highlighting
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" Vim syntax file | |
" Language: HTML | |
" Maintainer: Claudio Fleiner <[email protected]> | |
" URL: http://www.fleiner.com/vim/syntax/html.vim | |
" Last Change: 2006 Jun 19 | |
" Please check :help html.vim for some comments and a description of the options | |
" For version 5.x: Clear all syntax items | |
" For version 6.x: Quit when a syntax file was already loaded | |
if !exists("main_syntax") | |
if version < 600 | |
syntax clear | |
elseif exists("b:current_syntax") | |
finish | |
endif | |
let main_syntax = 'html' | |
endif | |
" don't use standard HiLink, it will not work with included syntax files | |
if version < 508 | |
command! -nargs=+ HtmlHiLink hi link <args> | |
else | |
command! -nargs=+ HtmlHiLink hi def link <args> | |
endif | |
syntax spell toplevel | |
syn case ignore | |
" mark illegal characters | |
syn match htmlError "[<>&]" | |
" tags | |
syn region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc | |
syn region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc | |
syn match htmlValue contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1 contains=javaScriptExpression,@htmlPreproc | |
syn region htmlEndTag start=+</+ end=+>+ contains=htmlTagN,htmlTagError | |
syn region htmlTag start=+<[^/]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster | |
syn match htmlTagN contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster | |
syn match htmlTagN contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster | |
syn match htmlTagError contained "[^>]<"ms=s+1 | |
" tag names | |
syn keyword htmlTagName contained address applet area a base basefont | |
syn keyword htmlTagName contained big blockquote br caption center | |
syn keyword htmlTagName contained cite code dd dfn dir div dl dt font | |
syn keyword htmlTagName contained form hr html img | |
syn keyword htmlTagName contained input isindex kbd li link map menu | |
syn keyword htmlTagName contained meta ol option param pre p samp span | |
syn keyword htmlTagName contained select small strike sub sup | |
syn keyword htmlTagName contained table td textarea th tr tt ul var xmp | |
syn match htmlTagName contained "\<\(b\|i\|u\|h[1-6]\|em\|strong\|head\|body\|title\)\>" | |
" new html 4.0 tags | |
syn keyword htmlTagName contained abbr acronym bdo button col label | |
syn keyword htmlTagName contained colgroup del fieldset iframe ins legend | |
syn keyword htmlTagName contained object optgroup q s tbody tfoot thead | |
" legal arg names | |
syn keyword htmlArg contained action | |
syn keyword htmlArg contained align alink alt archive background bgcolor | |
syn keyword htmlArg contained border bordercolor cellpadding | |
syn keyword htmlArg contained cellspacing checked class clear code codebase color | |
syn keyword htmlArg contained cols colspan content coords enctype face | |
syn keyword htmlArg contained gutter height hspace id | |
syn keyword htmlArg contained link lowsrc marginheight | |
syn keyword htmlArg contained marginwidth maxlength method name prompt | |
syn keyword htmlArg contained rel rev rows rowspan scrolling selected shape | |
syn keyword htmlArg contained size src start target text type url | |
syn keyword htmlArg contained usemap ismap valign value vlink vspace width wrap | |
syn match htmlArg contained "\<\(http-equiv\|href\|title\)="me=e-1 | |
" Netscape extensions | |
syn keyword htmlTagName contained frame noframes frameset nobr blink | |
syn keyword htmlTagName contained layer ilayer nolayer spacer | |
syn keyword htmlArg contained frameborder noresize pagex pagey above below | |
syn keyword htmlArg contained left top visibility clip id noshade | |
syn match htmlArg contained "\<z-index\>" | |
" Microsoft extensions | |
syn keyword htmlTagName contained marquee | |
" html 4.0 arg names | |
syn match htmlArg contained "\<\(accept-charset\|label\)\>" | |
syn keyword htmlArg contained abbr accept accesskey axis char charoff charset | |
syn keyword htmlArg contained cite classid codetype compact data datetime | |
syn keyword htmlArg contained declare defer dir disabled for frame | |
syn keyword htmlArg contained headers hreflang lang language longdesc | |
syn keyword htmlArg contained multiple nohref nowrap object profile readonly | |
syn keyword htmlArg contained rules scheme scope span standby style | |
syn keyword htmlArg contained summary tabindex valuetype version | |
" special characters | |
syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};" | |
" Comments (the real ones or the old netscape ones) | |
if exists("html_wrong_comments") | |
syn region htmlComment start=+<!--+ end=+--\s*>+ | |
else | |
syn region htmlComment start=+<!+ end=+>+ contains=htmlCommentPart,htmlCommentError | |
syn match htmlCommentError contained "[^><!]" | |
syn region htmlCommentPart contained start=+--+ end=+--\s*+ contains=@htmlPreProc | |
endif | |
syn region htmlComment start=+<!DOCTYPE+ keepend end=+>+ | |
" server-parsed commands | |
syn region htmlPreProc start=+<!--#+ end=+-->+ contains=htmlPreStmt,htmlPreError,htmlPreAttr | |
syn match htmlPreStmt contained "<!--#\(config\|echo\|exec\|fsize\|flastmod\|include\|printenv\|set\|if\|elif\|else\|endif\|geoguide\)\>" | |
syn match htmlPreError contained "<!--#\S*"ms=s+4 | |
syn match htmlPreAttr contained "\w\+=[^"]\S\+" contains=htmlPreProcAttrError,htmlPreProcAttrName | |
syn region htmlPreAttr contained start=+\w\+="+ skip=+\\\\\|\\"+ end=+"+ contains=htmlPreProcAttrName keepend | |
syn match htmlPreProcAttrError contained "\w\+="he=e-1 | |
syn match htmlPreProcAttrName contained "\(expr\|errmsg\|sizefmt\|timefmt\|var\|cgi\|cmd\|file\|virtual\|value\)="he=e-1 | |
if !exists("html_no_rendering") | |
" rendering | |
syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc | |
syn region htmlBold start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic | |
syn region htmlBold start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic | |
syn region htmlBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic | |
syn region htmlBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlBoldItalicUnderline | |
syn region htmlBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlBoldItalicUnderline | |
syn region htmlBoldUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop | |
syn region htmlBoldUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop | |
syn region htmlBoldItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlBoldUnderlineItalic | |
syn region htmlUnderline start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlUnderlineBold,htmlUnderlineItalic | |
syn region htmlUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlUnderlineBoldItalic | |
syn region htmlUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlUnderlineBoldItalic | |
syn region htmlUnderlineItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlUnderlineItalicBold | |
syn region htmlUnderlineItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop,htmlUnderlineItalicBold | |
syn region htmlUnderlineItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop | |
syn region htmlUnderlineItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop | |
syn region htmlUnderlineBoldItalic contained start="<i\>" end="</i>"me=e-4 contains=@htmlTop | |
syn region htmlUnderlineBoldItalic contained start="<em\>" end="</em>"me=e-5 contains=@htmlTop | |
syn region htmlItalic start="<i\>" end="</i>"me=e-4 contains=@htmlTop,htmlItalicBold,htmlItalicUnderline | |
syn region htmlItalic start="<em\>" end="</em>"me=e-5 contains=@htmlTop | |
syn region htmlItalicBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlItalicBoldUnderline | |
syn region htmlItalicBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlItalicBoldUnderline | |
syn region htmlItalicBoldUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop | |
syn region htmlItalicUnderline contained start="<u\>" end="</u>"me=e-4 contains=@htmlTop,htmlItalicUnderlineBold | |
syn region htmlItalicUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop | |
syn region htmlItalicUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop | |
syn region htmlLink start="<a\>\_[^>]*\<href\>" end="</a>"me=e-4 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc | |
syn region htmlH1 start="<h1\>" end="</h1>"me=e-5 contains=@htmlTop | |
syn region htmlH2 start="<h2\>" end="</h2>"me=e-5 contains=@htmlTop | |
syn region htmlH3 start="<h3\>" end="</h3>"me=e-5 contains=@htmlTop | |
syn region htmlH4 start="<h4\>" end="</h4>"me=e-5 contains=@htmlTop | |
syn region htmlH5 start="<h5\>" end="</h5>"me=e-5 contains=@htmlTop | |
syn region htmlH6 start="<h6\>" end="</h6>"me=e-5 contains=@htmlTop | |
syn region htmlHead start="<head\>" end="</head>"me=e-7 end="<body\>"me=e-5 end="<h[1-6]\>"me=e-3 contains=htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,htmlTitle,javaScript,cssStyle,@htmlPreproc | |
syn region htmlTitle start="<title\>" end="</title>"me=e-8 contains=htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc | |
endif | |
syn keyword htmlTagName contained noscript | |
syn keyword htmlSpecialTagName contained script style | |
if main_syntax != 'java' || exists("java_javascript") | |
" JAVA SCRIPT | |
syn include @htmlJavaScript syntax/javascript.vim | |
unlet b:current_syntax | |
syn region javaScript start=+<script[^>]*>+ keepend end=+</script>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc | |
syn region htmlScriptTag contained start=+<script+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent | |
HtmlHiLink htmlScriptTag htmlTag | |
" html events (i.e. arguments that include javascript commands) | |
if exists("html_extended_events") | |
syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ contains=htmlEventSQ | |
syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ contains=htmlEventDQ | |
else | |
syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*'+ end=+'+ keepend contains=htmlEventSQ | |
syn region htmlEvent contained start=+\<on\a\+\s*=[\t ]*"+ end=+"+ keepend contains=htmlEventDQ | |
endif | |
syn region htmlEventSQ contained start=+'+ms=s+1 end=+'+me=s-1 contains=@htmlJavaScript | |
syn region htmlEventDQ contained start=+"+ms=s+1 end=+"+me=s-1 contains=@htmlJavaScript | |
HtmlHiLink htmlEventSQ htmlEvent | |
HtmlHiLink htmlEventDQ htmlEvent | |
" a javascript expression is used as an arg value | |
syn region javaScriptExpression contained start=+&{+ keepend end=+};+ contains=@htmlJavaScript,@htmlPreproc | |
endif | |
syn include @htmlEmbPerl syntax/perl.vim | |
unlet b:current_syntax | |
syn region perl start=+\[-+ keepend end=+-\]+ contains=@htmlEmbPerl | |
syn region perl start=+\[\$+ keepend end=+\$\]+ contains=@htmlEmbPerl | |
syn region perl start='\[+' keepend end='+\]' contains=@htmlEmbPerl | |
if main_syntax != 'java' || exists("java_vb") | |
" VB SCRIPT | |
syn include @htmlVbScript syntax/vb.vim | |
unlet b:current_syntax | |
syn region javaScript start=+<script [^>]*language *=[^>]*vbscript[^>]*>+ keepend end=+</script>+me=s-1 contains=@htmlVbScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc | |
endif | |
syn cluster htmlJavaScript add=@htmlPreproc | |
if main_syntax != 'java' || exists("java_css") | |
" embedded style sheets | |
syn keyword htmlArg contained media | |
syn include @htmlCss syntax/css.vim | |
unlet b:current_syntax | |
syn region cssStyle start=+<style+ keepend end=+</style>+ contains=@htmlCss,htmlTag,htmlEndTag,htmlCssStyleComment,@htmlPreproc | |
syn match htmlCssStyleComment contained "\(<!--\|-->\)" | |
syn region htmlCssDefinition matchgroup=htmlArg start='style="' keepend matchgroup=htmlString end='"' contains=css.*Attr,css.*Prop,cssComment,cssLength,cssColor,cssURL,cssImportant,cssError,cssString,@htmlPreproc | |
HtmlHiLink htmlStyleArg htmlString | |
endif | |
if main_syntax == "html" | |
" synchronizing (does not always work if a comment includes legal | |
" html tags, but doing it right would mean to always start | |
" at the first line, which is too slow) | |
syn sync match htmlHighlight groupthere NONE "<[/a-zA-Z]" | |
syn sync match htmlHighlight groupthere javaScript "<script" | |
syn sync match htmlHighlightSkip "^.*['\"].*$" | |
syn sync minlines=10 | |
endif | |
" The default highlighting. | |
if version >= 508 || !exists("did_html_syn_inits") | |
if version < 508 | |
let did_html_syn_inits = 1 | |
endif | |
HtmlHiLink htmlTag Function | |
HtmlHiLink htmlEndTag Identifier | |
HtmlHiLink htmlArg Type | |
HtmlHiLink htmlTagName htmlStatement | |
HtmlHiLink htmlSpecialTagName Exception | |
HtmlHiLink htmlValue String | |
HtmlHiLink htmlSpecialChar Special | |
if !exists("html_no_rendering") | |
HtmlHiLink htmlH1 Title | |
HtmlHiLink htmlH2 htmlH1 | |
HtmlHiLink htmlH3 htmlH2 | |
HtmlHiLink htmlH4 htmlH3 | |
HtmlHiLink htmlH5 htmlH4 | |
HtmlHiLink htmlH6 htmlH5 | |
HtmlHiLink htmlHead PreProc | |
HtmlHiLink htmlTitle Title | |
HtmlHiLink htmlBoldItalicUnderline htmlBoldUnderlineItalic | |
HtmlHiLink htmlUnderlineBold htmlBoldUnderline | |
HtmlHiLink htmlUnderlineItalicBold htmlBoldUnderlineItalic | |
HtmlHiLink htmlUnderlineBoldItalic htmlBoldUnderlineItalic | |
HtmlHiLink htmlItalicUnderline htmlUnderlineItalic | |
HtmlHiLink htmlItalicBold htmlBoldItalic | |
HtmlHiLink htmlItalicBoldUnderline htmlBoldUnderlineItalic | |
HtmlHiLink htmlItalicUnderlineBold htmlBoldUnderlineItalic | |
HtmlHiLink htmlLink Underlined | |
if !exists("html_my_rendering") | |
hi def htmlBold term=bold cterm=bold gui=bold | |
hi def htmlBoldUnderline term=bold,underline cterm=bold,underline gui=bold,underline | |
hi def htmlBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic | |
hi def htmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline | |
hi def htmlUnderline term=underline cterm=underline gui=underline | |
hi def htmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline | |
hi def htmlItalic term=italic cterm=italic gui=italic | |
endif | |
endif | |
HtmlHiLink htmlPreStmt PreProc | |
HtmlHiLink htmlPreError Error | |
HtmlHiLink htmlPreProc PreProc | |
HtmlHiLink htmlPreAttr String | |
HtmlHiLink htmlPreProcAttrName PreProc | |
HtmlHiLink htmlPreProcAttrError Error | |
HtmlHiLink htmlSpecial Special | |
HtmlHiLink htmlSpecialChar Special | |
HtmlHiLink htmlString String | |
HtmlHiLink htmlStatement Statement | |
HtmlHiLink htmlComment Comment | |
HtmlHiLink htmlCommentPart Comment | |
HtmlHiLink htmlValue String | |
HtmlHiLink htmlCommentError htmlError | |
HtmlHiLink htmlTagError htmlError | |
HtmlHiLink htmlEvent javaScript | |
HtmlHiLink htmlError Error | |
HtmlHiLink javaScript Special | |
HtmlHiLink javaScriptExpression javaScript | |
HtmlHiLink htmlCssStyleComment Comment | |
HtmlHiLink htmlCssDefinition Special | |
endif | |
delcommand HtmlHiLink | |
let b:current_syntax = "html" | |
if main_syntax == 'html' | |
unlet main_syntax | |
endif | |
" vim: ts=8 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" Vim syntax file | |
" Language: Perl 5 | |
" Maintainer: Andy Lester <[email protected]> | |
" URL: http://github.com/petdance/vim-perl/tree/master | |
" Last Change: 2010-08-10 | |
" Contributors: Andy Lester <[email protected]> | |
" Hinrik Örn Sigurðsson <[email protected]> | |
" Lukas Mai <l.mai.web.de> | |
" Nick Hibma <[email protected]> | |
" Sonia Heimann <[email protected]> | |
" and many others. | |
" | |
" Please download most recent version first before mailing | |
" any comments. | |
" | |
" The following parameters are available for tuning the | |
" perl syntax highlighting, with defaults given: | |
" | |
" unlet perl_include_pod | |
" unlet perl_no_scope_in_variables | |
" unlet perl_no_extended_vars | |
" unlet perl_string_as_statement | |
" unlet perl_no_sync_on_sub | |
" unlet perl_no_sync_on_global_var | |
" let perl_sync_dist = 100 | |
" unlet perl_fold | |
" unlet perl_fold_blocks | |
" let perl_nofold_packages = 1 | |
" let perl_nofold_subs = 1 | |
if exists("b:current_syntax") | |
finish | |
endif | |
" POD starts with ^=<word> and ends with ^=cut | |
if exists("perl_include_pod") | |
" Include a while extra syntax file | |
syn include @Pod syntax/pod.vim | |
unlet b:current_syntax | |
if exists("perl_fold") | |
syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend fold | |
syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend fold | |
else | |
syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend | |
syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend | |
endif | |
else | |
" Use only the bare minimum of rules | |
if exists("perl_fold") | |
syn region perlPOD start="^=[a-z]" end="^=cut" fold | |
else | |
syn region perlPOD start="^=[a-z]" end="^=cut" | |
endif | |
endif | |
syn cluster perlTop contains=TOP | |
syn region perlGenericBlock matchgroup=perlGenericBlock start="{" end="}" contained transparent | |
" All keywords | |
" | |
syn match perlConditional "\<\%(if\|elsif\|unless\|given\|when\|default\)\>" | |
syn match perlConditional "\<else\>" nextgroup=perlElseIfError skipwhite skipnl skipempty | |
syn match perlRepeat "\<\%(while\|for\%(each\)\=\|do\|until\|continue\)\>" | |
syn match perlOperator "\<\%(defined\|undef\|eq\|ne\|[gl][et]\|cmp\|not\|and\|or\|xor\|not\|bless\|ref\|do\)\>" | |
syn match perlControl "\<\%(BEGIN\|CHECK\|INIT\|END\|UNITCHECK\)\>" | |
syn match perlStatementStorage "\<\%(my\|our\|local\|state\)\>" | |
syn match perlStatementControl "\<\%(return\|last\|next\|redo\|goto\|break\)\>" | |
syn match perlStatementScalar "\<\%(chom\=p\|chr\|crypt\|r\=index\|lc\%(first\)\=\|length\|ord\|pack\|sprintf\|substr\|uc\%(first\)\=\)\>" | |
syn match perlStatementRegexp "\<\%(pos\|quotemeta\|split\|study\)\>" | |
syn match perlStatementNumeric "\<\%(abs\|atan2\|cos\|exp\|hex\|int\|log\|oct\|rand\|sin\|sqrt\|srand\)\>" | |
syn match perlStatementList "\<\%(splice\|unshift\|shift\|push\|pop\|join\|reverse\|grep\|map\|sort\|unpack\)\>" | |
syn match perlStatementHash "\<\%(delete\|each\|exists\|keys\|values\)\>" | |
syn match perlStatementIOfunc "\<\%(syscall\|dbmopen\|dbmclose\)\>" | |
syn match perlStatementFiledesc "\<\%(binmode\|close\%(dir\)\=\|eof\|fileno\|getc\|lstat\|printf\=\|read\%(dir\|line\|pipe\)\|rewinddir\|say\|select\|stat\|tell\%(dir\)\=\|write\)\>" nextgroup=perlFiledescStatementNocomma skipwhite | |
syn match perlStatementFiledesc "\<\%(fcntl\|flock\|ioctl\|open\%(dir\)\=\|read\|seek\%(dir\)\=\|sys\%(open\|read\|seek\|write\)\|truncate\)\>" nextgroup=perlFiledescStatementComma skipwhite | |
syn match perlStatementVector "\<vec\>" | |
syn match perlStatementFiles "\<\%(ch\%(dir\|mod\|own\|root\)\|glob\|link\|mkdir\|readlink\|rename\|rmdir\|symlink\|umask\|unlink\|utime\)\>" | |
syn match perlStatementFiles "-[rwxoRWXOezsfdlpSbctugkTBMAC]\>" | |
syn match perlStatementFlow "\<\%(caller\|die\|dump\|eval\|exit\|wantarray\)\>" | |
syn match perlStatementInclude "\<require\>" | |
syn match perlStatementInclude "\<\%(use\|no\)\s\+\%(\%(attributes\|attrs\|autouse\|parent\|base\|big\%(int\|num\|rat\)\|blib\|bytes\|charnames\|constant\|diagnostics\|encoding\%(::warnings\)\=\|feature\|fields\|filetest\|if\|integer\|less\|lib\|locale\|mro\|open\|ops\|overload\|re\|sigtrap\|sort\|strict\|subs\|threads\%(::shared\)\=\|utf8\|vars\|version\|vmsish\|warnings\%(::register\)\=\)\>\)\=" | |
syn match perlStatementProc "\<\%(alarm\|exec\|fork\|get\%(pgrp\|ppid\|priority\)\|kill\|pipe\|set\%(pgrp\|priority\)\|sleep\|system\|times\|wait\%(pid\)\=\)\>" | |
syn match perlStatementSocket "\<\%(acept\|bind\|connect\|get\%(peername\|sock\%(name\|opt\)\)\|listen\|recv\|send\|setsockopt\|shutdown\|socket\%(pair\)\=\)\>" | |
syn match perlStatementIPC "\<\%(msg\%(ctl\|get\|rcv\|snd\)\|sem\%(ctl\|get\|op\)\|shm\%(ctl\|get\|read\|write\)\)\>" | |
syn match perlStatementNetwork "\<\%(\%(end\|[gs]et\)\%(host\|net\|proto\|serv\)ent\|get\%(\%(host\|net\)by\%(addr\|name\)\|protoby\%(name\|number\)\|servby\%(name\|port\)\)\)\>" | |
syn match perlStatementPword "\<\%(get\%(pw\%(uid\|nam\)\|gr\%(gid\|nam\)\|login\)\)\|\%(end\|[gs]et\)\%(pw\|gr\)ent\>" | |
syn match perlStatementTime "\<\%(gmtime\|localtime\|time\)\>" | |
syn match perlStatementMisc "\<\%(warn\|formline\|reset\|scalar\|prototype\|lock\|tied\=\|untie\)\>" | |
syn keyword perlTodo TODO TBD FIXME XXX NOTE contained | |
syn region perlStatementIndirObjWrap matchgroup=perlStatementIndirObj start="\<\%(map\|grep\|sort\|print\|system\|exec\)\>\s*{" end="}" contains=@perlTop,perlGenericBlock | |
syn match perlLabel "^\s*\h\w*\s*::\@!\%(\<v\d\+\s*:\)\@<!" | |
" Perl Identifiers. | |
" | |
" Should be cleaned up to better handle identifiers in particular situations | |
" (in hash keys for example) | |
" | |
" Plain identifiers: $foo, @foo, $#foo, %foo, &foo and dereferences $$foo, @$foo, etc. | |
" We do not process complex things such as @{${"foo"}}. Too complicated, and | |
" too slow. And what is after the -> is *not* considered as part of the | |
" variable - there again, too complicated and too slow. | |
" Special variables first ($^A, ...) and ($|, $', ...) | |
syn match perlVarPlain "$^[ACDEFHILMNOPRSTVWX]\=" | |
syn match perlVarPlain "$[\\\"\[\]'&`+*.,;=%~!?@#$<>(-]" | |
syn match perlVarPlain "%+" | |
syn match perlVarPlain "$\%(0\|[1-9]\d*\)" | |
" Same as above, but avoids confusion in $::foo (equivalent to $main::foo) | |
syn match perlVarPlain "$::\@!" | |
" These variables are not recognized within matches. | |
syn match perlVarNotInMatches "$[|)]" | |
" This variable is not recognized within matches delimited by m//. | |
syn match perlVarSlash "$/" | |
" And plain identifiers | |
syn match perlPackageRef "[$@#%*&]\%(\%(::\|'\)\=\I\i*\%(\%(::\|'\)\I\i*\)*\)\=\%(::\|'\)\I"ms=s+1,me=e-1 contained | |
" To not highlight packages in variables as a scope reference - i.e. in | |
" $pack::var, pack:: is a scope, just set "perl_no_scope_in_variables" | |
" If you don't want complex things like @{${"foo"}} to be processed, | |
" just set the variable "perl_no_extended_vars"... | |
if !exists("perl_no_scope_in_variables") | |
syn match perlVarPlain "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod | |
syn match perlVarPlain2 "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef | |
syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod | |
else | |
syn match perlVarPlain "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod | |
syn match perlVarPlain2 "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" | |
syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod | |
endif | |
if !exists("perl_no_extended_vars") | |
syn cluster perlExpr contains=perlStatementIndirObjWrap,perlStatementScalar,perlStatementRegexp,perlStatementNumeric,perlStatementList,perlStatementHash,perlStatementFiles,perlStatementTime,perlStatementMisc,perlVarPlain,perlVarPlain2,perlVarNotInMatches,perlVarSlash,perlVarBlock,perlVarBlock2,perlShellCommand,perlFloat,perlNumber,perlStringUnexpanded,perlString,perlQQ,perlArrow,perlGenericBlock | |
syn region perlArrow matchgroup=perlArrow start="->\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained | |
syn region perlArrow matchgroup=perlArrow start="->\s*\[" end="\]" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained | |
syn region perlArrow matchgroup=perlArrow start="->\s*{" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained | |
syn match perlArrow "->\s*{\s*\I\i*\s*}" contains=perlVarSimpleMemberName nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained | |
syn region perlArrow matchgroup=perlArrow start="->\s*\$*\I\i*\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained | |
syn region perlVarBlock matchgroup=perlVarPlain start="\%($#\|[$@]\)\$*{" skip="\\}" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod | |
syn region perlVarBlock2 matchgroup=perlVarPlain start="[%&*]\$*{" skip="\\}" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod | |
syn match perlVarPlain2 "[%&*]\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod | |
syn match perlVarPlain "\%(\$#\|[@$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod | |
syn region perlVarMember matchgroup=perlVarPlain start="\%(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod | |
syn match perlVarSimpleMember "\%(->\)\={\s*\I\i*\s*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contains=perlVarSimpleMemberName contained | |
syn match perlVarSimpleMemberName "\I\i*" contained | |
syn region perlVarMember matchgroup=perlVarPlain start="\%(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod | |
syn match perlPackageConst "__PACKAGE__" nextgroup=perlMethod | |
syn match perlMethod "->\$*\I\i*" contained nextgroup=perlVarSimpleMember,perlVarMember,perlMethod | |
endif | |
" File Descriptors | |
syn match perlFiledescRead "<\h\w*>" | |
syn match perlFiledescStatementComma "(\=\s*\u\w*\s*,"me=e-1 transparent contained contains=perlFiledescStatement | |
syn match perlFiledescStatementNocomma "(\=\s*\u\w*\s*[^, \t]"me=e-1 transparent contained contains=perlFiledescStatement | |
syn match perlFiledescStatement "\u\w*" contained | |
" Special characters in strings and matches | |
syn match perlSpecialString "\\\%(\o\{1,3}\|x\%({\x\+}\|\x\{1,2}\)\|c.\|[^cx]\)" contained extend | |
syn match perlSpecialStringU2 "\\." extend contained transparent contains=NONE | |
syn match perlSpecialStringU "\\\\" contained | |
syn match perlSpecialMatch "\\[1-9]" contained extend | |
syn match perlSpecialMatch "\\g\%(\d\+\|{\%(-\=\d\+\|\h\w*\)}\)" contained | |
syn match perlSpecialMatch "\\k\%(<\h\w*>\|'\h\w*'\)" contained | |
syn match perlSpecialMatch "{\d\+\%(,\%(\d\+\)\=\)\=}" contained | |
syn match perlSpecialMatch "\[[]-]\=[^\[\]]*[]-]\=\]" contained | |
syn match perlSpecialMatch "[+*()?.]" contained | |
syn match perlSpecialMatch "(?[#:=!]" contained | |
syn match perlSpecialMatch "(?[impsx]*\%(-[imsx]\+\)\=)" contained | |
syn match perlSpecialMatch "(?\%([-+]\=\d\+\|R\))" contained | |
syn match perlSpecialMatch "(?\%(&\|P[>=]\)\h\w*)" contained | |
syn match perlSpecialMatch "(\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\=\|\%(MARK\|\):[^)]*\|COMMIT\|F\%(AIL\)\=\|ACCEPT\))" contained | |
" Possible errors | |
" | |
" Highlight lines with only whitespace (only in blank delimited here documents) as errors | |
syn match perlNotEmptyLine "^\s\+$" contained | |
" Highlight '} else if (...) {', it should be '} else { if (...) { ' or | |
" '} elsif (...) {'. | |
syn match perlElseIfError "\s\+if" contained | |
syn keyword perlElseIfError elseif contained | |
" Variable interpolation | |
" | |
" These items are interpolated inside "" strings and similar constructs. | |
syn cluster perlInterpDQ contains=perlSpecialString,perlVarPlain,perlVarNotInMatches,perlVarSlash,perlVarBlock | |
" These items are interpolated inside '' strings and similar constructs. | |
syn cluster perlInterpSQ contains=perlSpecialStringU,perlSpecialStringU2 | |
" These items are interpolated inside m// matches and s/// substitutions. | |
syn cluster perlInterpSlash contains=perlSpecialString,perlSpecialMatch,perlVarPlain,perlVarBlock | |
" These items are interpolated inside m## matches and s### substitutions. | |
syn cluster perlInterpMatch contains=@perlInterpSlash,perlVarSlash | |
" Shell commands | |
syn region perlShellCommand matchgroup=perlMatchStartEnd start="`" end="`" contains=@perlInterpDQ keepend | |
" Constants | |
" | |
" Numbers | |
syn match perlNumber "\<\%(0\%(x\x[[:xdigit:]_]*\|b[01][01_]*\|\o[0-7_]*\|\)\|[1-9][[:digit:]_]*\)\>" | |
syn match perlFloat "\<\d[[:digit:]_]*[eE][\-+]\=\d\+" | |
syn match perlFloat "\<\d[[:digit:]_]*\.[[:digit:]_]*\%([eE][\-+]\=\d\+\)\=" | |
syn match perlFloat "\.[[:digit:]_]\+\%([eE][\-+]\=\d\+\)\=" | |
syn match perlString "\<\%(v\d\+\%(\.\d\+\)*\|\d\+\%(\.\d\+\)\{2,}\)\>" contains=perlVStringV | |
syn match perlVStringV "\<v" contained | |
syn region perlParensSQ start=+(+ end=+)+ extend contained transparent contains=perlParensSQ,@perlInterpSQ keepend | |
syn region perlBracketsSQ start=+\[+ end=+\]+ extend contained transparent contains=perlBracketsSQ,@perlInterpSQ keepend | |
syn region perlBracesSQ start=+{+ end=+}+ extend contained transparent contains=perlBracesSQ,@perlInterpSQ keepend | |
syn region perlAnglesSQ start=+<+ end=+>+ extend contained transparent contains=perlAnglesSQ,@perlInterpSQ keepend | |
syn region perlParensDQ start=+(+ end=+)+ extend contained transparent contains=perlParensDQ,@perlInterpDQ keepend | |
syn region perlBracketsDQ start=+\[+ end=+\]+ extend contained transparent contains=perlBracketsDQ,@perlInterpDQ keepend | |
syn region perlBracesDQ start=+{+ end=+}+ extend contained transparent contains=perlBracesDQ,@perlInterpDQ keepend | |
syn region perlAnglesDQ start=+<+ end=+>+ extend contained transparent contains=perlAnglesDQ,@perlInterpDQ keepend | |
" Simple version of searches and matches | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1[cgimopsx]*+ contains=@perlInterpMatch keepend | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m#+ end=+#[cgimopsx]*+ contains=@perlInterpMatch keepend | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*'+ end=+'[cgimopsx]*+ contains=@perlInterpSQ keepend | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*/+ end=+/[cgimopsx]*+ contains=@perlInterpSlash keepend | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*(+ end=+)[cgimopsx]*+ contains=@perlInterpMatch,perlParensDQ keepend | |
" A special case for m{}, m<> and m[] which allows for comments and extra whitespace in the pattern | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*{+ end=+}[cgimopsx]*+ contains=@perlInterpMatch,perlComment,perlBracesDQ keepend | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*<+ end=+>[cgimopsx]*+ contains=@perlInterpMatch,perlAnglesDQ keepend | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*\[+ end=+\][cgimopsx]*+ contains=@perlInterpMatch,perlComment,perlBracketsDQ keepend | |
" Below some hacks to recognise the // variant. This is virtually impossible to catch in all | |
" cases as the / is used in so many other ways, but these should be the most obvious ones. | |
syn region perlMatch matchgroup=perlMatchStartEnd start="\%([$@%&*]\@<!\%(\<split\|\<while\|\<if\|\<unless\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=/\%(/=\)\@!" start=+^/\%(/=\)\@!+ start=+\s\@<=/\%(/=\)\@![^[:space:][:digit:]$@%=]\@=\%(/\_s*\%([([{$@%&*[:digit:]"'`]\|\_s\w\|[[:upper:]_abd-fhjklnqrt-wyz]\)\)\@!+ skip=+\\/+ end=+/[cgimopsx]*+ contains=@perlInterpSlash | |
" Substitutions | |
" perlMatch is the first part, perlSubstitution* is the substitution part | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*'+ end=+'+me=e-1 contains=@perlInterpSQ nextgroup=perlSubstitutionSQ keepend | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*/+ end=+/+me=e-1 contains=@perlInterpSlash nextgroup=perlSubstitutionGQQ keepend | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s#+ end=+#+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*(+ end=+)+ contains=@perlInterpMatch,perlParensDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*<+ end=+>+ contains=@perlInterpMatch,perlAnglesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*\[+ end=+\]+ contains=@perlInterpMatch,perlBracketsDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend | |
syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+\z([^[:space:]'([{<]\)+ end=+\z1[ecgimopsx]*+ keepend contained contains=@perlInterpDQ | |
syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+(+ end=+)[ecgimopsx]*+ contained contains=@perlInterpDQ,perlParensDQ keepend | |
syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+\[+ end=+\][ecgimopsx]*+ contained contains=@perlInterpDQ,perlBracketsDQ keepend | |
syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+{+ end=+}[ecgimopsx]*+ contained contains=@perlInterpDQ,perlBracesDQ keepend | |
syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+<+ end=+>[ecgimopsx]*+ contained contains=@perlInterpDQ,perlAnglesDQ keepend | |
syn region perlSubstitutionSQ matchgroup=perlMatchStartEnd start=+'+ end=+'[ecgimopsx]*+ contained contains=@perlInterpSQ keepend | |
" Translations | |
" perlMatch is the first part, perlTranslation* is the second, translator part. | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\>\s*\z([^[:space:]([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)#+ end=+#+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl | |
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl | |
syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+\z([^[:space:]([{<]\)+ end=+\z1[cds]*+ contained | |
syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+(+ end=+)[cds]*+ contains=perlParensSQ contained | |
syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+\[+ end=+\][cds]*+ contains=perlBracketsSQ contained | |
syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+{+ end=+}[cds]*+ contains=perlBracesSQ contained | |
syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+<+ end=+>[cds]*+ contains=perlAnglesSQ contained | |
" Strings and q, qq, qw and qr expressions | |
syn region perlStringUnexpanded matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ keepend | |
syn region perlString matchgroup=perlStringStartEnd start=+"+ end=+"+ contains=@perlInterpDQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q#+ end=+#+ contains=@perlInterpSQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpDQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]#+ end=+#+ contains=@perlInterpDQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*(+ end=+)+ contains=@perlInterpDQ,perlParensDQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*\[+ end=+\]+ contains=@perlInterpDQ,perlBracketsDQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*{+ end=+}+ contains=@perlInterpDQ,perlBracesDQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*<+ end=+>+ contains=@perlInterpDQ,perlAnglesDQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw#+ end=+#+ contains=@perlInterpSQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\>\s*\z([^[:space:]#([{<'/]\)+ end=+\z1[imosx]*+ contains=@perlInterpMatch keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*/+ end=+/[imosx]*+ contains=@perlInterpSlash keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr#+ end=+#[imosx]*+ contains=@perlInterpMatch keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*'+ end=+'[imosx]*+ contains=@perlInterpSQ keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*(+ end=+)[imosx]*+ contains=@perlInterpMatch,perlParensDQ keepend | |
" A special case for qr{}, qr<> and qr[] which allows for comments and extra whitespace in the pattern | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*{+ end=+}[imosx]*+ contains=@perlInterpMatch,perlBracesDQ,perlComment keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*<+ end=+>[imosx]*+ contains=@perlInterpMatch,perlAnglesDQ,perlComment keepend | |
syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*\[+ end=+\][imosx]*+ contains=@perlInterpMatch,perlBracketsDQ,perlComment keepend | |
" Constructs such as print <<EOF [...] EOF, 'here' documents | |
" | |
" XXX Any statements after the identifier are in perlString colour (i.e. | |
" 'if $a' in 'print <<EOF if $a'). This is almost impossible to get right it | |
" seems due to the 'auto-extending nature' of regions. | |
if exists("perl_fold") | |
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\z(\I\i*\).*+ end=+^\z1$+ contains=@perlInterpDQ fold | |
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ fold | |
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ fold | |
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*""+ end=+^$+ contains=@perlInterpDQ,perlNotEmptyLine fold | |
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*''+ end=+^$+ contains=@perlInterpSQ,perlNotEmptyLine fold | |
syn region perlAutoload matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL fold | |
else | |
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\z(\I\i*\)+ end=+^\z1$+ contains=@perlInterpDQ | |
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ | |
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ | |
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*""+ end=+^$+ contains=@perlInterpDQ,perlNotEmptyLine | |
syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*''+ end=+^$+ contains=@perlInterpSQ,perlNotEmptyLine | |
syn region perlAutoload matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL | |
endif | |
" Class declarations | |
" | |
syn match perlPackageDecl "\<package\s\+\%(\h\|::\)\%(\w\|::\)*" contains=perlStatementPackage | |
syn keyword perlStatementPackage package contained | |
" Functions | |
" sub [name] [(prototype)] { | |
" | |
syn match perlSubError "[^[:space:];{#]" contained | |
if v:version == 701 && !has('patch221') " XXX I hope that's the right one | |
syn match perlSubAttributes ":" contained | |
else | |
syn match perlSubAttributesCont "\h\w*\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained | |
syn region perlSubAttributesCont matchgroup=perlSubAttributesCont start="\h\w*(" end=")\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained contains=@perlInterpSQ,perlParensSQ | |
syn cluster perlSubAttrMaybe contains=perlSubAttributesCont,perlSubError | |
syn match perlSubAttributes "" contained nextgroup=perlSubError | |
syn match perlSubAttributes ":\_s*" contained nextgroup=@perlSubAttrMaybe | |
endif | |
syn match perlSubPrototypeError "(\%(\_s*\%(\%(\\\%([$@%&*]\|\[[$@%&*]\+\]\)\|[$&*]\|[@%]\%(\_s*)\)\@=\|;\%(\_s*[)$@%&*\\]\)\@=\|_\%(\_s*[);]\)\@=\)\_s*\)*\)\@>\zs\_[^)]\+" contained | |
syn match perlSubPrototype +(\_[^)]*)\_s*\|+ nextgroup=perlSubAttributes contained contains=perlSubPrototypeError | |
syn match perlSubName +\%(\h\|::\|'\w\)\%(\w\|::\|'\w\)*\_s*\|+ contained nextgroup=perlSubPrototype | |
syn match perlFunction +\<sub\>\_s*+ nextgroup=perlSubName | |
if !exists("perl_no_scope_in_variables") | |
syn match perlFunctionPRef "\h\w*::" contained | |
" syn match perlFunctionName "\h\w*[^:]" contained | |
else | |
" syn match perlFunctionName "\h[[:alnum:]_:]*" contained | |
endif | |
" The => operator forces a bareword to the left of it to be interpreted as | |
" a string | |
syn match perlString "\I\@<!-\?\I\i*\%(\s*=>\)\@=" | |
" All other # are comments, except ^#! | |
syn match perlComment "#.*" contains=perlTodo,@Spell | |
syn match perlSharpBang "^#!.*" | |
" Formats | |
syn region perlFormat matchgroup=perlStatementIOFunc start="^\s*\<format\s\+\k\+\s*=\s*$"rs=s+6 end="^\s*\.\s*$" contains=perlFormatName,perlFormatField,perlVarPlain,perlVarPlain2 | |
syn match perlFormatName "format\s\+\k\+\s*="lc=7,me=e-1 contained | |
syn match perlFormatField "[@^][|<>~]\+\%(\.\.\.\)\=" contained | |
syn match perlFormatField "[@^]#[#.]*" contained | |
syn match perlFormatField "@\*" contained | |
syn match perlFormatField "@[^A-Za-z_|<>~#*]"me=e-1 contained | |
syn match perlFormatField "@$" contained | |
" __END__ and __DATA__ clauses | |
if exists("perl_fold") | |
syntax region perlDATA start="^__\%(DATA\|END\)__$" skip="." end="." contains=perlPOD,@perlDATA fold | |
else | |
syntax region perlDATA start="^__\%(DATA\|END\)__$" skip="." end="." contains=perlPOD,@perlDATA | |
endif | |
" | |
" Folding | |
if exists("perl_fold") | |
" Note: this bit must come before the actual highlighting of the "package" | |
" keyword, otherwise this will screw up Pod lines that match /^package/ | |
if !exists("perl_nofold_packages") | |
syn region perlPackageFold start="^package \S\+;\s*\%(#.*\)\=$" end="^1;\=\s*\%(#.*\)\=$" end="\n\+package"me=s-1 transparent fold keepend | |
endif | |
if !exists("perl_nofold_subs") | |
syn region perlSubFold start="^\z(\s*\)\<sub\>.*[^};]$" end="^\z1}\s*\%(#.*\)\=$" transparent fold keepend | |
syn region perlSubFold start="^\z(\s*\)\<\%(BEGIN\|END\|CHECK\|INIT\|UNITCHECK\)\>.*[^};]$" end="^\z1}\s*$" transparent fold keepend | |
endif | |
if exists("perl_fold_blocks") | |
syn region perlBlockFold start="^\z(\s*\)\%(if\|elsif\|unless\|for\|while\|until\|given\)\s*(.*)\%(\s*{\)\=\s*\%(#.*\)\=$" start="^\z(\s*\)foreach\s*\%(\%(my\|our\)\=\s*\S\+\s*\)\=(.*)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend | |
syn region perlBlockFold start="^\z(\s*\)\%(do\|else\)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*while" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend | |
endif | |
setlocal foldmethod=syntax | |
syn sync fromstart | |
else | |
" fromstart above seems to set minlines even if perl_fold is not set. | |
syn sync minlines=0 | |
endif | |
command -nargs=+ HiLink hi def link <args> | |
" The default highlighting. | |
HiLink perlSharpBang PreProc | |
HiLink perlControl PreProc | |
HiLink perlInclude Include | |
HiLink perlSpecial Special | |
HiLink perlString String | |
HiLink perlCharacter Character | |
HiLink perlNumber Number | |
HiLink perlFloat Float | |
HiLink perlType Type | |
HiLink perlIdentifier Identifier | |
HiLink perlLabel Label | |
HiLink perlStatement Statement | |
HiLink perlConditional Conditional | |
HiLink perlRepeat Repeat | |
HiLink perlOperator Operator | |
HiLink perlFunction Keyword | |
HiLink perlSubName Function | |
HiLink perlSubPrototype Type | |
HiLink perlSubAttributes PreProc | |
HiLink perlSubAttributesCont perlSubAttributes | |
HiLink perlComment Comment | |
HiLink perlTodo Todo | |
if exists("perl_string_as_statement") | |
HiLink perlStringStartEnd perlStatement | |
else | |
HiLink perlStringStartEnd perlString | |
endif | |
HiLink perlVStringV perlStringStartEnd | |
HiLink perlList perlStatement | |
HiLink perlMisc perlStatement | |
HiLink perlVarPlain perlIdentifier | |
HiLink perlVarPlain2 perlIdentifier | |
HiLink perlArrow perlIdentifier | |
HiLink perlFiledescRead perlIdentifier | |
HiLink perlFiledescStatement perlIdentifier | |
HiLink perlVarSimpleMember perlIdentifier | |
HiLink perlVarSimpleMemberName perlString | |
HiLink perlVarNotInMatches perlIdentifier | |
HiLink perlVarSlash perlIdentifier | |
HiLink perlQQ perlString | |
HiLink perlHereDoc perlString | |
HiLink perlStringUnexpanded perlString | |
HiLink perlSubstitutionSQ perlString | |
HiLink perlSubstitutionGQQ perlString | |
HiLink perlTranslationGQ perlString | |
HiLink perlMatch perlString | |
HiLink perlMatchStartEnd perlStatement | |
HiLink perlFormatName perlIdentifier | |
HiLink perlFormatField perlString | |
HiLink perlPackageDecl perlType | |
HiLink perlStorageClass perlType | |
HiLink perlPackageRef perlType | |
HiLink perlStatementPackage perlStatement | |
HiLink perlStatementStorage perlStatement | |
HiLink perlStatementControl perlStatement | |
HiLink perlStatementScalar perlStatement | |
HiLink perlStatementRegexp perlStatement | |
HiLink perlStatementNumeric perlStatement | |
HiLink perlStatementList perlStatement | |
HiLink perlStatementHash perlStatement | |
HiLink perlStatementIOfunc perlStatement | |
HiLink perlStatementFiledesc perlStatement | |
HiLink perlStatementVector perlStatement | |
HiLink perlStatementFiles perlStatement | |
HiLink perlStatementFlow perlStatement | |
HiLink perlStatementInclude perlStatement | |
HiLink perlStatementProc perlStatement | |
HiLink perlStatementSocket perlStatement | |
HiLink perlStatementIPC perlStatement | |
HiLink perlStatementNetwork perlStatement | |
HiLink perlStatementPword perlStatement | |
HiLink perlStatementTime perlStatement | |
HiLink perlStatementMisc perlStatement | |
HiLink perlStatementIndirObj perlStatement | |
HiLink perlFunctionName perlIdentifier | |
HiLink perlMethod perlIdentifier | |
HiLink perlFunctionPRef perlType | |
HiLink perlPOD perlComment | |
HiLink perlShellCommand perlString | |
HiLink perlSpecialAscii perlSpecial | |
HiLink perlSpecialDollar perlSpecial | |
HiLink perlSpecialString perlSpecial | |
HiLink perlSpecialStringU perlSpecial | |
HiLink perlSpecialMatch perlSpecial | |
HiLink perlDATA perlComment | |
" Possible errors | |
HiLink perlNotEmptyLine Error | |
HiLink perlElseIfError Error | |
HiLink perlSubPrototypeError Error | |
HiLink perlSubError Error | |
delcommand HiLink | |
" Syncing to speed up processing | |
" | |
if !exists("perl_no_sync_on_sub") | |
syn sync match perlSync grouphere NONE "^\s*\<package\s" | |
syn sync match perlSync grouphere NONE "^\s*\<sub\>" | |
syn sync match perlSync grouphere NONE "^}" | |
endif | |
if !exists("perl_no_sync_on_global_var") | |
syn sync match perlSync grouphere NONE "^$\I[[:alnum:]_:]+\s*=\s*{" | |
syn sync match perlSync grouphere NONE "^[@%]\I[[:alnum:]_:]+\s*=\s*(" | |
endif | |
if exists("perl_sync_dist") | |
execute "syn sync maxlines=" . perl_sync_dist | |
else | |
syn sync maxlines=100 | |
endif | |
syn sync match perlSyncPOD grouphere perlPOD "^=pod" | |
syn sync match perlSyncPOD grouphere perlPOD "^=head" | |
syn sync match perlSyncPOD grouphere perlPOD "^=item" | |
syn sync match perlSyncPOD grouphere NONE "^=cut" | |
let b:current_syntax = "perl" | |
" XXX Change to sts=4:sw=4 | |
" vim:ts=8:sts=2:sw=2:expandtab:ft=vim |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment