Mercurial > vim
comparison runtime/syntax/perl.vim @ 12499:d91cf2e26ef0
Update runtime files.
commit https://github.com/vim/vim/commit/37c64c78fd87e086b5a945ad7032787c274e2dcb
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Sep 19 22:06:03 2017 +0200
Update runtime files.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 19 Sep 2017 22:15:06 +0200 |
parents | 46763b01cd9a |
children | bd021eb62e73 |
comparison
equal
deleted
inserted
replaced
12498:bf98d339b568 | 12499:d91cf2e26ef0 |
---|---|
1 " Vim syntax file | 1 " Vim syntax file |
2 " Language: Perl 5 | 2 " Language: Perl 5 |
3 " Maintainer: vim-perl <vim-perl@googlegroups.com> | 3 " Maintainer: vim-perl <vim-perl@googlegroups.com> |
4 " Homepage: http://github.com/vim-perl/vim-perl/tree/master | 4 " Homepage: http://github.com/vim-perl/vim-perl/tree/master |
5 " Bugs/requests: http://github.com/vim-perl/vim-perl/issues | 5 " Bugs/requests: http://github.com/vim-perl/vim-perl/issues |
6 " Last Change: 2013-07-23 | 6 " Last Change: 2017-09-12 |
7 " Contributors: Andy Lester <andy@petdance.com> | 7 " Contributors: Andy Lester <andy@petdance.com> |
8 " Hinrik Örn Sigurðsson <hinrik.sig@gmail.com> | 8 " Hinrik Örn Sigurðsson <hinrik.sig@gmail.com> |
9 " Lukas Mai <l.mai.web.de> | 9 " Lukas Mai <l.mai.web.de> |
10 " Nick Hibma <nick@van-laarhoven.org> | 10 " Nick Hibma <nick@van-laarhoven.org> |
11 " Sonia Heimann <niania@netsurf.org> | 11 " Sonia Heimann <niania@netsurf.org> |
26 " unlet perl_no_sync_on_global_var | 26 " unlet perl_no_sync_on_global_var |
27 " let perl_sync_dist = 100 | 27 " let perl_sync_dist = 100 |
28 " unlet perl_fold | 28 " unlet perl_fold |
29 " unlet perl_fold_blocks | 29 " unlet perl_fold_blocks |
30 " unlet perl_nofold_packages | 30 " unlet perl_nofold_packages |
31 " let perl_nofold_subs = 1 | 31 " unlet perl_nofold_subs |
32 " unlet perl_fold_anonymous_subs | 32 " unlet perl_fold_anonymous_subs |
33 " unlet perl_no_subprototype_error | |
33 | 34 |
34 if exists("b:current_syntax") | 35 if exists("b:current_syntax") |
35 finish | 36 finish |
36 endif | 37 endif |
37 | 38 |
38 let s:cpo_save = &cpo | 39 let s:cpo_save = &cpo |
39 set cpo&vim | 40 set cpo&vim |
40 | |
41 if exists('®expengine') | |
42 let s:regexpengine=®expengine | |
43 set regexpengine=1 | |
44 endif | |
45 | 41 |
46 " POD starts with ^=<word> and ends with ^=cut | 42 " POD starts with ^=<word> and ends with ^=cut |
47 | 43 |
48 if !exists("perl_include_pod") || perl_include_pod == 1 | 44 if !exists("perl_include_pod") || perl_include_pod == 1 |
49 " Include a while extra syntax file | 45 " Include a while extra syntax file |
81 syn match perlFakeGroup "" contained | 77 syn match perlFakeGroup "" contained |
82 syn match perlControl "\<\%(BEGIN\|CHECK\|INIT\|END\|UNITCHECK\)\>\_s*" nextgroup=perlFakeGroup | 78 syn match perlControl "\<\%(BEGIN\|CHECK\|INIT\|END\|UNITCHECK\)\>\_s*" nextgroup=perlFakeGroup |
83 | 79 |
84 syn match perlStatementStorage "\<\%(my\|our\|local\|state\)\>" | 80 syn match perlStatementStorage "\<\%(my\|our\|local\|state\)\>" |
85 syn match perlStatementControl "\<\%(return\|last\|next\|redo\|goto\|break\)\>" | 81 syn match perlStatementControl "\<\%(return\|last\|next\|redo\|goto\|break\)\>" |
86 syn match perlStatementScalar "\<\%(chom\=p\|chr\|crypt\|r\=index\|lc\%(first\)\=\|length\|ord\|pack\|sprintf\|substr\|uc\%(first\)\=\)\>" | 82 syn match perlStatementScalar "\<\%(chom\=p\|chr\|crypt\|r\=index\|lc\%(first\)\=\|length\|ord\|pack\|sprintf\|substr\|fc\|uc\%(first\)\=\)\>" |
87 syn match perlStatementRegexp "\<\%(pos\|quotemeta\|split\|study\)\>" | 83 syn match perlStatementRegexp "\<\%(pos\|quotemeta\|split\|study\)\>" |
88 syn match perlStatementNumeric "\<\%(abs\|atan2\|cos\|exp\|hex\|int\|log\|oct\|rand\|sin\|sqrt\|srand\)\>" | 84 syn match perlStatementNumeric "\<\%(abs\|atan2\|cos\|exp\|hex\|int\|log\|oct\|rand\|sin\|sqrt\|srand\)\>" |
89 syn match perlStatementList "\<\%(splice\|unshift\|shift\|push\|pop\|join\|reverse\|grep\|map\|sort\|unpack\)\>" | 85 syn match perlStatementList "\<\%(splice\|unshift\|shift\|push\|pop\|join\|reverse\|grep\|map\|sort\|unpack\)\>" |
90 syn match perlStatementHash "\<\%(delete\|each\|exists\|keys\|values\)\>" | 86 syn match perlStatementHash "\<\%(delete\|each\|exists\|keys\|values\)\>" |
91 syn match perlStatementIOfunc "\<\%(syscall\|dbmopen\|dbmclose\)\>" | 87 syn match perlStatementIOfunc "\<\%(syscall\|dbmopen\|dbmclose\)\>" |
92 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 | 88 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 |
93 syn match perlStatementFiledesc "\<\%(fcntl\|flock\|ioctl\|open\%(dir\)\=\|read\|seek\%(dir\)\=\|sys\%(open\|read\|seek\|write\)\|truncate\)\>" nextgroup=perlFiledescStatementComma skipwhite | 89 syn match perlStatementFiledesc "\<\%(fcntl\|flock\|ioctl\|open\%(dir\)\=\|read\|seek\%(dir\)\=\|sys\%(open\|read\|seek\|write\)\|truncate\)\>" nextgroup=perlFiledescStatementComma skipwhite |
94 syn match perlStatementVector "\<vec\>" | 90 syn match perlStatementVector "\<vec\>" |
95 syn match perlStatementFiles "\<\%(ch\%(dir\|mod\|own\|root\)\|glob\|link\|mkdir\|readlink\|rename\|rmdir\|symlink\|umask\|unlink\|utime\)\>" | 91 syn match perlStatementFiles "\<\%(ch\%(dir\|mod\|own\|root\)\|glob\|link\|mkdir\|readlink\|rename\|rmdir\|symlink\|umask\|unlink\|utime\)\>" |
96 syn match perlStatementFiles "-[rwxoRWXOezsfdlpSbctugkTBMAC]\>" | 92 syn match perlStatementFiles "-[rwxoRWXOezsfdlpSbctugkTBMAC]\>" |
97 syn match perlStatementFlow "\<\%(caller\|die\|dump\|eval\|exit\|wantarray\)\>" | 93 syn match perlStatementFlow "\<\%(caller\|die\|dump\|eval\|exit\|wantarray\|evalbytes\)\>" |
98 syn match perlStatementInclude "\<\%(require\|import\)\>" | 94 syn match perlStatementInclude "\<\%(require\|import\|unimport\)\>" |
99 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\)\=\)\>\)\=" | 95 syn match perlStatementInclude "\<\%(use\|no\)\s\+\%(\%(attributes\|attrs\|autodie\|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\|overloading\|re\|sigtrap\|sort\|strict\|subs\|threads\%(::shared\)\=\|utf8\|vars\|version\|vmsish\|warnings\%(::register\)\=\)\>\)\=" |
100 syn match perlStatementProc "\<\%(alarm\|exec\|fork\|get\%(pgrp\|ppid\|priority\)\|kill\|pipe\|set\%(pgrp\|priority\)\|sleep\|system\|times\|wait\%(pid\)\=\)\>" | 96 syn match perlStatementProc "\<\%(alarm\|exec\|fork\|get\%(pgrp\|ppid\|priority\)\|kill\|pipe\|set\%(pgrp\|priority\)\|sleep\|system\|times\|wait\%(pid\)\=\)\>" |
101 syn match perlStatementSocket "\<\%(accept\|bind\|connect\|get\%(peername\|sock\%(name\|opt\)\)\|listen\|recv\|send\|setsockopt\|shutdown\|socket\%(pair\)\=\)\>" | 97 syn match perlStatementSocket "\<\%(accept\|bind\|connect\|get\%(peername\|sock\%(name\|opt\)\)\|listen\|recv\|send\|setsockopt\|shutdown\|socket\%(pair\)\=\)\>" |
102 syn match perlStatementIPC "\<\%(msg\%(ctl\|get\|rcv\|snd\)\|sem\%(ctl\|get\|op\)\|shm\%(ctl\|get\|read\|write\)\)\>" | 98 syn match perlStatementIPC "\<\%(msg\%(ctl\|get\|rcv\|snd\)\|sem\%(ctl\|get\|op\)\|shm\%(ctl\|get\|read\|write\)\)\>" |
103 syn match perlStatementNetwork "\<\%(\%(end\|[gs]et\)\%(host\|net\|proto\|serv\)ent\|get\%(\%(host\|net\)by\%(addr\|name\)\|protoby\%(name\|number\)\|servby\%(name\|port\)\)\)\>" | 99 syn match perlStatementNetwork "\<\%(\%(end\|[gs]et\)\%(host\|net\|proto\|serv\)ent\|get\%(\%(host\|net\)by\%(addr\|name\)\|protoby\%(name\|number\)\|servby\%(name\|port\)\)\)\>" |
104 syn match perlStatementPword "\<\%(get\%(pw\%(uid\|nam\)\|gr\%(gid\|nam\)\|login\)\)\|\%(end\|[gs]et\)\%(pw\|gr\)ent\>" | 100 syn match perlStatementPword "\<\%(get\%(pw\%(uid\|nam\)\|gr\%(gid\|nam\)\|login\)\)\|\%(end\|[gs]et\)\%(pw\|gr\)ent\>" |
106 | 102 |
107 syn match perlStatementMisc "\<\%(warn\|format\|formline\|reset\|scalar\|prototype\|lock\|tied\=\|untie\)\>" | 103 syn match perlStatementMisc "\<\%(warn\|format\|formline\|reset\|scalar\|prototype\|lock\|tied\=\|untie\)\>" |
108 | 104 |
109 syn keyword perlTodo TODO TODO: TBD TBD: FIXME FIXME: XXX XXX: NOTE NOTE: contained | 105 syn keyword perlTodo TODO TODO: TBD TBD: FIXME FIXME: XXX XXX: NOTE NOTE: contained |
110 | 106 |
111 syn region perlStatementIndirObjWrap matchgroup=perlStatementIndirObj start="\<\%(map\|grep\|sort\|printf\=\|say\|system\|exec\)\>\s*{" end="}" contains=@perlTop,perlBraces extend | 107 syn region perlStatementIndirObjWrap matchgroup=perlStatementIndirObj start="\%(\<\%(map\|grep\|sort\|printf\=\|say\|system\|exec\)\>\s*\)\@<={" end="}" transparent extend |
112 | 108 |
113 syn match perlLabel "^\s*\h\w*\s*::\@!\%(\<v\d\+\s*:\)\@<!" | 109 syn match perlLabel "^\s*\h\w*\s*::\@!\%(\<v\d\+\s*:\)\@<!" |
114 | 110 |
115 " Perl Identifiers. | 111 " Perl Identifiers. |
116 " | 112 " |
123 " variable - there again, too complicated and too slow. | 119 " variable - there again, too complicated and too slow. |
124 | 120 |
125 " Special variables first ($^A, ...) and ($|, $', ...) | 121 " Special variables first ($^A, ...) and ($|, $', ...) |
126 syn match perlVarPlain "$^[ACDEFHILMNOPRSTVWX]\=" | 122 syn match perlVarPlain "$^[ACDEFHILMNOPRSTVWX]\=" |
127 syn match perlVarPlain "$[\\\"\[\]'&`+*.,;=%~!?@#$<>(-]" | 123 syn match perlVarPlain "$[\\\"\[\]'&`+*.,;=%~!?@#$<>(-]" |
128 syn match perlVarPlain "%+" | 124 syn match perlVarPlain "@[-+]" |
129 syn match perlVarPlain "$\%(0\|[1-9]\d*\)" | 125 syn match perlVarPlain "$\%(0\|[1-9]\d*\)" |
130 " Same as above, but avoids confusion in $::foo (equivalent to $main::foo) | 126 " Same as above, but avoids confusion in $::foo (equivalent to $main::foo) |
131 syn match perlVarPlain "$::\@!" | 127 syn match perlVarPlain "$::\@!" |
132 " These variables are not recognized within matches. | 128 " These variables are not recognized within matches. |
133 syn match perlVarNotInMatches "$[|)]" | 129 syn match perlVarNotInMatches "$[|)]" |
141 " $pack::var, pack:: is a scope, just set "perl_no_scope_in_variables" | 137 " $pack::var, pack:: is a scope, just set "perl_no_scope_in_variables" |
142 " If you don't want complex things like @{${"foo"}} to be processed, | 138 " If you don't want complex things like @{${"foo"}} to be processed, |
143 " just set the variable "perl_no_extended_vars"... | 139 " just set the variable "perl_no_extended_vars"... |
144 | 140 |
145 if !exists("perl_no_scope_in_variables") | 141 if !exists("perl_no_scope_in_variables") |
146 syn match perlVarPlain "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod | 142 syn match perlVarPlain "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref |
147 syn match perlVarPlain2 "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef | 143 syn match perlVarPlain2 "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref |
148 syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod | 144 syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref |
149 else | 145 else |
150 syn match perlVarPlain "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod | 146 syn match perlVarPlain "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref |
151 syn match perlVarPlain2 "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" | 147 syn match perlVarPlain2 "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref |
152 syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod | 148 syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref |
153 endif | 149 endif |
150 | |
151 syn match perlVarPlain2 "%[-+]" | |
154 | 152 |
155 if !exists("perl_no_extended_vars") | 153 if !exists("perl_no_extended_vars") |
156 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,perlBraces | 154 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,perlBraces |
157 syn region perlArrow matchgroup=perlArrow start="->\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained | 155 syn region perlArrow matchgroup=perlArrow start="->\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref contained |
158 syn region perlArrow matchgroup=perlArrow start="->\s*\[" end="\]" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained | 156 syn region perlArrow matchgroup=perlArrow start="->\s*\[" end="\]" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref contained |
159 syn region perlArrow matchgroup=perlArrow start="->\s*{" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained | 157 syn region perlArrow matchgroup=perlArrow start="->\s*{" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref contained |
160 syn match perlArrow "->\s*{\s*\I\i*\s*}" contains=perlVarSimpleMemberName nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained | 158 syn match perlArrow "->\s*{\s*\I\i*\s*}" contains=perlVarSimpleMemberName nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref contained |
161 syn region perlArrow matchgroup=perlArrow start="->\s*\$*\I\i*\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained | 159 syn region perlArrow matchgroup=perlArrow start="->\s*\$*\I\i*\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref contained |
162 syn region perlVarBlock matchgroup=perlVarPlain start="\%($#\|[$@]\)\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend | 160 syn region perlVarBlock matchgroup=perlVarPlain start="\%($#\|[$@]\)\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref extend |
163 syn region perlVarBlock2 matchgroup=perlVarPlain start="[%&*]\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend | 161 syn region perlVarBlock2 matchgroup=perlVarPlain start="[%&*]\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref extend |
164 syn match perlVarPlain2 "[%&*]\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend | 162 syn match perlVarPlain2 "[%&*]\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref extend |
165 syn match perlVarPlain "\%(\$#\|[@$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend | 163 syn match perlVarPlain "\%(\$#\|[@$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref extend |
166 syn region perlVarMember matchgroup=perlVarPlain start="\%(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend | 164 syn region perlVarMember matchgroup=perlVarPlain start="\%(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref extend |
167 syn match perlVarSimpleMember "\%(->\)\={\s*\I\i*\s*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contains=perlVarSimpleMemberName contained extend | 165 syn match perlVarSimpleMember "\%(->\)\={\s*\I\i*\s*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref contains=perlVarSimpleMemberName contained extend |
168 syn match perlVarSimpleMemberName "\I\i*" contained | 166 syn match perlVarSimpleMemberName "\I\i*" contained |
169 syn region perlVarMember matchgroup=perlVarPlain start="\%(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend | 167 syn region perlVarMember matchgroup=perlVarPlain start="\%(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref extend |
170 syn match perlPackageConst "__PACKAGE__" nextgroup=perlMethod | 168 syn match perlPackageConst "__PACKAGE__" nextgroup=perlMethod,perlPostDeref |
171 syn match perlMethod "->\$*\I\i*" contained nextgroup=perlVarSimpleMember,perlVarMember,perlMethod | 169 syn match perlMethod "->\$*\I\i*" contained nextgroup=perlVarSimpleMember,perlVarMember,perlMethod,perlPostDeref |
170 syn match perlPostDeref "->\%($#\|[$@%&*]\)\*" contained nextgroup=perlVarSimpleMember,perlVarMember,perlMethod,perlPostDeref | |
171 syn region perlPostDeref start="->\%($#\|[$@%&*]\)\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarSimpleMember,perlVarMember,perlMethod,perlPostDeref | |
172 syn region perlPostDeref matchgroup=perlPostDeref start="->\%($#\|[$@%&*]\){" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarSimpleMember,perlVarMember,perlMethod,perlPostDeref | |
172 endif | 173 endif |
173 | 174 |
174 " File Descriptors | 175 " File Descriptors |
175 syn match perlFiledescRead "<\h\w*>" | 176 syn match perlFiledescRead "<\h\w*>" |
176 | 177 |
177 syn match perlFiledescStatementComma "(\=\s*\u\w*\s*,"me=e-1 transparent contained contains=perlFiledescStatement | 178 syn match perlFiledescStatementComma "(\=\s*\<\u\w*\>\s*,"me=e-1 transparent contained contains=perlFiledescStatement |
178 syn match perlFiledescStatementNocomma "(\=\s*\u\w*\s*[^, \t]"me=e-1 transparent contained contains=perlFiledescStatement | 179 syn match perlFiledescStatementNocomma "(\=\s*\<\u\w*\>\s*[^, \t]"me=e-1 transparent contained contains=perlFiledescStatement |
179 | 180 |
180 syn match perlFiledescStatement "\u\w*" contained | 181 syn match perlFiledescStatement "\<\u\w*\>" contained |
181 | 182 |
182 " Special characters in strings and matches | 183 " Special characters in strings and matches |
183 syn match perlSpecialString "\\\%(\o\{1,3}\|x\%({\x\+}\|\x\{1,2}\)\|c.\|[^cx]\)" contained extend | 184 syn match perlSpecialString "\\\%(\o\{1,3}\|x\%({\x\+}\|\x\{1,2}\)\|c.\|[^cx]\)" contained extend |
184 syn match perlSpecialStringU2 "\\." extend contained contains=NONE | 185 syn match perlSpecialStringU2 "\\." extend contained contains=NONE |
185 syn match perlSpecialStringU "\\\\" contained | 186 syn match perlSpecialStringU "\\\\" contained |
239 syn region perlBracesDQ start=+{+ end=+}+ extend contained contains=perlBracesDQ,@perlInterpDQ keepend | 240 syn region perlBracesDQ start=+{+ end=+}+ extend contained contains=perlBracesDQ,@perlInterpDQ keepend |
240 syn region perlAnglesDQ start=+<+ end=+>+ extend contained contains=perlAnglesDQ,@perlInterpDQ keepend | 241 syn region perlAnglesDQ start=+<+ end=+>+ extend contained contains=perlAnglesDQ,@perlInterpDQ keepend |
241 | 242 |
242 | 243 |
243 " Simple version of searches and matches | 244 " Simple version of searches and matches |
244 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1[msixpodualgc]*+ contains=@perlInterpMatch keepend extend | 245 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1[msixpodualgcn]*+ contains=@perlInterpMatch keepend extend |
245 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m#+ end=+#[msixpodualgc]*+ contains=@perlInterpMatch keepend extend | 246 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m#+ end=+#[msixpodualgcn]*+ contains=@perlInterpMatch keepend extend |
246 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*'+ end=+'[msixpodualgc]*+ contains=@perlInterpSQ keepend extend | 247 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*'+ end=+'[msixpodualgcn]*+ contains=@perlInterpSQ keepend extend |
247 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*/+ end=+/[msixpodualgc]*+ contains=@perlInterpSlash keepend extend | 248 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*/+ end=+/[msixpodualgcn]*+ contains=@perlInterpSlash keepend extend |
248 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*(+ end=+)[msixpodualgc]*+ contains=@perlInterpMatch,perlParensDQ keepend extend | 249 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*(+ end=+)[msixpodualgcn]*+ contains=@perlInterpMatch,perlParensDQ keepend extend |
249 | 250 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*{+ end=+}[msixpodualgcn]*+ contains=@perlInterpMatch,perlBracesDQ extend |
250 " A special case for m{}, m<> and m[] which allows for comments and extra whitespace in the pattern | 251 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*<+ end=+>[msixpodualgcn]*+ contains=@perlInterpMatch,perlAnglesDQ keepend extend |
251 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*{+ end=+}[msixpodualgc]*+ contains=@perlInterpMatch,perlComment,perlBracesDQ extend | 252 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*\[+ end=+\][msixpodualgcn]*+ contains=@perlInterpMatch,perlBracketsDQ keepend extend |
252 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*<+ end=+>[msixpodualgc]*+ contains=@perlInterpMatch,perlAnglesDQ keepend extend | |
253 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*\[+ end=+\][msixpodualgc]*+ contains=@perlInterpMatch,perlComment,perlBracketsDQ keepend extend | |
254 | 253 |
255 " Below some hacks to recognise the // variant. This is virtually impossible to catch in all | 254 " Below some hacks to recognise the // variant. This is virtually impossible to catch in all |
256 " cases as the / is used in so many other ways, but these should be the most obvious ones. | 255 " cases as the / is used in so many other ways, but these should be the most obvious ones. |
257 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=+/[msixpodualgc]*+ contains=@perlInterpSlash extend | 256 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=+/[msixpodualgcn]*+ contains=@perlInterpSlash extend |
258 | 257 |
259 | 258 |
260 " Substitutions | 259 " Substitutions |
261 " perlMatch is the first part, perlSubstitution* is the substitution part | 260 " perlMatch is the first part, perlSubstitution* is the substitution part |
262 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend extend | 261 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend extend |
265 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s#+ end=+#+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend extend | 264 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s#+ end=+#+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend extend |
266 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*(+ end=+)+ contains=@perlInterpMatch,perlParensDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend | 265 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*(+ end=+)+ contains=@perlInterpMatch,perlParensDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend |
267 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*<+ end=+>+ contains=@perlInterpMatch,perlAnglesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend | 266 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*<+ end=+>+ contains=@perlInterpMatch,perlAnglesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend |
268 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*\[+ end=+\]+ contains=@perlInterpMatch,perlBracketsDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend | 267 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*\[+ end=+\]+ contains=@perlInterpMatch,perlBracketsDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend |
269 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend | 268 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend |
270 syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+\z([^[:space:]'([{<]\)+ end=+\z1[msixpodualgcer]*+ keepend contained contains=@perlInterpDQ extend | 269 syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+\z([^[:space:]'([{<]\)+ end=+\z1[msixpodualgcern]*+ keepend contained contains=@perlInterpDQ extend |
271 syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+(+ end=+)[msixpodualgcer]*+ contained contains=@perlInterpDQ,perlParensDQ keepend extend | 270 syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+(+ end=+)[msixpodualgcern]*+ contained contains=@perlInterpDQ,perlParensDQ keepend extend |
272 syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+\[+ end=+\][msixpodualgcer]*+ contained contains=@perlInterpDQ,perlBracketsDQ keepend extend | 271 syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+\[+ end=+\][msixpodualgcern]*+ contained contains=@perlInterpDQ,perlBracketsDQ keepend extend |
273 syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+{+ end=+}[msixpodualgcer]*+ contained contains=@perlInterpDQ,perlBracesDQ keepend extend extend | 272 syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+{+ end=+}[msixpodualgcern]*+ contained contains=@perlInterpDQ,perlBracesDQ keepend extend extend |
274 syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+<+ end=+>[msixpodualgcer]*+ contained contains=@perlInterpDQ,perlAnglesDQ keepend extend | 273 syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+<+ end=+>[msixpodualgcern]*+ contained contains=@perlInterpDQ,perlAnglesDQ keepend extend |
275 syn region perlSubstitutionSQ matchgroup=perlMatchStartEnd start=+'+ end=+'[msixpodualgcer]*+ contained contains=@perlInterpSQ keepend extend | 274 syn region perlSubstitutionSQ matchgroup=perlMatchStartEnd start=+'+ end=+'[msixpodualgcern]*+ contained contains=@perlInterpSQ keepend extend |
276 | 275 |
277 " Translations | 276 " Translations |
278 " perlMatch is the first part, perlTranslation* is the second, translator part. | 277 " perlMatch is the first part, perlTranslation* is the second, translator part. |
279 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\>\s*\z([^[:space:]([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ | 278 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\>\s*\z([^[:space:]([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ |
280 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)#+ end=+#+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ | 279 syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)#+ end=+#+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ |
312 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend extend | 311 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend extend |
313 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend extend | 312 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend extend |
314 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend extend | 313 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend extend |
315 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend extend | 314 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend extend |
316 | 315 |
317 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\>\s*\z([^[:space:]#([{<'/]\)+ end=+\z1[imosx]*+ contains=@perlInterpMatch keepend extend | 316 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\>\s*\z([^[:space:]#([{<'/]\)+ end=+\z1[imosxdual]*+ contains=@perlInterpMatch keepend extend |
318 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*/+ end=+/[imosx]*+ contains=@perlInterpSlash keepend extend | 317 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*/+ end=+/[imosxdual]*+ contains=@perlInterpSlash keepend extend |
319 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr#+ end=+#[imosx]*+ contains=@perlInterpMatch keepend extend | 318 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr#+ end=+#[imosxdual]*+ contains=@perlInterpMatch keepend extend |
320 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*'+ end=+'[imosx]*+ contains=@perlInterpSQ keepend extend | 319 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*'+ end=+'[imosxdual]*+ contains=@perlInterpSQ keepend extend |
321 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*(+ end=+)[imosx]*+ contains=@perlInterpMatch,perlParensDQ keepend extend | 320 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*(+ end=+)[imosxdual]*+ contains=@perlInterpMatch,perlParensDQ keepend extend |
322 | 321 |
323 " A special case for qr{}, qr<> and qr[] which allows for comments and extra whitespace in the pattern | 322 " A special case for qr{}, qr<> and qr[] which allows for comments and extra whitespace in the pattern |
324 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*{+ end=+}[imosx]*+ contains=@perlInterpMatch,perlBracesDQ,perlComment keepend extend | 323 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*{+ end=+}[imosxdual]*+ contains=@perlInterpMatch,perlBracesDQ,perlComment keepend extend |
325 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*<+ end=+>[imosx]*+ contains=@perlInterpMatch,perlAnglesDQ,perlComment keepend extend | 324 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*<+ end=+>[imosxdual]*+ contains=@perlInterpMatch,perlAnglesDQ,perlComment keepend extend |
326 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*\[+ end=+\][imosx]*+ contains=@perlInterpMatch,perlBracketsDQ,perlComment keepend extend | 325 syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*\[+ end=+\][imosxdual]*+ contains=@perlInterpMatch,perlBracketsDQ,perlComment keepend extend |
327 | 326 |
328 " Constructs such as print <<EOF [...] EOF, 'here' documents | 327 " Constructs such as print <<EOF [...] EOF, 'here' documents |
329 " | 328 " |
330 " XXX Any statements after the identifier are in perlString colour (i.e. | 329 " XXX Any statements after the identifier are in perlString colour (i.e. |
331 " 'if $a' in 'print <<EOF if $a'). This is almost impossible to get right it | 330 " 'if $a' in 'print <<EOF if $a'). This is almost impossible to get right it |
332 " seems due to the 'auto-extending nature' of regions. | 331 " seems due to the 'auto-extending nature' of regions. |
332 syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\z(\I\i*\)+ end=+$+ contains=@perlTop oneline | |
333 syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+$+ contains=@perlTop oneline | |
334 syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+$+ contains=@perlTop oneline | |
335 syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\s*""+ end=+$+ contains=@perlTop oneline | |
336 syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\s*''+ end=+$+ contains=@perlTop oneline | |
333 if exists("perl_fold") | 337 if exists("perl_fold") |
334 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\z(\I\i*\).*+ end=+^\z1$+ contains=@perlInterpDQ fold extend | 338 syn region perlHereDoc start=+<<\z(\I\i*\)+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ fold extend |
335 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ fold extend | 339 syn region perlHereDoc start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ fold extend |
336 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ fold extend | 340 syn region perlHereDoc start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpSQ fold extend |
337 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*""+ end=+^$+ contains=@perlInterpDQ,perlNotEmptyLine fold extend | 341 syn region perlHereDoc start=+<<\s*""+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpDQ,perlNotEmptyLine fold extend |
338 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*''+ end=+^$+ contains=@perlInterpSQ,perlNotEmptyLine fold extend | 342 syn region perlHereDoc start=+<<\s*''+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpSQ,perlNotEmptyLine fold extend |
339 syn region perlAutoload matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL fold extend | 343 syn region perlAutoload matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL fold extend |
340 else | 344 else |
341 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\z(\I\i*\).*+ end=+^\z1$+ contains=@perlInterpDQ | 345 syn region perlHereDoc start=+<<\z(\I\i*\)+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ |
342 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ | 346 syn region perlHereDoc start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ |
343 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ | 347 syn region perlHereDoc start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpSQ |
344 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*""+ end=+^$+ contains=@perlInterpDQ,perlNotEmptyLine | 348 syn region perlHereDoc start=+<<\s*""+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpDQ,perlNotEmptyLine |
345 syn region perlHereDoc matchgroup=perlStringStartEnd start=+<<\s*''+ end=+^$+ contains=@perlInterpSQ,perlNotEmptyLine | 349 syn region perlHereDoc start=+<<\s*''+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpSQ,perlNotEmptyLine |
346 syn region perlAutoload matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL | 350 syn region perlAutoload matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL |
347 endif | 351 endif |
348 | 352 |
349 | 353 |
350 " Class declarations | 354 " Class declarations |
354 | 358 |
355 " Functions | 359 " Functions |
356 " sub [name] [(prototype)] { | 360 " sub [name] [(prototype)] { |
357 " | 361 " |
358 syn match perlSubError "[^[:space:];{#]" contained | 362 syn match perlSubError "[^[:space:];{#]" contained |
359 if v:version == 701 && !has('patch221') " XXX I hope that's the right one | 363 syn match perlSubAttributesCont "\h\w*\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained |
360 syn match perlSubAttributes ":" contained | 364 syn region perlSubAttributesCont matchgroup=perlSubAttributesCont start="\h\w*(" end=")\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained contains=@perlInterpSQ,perlParensSQ |
361 else | 365 syn cluster perlSubAttrMaybe contains=perlSubAttributesCont,perlSubError,perlFakeGroup |
362 syn match perlSubAttributesCont "\h\w*\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained | 366 syn match perlSubAttributes "" contained nextgroup=perlSubError |
363 syn region perlSubAttributesCont matchgroup=perlSubAttributesCont start="\h\w*(" end=")\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained contains=@perlInterpSQ,perlParensSQ | 367 syn match perlSubAttributes ":\_s*" contained nextgroup=@perlSubAttrMaybe |
364 syn cluster perlSubAttrMaybe contains=perlSubAttributesCont,perlSubError,perlFakeGroup | 368 if get(g:, "perl_sub_signatures", 0) |
365 syn match perlSubAttributes "" contained nextgroup=perlSubError | 369 syn match perlSignature +(\_[^)]*)\_s*+ nextgroup=perlSubAttributes,perlComment contained |
366 syn match perlSubAttributes ":\_s*" contained nextgroup=@perlSubAttrMaybe | 370 else |
367 endif | 371 syn match perlSubPrototypeError "(\%(\_s*\%(\%(\\\%([$@%&*]\|\[[$@%&*]\+\]\)\|[$&*]\|[@%]\%(\_s*)\)\@=\|;\%(\_s*[)$@%&*\\]\)\@=\|_\%(\_s*[);]\)\@=\)\_s*\)*\)\@>\zs\_[^)]\+" contained |
368 syn match perlSubPrototypeError "(\%(\_s*\%(\%(\\\%([$@%&*]\|\[[$@%&*]\+\]\)\|[$&*]\|[@%]\%(\_s*)\)\@=\|;\%(\_s*[)$@%&*\\]\)\@=\|_\%(\_s*[);]\)\@=\)\_s*\)*\)\@>\zs\_[^)]\+" contained | 372 syn match perlSubPrototype +(\_[^)]*)\_s*+ nextgroup=perlSubAttributes,perlComment contained contains=perlSubPrototypeError |
369 syn match perlSubPrototype +(\_[^)]*)\_s*\|+ nextgroup=perlSubAttributes,perlComment contained contains=perlSubPrototypeError | 373 endif |
370 syn match perlSubName +\%(\h\|::\|'\w\)\%(\w\|::\|'\w\)*\_s*\|+ contained nextgroup=perlSubPrototype,perlComment | 374 |
375 syn match perlSubName +\%(\h\|::\|'\w\)\%(\w\|::\|'\w\)*\_s*\|+ contained nextgroup=perlSubPrototype,perlSignature,perlSubAttributes,perlComment | |
371 | 376 |
372 syn match perlFunction +\<sub\>\_s*+ nextgroup=perlSubName | 377 syn match perlFunction +\<sub\>\_s*+ nextgroup=perlSubName |
373 | |
374 if !exists("perl_no_scope_in_variables") | |
375 syn match perlFunctionPRef "\h\w*::" contained | |
376 syn match perlFunctionName "\h\w*[^:]" contained | |
377 else | |
378 syn match perlFunctionName "\h[[:alnum:]_:]*" contained | |
379 endif | |
380 | 378 |
381 " The => operator forces a bareword to the left of it to be interpreted as | 379 " The => operator forces a bareword to the left of it to be interpreted as |
382 " a string | 380 " a string |
383 syn match perlString "\I\@<!-\?\I\i*\%(\s*=>\)\@=" | 381 syn match perlString "\I\@<!-\?\I\i*\%(\s*=>\)\@=" |
384 | 382 |
395 syn match perlFormatField "@[^A-Za-z_|<>~#*]"me=e-1 contained | 393 syn match perlFormatField "@[^A-Za-z_|<>~#*]"me=e-1 contained |
396 syn match perlFormatField "@$" contained | 394 syn match perlFormatField "@$" contained |
397 | 395 |
398 " __END__ and __DATA__ clauses | 396 " __END__ and __DATA__ clauses |
399 if exists("perl_fold") | 397 if exists("perl_fold") |
400 syntax region perlDATA start="^__DATA__$" skip="." end="." fold | 398 syntax region perlDATA start="^__DATA__$" skip="." end="." contains=@perlDATA fold |
401 syntax region perlDATA start="^__END__$" skip="." end="." contains=perlPOD,@perlDATA fold | 399 syntax region perlDATA start="^__END__$" skip="." end="." contains=perlPOD,@perlDATA fold |
402 else | 400 else |
403 syntax region perlDATA start="^__DATA__$" skip="." end="." | 401 syntax region perlDATA start="^__DATA__$" skip="." end="." contains=@perlDATA |
404 syntax region perlDATA start="^__END__$" skip="." end="." contains=perlPOD,@perlDATA | 402 syntax region perlDATA start="^__END__$" skip="." end="." contains=perlPOD,@perlDATA |
405 endif | 403 endif |
406 | 404 |
407 " | 405 " |
408 " Folding | 406 " Folding |
412 " keyword, otherwise this will screw up Pod lines that match /^package/ | 410 " keyword, otherwise this will screw up Pod lines that match /^package/ |
413 if !exists("perl_nofold_packages") | 411 if !exists("perl_nofold_packages") |
414 syn region perlPackageFold start="^package \S\+;\s*\%(#.*\)\=$" end="^1;\=\s*\%(#.*\)\=$" end="\n\+package"me=s-1 transparent fold keepend | 412 syn region perlPackageFold start="^package \S\+;\s*\%(#.*\)\=$" end="^1;\=\s*\%(#.*\)\=$" end="\n\+package"me=s-1 transparent fold keepend |
415 endif | 413 endif |
416 if !exists("perl_nofold_subs") | 414 if !exists("perl_nofold_subs") |
417 if exists("perl_fold_anonymous_subs") && perl_fold_anonymous_subs | 415 if get(g:, "perl_fold_anonymous_subs", 0) |
418 syn region perlSubFold start="\<sub\>[^\n;]*{" end="}" transparent fold keepend extend | 416 syn region perlSubFold start="\<sub\>[^{]*{" end="}" transparent fold keepend extend |
419 syn region perlSubFold start="\<\%(BEGIN\|END\|CHECK\|INIT\)\>\s*{" end="}" transparent fold keepend | 417 syn region perlSubFold start="\<\%(BEGIN\|END\|CHECK\|INIT\)\>\s*{" end="}" transparent fold keepend |
420 else | 418 else |
421 syn region perlSubFold start="^\z(\s*\)\<sub\>.*[^};]$" end="^\z1}\s*\%(#.*\)\=$" transparent fold keepend | 419 syn region perlSubFold start="^\z(\s*\)\<sub\>.*[^};]$" end="^\z1}\s*\%(#.*\)\=$" transparent fold keepend |
422 syn region perlSubFold start="^\z(\s*\)\<\%(BEGIN\|END\|CHECK\|INIT\|UNITCHECK\)\>.*[^};]$" end="^\z1}\s*$" transparent fold keepend | 420 syn region perlSubFold start="^\z(\s*\)\<\%(BEGIN\|END\|CHECK\|INIT\|UNITCHECK\)\>.*[^};]$" end="^\z1}\s*$" transparent fold keepend |
423 endif | 421 endif |
424 endif | 422 endif |
425 | 423 |
426 if exists("perl_fold_blocks") | 424 if exists("perl_fold_blocks") |
427 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 | 425 syn region perlBlockFold start="^\z(\s*\)\%(if\|elsif\|unless\|for\|while\|until\|given\)\s*(.*)\%(\s*{\)\=\s*\%(#.*\)\=$" start="^\z(\s*\)for\%(each\)\=\s*\%(\%(my\|our\)\=\s*\S\+\s*\)\=(.*)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend |
428 syn region perlBlockFold start="^\z(\s*\)\%(do\|else\)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*while" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend | 426 syn region perlBlockFold start="^\z(\s*\)\%(do\|else\)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*while" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend |
429 endif | 427 endif |
430 | 428 |
431 setlocal foldmethod=syntax | 429 setlocal foldmethod=syntax |
432 syn sync fromstart | 430 syn sync fromstart |
433 else | 431 else |
434 " fromstart above seems to set minlines even if perl_fold is not set. | 432 " fromstart above seems to set minlines even if perl_fold is not set. |
435 syn sync minlines=0 | 433 syn sync minlines=0 |
436 endif | 434 endif |
437 | |
438 | 435 |
439 " NOTE: If you're linking new highlight groups to perlString, please also put | 436 " NOTE: If you're linking new highlight groups to perlString, please also put |
440 " them into b:match_skip in ftplugin/perl.vim. | 437 " them into b:match_skip in ftplugin/perl.vim. |
441 | 438 |
442 " The default highlighting. | 439 " The default highlighting. |
456 hi def link perlRepeat Repeat | 453 hi def link perlRepeat Repeat |
457 hi def link perlOperator Operator | 454 hi def link perlOperator Operator |
458 hi def link perlFunction Keyword | 455 hi def link perlFunction Keyword |
459 hi def link perlSubName Function | 456 hi def link perlSubName Function |
460 hi def link perlSubPrototype Type | 457 hi def link perlSubPrototype Type |
458 hi def link perlSignature Type | |
461 hi def link perlSubAttributes PreProc | 459 hi def link perlSubAttributes PreProc |
462 hi def link perlSubAttributesCont perlSubAttributes | 460 hi def link perlSubAttributesCont perlSubAttributes |
463 hi def link perlComment Comment | 461 hi def link perlComment Comment |
464 hi def link perlTodo Todo | 462 hi def link perlTodo Todo |
465 if exists("perl_string_as_statement") | 463 if exists("perl_string_as_statement") |
514 hi def link perlStatementTime perlStatement | 512 hi def link perlStatementTime perlStatement |
515 hi def link perlStatementMisc perlStatement | 513 hi def link perlStatementMisc perlStatement |
516 hi def link perlStatementIndirObj perlStatement | 514 hi def link perlStatementIndirObj perlStatement |
517 hi def link perlFunctionName perlIdentifier | 515 hi def link perlFunctionName perlIdentifier |
518 hi def link perlMethod perlIdentifier | 516 hi def link perlMethod perlIdentifier |
517 hi def link perlPostDeref perlIdentifier | |
519 hi def link perlFunctionPRef perlType | 518 hi def link perlFunctionPRef perlType |
520 hi def link perlPOD perlComment | 519 if !get(g:, 'perl_include_pod', 1) |
520 hi def link perlPOD perlComment | |
521 endif | |
521 hi def link perlShellCommand perlString | 522 hi def link perlShellCommand perlString |
522 hi def link perlSpecialAscii perlSpecial | 523 hi def link perlSpecialAscii perlSpecial |
523 hi def link perlSpecialDollar perlSpecial | 524 hi def link perlSpecialDollar perlSpecial |
524 hi def link perlSpecialString perlSpecial | 525 hi def link perlSpecialString perlSpecial |
525 hi def link perlSpecialStringU perlSpecial | 526 hi def link perlSpecialStringU perlSpecial |
546 hi def link perlNotEmptyLine Error | 547 hi def link perlNotEmptyLine Error |
547 hi def link perlElseIfError Error | 548 hi def link perlElseIfError Error |
548 hi def link perlSubPrototypeError Error | 549 hi def link perlSubPrototypeError Error |
549 hi def link perlSubError Error | 550 hi def link perlSubError Error |
550 | 551 |
551 | |
552 " Syncing to speed up processing | 552 " Syncing to speed up processing |
553 " | 553 " |
554 if !exists("perl_no_sync_on_sub") | 554 if !exists("perl_no_sync_on_sub") |
555 syn sync match perlSync grouphere NONE "^\s*\<package\s" | 555 syn sync match perlSync grouphere NONE "^\s*\<package\s" |
556 syn sync match perlSync grouphere NONE "^\s*\<sub\>" | 556 syn sync match perlSync grouphere NONE "^\s*\<sub\>" |
573 syn sync match perlSyncPOD grouphere perlPOD "^=item" | 573 syn sync match perlSyncPOD grouphere perlPOD "^=item" |
574 syn sync match perlSyncPOD grouphere NONE "^=cut" | 574 syn sync match perlSyncPOD grouphere NONE "^=cut" |
575 | 575 |
576 let b:current_syntax = "perl" | 576 let b:current_syntax = "perl" |
577 | 577 |
578 if exists('®expengine') | |
579 let ®expengine=s:regexpengine | |
580 unlet s:regexpengine | |
581 endif | |
582 | |
583 let &cpo = s:cpo_save | 578 let &cpo = s:cpo_save |
584 unlet s:cpo_save | 579 unlet s:cpo_save |
585 | 580 |
586 " XXX Change to sts=4:sw=4 | 581 " XXX Change to sts=4:sw=4 |
587 " vim:ts=8:sts=2:sw=2:expandtab:ft=vim | 582 " vim:ts=8:sts=2:sw=2:expandtab:ft=vim |