home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / mac / vim54rt.sit / runtime / syntax / perl.vim < prev    next >
Encoding:
Text File  |  1999-08-14  |  16.9 KB  |  343 lines  |  [TEXT/ALFA]

  1. " Vim syntax file
  2. " Language:        Perl
  3. " Maintainer:      Nick Hibma <hibma@skylink.it>
  4. " Last change:     1999 May 19
  5. " Location:        http://www.etla.net/~n_hibma/vim/syntax/perl.vim
  6. "
  7. " Please download most recent version first before mailing any comments.
  8. "
  9. " Original version: Sonia Heimann <niania@netsurf.org>
  10.  
  11. " The following parameters are available for tuning the
  12. " perl syntax highlighting, with defaults given:
  13. "
  14. " let perl_include_pod = 0
  15. " let perl_want_scope_in_variables = 0
  16. " let perl_extended_vars = 0
  17. " unlet perl_string_as_statement
  18. " unlet perl_no_sync_on_sub
  19. " unlet perl_no_sync_on_global_var
  20. " let perl_sync_dist = 100
  21.  
  22. " Remove any old syntax stuff hanging around
  23. syn clear
  24.  
  25. " POD starts with ^=<word> and ends with ^=cut
  26.  
  27. if exists("perl_include_pod")
  28.   " Include a while extra syntax file
  29.   syntax include @Pod <sfile>:p:h/pod.vim
  30.   syntax region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,perlTodo keepend
  31. else
  32.   " Use only the bare minimum of rules
  33.   syntax region perlPOD start="^=[a-z]" end="^=cut"
  34. endif
  35.  
  36.  
  37. " All keywords
  38. "
  39. syn keyword perlLabel            case default
  40. syn keyword perlConditional      if elsif unless else switch eq ne gt lt ge le cmp not and or xor
  41. syn keyword perlRepeat           while for foreach do until
  42. syn keyword perlOperator         defined undef and or not bless ref
  43. syn keyword perlControl          BEGIN END
  44.  
  45. syn keyword perlStatementStorage my local
  46. syn keyword perlStatementControl goto return last next continue redo
  47. syn keyword perlStatementScalar  chomp chop chr crypt index lc lcfirst length ord pack reverse rindex sprintf substr uc ucfirst
  48. syn keyword perlStatementRegexp  pos quotemeta split study
  49. syn keyword perlStatementNumeric abs atan2 cos exp hex int log oct rand sin sqrt srand
  50. syn keyword perlStatementList    splice unshift shift push pop split join reverse grep map sort unpack
  51. syn keyword perlStatementHash    each exists keys values
  52. syn keyword perlStatementIOfunc  binmode carp close closedir confess croak dbmclose dbmopen die eof fileno flock getc print printf read readdir rewinddir seek seekdir select syscall sysopen sysread syswrite tell telldir truncate warn write
  53. syn keyword perlStatementVector  pack vec
  54. syn keyword perlStatementFiles   chdir chmod chown chroot fcntl glob ioctl link lstat mkdir open opendir readlink rename rmdir stat symlink umask unlink utime
  55. syn match   perlStatementFiles   "-[rwxoRWXOezsfdlpSbctugkTBMAC]\>"
  56. syn keyword perlStatementFlow    caller die dump eval exit wantarray
  57. syn keyword perlStatementInclude require
  58. syn match   perlStatementInclude "\(use\|no\)\s\+\(integer\>\|strict\>\|lib\>\|sigtrap\>\|subs\>\|vars\>\)\="
  59. syn keyword perlStatementScope   import
  60. syn keyword perlStatementProc    alarm exec fork getpgrp getppid getpriority kill pipe setpgrp setpriority sleep system times wait waitpid
  61. syn keyword perlStatementSocket  accept bind connect getpeername getsockname getsockopt listen recv send setsockopt shutdown socket socketpair
  62. syn keyword perlStatementIPC     msgctl msgget msgrcv msgsnd semctl semget semop shmctl shmget shmread shmwrite
  63. syn keyword perlStatementNetwork endprotoent endservent gethostbyaddr gethostbyname gethostent getnetbyaddr getnetbyname getnetent getprotobyname getprotobynumber getprotoent getservbyname getservbyport getservent sethostent setnetent setprotoent setservent
  64. syn keyword perlStatementTime    gmtime localtime time times
  65. syn keyword perlStatementMisc    print warn formline reset scalar new delete STDIN STDOUT STDERR
  66.  
  67. syn keyword perlTodo             TODO TBD FIXME XXX contained
  68.  
  69. " Perl Identifiers.
  70. "
  71. " Should be cleaned up to better handle identifiers in particular situations
  72. " (in hash keys for example)
  73. "
  74. " Plain identifiers: $foo, @foo, $#foo, %foo, &foo and dereferences $$foo, @$foo, etc.
  75. " We do not process complex things such as @{${"foo"}}. Too complicated, and
  76. " too slow. And what is after the -> is *not* considered as part of the
  77. " variable - there again, too complicated and too slow.
  78.  
  79. " Special variables first ($^A, ...) and ($|, $', ...)
  80. syn match perlVarPlain "$^[ADEFHILMOPSTWX]\="
  81. syn match perlVarPlain "$[\\\"\[\]'&`+*.,;=%~!@$<>(0-9-]"
  82. " Same as above, but avoids confusion in $::foo (equivalent to $main::foo)
  83. syn match perlVarPlain "$:[^:]"
  84. " These variables are not recognized within matches.
  85. syn match perlVarNotInMatches "$[|)]"
  86. " This variable is not recognized within matches delimited by //.
  87. syn match perlVarSlash "$/"
  88.  
  89. " And plain identifiers
  90. syn match perlPackageRef "\(\h\w*\)\=\(::\|'\)\I"me=e-1 contained
  91.  
  92. " To highlight packages in variables as a scope reference - i.e. in $pack::var,
  93. " pack:: is a scope, just set "perl_want_scope_in_variables"
  94. " If you *want* complex things like @{${"foo"}} to be processed,
  95. " just set the variable "perl_extended_vars"...
  96.  
  97. " FIXME value between {} should be marked as string. is treated as such by Perl.
  98. " At the moment it is marked as something greyish instead of read. Probably todo
  99. " with transparency. Or maybe we should handle the bare word in that case. or make it into
  100.  
  101. if exists("perl_want_scope_in_variables")
  102.   syn match perlVarPlain   "\\\=\([@%&$]\|\$#\)\$*\(\I\i*\)\=\(\(::\|'\)\I\i*\)*\>" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember
  103. else
  104.   syn match perlVarPlain   "\\\=\([@%&$]\|\$#\)\$*\(\I\i*\)\=\(\(::\|'\)\I\i*\)*\>" nextgroup=perlVarMember,perlVarSimpleMember
  105. endif
  106.  
  107. if exists("perl_extended_vars")
  108.   syn cluster perlExpr contains=perlStatementScalar,perlStatementRegexp,perlStatementNumeric,perlStatementList,perlStatementHash,perlStatementFiles,perlStatementTime,perlStatementMisc,perlVarPlain,perlVarNotInMatches,perlVarSlash,perlVarBlock,perlShellCommand,perlNumber,perlStringUnexpanded,perlString,perlQQ
  109.   syn region perlVarBlock matchgroup=perlVarPlain start="\($#\|[@%\$]\){" skip="\\}" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember
  110.   syn match perlVarPlain   "\\\=\(\$#\|[@%&$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember
  111.   syn region perlVarMember matchgroup=perlVarPlain start="\(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember
  112.   syn match perlVarSimpleMember "\(->\)\={\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember contains=perlVarSimpleMemberName
  113.   syn match perlVarSimpleMemberName "\I\i*" contained
  114.   syn region perlVarMember matchgroup=perlVarPlain start="\(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember
  115. endif
  116.  
  117.  
  118. " Special characters in strings and matches
  119. syn match perlSpecialString  "\\\(\d\+\|[xX]\x\+\|c\u\|.\)" contained
  120. syn match perlSpecialStringU "\\['\\]" contained
  121. syn match perlSpecialMatch   "{\d\(,\d\)\=}" contained
  122. syn match perlSpecialMatch   "\[\(\]\|-\)\=[^\[\]]*\(\[\|\-\)\=\]" contained
  123. syn match perlSpecialMatch   "[+*()?.]" contained
  124. syn match perlSpecialMatch   "(?[#:=!]" contained
  125. syn match perlSpecialMatch   "(?[imsx]\+)" contained
  126. " FIXME the line below does not work. It should mark end of line and
  127. " begin of line as perlSpecial.
  128. " syn match perlSpecialBEOM    "^\^\|\$$" contained
  129.  
  130. " Possible errors
  131. "
  132. " Highlight lines with only whitespace (only in blank delimited here documents) as errors
  133. syn match perlNotEmptyLine  "^\s\+$" contained
  134.  
  135. " Variable interpolation
  136. "
  137. " These items are interpolated inside "" strings and similar constructs.
  138. syn cluster perlInterpDQ contains=perlSpecialString,perlVarPlain,perlVarNotInMatches,perlVarSlash,perlVarBlock
  139. " These items are interpolated inside '' strings and similar constructs.
  140. syn cluster perlInterpSQ contains=perlSpecialStringU
  141. " These items are interpolated inside // matches and s/// substitutions.
  142. syn cluster perlInterpSlash contains=perlSpecialString,perlSpecialMatch,perlVarPlain,perlVarBlock,perlSpecialBEOM
  143. " These items are interpolated inside m## matches and s### substitutions.
  144. syn cluster perlInterpMatch contains=@perlInterpSlash,perlVarSlash
  145.  
  146. " Shell commands
  147. syn region  perlShellCommand matchgroup=perlMatchStartEnd start="`" end="`" contains=@perlInterpDQ
  148.  
  149. " Constants
  150. "
  151. " Numbers
  152. syn match perlNumber "-\=\<\d\+L\=\>\|0[xX]\x\+\>"
  153.  
  154. " Simple version of searches and matches
  155. " caters for m//, m## and m[] (and the !/ variant)
  156. syn region perlMatch matchgroup=perlMatchStartEnd start=+[m!]/+ end=+/[xosmige]*+ contains=@perlInterpSlash
  157. syn region perlMatch matchgroup=perlMatchStartEnd start=+[m!]#+ end=+#[xosmige]*+ contains=@perlInterpMatch
  158. syn region perlMatch matchgroup=perlMatchStartEnd start=+[m!]\[+ end=+\][xosmige]*+ contains=@perlInterpMatch
  159. syn region perlMatch matchgroup=perlMatchStartEnd start=+[(~]/+lc=1 start=+\.\./+lc=2 start=+\s/\S+lc=1,me=e-1,rs=e-1 start=+^/+ skip=+\\/+ end=+/[xosmige]*+ contains=@perlInterpSlash
  160.  
  161. " Substitutions
  162. " caters for s///, s### and s[][]
  163. " perlMatch is the first part, perlSubstitution is the substitution part
  164. syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\(tr\|s\)/+ end=+/+me=e-1 contains=@perlInterpSlash nextgroup=perlSubstitution
  165. syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\(tr\|s\)#+ end=+#+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitution
  166. syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\(tr\|s\)\[+ end=+\]+ contains=@perlInterpMatch nextgroup=perlSubstitution
  167. syn region perlSubstitution matchgroup=perlMatchStartEnd start=+/+ end=+/[xosmigecd]*+ contained contains=@perlInterpSQ
  168. syn region perlSubstitution matchgroup=perlMatchStartEnd start=+#+ end=+#[xosmige]*+ contained contains=@perlInterpSQ
  169. syn region perlSubstitution matchgroup=perlMatchStartEnd start=+\[+ end=+\][xosmige]*+ contained contains=@perlInterpSQ
  170.  
  171. " Substitutions
  172. " caters for tr///, tr### and tr[][]
  173. " perlMatch is the first part, perlTranslation is the second, translator part.
  174. syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\(tr\|y\)/+ end=+/+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslation
  175. syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\(tr\|y\)#+ end=+#+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslation
  176. syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\(tr\|y\)\[+ end=+\]+ contains=@perlInterpSQ nextgroup=perlTranslation
  177. syn region perlTranslation matchgroup=perlMatchStartEnd start=+/+ end=+/[xosmigecd]*+ contained contains=@perlInterpSQ
  178. syn region perlTranslation matchgroup=perlMatchStartEnd start=+#+ end=+#[xosmige]*+ contained contains=@perlInterpSQ
  179. syn region perlTranslation matchgroup=perlMatchStartEnd start=+\[+ end=+\][xosmige]*+ contained contains=@perlInterpSQ
  180.  
  181.  
  182. " Strings and q, qq and qw expressions
  183. syn region perlStringUnexpanded matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ
  184. syn region perlString matchgroup=perlStringStartEnd start=+"+  end=+"+ contains=@perlInterpDQ
  185. syn region perlQQ matchgroup=perlStringStartEnd start=+q[qx]#+ end=+#+ contains=@perlInterpDQ
  186. syn region perlQQ matchgroup=perlStringStartEnd start=+q[qx]|+ end=+|+ contains=@perlInterpDQ
  187. syn region perlQQ matchgroup=perlStringStartEnd start=+q[qx](+ end=+)+ contains=@perlInterpDQ
  188. syn region perlQQ matchgroup=perlStringStartEnd start=+q[qx]/+ end=+/+ contains=@perlInterpDQ
  189. syn region perlQQ matchgroup=perlStringStartEnd start=+qw\=#+  end=+#+ contains=@perlInterpSQ
  190. syn region perlQQ matchgroup=perlStringStartEnd start=+qw\=|+  end=+|+ contains=@perlInterpSQ
  191. syn region perlQQ matchgroup=perlStringStartEnd start=+qw\=(+  end=+)+ contains=@perlInterpSQ
  192. syn region perlQQ matchgroup=perlStringStartEnd start=+qw\=/+  end=+/+ contains=@perlInterpSQ
  193.  
  194. " Constructs such as print <<EOF [...] EOF
  195. "
  196. syn region  perlUntilEOF start=+<<EOF+hs=s+2 start=+<<"EOF"+hs=s+2 end="^EOF$" contains=@perlInterpDQ
  197. "syn region  perlUntilEOF start=+<<"EOF"+hs=s+2 end="^EOF$" contains=@perlInterpDQ
  198. syn region  perlUntilEOF start=+<<""+hs=s+2 end="^$" contains=@perlInterpDQ,perlNotEmptyLine
  199. syn region  perlUntilEOF start=+<<'EOF'+hs=s+2 end="^EOF$" contains=@perlInterpSQ
  200. syn region  perlUntilEOF start=+<<''+hs=s+2 end="^$" contains=@perlInterpSQ,perlNotEmptyLine
  201.  
  202. " Class declarations
  203. "
  204. syn match perlPackageDecl "^\s*package\>[^;]*" contains=perlStatementPackage
  205. syn keyword perlStatementPackage package contained
  206.  
  207. " Functions
  208. "       sub [name] [(prototype)] {
  209. "
  210. syn region perlFunction start="\s*sub\s\+"rs=s end="[;{]"he=e-1 contains=perlStatementSub,perlFunctionPrototype,perlFunctionPRef,perlFunctionName,perlComment
  211. syn keyword perlStatementSub sub contained
  212.  
  213. syn match perlFunctionPrototype "([^)]*)" contained
  214. if exists("perl_want_scope_in_variables")
  215.    syn match perlFunctionPRef "\h\w*::" contained
  216.    syn match perlFunctionName "\h\w*[^:]" contained
  217. else
  218.    syn match perlFunctionName "\h[[:alnum:]_:]*" contained
  219. endif
  220.  
  221.  
  222. " All other # are comments, except ^#!
  223. syn match  perlComment   "#.*" contains=perlTodo
  224. syn match  perlSharpBang "^#!.*"
  225.  
  226. " Formats
  227. syn region perlFormat matchgroup=perlStatementIOFunc start="^\s*format\s\+\k\+\s*=\s*$"rs=s+6 end="^\s*\.\s*$" contains=perlFormatName,perlFormatField,perlVarPlain
  228. syn match perlFormatName "format\s\+\k\+\s*="lc=7,me=e-1 contained
  229. syn match perlFormatField "[@^][|<>~]\+\(\.\.\.\)\=" contained
  230. syn match perlFormatField "[@^]#[#.]*" contained
  231. syn match perlFormatField "@\*" contained
  232. syn match perlFormatField "@[^A-Za-z_|<>~#*]"me=e-1 contained
  233. syn match perlFormatField "@$" contained
  234.  
  235.  
  236. if !exists("did_perl_syntax_inits")
  237.   let did_perl_syntax_inits = 1
  238.  
  239.   hi link perlSharpBang         PreProc
  240.   hi link perlControl           PreProc
  241.   hi link perlInclude           Include
  242.   hi link perlSpecial           Special
  243.   hi link perlString            String
  244.   hi link perlCharacter         Character
  245.   hi link perlNumber            Number
  246.   hi link perlType              Type
  247.   hi link perlIdentifier        Identifier
  248.   hi link perlLabel             Label
  249.   hi link perlStatement         Statement
  250.   hi link perlConditional       Conditional
  251.   hi link perlRepeat            Repeat
  252.   hi link perlOperator          Operator
  253.   hi link perlFunction          Function
  254.   hi link perlComment           Comment
  255.   hi link perlTodo              Todo
  256.   hi link perlList              perlStatement
  257.   hi link perlMisc              perlStatement
  258.   hi link perlVarPlain          perlIdentifier
  259.   hi link perlVarSimpleMember   perlIdentifier
  260.   hi link perlVarSimpleMemberName    perlString
  261.   hi link perlVarNotInMatches   perlIdentifier
  262.   hi link perlVarSlash          perlIdentifier
  263.   hi link perlQQ                perlString
  264.   hi link perlUntilEOF          perlString
  265.   hi link perlStringUnexpanded  perlString
  266.   hi link perlSubstitution      perlString
  267.   hi link perlTranslation       perlString
  268.   hi link perlMatch             perlString
  269.   hi link perlMatchStartEnd     perlStatement
  270.   if exists("perl_string_as_statement")
  271.      hi link perlStringStartEnd    perlStatement
  272.   else
  273.      hi link perlStringStartEnd    perlString
  274.   endif
  275.   hi link perlFormatName        perlIdentifier
  276.   hi link perlFormatField       perlString
  277.   hi link perlPackageDecl       perlType
  278.   hi link perlStorageClass      perlType
  279.   hi link perlPackageRef        perlType
  280.   hi link perlStatementPackage  perlStatement
  281.   hi link perlStatementSub      perlStatement
  282.   hi link perlStatementStorage  perlStatement
  283.   hi link perlStatementControl  perlStatement
  284.   hi link perlStatementScalar   perlStatement
  285.   hi link perlStatementRegexp   perlStatement
  286.   hi link perlStatementNumeric  perlStatement
  287.   hi link perlStatementList     perlStatement
  288.   hi link perlStatementHash     perlStatement
  289.   hi link perlStatementIOfunc   perlStatement
  290.   hi link perlStatementVector   perlStatement
  291.   hi link perlStatementFiles    perlStatement
  292.   hi link perlStatementFlow     perlStatement
  293.   hi link perlStatementScope    perlStatement
  294.   hi link perlStatementInclude  perlStatement
  295.   hi link perlStatementProc     perlStatement
  296.   hi link perlStatementSocket   perlStatement
  297.   hi link perlStatementIPC      perlStatement
  298.   hi link perlStatementNetwork  perlStatement
  299.   hi link perlStatementTime     perlStatement
  300.   hi link perlStatementMisc     perlStatement
  301.   hi link perlFunctionName      perlIdentifier
  302.   hi link perlFunctionPRef      perlType
  303.   hi link perlPOD               perlComment
  304.   hi link perlShellCommand      perlString
  305.   hi link perlSpecialAscii      perlSpecial
  306.   hi link perlSpecialDollar     perlSpecial
  307.   hi link perlSpecialString     perlSpecial
  308.   hi link perlSpecialStringU    perlSpecial
  309.   hi link perlSpecialMatch      perlSpecial
  310.   hi link perlSpecialBEOM       perlSpecial
  311.  
  312.   " Possible errors
  313.   hi link perlNotEmptyLine   Error
  314. endif
  315.  
  316. " Syncing to speed up processing
  317. "
  318. if !exists("perl_no_sync_on_sub")
  319.   syn sync match perlSync grouphere NONE "^\s*package\s"
  320.   syn sync match perlSync grouphere perlFunction "^\s*sub\s"
  321.   syn sync match perlSync grouphere NONE "^}"
  322. endif
  323.  
  324. if !exists("perl_no_sync_on_global_var")
  325.   syn sync match perlSync grouphere NONE "^$\I[[:alnum:]_:]+\s*=\s*{"
  326.   syn sync match perlSync grouphere NONE "^[@%]\I[[:alnum:]_:]+\s*=\s*("
  327. endif
  328.  
  329. if exists("perl_sync_dist")
  330.   execute "syn sync maxlines=" . perl_sync_dist
  331. else
  332.   syn sync maxlines=100
  333. endif
  334.  
  335. syn sync match perlSyncPOD grouphere perlPOD "^=pod"
  336. syn sync match perlSyncPOD grouphere perlPOD "^=head"
  337. syn sync match perlSyncPOD grouphere perlPOD "^=item"
  338. syn sync match perlSyncPOD grouphere NONE "^=cut"
  339.  
  340. let b:current_syntax = "perl"
  341.  
  342. " vim: ts=8
  343.