xref: /vim-8.2.3635/runtime/syntax/pod.vim (revision 89bcfda6)
1" Vim syntax file
2" Language:      Perl POD format
3" Maintainer:    vim-perl <[email protected]>
4" Previously:    Scott Bigham <[email protected]>
5" Homepage:      http://github.com/vim-perl/vim-perl
6" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
7" Last Change:   2013-07-21
8
9" To add embedded POD documentation highlighting to your syntax file, add
10" the commands:
11"
12"   syn include @Pod <sfile>:p:h/pod.vim
13"   syn region myPOD start="^=pod" start="^=head" end="^=cut" keepend contained contains=@Pod
14"
15" and add myPod to the contains= list of some existing region, probably a
16" comment.  The "keepend" flag is needed because "=cut" is matched as a
17" pattern in its own right.
18
19
20" Remove any old syntax stuff hanging around (this is suppressed
21" automatically by ":syn include" if necessary).
22" quit when a syntax file was already loaded
23if exists("b:current_syntax")
24  finish
25endif
26
27let s:cpo_save = &cpo
28set cpo&vim
29
30" POD commands
31syn match podCommand    "^=encoding"  nextgroup=podCmdText contains=@NoSpell
32syn match podCommand    "^=head[1234]"  nextgroup=podCmdText contains=@NoSpell
33syn match podCommand    "^=item"        nextgroup=podCmdText contains=@NoSpell
34syn match podCommand    "^=over"        nextgroup=podOverIndent skipwhite contains=@NoSpell
35syn match podCommand    "^=back"        contains=@NoSpell
36syn match podCommand    "^=cut"         contains=@NoSpell
37syn match podCommand    "^=pod"         contains=@NoSpell
38syn match podCommand    "^=for"         nextgroup=podForKeywd skipwhite contains=@NoSpell
39syn match podCommand    "^=begin"       nextgroup=podForKeywd skipwhite contains=@NoSpell
40syn match podCommand    "^=end"         nextgroup=podForKeywd skipwhite contains=@NoSpell
41
42" Text of a =head1, =head2 or =item command
43syn match podCmdText	".*$" contained contains=podFormat,@NoSpell
44
45" Indent amount of =over command
46syn match podOverIndent	"\d\+" contained contains=@NoSpell
47
48" Formatter identifier keyword for =for, =begin and =end commands
49syn match podForKeywd	"\S\+" contained contains=@NoSpell
50
51" An indented line, to be displayed verbatim
52syn match podVerbatimLine	"^\s.*$" contains=@NoSpell
53
54" Inline textual items handled specially by POD
55syn match podSpecial	"\(\<\|&\)\I\i*\(::\I\i*\)*([^)]*)" contains=@NoSpell
56syn match podSpecial	"[$@%]\I\i*\(::\I\i*\)*\>" contains=@NoSpell
57
58" Special formatting sequences
59syn region podFormat	start="[IBSCLFX]<[^<]"me=e-1 end=">" oneline contains=podFormat,@NoSpell
60syn region podFormat	start="[IBSCLFX]<<\s" end="\s>>" oneline contains=podFormat,@NoSpell
61syn match  podFormat	"Z<>"
62syn match  podFormat	"E<\(\d\+\|\I\i*\)>" contains=podEscape,podEscape2,@NoSpell
63syn match  podEscape	"\I\i*>"me=e-1 contained contains=@NoSpell
64syn match  podEscape2	"\d\+>"me=e-1 contained contains=@NoSpell
65
66" Define the default highlighting.
67" Only when an item doesn't have highlighting yet
68command -nargs=+ HiLink hi def link <args>
69
70HiLink podCommand		Statement
71HiLink podCmdText		String
72HiLink podOverIndent		Number
73HiLink podForKeywd		Identifier
74HiLink podFormat		Identifier
75HiLink podVerbatimLine	PreProc
76HiLink podSpecial		Identifier
77HiLink podEscape		String
78HiLink podEscape2		Number
79
80delcommand HiLink
81
82if exists("perl_pod_spellcheck_headings")
83  " Spell-check headings
84  syn clear podCmdText
85  syn match podCmdText    ".*$" contained contains=podFormat
86endif
87
88if exists("perl_pod_formatting")
89  " By default, escapes like C<> are not checked for spelling. Remove B<>
90  " and I<> from the list of escapes.
91  syn clear podFormat
92  syn region podFormat start="[CLF]<[^<]"me=e-1 end=">" oneline contains=podFormat,@NoSpell
93  syn region podFormat start="[CLF]<<\s" end="\s>>" oneline contains=podFormat,@NoSpell
94
95  " Don't spell-check inside E<>, but ensure that the E< itself isn't
96  " marked as a spelling mistake.
97  syn match podFormat   "E<\(\d\+\|\I\i*\)>" contains=podEscape,podEscape2,@NoSpell
98
99  " Z<> is a mock formatting code. Ensure Z<> on its own isn't marked as a
100  " spelling mistake.
101  syn match podFormat   "Z<>" contains=podEscape,podEscape2,@NoSpell
102
103  " These are required so that whatever is *within* B<...>, I<...>, etc. is
104  " spell-checked, but not the B, I, ... itself.
105  syn match podBoldOpen    "B<" contains=@NoSpell
106  syn match podItalicOpen  "I<" contains=@NoSpell
107  syn match podNoSpaceOpen "S<" contains=@NoSpell
108  syn match podIndexOpen   "X<" contains=@NoSpell
109
110  " Same as above but for the << >> syntax.
111  syn match podBoldAlternativeDelimOpen    "B<< " contains=@NoSpell
112  syn match podItalicAlternativeDelimOpen  "I<< " contains=@NoSpell
113  syn match podNoSpaceAlternativeDelimOpen "S<< " contains=@NoSpell
114  syn match podIndexAlternativeDelimOpen   "X<< " contains=@NoSpell
115
116  " Add support for spell checking text inside B<>, I<>, S<> and X<>.
117  syn region podBold start="B<[^<]"me=e end=">" oneline contains=podBoldItalic,podBoldOpen
118  syn region podBoldAlternativeDelim start="B<<\s" end="\s>>" oneline contains=podBoldAlternativeDelimOpen
119
120  syn region podItalic start="I<[^<]"me=e end=">" oneline contains=podItalicBold,podItalicOpen
121  syn region podItalicAlternativeDelim start="I<<\s" end="\s>>" oneline contains=podItalicAlternativeDelimOpen
122
123  " Nested bold/italic and vice-versa
124  syn region podBoldItalic contained start="I<[^<]"me=e end=">" oneline
125  syn region podItalicBold contained start="B<[^<]"me=e end=">" oneline
126
127  syn region podNoSpace start="S<[^<]"ms=s-2 end=">"me=e oneline contains=podNoSpaceOpen
128  syn region podNoSpaceAlternativeDelim start="S<<\s"ms=s-2 end="\s>>"me=e oneline contains=podNoSpaceAlternativeDelimOpen
129
130  syn region podIndex start="X<[^<]"ms=s-2 end=">"me=e oneline contains=podIndexOpen
131  syn region podIndexAlternativeDelim start="X<<\s"ms=s-2 end="\s>>"me=e oneline contains=podIndexAlternativeDelimOpen
132
133  " Restore this (otherwise B<> is shown as bold inside verbatim)
134  syn match podVerbatimLine	"^\s.*$" contains=@NoSpell
135
136  " Ensure formatted text can be displayed in headings and items
137  syn clear podCmdText
138
139  if exists("perl_pod_spellcheck_headings")
140    syn match podCmdText ".*$" contained contains=podFormat,podBold,
141          \podBoldAlternativeDelim,podItalic,podItalicAlternativeDelim,
142          \podBoldOpen,podItalicOpen,podBoldAlternativeDelimOpen,
143          \podItalicAlternativeDelimOpen,podNoSpaceOpen
144  else
145    syn match podCmdText ".*$" contained contains=podFormat,podBold,
146          \podBoldAlternativeDelim,podItalic,podItalicAlternativeDelim,
147          \@NoSpell
148  endif
149
150  " Specify how to display these
151  hi def podBold term=bold cterm=bold gui=bold
152
153  hi link podBoldAlternativeDelim podBold
154  hi link podBoldAlternativeDelimOpen podBold
155  hi link podBoldOpen podBold
156
157  hi link podNoSpace                 Identifier
158  hi link podNoSpaceAlternativeDelim Identifier
159
160  hi link podIndex                   Identifier
161  hi link podIndexAlternativeDelim   Identifier
162
163  hi def podItalic term=italic cterm=italic gui=italic
164
165  hi link podItalicAlternativeDelim podItalic
166  hi link podItalicAlternativeDelimOpen podItalic
167  hi link podItalicOpen podItalic
168
169  hi def podBoldItalic term=italic,bold cterm=italic,bold gui=italic,bold
170  hi def podItalicBold term=italic,bold cterm=italic,bold gui=italic,bold
171endif
172
173let b:current_syntax = "pod"
174
175let &cpo = s:cpo_save
176unlet s:cpo_save
177
178" vim: ts=8
179