blob: 4c403ba893ee8dcead9d4c11d3cdf97383b7cf11 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaar00a927d2010-05-14 23:24:24 +02002" Language: Perl 5
3" Maintainer: Andy Lester <andy@petdance.com>
4" URL: http://github.com/petdance/vim-perl/tree/master
5" Last Change: 2009-09-2
6" Contributors: Andy Lester <andy@petdance.com>
7" Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
8" Lukas Mai <l.mai.web.de>
9" Nick Hibma <nick@van-laarhoven.org>
10" Sonia Heimann <niania@netsurf.org>
11" and many others.
Bram Moolenaar071d4272004-06-13 20:20:40 +000012"
13" Please download most recent version first before mailing
14" any comments.
Bram Moolenaar071d4272004-06-13 20:20:40 +000015"
Bram Moolenaar071d4272004-06-13 20:20:40 +000016" The following parameters are available for tuning the
17" perl syntax highlighting, with defaults given:
18"
19" unlet perl_include_pod
Bram Moolenaar00a927d2010-05-14 23:24:24 +020020" unlet perl_no_scope_in_variables
21" unlet perl_no_extended_vars
Bram Moolenaar071d4272004-06-13 20:20:40 +000022" unlet perl_string_as_statement
23" unlet perl_no_sync_on_sub
24" unlet perl_no_sync_on_global_var
25" let perl_sync_dist = 100
26" unlet perl_fold
27" unlet perl_fold_blocks
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000028" let perl_nofold_packages = 1
29" let perl_nofold_subs = 1
Bram Moolenaar071d4272004-06-13 20:20:40 +000030
Bram Moolenaar071d4272004-06-13 20:20:40 +000031if version < 600
Bram Moolenaar00a927d2010-05-14 23:24:24 +020032 echoerr ">=vim-6.0 is required to run perl.vim"
33 finish
Bram Moolenaar071d4272004-06-13 20:20:40 +000034elseif exists("b:current_syntax")
35 finish
36endif
37
Bram Moolenaar00a927d2010-05-14 23:24:24 +020038"
39" Folding
40
41if exists("perl_fold")
42 " Note: this bit must come before the actual highlighting of the "package"
43 " keyword, otherwise this will screw up Pod lines that match /^package/
44 if !exists("perl_nofold_packages")
45 syn region perlPackageFold start="^package \S\+;\s*\%(#.*\)\=$" end="^1;\=\s*\%(#.*\)\=$" end="\n\+package"me=s-1 transparent fold keepend
46 endif
47 if !exists("perl_nofold_subs")
48 syn region perlSubFold start="^\z(\s*\)\<sub\>.*[^};]$" end="^\z1}\s*\%(#.*\)\=$" transparent fold keepend
49 syn region perlSubFold start="^\z(\s*\)\<\%(BEGIN\|END\|CHECK\|INIT\|UNITCHECK\)\>.*[^};]$" end="^\z1}\s*$" transparent fold keepend
50 endif
51
52 if exists("perl_fold_blocks")
53 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
54 syn region perlBlockFold start="^\z(\s*\)\%(do\|else\)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*while" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend
55 endif
56
57 setlocal foldmethod=syntax
58 syn sync fromstart
59else
60 " fromstart above seems to set minlines even if perl_fold is not set.
61 syn sync minlines=0
Bram Moolenaar071d4272004-06-13 20:20:40 +000062endif
63
64
65" POD starts with ^=<word> and ends with ^=cut
66
67if exists("perl_include_pod")
68 " Include a while extra syntax file
69 syn include @Pod syntax/pod.vim
70 unlet b:current_syntax
71 if exists("perl_fold")
Bram Moolenaara5792f52005-11-23 21:25:05 +000072 syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend fold
Bram Moolenaar071d4272004-06-13 20:20:40 +000073 syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend fold
74 else
Bram Moolenaara5792f52005-11-23 21:25:05 +000075 syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +000076 syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend
77 endif
78else
79 " Use only the bare minimum of rules
80 if exists("perl_fold")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000081 syn region perlPOD start="^=[a-z]" end="^=cut" fold
Bram Moolenaar071d4272004-06-13 20:20:40 +000082 else
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000083 syn region perlPOD start="^=[a-z]" end="^=cut"
Bram Moolenaar071d4272004-06-13 20:20:40 +000084 endif
85endif
86
87
Bram Moolenaar00a927d2010-05-14 23:24:24 +020088syn cluster perlTop contains=TOP
89syn region perlGenericBlock matchgroup=perlGenericBlock start="{" end="}" contained transparent
90
91
Bram Moolenaar071d4272004-06-13 20:20:40 +000092" All keywords
93"
Bram Moolenaar00a927d2010-05-14 23:24:24 +020094syn match perlConditional "\<\%(if\|elsif\|unless\|given\|when\|default\)\>"
95syn match perlConditional "\<else\>" nextgroup=perlElseIfError skipwhite skipnl skipempty
96syn match perlRepeat "\<\%(while\|for\%(each\)\=\|do\|until\|continue\)\>"
97syn match perlOperator "\<\%(defined\|undef\|eq\|ne\|[gl][et]\|cmp\|not\|and\|or\|xor\|not\|bless\|ref\|do\)\>"
98syn match perlControl "\<\%(BEGIN\|CHECK\|INIT\|END\|UNITCHECK\)\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000099
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200100syn match perlStatementStorage "\<\%(my\|our\|local\|state\)\>"
101syn match perlStatementControl "\<\%(return\|last\|next\|redo\|goto\|break\)\>"
102syn match perlStatementScalar "\<\%(chom\=p\|chr\|crypt\|r\=index\|lc\%(first\)\=\|length\|ord\|pack\|sprintf\|substr\|uc\%(first\)\=\)\>"
103syn match perlStatementRegexp "\<\%(pos\|quotemeta\|split\|study\)\>"
104syn match perlStatementNumeric "\<\%(abs\|atan2\|cos\|exp\|hex\|int\|log\|oct\|rand\|sin\|sqrt\|srand\)\>"
105syn match perlStatementList "\<\%(splice\|unshift\|shift\|push\|pop\|join\|reverse\|grep\|map\|sort\|unpack\)\>"
106syn match perlStatementHash "\<\%(delete\|each\|exists\|keys\|values\)\>"
107syn match perlStatementIOfunc "\<\%(syscall\|dbmopen\|dbmclose\)\>"
108syn match perlStatementFiledesc "\<\%(binmode\|close\%(dir\)\=\|eof\|fileno\|getc\|lstat\|printf\=\|read\%(dir\|line\|pipe\)\|rewinddir\|say\|select\|stat\|tell\%(dir\)\=\|write\)\>" nextgroup=perlFiledescStatementNocomma skipwhite
109syn match perlStatementFiledesc "\<\%(fcntl\|flock\|ioctl\|open\%(dir\)\=\|read\|seek\%(dir\)\=\|sys\%(open\|read\|seek\|write\)\|truncate\)\>" nextgroup=perlFiledescStatementComma skipwhite
110syn match perlStatementVector "\<vec\>"
111syn match perlStatementFiles "\<\%(ch\%(dir\|mod\|own\|root\)\|glob\|link\|mkdir\|readlink\|rename\|rmdir\|symlink\|umask\|unlink\|utime\)\>"
112syn match perlStatementFiles "-[rwxoRWXOezsfdlpSbctugkTBMAC]\>"
113syn match perlStatementFlow "\<\%(caller\|die\|dump\|eval\|exit\|wantarray\)\>"
114syn match perlStatementInclude "\<require\>"
115syn 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\)\=\)\>\)\="
116syn match perlStatementProc "\<\%(alarm\|exec\|fork\|get\%(pgrp\|ppid\|priority\)\|kill\|pipe\|set\%(pgrp\|priority\)\|sleep\|system\|times\|wait\%(pid\)\=\)\>"
117syn match perlStatementSocket "\<\%(acept\|bind\|connect\|get\%(peername\|sock\%(name\|opt\)\)\|listen\|recv\|send\|setsockopt\|shutdown\|socket\%(pair\)\=\)\>"
118syn match perlStatementIPC "\<\%(msg\%(ctl\|get\|rcv\|snd\)\|sem\%(ctl\|get\|op\)\|shm\%(ctl\|get\|read\|write\)\)\>"
119syn match perlStatementNetwork "\<\%(\%(end\|[gs]et\)\%(host\|net\|proto\|serv\)ent\|get\%(\%(host\|net\)by\%(addr\|name\)\|protoby\%(name\|number\)\|servby\%(name\|port\)\)\)\>"
120syn match perlStatementPword "\<\%(get\%(pw\%(uid\|nam\)\|gr\%(gid\|nam\)\|login\)\)\|\%(end\|[gs]et\)\%(pw\|gr\)ent\>"
121syn match perlStatementTime "\<\%(gmtime\|localtime\|time\)\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000122
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200123syn match perlStatementMisc "\<\%(warn\|formline\|reset\|scalar\|prototype\|lock\|tied\=\|untie\)\>"
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000124
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200125syn keyword perlTodo TODO TBD FIXME XXX NOTE contained
126
127syn region perlStatementIndirObjWrap matchgroup=perlStatementIndirObj start="\<\%(map\|grep\|sort\|print\|system\|exec\)\>\s*{" end="}" contains=@perlTop,perlGenericBlock
128
129syn match perlLabel "^\s*\h\w*\s*::\@!\%(\<v\d\+\s*:\)\@<!"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000130
131" Perl Identifiers.
132"
133" Should be cleaned up to better handle identifiers in particular situations
134" (in hash keys for example)
135"
136" Plain identifiers: $foo, @foo, $#foo, %foo, &foo and dereferences $$foo, @$foo, etc.
137" We do not process complex things such as @{${"foo"}}. Too complicated, and
138" too slow. And what is after the -> is *not* considered as part of the
139" variable - there again, too complicated and too slow.
140
141" Special variables first ($^A, ...) and ($|, $', ...)
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200142syn match perlVarPlain "$^[ACDEFHILMNOPRSTVWX]\="
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000143syn match perlVarPlain "$[\\\"\[\]'&`+*.,;=%~!?@#$<>(-]"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200144syn match perlVarPlain "$\%(0\|[1-9]\d*\)"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000145" Same as above, but avoids confusion in $::foo (equivalent to $main::foo)
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200146syn match perlVarPlain "$::\@!"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000147" These variables are not recognized within matches.
148syn match perlVarNotInMatches "$[|)]"
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000149" This variable is not recognized within matches delimited by m//.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000150syn match perlVarSlash "$/"
151
152" And plain identifiers
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200153syn match perlPackageRef "[$@#%*&]\%(\%(::\|'\)\=\I\i*\%(\%(::\|'\)\I\i*\)*\)\=\%(::\|'\)\I"ms=s+1,me=e-1 contained
Bram Moolenaar071d4272004-06-13 20:20:40 +0000154
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200155" To not highlight packages in variables as a scope reference - i.e. in
156" $pack::var, pack:: is a scope, just set "perl_no_scope_in_variables"
157" If you don't want complex things like @{${"foo"}} to be processed,
158" just set the variable "perl_no_extended_vars"...
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000159
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200160if !exists("perl_no_scope_in_variables")
161 syn match perlVarPlain "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
162 syn match perlVarPlain2 "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef
163 syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
Bram Moolenaar071d4272004-06-13 20:20:40 +0000164else
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200165 syn match perlVarPlain "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
166 syn match perlVarPlain2 "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)"
167 syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
Bram Moolenaar071d4272004-06-13 20:20:40 +0000168endif
169
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200170if !exists("perl_no_extended_vars")
171 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
172 syn region perlArrow matchgroup=perlArrow start="->\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
173 syn region perlArrow matchgroup=perlArrow start="->\s*\[" end="\]" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
174 syn region perlArrow matchgroup=perlArrow start="->\s*{" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
175 syn match perlArrow "->\s*{\s*\I\i*\s*}" contains=perlVarSimpleMemberName nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
176 syn region perlArrow matchgroup=perlArrow start="->\s*\$*\I\i*\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
177 syn region perlVarBlock matchgroup=perlVarPlain start="\%($#\|[$@]\)\$*{" skip="\\}" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
178 syn region perlVarBlock2 matchgroup=perlVarPlain start="[%&*]\$*{" skip="\\}" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
179 syn match perlVarPlain2 "[%&*]\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
180 syn match perlVarPlain "\%(\$#\|[@$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
181 syn region perlVarMember matchgroup=perlVarPlain start="\%(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
182 syn match perlVarSimpleMember "\%(->\)\={\s*\I\i*\s*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contains=perlVarSimpleMemberName contained
Bram Moolenaar071d4272004-06-13 20:20:40 +0000183 syn match perlVarSimpleMemberName "\I\i*" contained
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200184 syn region perlVarMember matchgroup=perlVarPlain start="\%(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
185 syn match perlPackageConst "__PACKAGE__" nextgroup=perlMethod
186 syn match perlMethod "->\$*\I\i*" contained nextgroup=perlVarSimpleMember,perlVarMember,perlMethod
Bram Moolenaar071d4272004-06-13 20:20:40 +0000187endif
188
189" File Descriptors
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200190syn match perlFiledescRead "<\h\w*>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000191
192syn match perlFiledescStatementComma "(\=\s*\u\w*\s*,"me=e-1 transparent contained contains=perlFiledescStatement
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000193syn match perlFiledescStatementNocomma "(\=\s*\u\w*\s*[^, \t]"me=e-1 transparent contained contains=perlFiledescStatement
Bram Moolenaar071d4272004-06-13 20:20:40 +0000194
195syn match perlFiledescStatement "\u\w*" contained
196
197" Special characters in strings and matches
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200198syn match perlSpecialString "\\\%(\o\{1,3}\|x\%({\x\+}\|\x\{1,2}\)\|c.\|[^cx]\)" contained extend
199syn match perlSpecialStringU2 "\\." extend contained transparent contains=NONE
200syn match perlSpecialStringU "\\\\" contained
201syn match perlSpecialMatch "\\[1-9]" contained extend
202syn match perlSpecialMatch "\\g\%(\d\+\|{\%(-\=\d\+\|\h\w*\)}\)" contained
203syn match perlSpecialMatch "\\k\%(<\h\w*>\|'\h\w*'\)" contained
204syn match perlSpecialMatch "{\d\+\%(,\%(\d\+\)\=\)\=}" contained
205syn match perlSpecialMatch "\[[]-]\=[^\[\]]*[]-]\=\]" contained
Bram Moolenaar071d4272004-06-13 20:20:40 +0000206syn match perlSpecialMatch "[+*()?.]" contained
207syn match perlSpecialMatch "(?[#:=!]" contained
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200208syn match perlSpecialMatch "(?[impsx]*\%(-[imsx]\+\)\=)" contained
209syn match perlSpecialMatch "(?\%([-+]\=\d\+\|R\))" contained
210syn match perlSpecialMatch "(?\%(&\|P[>=]\)\h\w*)" contained
211syn match perlSpecialMatch "(\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\=\|\%(MARK\|\):[^)]*\|COMMIT\|F\%(AIL\)\=\|ACCEPT\))" contained
Bram Moolenaar071d4272004-06-13 20:20:40 +0000212
213" Possible errors
214"
215" Highlight lines with only whitespace (only in blank delimited here documents) as errors
216syn match perlNotEmptyLine "^\s\+$" contained
217" Highlight '} else if (...) {', it should be '} else { if (...) { ' or
218" '} elsif (...) {'.
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200219syn match perlElseIfError "[^[:space:]{]\+" contained
Bram Moolenaar071d4272004-06-13 20:20:40 +0000220
221" Variable interpolation
222"
223" These items are interpolated inside "" strings and similar constructs.
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000224syn cluster perlInterpDQ contains=perlSpecialString,perlVarPlain,perlVarNotInMatches,perlVarSlash,perlVarBlock
Bram Moolenaar071d4272004-06-13 20:20:40 +0000225" These items are interpolated inside '' strings and similar constructs.
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200226syn cluster perlInterpSQ contains=perlSpecialStringU,perlSpecialStringU2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000227" These items are interpolated inside m// matches and s/// substitutions.
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200228syn cluster perlInterpSlash contains=perlSpecialString,perlSpecialMatch,perlVarPlain,perlVarBlock
Bram Moolenaar071d4272004-06-13 20:20:40 +0000229" These items are interpolated inside m## matches and s### substitutions.
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000230syn cluster perlInterpMatch contains=@perlInterpSlash,perlVarSlash
Bram Moolenaar071d4272004-06-13 20:20:40 +0000231
232" Shell commands
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200233syn region perlShellCommand matchgroup=perlMatchStartEnd start="`" end="`" contains=@perlInterpDQ keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000234
235" Constants
236"
237" Numbers
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200238syn match perlNumber "\<\%(0\%(x\x[[:xdigit:]_]*\|b[01][01_]*\|\o[0-7_]*\|\)\|[1-9][[:digit:]_]*\)\>"
239syn match perlFloat "\<\d[[:digit:]_]*[eE][\-+]\=\d\+"
240syn match perlFloat "\<\d[[:digit:]_]*\.[[:digit:]_]*\%([eE][\-+]\=\d\+\)\="
241syn match perlFloat "\.[[:digit:]_]\+\%([eE][\-+]\=\d\+\)\="
242
243syn match perlString "\<\%(v\d\+\%(\.\d\+\)*\|\d\+\%(\.\d\+\)\{2,}\)\>" contains=perlVStringV
244syn match perlVStringV "\<v" contained
245
246
247syn region perlParensSQ start=+(+ end=+)+ extend contained transparent contains=perlParensSQ,@perlInterpSQ keepend
248syn region perlBracketsSQ start=+\[+ end=+\]+ extend contained transparent contains=perlBracketsSQ,@perlInterpSQ keepend
249syn region perlBracesSQ start=+{+ end=+}+ extend contained transparent contains=perlBracesSQ,@perlInterpSQ keepend
250syn region perlAnglesSQ start=+<+ end=+>+ extend contained transparent contains=perlAnglesSQ,@perlInterpSQ keepend
251
252syn region perlParensDQ start=+(+ end=+)+ extend contained transparent contains=perlParensDQ,@perlInterpDQ keepend
253syn region perlBracketsDQ start=+\[+ end=+\]+ extend contained transparent contains=perlBracketsDQ,@perlInterpDQ keepend
254syn region perlBracesDQ start=+{+ end=+}+ extend contained transparent contains=perlBracesDQ,@perlInterpDQ keepend
255syn region perlAnglesDQ start=+<+ end=+>+ extend contained transparent contains=perlAnglesDQ,@perlInterpDQ keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000256
257
258" Simple version of searches and matches
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200259syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1[cgimopsx]*+ contains=@perlInterpMatch keepend
260syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m#+ end=+#[cgimopsx]*+ contains=@perlInterpMatch keepend
261syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*'+ end=+'[cgimopsx]*+ contains=@perlInterpSQ keepend
262syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*/+ end=+/[cgimopsx]*+ contains=@perlInterpSlash keepend
263syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*(+ end=+)[cgimopsx]*+ contains=@perlInterpMatch,perlParensDQ keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000264
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200265" A special case for m{}, m<> and m[] which allows for comments and extra whitespace in the pattern
266syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*{+ end=+}[cgimopsx]*+ contains=@perlInterpMatch,perlComment,perlBracesDQ keepend
267syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*<+ end=+>[cgimopsx]*+ contains=@perlInterpMatch,perlAnglesDQ keepend
268syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*\[+ end=+\][cgimopsx]*+ contains=@perlInterpMatch,perlComment,perlBracketsDQ keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000269
270" Below some hacks to recognise the // variant. This is virtually impossible to catch in all
271" cases as the / is used in so many other ways, but these should be the most obvious ones.
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200272syn 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000273
274
275" Substitutions
Bram Moolenaar071d4272004-06-13 20:20:40 +0000276" perlMatch is the first part, perlSubstitution* is the substitution part
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200277syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend
278syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*'+ end=+'+me=e-1 contains=@perlInterpSQ nextgroup=perlSubstitutionSQ keepend
279syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*/+ end=+/+me=e-1 contains=@perlInterpSlash nextgroup=perlSubstitutionGQQ keepend
280syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s#+ end=+#+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend
281syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*(+ end=+)+ contains=@perlInterpMatch,perlParensDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
282syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*<+ end=+>+ contains=@perlInterpMatch,perlAnglesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
283syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*\[+ end=+\]+ contains=@perlInterpMatch,perlBracketsDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
284syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
285syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+\z([^[:space:]'([{<]\)+ end=+\z1[ecgimopsx]*+ keepend contained contains=@perlInterpDQ
286syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+(+ end=+)[ecgimopsx]*+ contained contains=@perlInterpDQ,perlParensDQ keepend
287syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+\[+ end=+\][ecgimopsx]*+ contained contains=@perlInterpDQ,perlBracketsDQ keepend
288syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+{+ end=+}[ecgimopsx]*+ contained contains=@perlInterpDQ,perlBracesDQ keepend
289syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+<+ end=+>[ecgimopsx]*+ contained contains=@perlInterpDQ,perlAnglesDQ keepend
290syn region perlSubstitutionSQ matchgroup=perlMatchStartEnd start=+'+ end=+'[ecgimopsx]*+ contained contains=@perlInterpSQ keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000291
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200292" Translations
Bram Moolenaar071d4272004-06-13 20:20:40 +0000293" perlMatch is the first part, perlTranslation* is the second, translator part.
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200294syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\>\s*\z([^[:space:]([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ
295syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)#+ end=+#+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ
296syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
297syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
298syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
299syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
300syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+\z([^[:space:]([{<]\)+ end=+\z1[cds]*+ contained
301syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+(+ end=+)[cds]*+ contains=perlParensSQ contained
302syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+\[+ end=+\][cds]*+ contains=perlBracketsSQ contained
303syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+{+ end=+}[cds]*+ contains=perlBracesSQ contained
304syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+<+ end=+>[cds]*+ contains=perlAnglesSQ contained
Bram Moolenaar071d4272004-06-13 20:20:40 +0000305
306
Bram Moolenaar071d4272004-06-13 20:20:40 +0000307" Strings and q, qq, qw and qr expressions
308
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200309syn region perlStringUnexpanded matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ keepend
310syn region perlString matchgroup=perlStringStartEnd start=+"+ end=+"+ contains=@perlInterpDQ keepend
311syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend
312syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q#+ end=+#+ contains=@perlInterpSQ keepend
313syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend
314syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend
315syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend
316syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000317
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200318syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpDQ keepend
319syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]#+ end=+#+ contains=@perlInterpDQ keepend
320syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*(+ end=+)+ contains=@perlInterpDQ,perlParensDQ keepend
321syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*\[+ end=+\]+ contains=@perlInterpDQ,perlBracketsDQ keepend
322syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*{+ end=+}+ contains=@perlInterpDQ,perlBracesDQ keepend
323syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*<+ end=+>+ contains=@perlInterpDQ,perlAnglesDQ keepend
324
325syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend
326syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw#+ end=+#+ contains=@perlInterpSQ keepend
327syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend
328syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend
329syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend
330syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend
331
332syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\>\s*\z([^[:space:]#([{<'/]\)+ end=+\z1[imosx]*+ contains=@perlInterpMatch keepend
333syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*/+ end=+/[imosx]*+ contains=@perlInterpSlash keepend
334syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr#+ end=+#[imosx]*+ contains=@perlInterpMatch keepend
335syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*'+ end=+'[imosx]*+ contains=@perlInterpSQ keepend
336syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*(+ end=+)[imosx]*+ contains=@perlInterpMatch,perlParensDQ keepend
337
338" A special case for qr{}, qr<> and qr[] which allows for comments and extra whitespace in the pattern
339syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*{+ end=+}[imosx]*+ contains=@perlInterpMatch,perlBracesDQ,perlComment keepend
340syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*<+ end=+>[imosx]*+ contains=@perlInterpMatch,perlAnglesDQ,perlComment keepend
341syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*\[+ end=+\][imosx]*+ contains=@perlInterpMatch,perlBracketsDQ,perlComment keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000342
343" Constructs such as print <<EOF [...] EOF, 'here' documents
344"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200345" XXX Any statements after the identifier are in perlString colour (i.e.
346" 'if $a' in 'print <<EOF if $a'). This is almost impossible to get right it
347" seems due to the 'auto-extending nature' of regions.
348if exists("perl_fold")
349 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\z(\I\i*\).*+ end=+^\z1$+ contains=@perlInterpDQ fold
350 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ fold
351 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ fold
352 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*""+ end=+^$+ contains=@perlInterpDQ,perlNotEmptyLine fold
353 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*''+ end=+^$+ contains=@perlInterpSQ,perlNotEmptyLine fold
354 syn region perlAutoload matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000355else
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200356 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\z(\I\i*\)+ end=+^\z1$+ contains=@perlInterpDQ
357 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ
358 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ
359 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*""+ end=+^$+ contains=@perlInterpDQ,perlNotEmptyLine
360 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*''+ end=+^$+ contains=@perlInterpSQ,perlNotEmptyLine
361 syn region perlAutoload matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL
Bram Moolenaar071d4272004-06-13 20:20:40 +0000362endif
363
364
365" Class declarations
366"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200367syn match perlPackageDecl "\<package\s\+\%(\h\|::\)\%(\w\|::\)*" contains=perlStatementPackage
Bram Moolenaar071d4272004-06-13 20:20:40 +0000368syn keyword perlStatementPackage package contained
369
370" Functions
371" sub [name] [(prototype)] {
372"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200373syn match perlSubError "[^[:space:];{#]" contained
374if v:version == 701 && !has('patch221') " XXX I hope that's the right one
375 syn match perlSubAttributes ":" contained
376else
377 syn match perlSubAttributesCont "\h\w*\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained
378 syn region perlSubAttributesCont matchgroup=perlSubAttributesCont start="\h\w*(" end=")\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained contains=@perlInterpSQ,perlParensSQ
379 syn cluster perlSubAttrMaybe contains=perlSubAttributesCont,perlSubError
380 syn match perlSubAttributes "" contained nextgroup=perlSubError
381 syn match perlSubAttributes ":\_s*" contained nextgroup=@perlSubAttrMaybe
382endif
383syn match perlSubPrototypeError "(\%(\_s*\%(\%(\\\%([$@%&*]\|\[[$@%&*]\+\]\)\|[$&*]\|[@%]\%(\_s*)\)\@=\|;\%(\_s*[)$@%&*\\]\)\@=\|_\%(\_s*[);]\)\@=\)\_s*\)*\)\@>\zs\_[^)]\+" contained
384syn match perlSubPrototype +(\_[^)]*)\_s*\|+ nextgroup=perlSubAttributes contained contains=perlSubPrototypeError
385syn match perlSubName +\%(\h\|::\|'\w\)\%(\w\|::\|'\w\)*\_s*\|+ contained nextgroup=perlSubPrototype
Bram Moolenaar071d4272004-06-13 20:20:40 +0000386
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200387syn match perlFunction +\<sub\>\_s*+ nextgroup=perlSubName
388
389if !exists("perl_no_scope_in_variables")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000390 syn match perlFunctionPRef "\h\w*::" contained
391 syn match perlFunctionName "\h\w*[^:]" contained
392else
393 syn match perlFunctionName "\h[[:alnum:]_:]*" contained
394endif
395
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200396" The => operator forces a bareword to the left of it to be interpreted as
397" a string
398syn match perlString "\I\@<!-\?\I\i*\%(\s*=>\)\@="
399
Bram Moolenaar071d4272004-06-13 20:20:40 +0000400" All other # are comments, except ^#!
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200401syn match perlComment "#.*" contains=perlTodo,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000402syn match perlSharpBang "^#!.*"
403
404" Formats
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000405syn region perlFormat matchgroup=perlStatementIOFunc start="^\s*\<format\s\+\k\+\s*=\s*$"rs=s+6 end="^\s*\.\s*$" contains=perlFormatName,perlFormatField,perlVarPlain,perlVarPlain2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000406syn match perlFormatName "format\s\+\k\+\s*="lc=7,me=e-1 contained
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200407syn match perlFormatField "[@^][|<>~]\+\%(\.\.\.\)\=" contained
Bram Moolenaar071d4272004-06-13 20:20:40 +0000408syn match perlFormatField "[@^]#[#.]*" contained
409syn match perlFormatField "@\*" contained
410syn match perlFormatField "@[^A-Za-z_|<>~#*]"me=e-1 contained
411syn match perlFormatField "@$" contained
412
413" __END__ and __DATA__ clauses
414if exists("perl_fold")
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200415 syntax region perlDATA start="^__\%(DATA\|END\)__$" skip="." end="." contains=perlPOD,@perlDATA fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000416else
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200417 syntax region perlDATA start="^__\%(DATA\|END\)__$" skip="." end="." contains=perlPOD,@perlDATA
Bram Moolenaar071d4272004-06-13 20:20:40 +0000418endif
419
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200420command -nargs=+ HiLink hi def link <args>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000421
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200422" The default highlighting.
423HiLink perlSharpBang PreProc
424HiLink perlControl PreProc
425HiLink perlInclude Include
426HiLink perlSpecial Special
427HiLink perlString String
428HiLink perlCharacter Character
429HiLink perlNumber Number
430HiLink perlFloat Float
431HiLink perlType Type
432HiLink perlIdentifier Identifier
433HiLink perlLabel Label
434HiLink perlStatement Statement
435HiLink perlConditional Conditional
436HiLink perlRepeat Repeat
437HiLink perlOperator Operator
438HiLink perlFunction Keyword
439HiLink perlSubName Function
440HiLink perlSubPrototype Type
441HiLink perlSubAttributes PreProc
442HiLink perlSubAttributesCont perlSubAttributes
443HiLink perlComment Comment
444HiLink perlTodo Todo
445if exists("perl_string_as_statement")
446 HiLink perlStringStartEnd perlStatement
Bram Moolenaar071d4272004-06-13 20:20:40 +0000447else
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200448 HiLink perlStringStartEnd perlString
Bram Moolenaar071d4272004-06-13 20:20:40 +0000449endif
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200450HiLink perlVStringV perlStringStartEnd
451HiLink perlList perlStatement
452HiLink perlMisc perlStatement
453HiLink perlVarPlain perlIdentifier
454HiLink perlVarPlain2 perlIdentifier
455HiLink perlArrow perlIdentifier
456HiLink perlFiledescRead perlIdentifier
457HiLink perlFiledescStatement perlIdentifier
458HiLink perlVarSimpleMember perlIdentifier
459HiLink perlVarSimpleMemberName perlString
460HiLink perlVarNotInMatches perlIdentifier
461HiLink perlVarSlash perlIdentifier
462HiLink perlQQ perlString
463HiLink perlHereDoc perlString
464HiLink perlStringUnexpanded perlString
465HiLink perlSubstitutionSQ perlString
466HiLink perlSubstitutionGQQ perlString
467HiLink perlTranslationGQ perlString
468HiLink perlMatch perlString
469HiLink perlMatchStartEnd perlStatement
470HiLink perlFormatName perlIdentifier
471HiLink perlFormatField perlString
472HiLink perlPackageDecl perlType
473HiLink perlStorageClass perlType
474HiLink perlPackageRef perlType
475HiLink perlStatementPackage perlStatement
476HiLink perlStatementStorage perlStatement
477HiLink perlStatementControl perlStatement
478HiLink perlStatementScalar perlStatement
479HiLink perlStatementRegexp perlStatement
480HiLink perlStatementNumeric perlStatement
481HiLink perlStatementList perlStatement
482HiLink perlStatementHash perlStatement
483HiLink perlStatementIOfunc perlStatement
484HiLink perlStatementFiledesc perlStatement
485HiLink perlStatementVector perlStatement
486HiLink perlStatementFiles perlStatement
487HiLink perlStatementFlow perlStatement
488HiLink perlStatementInclude perlStatement
489HiLink perlStatementProc perlStatement
490HiLink perlStatementSocket perlStatement
491HiLink perlStatementIPC perlStatement
492HiLink perlStatementNetwork perlStatement
493HiLink perlStatementPword perlStatement
494HiLink perlStatementTime perlStatement
495HiLink perlStatementMisc perlStatement
496HiLink perlStatementIndirObj perlStatement
497HiLink perlFunctionName perlIdentifier
498HiLink perlMethod perlIdentifier
499HiLink perlFunctionPRef perlType
500HiLink perlPOD perlComment
501HiLink perlShellCommand perlString
502HiLink perlSpecialAscii perlSpecial
503HiLink perlSpecialDollar perlSpecial
504HiLink perlSpecialString perlSpecial
505HiLink perlSpecialStringU perlSpecial
506HiLink perlSpecialMatch perlSpecial
507HiLink perlDATA perlComment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000508
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200509" Possible errors
510HiLink perlNotEmptyLine Error
511HiLink perlElseIfError Error
512HiLink perlSubPrototypeError Error
513HiLink perlSubError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000514
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200515delcommand HiLink
Bram Moolenaar071d4272004-06-13 20:20:40 +0000516
517" Syncing to speed up processing
518"
519if !exists("perl_no_sync_on_sub")
520 syn sync match perlSync grouphere NONE "^\s*\<package\s"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200521 syn sync match perlSync grouphere NONE "^\s*\<sub\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000522 syn sync match perlSync grouphere NONE "^}"
523endif
524
525if !exists("perl_no_sync_on_global_var")
526 syn sync match perlSync grouphere NONE "^$\I[[:alnum:]_:]+\s*=\s*{"
527 syn sync match perlSync grouphere NONE "^[@%]\I[[:alnum:]_:]+\s*=\s*("
528endif
529
530if exists("perl_sync_dist")
531 execute "syn sync maxlines=" . perl_sync_dist
532else
533 syn sync maxlines=100
534endif
535
536syn sync match perlSyncPOD grouphere perlPOD "^=pod"
537syn sync match perlSyncPOD grouphere perlPOD "^=head"
538syn sync match perlSyncPOD grouphere perlPOD "^=item"
539syn sync match perlSyncPOD grouphere NONE "^=cut"
540
541let b:current_syntax = "perl"
542
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200543" XXX Change to sts=4:sw=4
544" vim:ts=8:sts=2:sw=2:expandtab:ft=vim