xref: /vim-8.2.3635/runtime/syntax/pod.vim (revision 37c64c78)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:      Perl POD format
3543b7ef7SBram Moolenaar" Maintainer:    vim-perl <[email protected]>
4f354981dSBram Moolenaar" Previously:    Scott Bigham <[email protected]>
5543b7ef7SBram Moolenaar" Homepage:      http://github.com/vim-perl/vim-perl
6543b7ef7SBram Moolenaar" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
7*37c64c78SBram Moolenaar" Last Change:   2017-09-12
8071d4279SBram Moolenaar
9071d4279SBram Moolenaar" To add embedded POD documentation highlighting to your syntax file, add
10071d4279SBram Moolenaar" the commands:
11071d4279SBram Moolenaar"
12071d4279SBram Moolenaar"   syn include @Pod <sfile>:p:h/pod.vim
13071d4279SBram Moolenaar"   syn region myPOD start="^=pod" start="^=head" end="^=cut" keepend contained contains=@Pod
14071d4279SBram Moolenaar"
15071d4279SBram Moolenaar" and add myPod to the contains= list of some existing region, probably a
16071d4279SBram Moolenaar" comment.  The "keepend" flag is needed because "=cut" is matched as a
17071d4279SBram Moolenaar" pattern in its own right.
18071d4279SBram Moolenaar
19071d4279SBram Moolenaar
20071d4279SBram Moolenaar" Remove any old syntax stuff hanging around (this is suppressed
21071d4279SBram Moolenaar" automatically by ":syn include" if necessary).
2289bcfda6SBram Moolenaar" quit when a syntax file was already loaded
2389bcfda6SBram Moolenaarif exists("b:current_syntax")
24071d4279SBram Moolenaar  finish
25071d4279SBram Moolenaarendif
26071d4279SBram Moolenaar
27543b7ef7SBram Moolenaarlet s:cpo_save = &cpo
28543b7ef7SBram Moolenaarset cpo&vim
29543b7ef7SBram Moolenaar
30071d4279SBram Moolenaar" POD commands
31543b7ef7SBram Moolenaarsyn match podCommand    "^=encoding"  nextgroup=podCmdText contains=@NoSpell
3297409f12SBram Moolenaarsyn match podCommand    "^=head[1234]"  nextgroup=podCmdText contains=@NoSpell
3397409f12SBram Moolenaarsyn match podCommand    "^=item"        nextgroup=podCmdText contains=@NoSpell
3497409f12SBram Moolenaarsyn match podCommand    "^=over"        nextgroup=podOverIndent skipwhite contains=@NoSpell
3597409f12SBram Moolenaarsyn match podCommand    "^=back"        contains=@NoSpell
3697409f12SBram Moolenaarsyn match podCommand    "^=cut"         contains=@NoSpell
3797409f12SBram Moolenaarsyn match podCommand    "^=pod"         contains=@NoSpell
3897409f12SBram Moolenaarsyn match podCommand    "^=for"         nextgroup=podForKeywd skipwhite contains=@NoSpell
3997409f12SBram Moolenaarsyn match podCommand    "^=begin"       nextgroup=podForKeywd skipwhite contains=@NoSpell
4097409f12SBram Moolenaarsyn match podCommand    "^=end"         nextgroup=podForKeywd skipwhite contains=@NoSpell
41071d4279SBram Moolenaar
42071d4279SBram Moolenaar" Text of a =head1, =head2 or =item command
4397409f12SBram Moolenaarsyn match podCmdText	".*$" contained contains=podFormat,@NoSpell
44071d4279SBram Moolenaar
45071d4279SBram Moolenaar" Indent amount of =over command
4697409f12SBram Moolenaarsyn match podOverIndent	"\d\+" contained contains=@NoSpell
47071d4279SBram Moolenaar
48071d4279SBram Moolenaar" Formatter identifier keyword for =for, =begin and =end commands
4997409f12SBram Moolenaarsyn match podForKeywd	"\S\+" contained contains=@NoSpell
50071d4279SBram Moolenaar
51071d4279SBram Moolenaar" An indented line, to be displayed verbatim
5297409f12SBram Moolenaarsyn match podVerbatimLine	"^\s.*$" contains=@NoSpell
53071d4279SBram Moolenaar
54071d4279SBram Moolenaar" Inline textual items handled specially by POD
5597409f12SBram Moolenaarsyn match podSpecial	"\(\<\|&\)\I\i*\(::\I\i*\)*([^)]*)" contains=@NoSpell
5697409f12SBram Moolenaarsyn match podSpecial	"[$@%]\I\i*\(::\I\i*\)*\>" contains=@NoSpell
57071d4279SBram Moolenaar
58071d4279SBram Moolenaar" Special formatting sequences
5997409f12SBram Moolenaarsyn region podFormat	start="[IBSCLFX]<[^<]"me=e-1 end=">" oneline contains=podFormat,@NoSpell
60c81e5e79SBram Moolenaarsyn region podFormat	start="[IBSCLFX]<<\s" end="\s>>" oneline contains=podFormat,@NoSpell
613fdfa4a9SBram Moolenaarsyn match  podFormat	"Z<>"
6297409f12SBram Moolenaarsyn match  podFormat	"E<\(\d\+\|\I\i*\)>" contains=podEscape,podEscape2,@NoSpell
6397409f12SBram Moolenaarsyn match  podEscape	"\I\i*>"me=e-1 contained contains=@NoSpell
6497409f12SBram Moolenaarsyn match  podEscape2	"\d\+>"me=e-1 contained contains=@NoSpell
65071d4279SBram Moolenaar
66071d4279SBram Moolenaar" Define the default highlighting.
6789bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet
68071d4279SBram Moolenaar
69f37506f6SBram Moolenaarhi def link podCommand		Statement
70f37506f6SBram Moolenaarhi def link podCmdText		String
71f37506f6SBram Moolenaarhi def link podOverIndent	Number
72f37506f6SBram Moolenaarhi def link podForKeywd		Identifier
73f37506f6SBram Moolenaarhi def link podFormat		Identifier
74f37506f6SBram Moolenaarhi def link podVerbatimLine	PreProc
75f37506f6SBram Moolenaarhi def link podSpecial		Identifier
76f37506f6SBram Moolenaarhi def link podEscape		String
77f37506f6SBram Moolenaarhi def link podEscape2		Number
78071d4279SBram Moolenaar
79543b7ef7SBram Moolenaarif exists("perl_pod_spellcheck_headings")
80543b7ef7SBram Moolenaar  " Spell-check headings
81543b7ef7SBram Moolenaar  syn clear podCmdText
82543b7ef7SBram Moolenaar  syn match podCmdText    ".*$" contained contains=podFormat
83543b7ef7SBram Moolenaarendif
84543b7ef7SBram Moolenaar
85543b7ef7SBram Moolenaarif exists("perl_pod_formatting")
86543b7ef7SBram Moolenaar  " By default, escapes like C<> are not checked for spelling. Remove B<>
87543b7ef7SBram Moolenaar  " and I<> from the list of escapes.
88543b7ef7SBram Moolenaar  syn clear podFormat
89543b7ef7SBram Moolenaar  syn region podFormat start="[CLF]<[^<]"me=e-1 end=">" oneline contains=podFormat,@NoSpell
90543b7ef7SBram Moolenaar  syn region podFormat start="[CLF]<<\s" end="\s>>" oneline contains=podFormat,@NoSpell
91543b7ef7SBram Moolenaar
92543b7ef7SBram Moolenaar  " Don't spell-check inside E<>, but ensure that the E< itself isn't
93543b7ef7SBram Moolenaar  " marked as a spelling mistake.
94543b7ef7SBram Moolenaar  syn match podFormat   "E<\(\d\+\|\I\i*\)>" contains=podEscape,podEscape2,@NoSpell
95543b7ef7SBram Moolenaar
96543b7ef7SBram Moolenaar  " Z<> is a mock formatting code. Ensure Z<> on its own isn't marked as a
97543b7ef7SBram Moolenaar  " spelling mistake.
98543b7ef7SBram Moolenaar  syn match podFormat   "Z<>" contains=podEscape,podEscape2,@NoSpell
99543b7ef7SBram Moolenaar
100543b7ef7SBram Moolenaar  " These are required so that whatever is *within* B<...>, I<...>, etc. is
101543b7ef7SBram Moolenaar  " spell-checked, but not the B, I, ... itself.
102543b7ef7SBram Moolenaar  syn match podBoldOpen    "B<" contains=@NoSpell
103543b7ef7SBram Moolenaar  syn match podItalicOpen  "I<" contains=@NoSpell
104543b7ef7SBram Moolenaar  syn match podNoSpaceOpen "S<" contains=@NoSpell
105543b7ef7SBram Moolenaar  syn match podIndexOpen   "X<" contains=@NoSpell
106543b7ef7SBram Moolenaar
107543b7ef7SBram Moolenaar  " Same as above but for the << >> syntax.
108543b7ef7SBram Moolenaar  syn match podBoldAlternativeDelimOpen    "B<< " contains=@NoSpell
109543b7ef7SBram Moolenaar  syn match podItalicAlternativeDelimOpen  "I<< " contains=@NoSpell
110543b7ef7SBram Moolenaar  syn match podNoSpaceAlternativeDelimOpen "S<< " contains=@NoSpell
111543b7ef7SBram Moolenaar  syn match podIndexAlternativeDelimOpen   "X<< " contains=@NoSpell
112543b7ef7SBram Moolenaar
113543b7ef7SBram Moolenaar  " Add support for spell checking text inside B<>, I<>, S<> and X<>.
114543b7ef7SBram Moolenaar  syn region podBold start="B<[^<]"me=e end=">" oneline contains=podBoldItalic,podBoldOpen
115543b7ef7SBram Moolenaar  syn region podBoldAlternativeDelim start="B<<\s" end="\s>>" oneline contains=podBoldAlternativeDelimOpen
116543b7ef7SBram Moolenaar
117543b7ef7SBram Moolenaar  syn region podItalic start="I<[^<]"me=e end=">" oneline contains=podItalicBold,podItalicOpen
118543b7ef7SBram Moolenaar  syn region podItalicAlternativeDelim start="I<<\s" end="\s>>" oneline contains=podItalicAlternativeDelimOpen
119543b7ef7SBram Moolenaar
120543b7ef7SBram Moolenaar  " Nested bold/italic and vice-versa
121543b7ef7SBram Moolenaar  syn region podBoldItalic contained start="I<[^<]"me=e end=">" oneline
122543b7ef7SBram Moolenaar  syn region podItalicBold contained start="B<[^<]"me=e end=">" oneline
123543b7ef7SBram Moolenaar
124543b7ef7SBram Moolenaar  syn region podNoSpace start="S<[^<]"ms=s-2 end=">"me=e oneline contains=podNoSpaceOpen
125543b7ef7SBram Moolenaar  syn region podNoSpaceAlternativeDelim start="S<<\s"ms=s-2 end="\s>>"me=e oneline contains=podNoSpaceAlternativeDelimOpen
126543b7ef7SBram Moolenaar
127543b7ef7SBram Moolenaar  syn region podIndex start="X<[^<]"ms=s-2 end=">"me=e oneline contains=podIndexOpen
128543b7ef7SBram Moolenaar  syn region podIndexAlternativeDelim start="X<<\s"ms=s-2 end="\s>>"me=e oneline contains=podIndexAlternativeDelimOpen
129543b7ef7SBram Moolenaar
130543b7ef7SBram Moolenaar  " Restore this (otherwise B<> is shown as bold inside verbatim)
131543b7ef7SBram Moolenaar  syn match podVerbatimLine	"^\s.*$" contains=@NoSpell
132543b7ef7SBram Moolenaar
133543b7ef7SBram Moolenaar  " Ensure formatted text can be displayed in headings and items
134543b7ef7SBram Moolenaar  syn clear podCmdText
135543b7ef7SBram Moolenaar
136543b7ef7SBram Moolenaar  if exists("perl_pod_spellcheck_headings")
137543b7ef7SBram Moolenaar    syn match podCmdText ".*$" contained contains=podFormat,podBold,
138543b7ef7SBram Moolenaar          \podBoldAlternativeDelim,podItalic,podItalicAlternativeDelim,
139543b7ef7SBram Moolenaar          \podBoldOpen,podItalicOpen,podBoldAlternativeDelimOpen,
140543b7ef7SBram Moolenaar          \podItalicAlternativeDelimOpen,podNoSpaceOpen
141543b7ef7SBram Moolenaar  else
142543b7ef7SBram Moolenaar    syn match podCmdText ".*$" contained contains=podFormat,podBold,
143543b7ef7SBram Moolenaar          \podBoldAlternativeDelim,podItalic,podItalicAlternativeDelim,
144543b7ef7SBram Moolenaar          \@NoSpell
145543b7ef7SBram Moolenaar  endif
146543b7ef7SBram Moolenaar
147543b7ef7SBram Moolenaar  " Specify how to display these
148543b7ef7SBram Moolenaar  hi def podBold term=bold cterm=bold gui=bold
149543b7ef7SBram Moolenaar
150543b7ef7SBram Moolenaar  hi link podBoldAlternativeDelim podBold
151543b7ef7SBram Moolenaar  hi link podBoldAlternativeDelimOpen podBold
152543b7ef7SBram Moolenaar  hi link podBoldOpen podBold
153543b7ef7SBram Moolenaar
154543b7ef7SBram Moolenaar  hi link podNoSpace                 Identifier
155543b7ef7SBram Moolenaar  hi link podNoSpaceAlternativeDelim Identifier
156543b7ef7SBram Moolenaar
157543b7ef7SBram Moolenaar  hi link podIndex                   Identifier
158543b7ef7SBram Moolenaar  hi link podIndexAlternativeDelim   Identifier
159543b7ef7SBram Moolenaar
160543b7ef7SBram Moolenaar  hi def podItalic term=italic cterm=italic gui=italic
161543b7ef7SBram Moolenaar
162543b7ef7SBram Moolenaar  hi link podItalicAlternativeDelim podItalic
163543b7ef7SBram Moolenaar  hi link podItalicAlternativeDelimOpen podItalic
164543b7ef7SBram Moolenaar  hi link podItalicOpen podItalic
165543b7ef7SBram Moolenaar
166543b7ef7SBram Moolenaar  hi def podBoldItalic term=italic,bold cterm=italic,bold gui=italic,bold
167543b7ef7SBram Moolenaar  hi def podItalicBold term=italic,bold cterm=italic,bold gui=italic,bold
168543b7ef7SBram Moolenaarendif
169543b7ef7SBram Moolenaar
170071d4279SBram Moolenaarlet b:current_syntax = "pod"
171071d4279SBram Moolenaar
172543b7ef7SBram Moolenaarlet &cpo = s:cpo_save
173543b7ef7SBram Moolenaarunlet s:cpo_save
174543b7ef7SBram Moolenaar
175071d4279SBram Moolenaar" vim: ts=8
176