1" Vim syntax file 2" Language: Perl POD format 3" Maintainer: vim-perl <vim-perl@googlegroups.com> 4" Previously: Scott Bigham <dsb@killerbunnies.org> 5" Homepage: http://github.com/vim-perl/vim-perl 6" Bugs/requests: http://github.com/vim-perl/vim-perl/issues 7" Last Change: 2017-09-12 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 68 69hi def link podCommand Statement 70hi def link podCmdText String 71hi def link podOverIndent Number 72hi def link podForKeywd Identifier 73hi def link podFormat Identifier 74hi def link podVerbatimLine PreProc 75hi def link podSpecial Identifier 76hi def link podEscape String 77hi def link podEscape2 Number 78 79if exists("perl_pod_spellcheck_headings") 80 " Spell-check headings 81 syn clear podCmdText 82 syn match podCmdText ".*$" contained contains=podFormat 83endif 84 85if exists("perl_pod_formatting") 86 " By default, escapes like C<> are not checked for spelling. Remove B<> 87 " and I<> from the list of escapes. 88 syn clear podFormat 89 syn region podFormat start="[CLF]<[^<]"me=e-1 end=">" oneline contains=podFormat,@NoSpell 90 syn region podFormat start="[CLF]<<\s" end="\s>>" oneline contains=podFormat,@NoSpell 91 92 " Don't spell-check inside E<>, but ensure that the E< itself isn't 93 " marked as a spelling mistake. 94 syn match podFormat "E<\(\d\+\|\I\i*\)>" contains=podEscape,podEscape2,@NoSpell 95 96 " Z<> is a mock formatting code. Ensure Z<> on its own isn't marked as a 97 " spelling mistake. 98 syn match podFormat "Z<>" contains=podEscape,podEscape2,@NoSpell 99 100 " These are required so that whatever is *within* B<...>, I<...>, etc. is 101 " spell-checked, but not the B, I, ... itself. 102 syn match podBoldOpen "B<" contains=@NoSpell 103 syn match podItalicOpen "I<" contains=@NoSpell 104 syn match podNoSpaceOpen "S<" contains=@NoSpell 105 syn match podIndexOpen "X<" contains=@NoSpell 106 107 " Same as above but for the << >> syntax. 108 syn match podBoldAlternativeDelimOpen "B<< " contains=@NoSpell 109 syn match podItalicAlternativeDelimOpen "I<< " contains=@NoSpell 110 syn match podNoSpaceAlternativeDelimOpen "S<< " contains=@NoSpell 111 syn match podIndexAlternativeDelimOpen "X<< " contains=@NoSpell 112 113 " Add support for spell checking text inside B<>, I<>, S<> and X<>. 114 syn region podBold start="B<[^<]"me=e end=">" oneline contains=podBoldItalic,podBoldOpen 115 syn region podBoldAlternativeDelim start="B<<\s" end="\s>>" oneline contains=podBoldAlternativeDelimOpen 116 117 syn region podItalic start="I<[^<]"me=e end=">" oneline contains=podItalicBold,podItalicOpen 118 syn region podItalicAlternativeDelim start="I<<\s" end="\s>>" oneline contains=podItalicAlternativeDelimOpen 119 120 " Nested bold/italic and vice-versa 121 syn region podBoldItalic contained start="I<[^<]"me=e end=">" oneline 122 syn region podItalicBold contained start="B<[^<]"me=e end=">" oneline 123 124 syn region podNoSpace start="S<[^<]"ms=s-2 end=">"me=e oneline contains=podNoSpaceOpen 125 syn region podNoSpaceAlternativeDelim start="S<<\s"ms=s-2 end="\s>>"me=e oneline contains=podNoSpaceAlternativeDelimOpen 126 127 syn region podIndex start="X<[^<]"ms=s-2 end=">"me=e oneline contains=podIndexOpen 128 syn region podIndexAlternativeDelim start="X<<\s"ms=s-2 end="\s>>"me=e oneline contains=podIndexAlternativeDelimOpen 129 130 " Restore this (otherwise B<> is shown as bold inside verbatim) 131 syn match podVerbatimLine "^\s.*$" contains=@NoSpell 132 133 " Ensure formatted text can be displayed in headings and items 134 syn clear podCmdText 135 136 if exists("perl_pod_spellcheck_headings") 137 syn match podCmdText ".*$" contained contains=podFormat,podBold, 138 \podBoldAlternativeDelim,podItalic,podItalicAlternativeDelim, 139 \podBoldOpen,podItalicOpen,podBoldAlternativeDelimOpen, 140 \podItalicAlternativeDelimOpen,podNoSpaceOpen 141 else 142 syn match podCmdText ".*$" contained contains=podFormat,podBold, 143 \podBoldAlternativeDelim,podItalic,podItalicAlternativeDelim, 144 \@NoSpell 145 endif 146 147 " Specify how to display these 148 hi def podBold term=bold cterm=bold gui=bold 149 150 hi link podBoldAlternativeDelim podBold 151 hi link podBoldAlternativeDelimOpen podBold 152 hi link podBoldOpen podBold 153 154 hi link podNoSpace Identifier 155 hi link podNoSpaceAlternativeDelim Identifier 156 157 hi link podIndex Identifier 158 hi link podIndexAlternativeDelim Identifier 159 160 hi def podItalic term=italic cterm=italic gui=italic 161 162 hi link podItalicAlternativeDelim podItalic 163 hi link podItalicAlternativeDelimOpen podItalic 164 hi link podItalicOpen podItalic 165 166 hi def podBoldItalic term=italic,bold cterm=italic,bold gui=italic,bold 167 hi def podItalicBold term=italic,bold cterm=italic,bold gui=italic,bold 168endif 169 170let b:current_syntax = "pod" 171 172let &cpo = s:cpo_save 173unlet s:cpo_save 174 175" vim: ts=8 176