1" Vim syntax file
2" Language:     Perl POD format
3" Maintainer:   Andy Lester <andy@petdance.com>
4" Previously:   Scott Bigham <dsb@killerbunnies.org>
5" URL:          http://github.com/petdance/vim-perl
6" Last Change:  2009-08-14
7
8" To add embedded POD documentation highlighting to your syntax file, add
9" the commands:
10"
11"   syn include @Pod <sfile>:p:h/pod.vim
12"   syn region myPOD start="^=pod" start="^=head" end="^=cut" keepend contained contains=@Pod
13"
14" and add myPod to the contains= list of some existing region, probably a
15" comment.  The "keepend" flag is needed because "=cut" is matched as a
16" pattern in its own right.
17
18
19" Remove any old syntax stuff hanging around (this is suppressed
20" automatically by ":syn include" if necessary).
21" For version 5.x: Clear all syntax items
22" For version 6.x: Quit when a syntax file was already loaded
23if version < 600
24  syntax clear
25elseif exists("b:current_syntax")
26  finish
27endif
28
29" POD commands
30syn match podCommand    "^=head[1234]"  nextgroup=podCmdText contains=@NoSpell
31syn match podCommand    "^=item"        nextgroup=podCmdText contains=@NoSpell
32syn match podCommand    "^=over"        nextgroup=podOverIndent skipwhite contains=@NoSpell
33syn match podCommand    "^=back"        contains=@NoSpell
34syn match podCommand    "^=cut"         contains=@NoSpell
35syn match podCommand    "^=pod"         contains=@NoSpell
36syn match podCommand    "^=for"         nextgroup=podForKeywd skipwhite contains=@NoSpell
37syn match podCommand    "^=begin"       nextgroup=podForKeywd skipwhite contains=@NoSpell
38syn match podCommand    "^=end"         nextgroup=podForKeywd skipwhite contains=@NoSpell
39
40" Text of a =head1, =head2 or =item command
41syn match podCmdText	".*$" contained contains=podFormat,@NoSpell
42
43" Indent amount of =over command
44syn match podOverIndent	"\d\+" contained contains=@NoSpell
45
46" Formatter identifier keyword for =for, =begin and =end commands
47syn match podForKeywd	"\S\+" contained contains=@NoSpell
48
49" An indented line, to be displayed verbatim
50syn match podVerbatimLine	"^\s.*$" contains=@NoSpell
51
52" Inline textual items handled specially by POD
53syn match podSpecial	"\(\<\|&\)\I\i*\(::\I\i*\)*([^)]*)" contains=@NoSpell
54syn match podSpecial	"[$@%]\I\i*\(::\I\i*\)*\>" contains=@NoSpell
55
56" Special formatting sequences
57syn region podFormat	start="[IBSCLFX]<[^<]"me=e-1 end=">" oneline contains=podFormat,@NoSpell
58syn region podFormat	start="[IBSCLFX]<<\s" end="\s>>" oneline contains=podFormat,@NoSpell
59syn match  podFormat	"Z<>"
60syn match  podFormat	"E<\(\d\+\|\I\i*\)>" contains=podEscape,podEscape2,@NoSpell
61syn match  podEscape	"\I\i*>"me=e-1 contained contains=@NoSpell
62syn match  podEscape2	"\d\+>"me=e-1 contained contains=@NoSpell
63
64" Define the default highlighting.
65" For version 5.7 and earlier: only when not done already
66" For version 5.8 and later: only when an item doesn't have highlighting yet
67if version >= 508 || !exists("did_pod_syntax_inits")
68  if version < 508
69    let did_pod_syntax_inits = 1
70    command -nargs=+ HiLink hi link <args>
71  else
72    command -nargs=+ HiLink hi def link <args>
73  endif
74
75  HiLink podCommand		Statement
76  HiLink podCmdText		String
77  HiLink podOverIndent		Number
78  HiLink podForKeywd		Identifier
79  HiLink podFormat		Identifier
80  HiLink podVerbatimLine	PreProc
81  HiLink podSpecial		Identifier
82  HiLink podEscape		String
83  HiLink podEscape2		Number
84
85  delcommand HiLink
86endif
87
88let b:current_syntax = "pod"
89
90" vim: ts=8
91