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