summaryrefslogtreecommitdiffstats
path: root/runtime/syntax/pod.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/syntax/pod.vim')
-rw-r--r--runtime/syntax/pod.vim175
1 files changed, 175 insertions, 0 deletions
diff --git a/runtime/syntax/pod.vim b/runtime/syntax/pod.vim
new file mode 100644
index 0000000..6047132
--- /dev/null
+++ b/runtime/syntax/pod.vim
@@ -0,0 +1,175 @@
+" Vim syntax file
+" Language: Perl POD format
+" Maintainer: vim-perl <vim-perl@googlegroups.com>
+" Previously: Scott Bigham <dsb@killerbunnies.org>
+" Homepage: http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change: 2017-09-12
+
+" To add embedded POD documentation highlighting to your syntax file, add
+" the commands:
+"
+" syn include @Pod <sfile>:p:h/pod.vim
+" syn region myPOD start="^=pod" start="^=head" end="^=cut" keepend contained contains=@Pod
+"
+" and add myPod to the contains= list of some existing region, probably a
+" comment. The "keepend" flag is needed because "=cut" is matched as a
+" pattern in its own right.
+
+
+" Remove any old syntax stuff hanging around (this is suppressed
+" automatically by ":syn include" if necessary).
+" quit when a syntax file was already loaded
+if exists("b:current_syntax")
+ finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" POD commands
+syn match podCommand "^=encoding" nextgroup=podCmdText contains=@NoSpell
+syn match podCommand "^=head[1234]" nextgroup=podCmdText contains=@NoSpell
+syn match podCommand "^=item" nextgroup=podCmdText contains=@NoSpell
+syn match podCommand "^=over" nextgroup=podOverIndent skipwhite contains=@NoSpell
+syn match podCommand "^=back" contains=@NoSpell
+syn match podCommand "^=cut" contains=@NoSpell
+syn match podCommand "^=pod" contains=@NoSpell
+syn match podCommand "^=for" nextgroup=podForKeywd skipwhite contains=@NoSpell
+syn match podCommand "^=begin" nextgroup=podForKeywd skipwhite contains=@NoSpell
+syn match podCommand "^=end" nextgroup=podForKeywd skipwhite contains=@NoSpell
+
+" Text of a =head1, =head2 or =item command
+syn match podCmdText ".*$" contained contains=podFormat,@NoSpell
+
+" Indent amount of =over command
+syn match podOverIndent "\d\+" contained contains=@NoSpell
+
+" Formatter identifier keyword for =for, =begin and =end commands
+syn match podForKeywd "\S\+" contained contains=@NoSpell
+
+" An indented line, to be displayed verbatim
+syn match podVerbatimLine "^\s.*$" contains=@NoSpell
+
+" Inline textual items handled specially by POD
+syn match podSpecial "\(\<\|&\)\I\i*\(::\I\i*\)*([^)]*)" contains=@NoSpell
+syn match podSpecial "[$@%]\I\i*\(::\I\i*\)*\>" contains=@NoSpell
+
+" Special formatting sequences
+syn region podFormat start="[IBSCLFX]<[^<]"me=e-1 end=">" oneline contains=podFormat,@NoSpell
+syn region podFormat start="[IBSCLFX]<<\s" end="\s>>" oneline contains=podFormat,@NoSpell
+syn match podFormat "Z<>"
+syn match podFormat "E<\(\d\+\|\I\i*\)>" contains=podEscape,podEscape2,@NoSpell
+syn match podEscape "\I\i*>"me=e-1 contained contains=@NoSpell
+syn match podEscape2 "\d\+>"me=e-1 contained contains=@NoSpell
+
+" Define the default highlighting.
+" Only when an item doesn't have highlighting yet
+
+hi def link podCommand Statement
+hi def link podCmdText String
+hi def link podOverIndent Number
+hi def link podForKeywd Identifier
+hi def link podFormat Identifier
+hi def link podVerbatimLine PreProc
+hi def link podSpecial Identifier
+hi def link podEscape String
+hi def link podEscape2 Number
+
+if exists("perl_pod_spellcheck_headings")
+ " Spell-check headings
+ syn clear podCmdText
+ syn match podCmdText ".*$" contained contains=podFormat
+endif
+
+if exists("perl_pod_formatting")
+ " By default, escapes like C<> are not checked for spelling. Remove B<>
+ " and I<> from the list of escapes.
+ syn clear podFormat
+ syn region podFormat start="[CLF]<[^<]"me=e-1 end=">" oneline contains=podFormat,@NoSpell
+ syn region podFormat start="[CLF]<<\s" end="\s>>" oneline contains=podFormat,@NoSpell
+
+ " Don't spell-check inside E<>, but ensure that the E< itself isn't
+ " marked as a spelling mistake.
+ syn match podFormat "E<\(\d\+\|\I\i*\)>" contains=podEscape,podEscape2,@NoSpell
+
+ " Z<> is a mock formatting code. Ensure Z<> on its own isn't marked as a
+ " spelling mistake.
+ syn match podFormat "Z<>" contains=podEscape,podEscape2,@NoSpell
+
+ " These are required so that whatever is *within* B<...>, I<...>, etc. is
+ " spell-checked, but not the B, I, ... itself.
+ syn match podBoldOpen "B<" contains=@NoSpell
+ syn match podItalicOpen "I<" contains=@NoSpell
+ syn match podNoSpaceOpen "S<" contains=@NoSpell
+ syn match podIndexOpen "X<" contains=@NoSpell
+
+ " Same as above but for the << >> syntax.
+ syn match podBoldAlternativeDelimOpen "B<< " contains=@NoSpell
+ syn match podItalicAlternativeDelimOpen "I<< " contains=@NoSpell
+ syn match podNoSpaceAlternativeDelimOpen "S<< " contains=@NoSpell
+ syn match podIndexAlternativeDelimOpen "X<< " contains=@NoSpell
+
+ " Add support for spell checking text inside B<>, I<>, S<> and X<>.
+ syn region podBold start="B<[^<]"me=e end=">" oneline contains=podBoldItalic,podBoldOpen
+ syn region podBoldAlternativeDelim start="B<<\s" end="\s>>" oneline contains=podBoldAlternativeDelimOpen
+
+ syn region podItalic start="I<[^<]"me=e end=">" oneline contains=podItalicBold,podItalicOpen
+ syn region podItalicAlternativeDelim start="I<<\s" end="\s>>" oneline contains=podItalicAlternativeDelimOpen
+
+ " Nested bold/italic and vice-versa
+ syn region podBoldItalic contained start="I<[^<]"me=e end=">" oneline
+ syn region podItalicBold contained start="B<[^<]"me=e end=">" oneline
+
+ syn region podNoSpace start="S<[^<]"ms=s-2 end=">"me=e oneline contains=podNoSpaceOpen
+ syn region podNoSpaceAlternativeDelim start="S<<\s"ms=s-2 end="\s>>"me=e oneline contains=podNoSpaceAlternativeDelimOpen
+
+ syn region podIndex start="X<[^<]"ms=s-2 end=">"me=e oneline contains=podIndexOpen
+ syn region podIndexAlternativeDelim start="X<<\s"ms=s-2 end="\s>>"me=e oneline contains=podIndexAlternativeDelimOpen
+
+ " Restore this (otherwise B<> is shown as bold inside verbatim)
+ syn match podVerbatimLine "^\s.*$" contains=@NoSpell
+
+ " Ensure formatted text can be displayed in headings and items
+ syn clear podCmdText
+
+ if exists("perl_pod_spellcheck_headings")
+ syn match podCmdText ".*$" contained contains=podFormat,podBold,
+ \podBoldAlternativeDelim,podItalic,podItalicAlternativeDelim,
+ \podBoldOpen,podItalicOpen,podBoldAlternativeDelimOpen,
+ \podItalicAlternativeDelimOpen,podNoSpaceOpen
+ else
+ syn match podCmdText ".*$" contained contains=podFormat,podBold,
+ \podBoldAlternativeDelim,podItalic,podItalicAlternativeDelim,
+ \@NoSpell
+ endif
+
+ " Specify how to display these
+ hi def podBold term=bold cterm=bold gui=bold
+
+ hi link podBoldAlternativeDelim podBold
+ hi link podBoldAlternativeDelimOpen podBold
+ hi link podBoldOpen podBold
+
+ hi link podNoSpace Identifier
+ hi link podNoSpaceAlternativeDelim Identifier
+
+ hi link podIndex Identifier
+ hi link podIndexAlternativeDelim Identifier
+
+ hi def podItalic term=italic cterm=italic gui=italic
+
+ hi link podItalicAlternativeDelim podItalic
+ hi link podItalicAlternativeDelimOpen podItalic
+ hi link podItalicOpen podItalic
+
+ hi def podBoldItalic term=italic,bold cterm=italic,bold gui=italic,bold
+ hi def podItalicBold term=italic,bold cterm=italic,bold gui=italic,bold
+endif
+
+let b:current_syntax = "pod"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: ts=8