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