+++ /dev/null
-" Vim syntax file
-" Language: Perl
-" Maintainer: Nick Hibma <nick@van-laarhoven.org>
-" Last Change: 2007 March 13
-" Location: http://www.van-laarhoven.org/vim/syntax/perl.vim
-"
-" Please download most recent version first before mailing
-" any comments.
-" See also the file perl.vim.regression.pl to check whether your
-" modifications work in the most odd cases
-" http://www.van-laarhoven.org/vim/syntax/perl.vim.regression.pl
-"
-" Original version: Sonia Heimann <niania@netsurf.org>
-" Thanks to many people for their contribution.
-
-" The following parameters are available for tuning the
-" perl syntax highlighting, with defaults given:
-"
-" unlet perl_include_pod
-" unlet perl_want_scope_in_variables
-" unlet perl_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
-
-" Remove any old syntax stuff that was loaded (5.x) or quit when a syntax file
-" was already loaded (6.x).
-if version < 600
- syntax clear
-elseif exists("b:current_syntax")
- finish
-endif
-
-" Unset perl_fold if it set but vim doesn't support it.
-if version < 600 && exists("perl_fold")
- unlet perl_fold
-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
-
-
-" All keywords
-"
-if exists("perl_fold") && exists("perl_fold_blocks")
- syn match perlConditional "\<if\>"
- syn match perlConditional "\<elsif\>"
- syn match perlConditional "\<unless\>"
- syn match perlConditional "\<else\>" nextgroup=perlElseIfError skipwhite skipnl skipempty
-else
- syn keyword perlConditional if elsif unless
- syn keyword perlConditional else nextgroup=perlElseIfError skipwhite skipnl skipempty
-endif
-syn keyword perlConditional switch eq ne gt lt ge le cmp not and or xor err
-if exists("perl_fold") && exists("perl_fold_blocks")
- syn match perlRepeat "\<while\>"
- syn match perlRepeat "\<for\>"
- syn match perlRepeat "\<foreach\>"
- syn match perlRepeat "\<do\>"
- syn match perlRepeat "\<until\>"
- syn match perlRepeat "\<continue\>"
-else
- syn keyword perlRepeat while for foreach do until continue
-endif
-syn keyword perlOperator defined undef and or not bless ref
-if exists("perl_fold")
- " if BEGIN/END would be a keyword the perlBEGINENDFold does not work
- syn match perlControl "\<BEGIN\|CHECK\|INIT\|END\>" contained
-else
- syn keyword perlControl BEGIN END CHECK INIT
-endif
-
-syn keyword perlStatementStorage my local our
-syn keyword perlStatementControl goto return last next redo
-syn keyword perlStatementScalar chomp chop chr crypt index lc lcfirst length ord pack reverse rindex sprintf substr uc ucfirst
-syn keyword perlStatementRegexp pos quotemeta split study
-syn keyword perlStatementNumeric abs atan2 cos exp hex int log oct rand sin sqrt srand
-syn keyword perlStatementList splice unshift shift push pop split join reverse grep map sort unpack
-syn keyword perlStatementHash each exists keys values tie tied untie
-syn keyword perlStatementIOfunc carp confess croak dbmclose dbmopen die syscall
-syn keyword perlStatementFiledesc binmode close closedir eof fileno getc lstat print printf readdir readline readpipe rewinddir select stat tell telldir write nextgroup=perlFiledescStatementNocomma skipwhite
-syn keyword perlStatementFiledesc fcntl flock ioctl open opendir read seek seekdir sysopen sysread sysseek syswrite truncate nextgroup=perlFiledescStatementComma skipwhite
-syn keyword perlStatementVector pack vec
-syn keyword perlStatementFiles chdir chmod chown chroot glob link mkdir readlink rename rmdir symlink umask unlink utime
-syn match perlStatementFiles "-[rwxoRWXOezsfdlpSbctugkTBMAC]\>"
-syn keyword perlStatementFlow caller die dump eval exit wantarray
-syn keyword perlStatementInclude require
-syn match perlStatementInclude "\<\(use\|no\)\s\+\(\(integer\|strict\|lib\|sigtrap\|subs\|vars\|warnings\|utf8\|byte\|base\|fields\)\>\)\="
-syn keyword perlStatementScope import
-syn keyword perlStatementProc alarm exec fork getpgrp getppid getpriority kill pipe setpgrp setpriority sleep system times wait waitpid
-syn keyword perlStatementSocket accept bind connect getpeername getsockname getsockopt listen recv send setsockopt shutdown socket socketpair
-syn keyword perlStatementIPC msgctl msgget msgrcv msgsnd semctl semget semop shmctl shmget shmread shmwrite
-syn keyword perlStatementNetwork endhostent endnetent endprotoent endservent gethostbyaddr gethostbyname gethostent getnetbyaddr getnetbyname getnetent getprotobyname getprotobynumber getprotoent getservbyname getservbyport getservent sethostent setnetent setprotoent setservent
-syn keyword perlStatementPword getpwuid getpwnam getpwent setpwent endpwent getgrent getgrgid getlogin getgrnam setgrent endgrent
-syn keyword perlStatementTime gmtime localtime time times
-
-syn keyword perlStatementMisc warn formline reset scalar delete prototype lock
-syn keyword perlStatementNew new
-
-syn keyword perlTodo TODO TBD FIXME XXX contained
-
-" 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 "$^[ADEFHILMOPSTWX]\="
-syn match perlVarPlain "$[\\\"\[\]'&`+*.,;=%~!?@#$<>(-]"
-syn match perlVarPlain "$\(0\|[1-9][0-9]*\)"
-" 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 "\(\h\w*\)\=\(::\|'\)\I"me=e-1 contained
-
-" To highlight packages in variables as a scope reference - i.e. in $pack::var,
-" pack:: is a scope, just set "perl_want_scope_in_variables"
-" If you *want* complex things like @{${"foo"}} to be processed,
-" just set the variable "perl_extended_vars"...
-
-" FIXME value between {} should be marked as string. is treated as such by Perl.
-" At the moment it is marked as something greyish instead of read. Probably todo
-" with transparency. Or maybe we should handle the bare word in that case. or make it into
-
-if exists("perl_want_scope_in_variables")
- syn match perlVarPlain "\\\=\([@$]\|\$#\)\$*\(\I\i*\)\=\(\(::\|'\)\I\i*\)*\>" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
- syn match perlVarPlain2 "\\\=%\$*\(\I\i*\)\=\(\(::\|'\)\I\i*\)*\>" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
- syn match perlFunctionName "\\\=&\$*\(\I\i*\)\=\(\(::\|'\)\I\i*\)*\>" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember
-else
- syn match perlVarPlain "\\\=\([@$]\|\$#\)\$*\(\I\i*\)\=\(\(::\|'\)\I\i*\)*\>" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
- syn match perlVarPlain2 "\\\=%\$*\(\I\i*\)\=\(\(::\|'\)\I\i*\)*\>" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
- syn match perlFunctionName "\\\=&\$*\(\I\i*\)\=\(\(::\|'\)\I\i*\)*\>" nextgroup=perlVarMember,perlVarSimpleMember
-endif
-
-if exists("perl_extended_vars")
- syn cluster perlExpr contains=perlStatementScalar,perlStatementRegexp,perlStatementNumeric,perlStatementList,perlStatementHash,perlStatementFiles,perlStatementTime,perlStatementMisc,perlVarPlain,perlVarPlain2,perlVarNotInMatches,perlVarSlash,perlVarBlock,perlShellCommand,perlFloat,perlNumber,perlStringUnexpanded,perlString,perlQQ
- syn region perlVarBlock matchgroup=perlVarPlain start="\($#\|[@%$]\)\$*{" skip="\\}" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember
- syn region perlVarBlock matchgroup=perlVarPlain start="&\$*{" skip="\\}" end="}" contains=@perlExpr
- syn match perlVarPlain "\\\=\(\$#\|[@%&$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember
- syn region perlVarMember matchgroup=perlVarPlain start="\(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember
- syn match perlVarSimpleMember "\(->\)\={\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember contains=perlVarSimpleMemberName contained
- syn match perlVarSimpleMemberName "\I\i*" contained
- syn region perlVarMember matchgroup=perlVarPlain start="\(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember
- syn match perlMethod "\(->\)\I\i*" contained
-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 "\\\(\d\+\|[xX]\x\+\|c\u\|.\)" contained
-syn match perlSpecialStringU "\\['\\]" contained
-syn match perlSpecialMatch "{\d\+\(,\(\d\+\)\=\)\=}" contained
-syn match perlSpecialMatch "\[\(\]\|-\)\=[^\[\]]*\(\[\|\-\)\=\]" contained
-syn match perlSpecialMatch "[+*()?.]" contained
-syn match perlSpecialMatch "(?[#:=!]" contained
-syn match perlSpecialMatch "(?[imsx]\+)" contained
-" FIXME the line below does not work. It should mark end of line and
-" begin of line as perlSpecial.
-" syn match perlSpecialBEOM "^\^\|\$$" 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 keyword perlElseIfError if contained
-
-" Variable interpolation
-"
-" These items are interpolated inside "" strings and similar constructs.
-syn cluster perlInterpDQ contains=perlSpecialString,perlVarPlain,perlVarNotInMatches,perlVarSlash,perlVarBlock,@Spell
-" These items are interpolated inside '' strings and similar constructs.
-syn cluster perlInterpSQ contains=perlSpecialStringU,@Spell
-" These items are interpolated inside m// matches and s/// substitutions.
-syn cluster perlInterpSlash contains=perlSpecialString,perlSpecialMatch,perlVarPlain,perlVarBlock,perlSpecialBEOM,@Spell
-" These items are interpolated inside m## matches and s### substitutions.
-syn cluster perlInterpMatch contains=@perlInterpSlash,perlVarSlash,@Spell
-
-" Shell commands
-syn region perlShellCommand matchgroup=perlMatchStartEnd start="`" end="`" contains=@perlInterpDQ
-
-" Constants
-"
-" Numbers
-syn match perlNumber "[-+]\=\(\<\d[[:digit:]_]*L\=\>\|0[xX]\x[[:xdigit:]_]*\>\)"
-syn match perlFloat "[-+]\=\<\d[[:digit:]_]*[eE][\-+]\=\d\+"
-syn match perlFloat "[-+]\=\<\d[[:digit:]_]*\.[[:digit:]_]*\([eE][\-+]\=\d\+\)\="
-syn match perlFloat "[-+]\=\<\.[[:digit:]_]\+\([eE][\-+]\=\d\+\)\="
-
-
-" Simple version of searches and matches
-" caters for m//, m##, m{} and m[] (and the !/ variant)
-syn region perlMatch matchgroup=perlMatchStartEnd start=+[m!]/+ end=+/[cgimosx]*+ contains=@perlInterpSlash
-syn region perlMatch matchgroup=perlMatchStartEnd start=+[m!]#+ end=+#[cgimosx]*+ contains=@perlInterpMatch
-syn region perlMatch matchgroup=perlMatchStartEnd start=+[m!]{+ end=+}[cgimosx]*+ contains=@perlInterpMatch
-syn region perlMatch matchgroup=perlMatchStartEnd start=+[m!]\[+ end=+\][cgimosx]*+ contains=@perlInterpMatch
-
-" A special case for m!!x which allows for comments and extra whitespace in the pattern
-syn region perlMatch matchgroup=perlMatchStartEnd start=+[m!]!+ end=+![cgimosx]*+ contains=@perlInterpSlash,perlComment
-
-" 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 /+lc=5 start=+[^$@%]\<split /+lc=6 start=+^while /+lc=5 start=+[^$@%]\<while /+lc=6 start=+^if /+lc=2 start=+[^$@%]\<if /+lc=3 start=+[!=]\~\s*/+lc=2 start=+[(~]/+lc=1 start=+\.\./+lc=2 start=+\s/[^= \t0-9$@%]+lc=1,me=e-1,rs=e-1 start=+^/+ skip=+\\/+ end=+/[cgimosx]*+ contains=@perlInterpSlash
-
-
-" Substitutions
-" caters for s///, s### and s[][]
-" perlMatch is the first part, perlSubstitution* is the substitution part
-syn region perlMatch matchgroup=perlMatchStartEnd start=+\<s'+ end=+'+me=e-1 contains=@perlInterpSQ nextgroup=perlSubstitutionSQ
-syn region perlMatch matchgroup=perlMatchStartEnd start=+\<s"+ end=+"+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionDQ
-syn region perlMatch matchgroup=perlMatchStartEnd start=+\<s/+ end=+/+me=e-1 contains=@perlInterpSlash nextgroup=perlSubstitutionSlash
-syn region perlMatch matchgroup=perlMatchStartEnd start=+\<s#+ end=+#+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionHash
-syn region perlMatch matchgroup=perlMatchStartEnd start=+\<s\[+ end=+\]+ contains=@perlInterpMatch nextgroup=perlSubstitutionBracket skipwhite skipempty skipnl
-syn region perlMatch matchgroup=perlMatchStartEnd start=+\<s{+ end=+}+ contains=@perlInterpMatch nextgroup=perlSubstitutionCurly skipwhite skipempty skipnl
-syn region perlSubstitutionSQ matchgroup=perlMatchStartEnd start=+'+ end=+'[ecgimosx]*+ contained contains=@perlInterpSQ
-syn region perlSubstitutionDQ matchgroup=perlMatchStartEnd start=+"+ end=+"[ecgimosx]*+ contained contains=@perlInterpDQ
-syn region perlSubstitutionSlash matchgroup=perlMatchStartEnd start=+/+ end=+/[ecgimosx]*+ contained contains=@perlInterpDQ
-syn region perlSubstitutionHash matchgroup=perlMatchStartEnd start=+#+ end=+#[ecgimosx]*+ contained contains=@perlInterpDQ
-syn region perlSubstitutionBracket matchgroup=perlMatchStartEnd start=+\[+ end=+\][ecgimosx]*+ contained contains=@perlInterpDQ
-syn region perlSubstitutionCurly matchgroup=perlMatchStartEnd start=+{+ end=+}[ecgimosx]*+ contained contains=@perlInterpDQ
-
-" A special case for m!!x which allows for comments and extra whitespace in the pattern
-syn region perlMatch matchgroup=perlMatchStartEnd start=+\<s!+ end=+!+me=e-1 contains=@perlInterpSlash,perlComment nextgroup=perlSubstitutionPling
-syn region perlSubstitutionPling matchgroup=perlMatchStartEnd start=+!+ end=+![ecgimosx]*+ contained contains=@perlInterpDQ
-
-" Substitutions
-" caters for tr///, tr### and tr[][]
-" perlMatch is the first part, perlTranslation* is the second, translator part.
-syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\(tr\|y\)'+ end=+'+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationSQ
-syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\(tr\|y\)"+ end=+"+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationDQ
-syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\(tr\|y\)/+ end=+/+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationSlash
-syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\(tr\|y\)#+ end=+#+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationHash
-syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\(tr\|y\)\[+ end=+\]+ contains=@perlInterpSQ nextgroup=perlTranslationBracket skipwhite skipempty skipnl
-syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\(tr\|y\){+ end=+}+ contains=@perlInterpSQ nextgroup=perlTranslationCurly skipwhite skipempty skipnl
-syn region perlTranslationSQ matchgroup=perlMatchStartEnd start=+'+ end=+'[cds]*+ contained
-syn region perlTranslationDQ matchgroup=perlMatchStartEnd start=+"+ end=+"[cds]*+ contained
-syn region perlTranslationSlash matchgroup=perlMatchStartEnd start=+/+ end=+/[cds]*+ contained
-syn region perlTranslationHash matchgroup=perlMatchStartEnd start=+#+ end=+#[cds]*+ contained
-syn region perlTranslationBracket matchgroup=perlMatchStartEnd start=+\[+ end=+\][cds]*+ contained
-syn region perlTranslationCurly matchgroup=perlMatchStartEnd start=+{+ end=+}[cds]*+ contained
-
-
-" The => operator forces a bareword to the left of it to be interpreted as
-" a string
-syn match perlString "\<\I\i*\s*=>"me=e-2
-
-" Strings and q, qq, qw and qr expressions
-
-" Brackets in qq()
-syn region perlBrackets start=+(+ end=+)+ contained transparent contains=perlBrackets,@perlStringSQ
-
-syn region perlStringUnexpanded matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ
-syn region perlString matchgroup=perlStringStartEnd start=+"+ end=+"+ contains=@perlInterpDQ
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<q#+ end=+#+ contains=@perlInterpSQ
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<q|+ end=+|+ contains=@perlInterpSQ
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<q(+ end=+)+ contains=@perlInterpSQ,perlBrackets
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<q{+ end=+}+ contains=@perlInterpSQ
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<q/+ end=+/+ contains=@perlInterpSQ
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<q[qx]#+ end=+#+ contains=@perlInterpDQ
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<q[qx]|+ end=+|+ contains=@perlInterpDQ
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<q[qx](+ end=+)+ contains=@perlInterpDQ,perlBrackets
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<q[qx]{+ end=+}+ contains=@perlInterpDQ
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<q[qx]/+ end=+/+ contains=@perlInterpDQ
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<qw#+ end=+#+ contains=@perlInterpSQ
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<qw|+ end=+|+ contains=@perlInterpSQ
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<qw(+ end=+)+ contains=@perlInterpSQ,perlBrackets
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<qw{+ end=+}+ contains=@perlInterpSQ
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<qw/+ end=+/+ contains=@perlInterpSQ
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<qr#+ end=+#[imosx]*+ contains=@perlInterpMatch
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<qr|+ end=+|[imosx]*+ contains=@perlInterpMatch
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<qr(+ end=+)[imosx]*+ contains=@perlInterpMatch
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<qr{+ end=+}[imosx]*+ contains=@perlInterpMatch
-syn region perlQQ matchgroup=perlStringStartEnd start=+\<qr/+ end=+/[imosx]*+ contains=@perlInterpSlash
-
-" Constructs such as print <<EOF [...] EOF, 'here' documents
-"
-if version >= 600
- " 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=+<<['"]\z(END_\(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)['"]+ end=+^\z1$+ contains=ALL fold
- else
- syn region perlHereDoc1 matchgroup=perlStringStartEnd start=+<<\z(\I\i*\)+ end=+^\z1$+ contains=perlhereDocRestOfLine keepend
- syn region perlhereDocRestOfLine start=+.+ end=+$+ nextgroup=perlHereDocDocument
- syn region perlHereDocDocument start=+.+ end=+.+ 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=+<<\(['"]\|\)\z(END_\(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL
- endif
-else
- syn match perlUntilEOFStart "<<EOF.*"lc=5 nextgroup=perlUntilEOFDQ skipnl transparent
- syn match perlUntilEOFStart "<<\s*\"EOF\".*" nextgroup=perlUntilEOFDQ skipnl transparent
- syn match perlUntilEOFStart "<<\s*'EOF'.*" nextgroup=perlUntilEOFSQ skipnl transparent
- syn match perlUntilEOFStart "<<\s*\"\".*" nextgroup=perlUntilEmptyDQ skipnl transparent
- syn match perlUntilEOFStart "<<\s*''.*" nextgroup=perlUntilEmptySQ skipnl transparent
- syn region perlUntilEOFDQ matchgroup=perlStringStartEnd start=++ end="^EOF$" contains=@perlInterpDQ contained
- syn region perlUntilEOFSQ matchgroup=perlStringStartEnd start=++ end="^EOF$" contains=@perlInterpSQ contained
- syn region perlUntilEmptySQ matchgroup=perlStringStartEnd start=++ end="^$" contains=@perlInterpDQ,perlNotEmptyLine contained
- syn region perlUntilEmptyDQ matchgroup=perlStringStartEnd start=++ end="^$" contains=@perlInterpSQ,perlNotEmptyLine contained
- syn match perlHereIdentifier "<<EOF"
- syn region perlAutoload matchgroup=perlStringStartEnd start=+<<\(['"]\|\)\(END_\(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\(END_\(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)$+ contains=ALL
-endif
-
-
-" Class declarations
-"
-syn match perlPackageDecl "^\s*\<package\s\+\S\+" contains=perlStatementPackage
-syn keyword perlStatementPackage package contained
-
-" Functions
-" sub [name] [(prototype)] {
-"
-syn region perlFunction start="\s*\<sub\>" end="[;{]"he=e-1 contains=perlStatementSub,perlFunctionPrototype,perlFunctionPRef,perlFunctionName,perlComment
-syn keyword perlStatementSub sub contained
-
-syn match perlFunctionPrototype "([^)]*)" contained
-if exists("perl_want_scope_in_variables")
- syn match perlFunctionPRef "\h\w*::" contained
- syn match perlFunctionName "\h\w*[^:]" contained
-else
- syn match perlFunctionName "\h[[:alnum:]_:]*" contained
-endif
-
-" 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")
- 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\)\>.*[^};]$" end="^\z1}\s*$" transparent fold keepend
- endif
-
- if exists("perl_fold_blocks")
- syn region perlBlockFold start="^\z(\s*\)\(if\|elsif\|unless\|for\|while\|until\)\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
-
-
-if version >= 508 || !exists("did_perl_syn_inits")
- if version < 508
- let did_perl_syn_inits = 1
- command -nargs=+ HiLink hi link <args>
- else
- command -nargs=+ HiLink hi def link <args>
- endif
-
- " 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 Function
- HiLink perlFunctionPrototype perlFunction
- HiLink perlComment Comment
- HiLink perlTodo Todo
- if exists("perl_string_as_statement")
- HiLink perlStringStartEnd perlStatement
- else
- HiLink perlStringStartEnd perlString
- endif
- HiLink perlList perlStatement
- HiLink perlMisc perlStatement
- HiLink perlVarPlain perlIdentifier
- HiLink perlVarPlain2 perlIdentifier
- HiLink perlFiledescRead perlIdentifier
- HiLink perlFiledescStatement perlIdentifier
- HiLink perlVarSimpleMember perlIdentifier
- HiLink perlVarSimpleMemberName perlString
- HiLink perlVarNotInMatches perlIdentifier
- HiLink perlVarSlash perlIdentifier
- HiLink perlQQ perlString
- if version >= 600
- HiLink perlHereDoc perlString
- else
- HiLink perlHereIdentifier perlStringStartEnd
- HiLink perlUntilEOFDQ perlString
- HiLink perlUntilEOFSQ perlString
- HiLink perlUntilEmptyDQ perlString
- HiLink perlUntilEmptySQ perlString
- HiLink perlUntilEOF perlString
- endif
- HiLink perlStringUnexpanded perlString
- HiLink perlSubstitutionSQ perlString
- HiLink perlSubstitutionDQ perlString
- HiLink perlSubstitutionSlash perlString
- HiLink perlSubstitutionHash perlString
- HiLink perlSubstitutionBracket perlString
- HiLink perlSubstitutionCurly perlString
- HiLink perlSubstitutionPling perlString
- HiLink perlTranslationSlash perlString
- HiLink perlTranslationHash perlString
- HiLink perlTranslationBracket perlString
- HiLink perlTranslationCurly 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 perlStatementSub 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 perlStatementScope 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 perlStatementNew 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 perlSpecialBEOM perlSpecial
- HiLink perlDATA perlComment
-
- HiLink perlBrackets Error
-
- " Possible errors
- HiLink perlNotEmptyLine Error
- HiLink perlElseIfError Error
-
- delcommand HiLink
-endif
-
-" 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 perlFunction "^\s*\<sub\s"
- 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"
-
-" vim: ts=8