180 lines
7.2 KiB
VimL
180 lines
7.2 KiB
VimL
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'perl') == -1
|
|
|
|
" 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: {{LAST_CHANGE}}
|
|
|
|
" 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
|
|
|
|
endif
|