1" DoxyGen syntax highlighting extension for c/c++/idl/java 2" Language: doxygen on top of c, cpp, idl, java, php 3" Maintainer: Michael Geddes <[email protected]> 4" Author: Michael Geddes 5" Last Change: December 2020 6" Version: 1.30 7" 8" Copyright 2004-2020 Michael Geddes 9" Please feel free to use, modify & distribute all or part of this script, 10" providing this copyright message remains. 11" I would appreciate being acknowledged in any derived scripts, and would 12" appreciate and welcome any updates, modifications or suggestions. 13 14" NOTE: Comments welcome! 15" 16" There are two variables that control the syntax highlighting produced by this 17" script: 18" doxygen_enhanced_colour - Use the (non-standard) original colours designed 19" for this highlighting. 20" doxygen_my_rendering - Disable the HTML bold/italic/underline rendering. 21" 22" A brief description without '.' or '!' will cause the end comment 23" character to be marked as an error. You can define the colour of this using 24" the highlight doxygenErrorComment. 25" A \link without an \endlink will cause an error highlight on the end-comment. 26" This is defined by doxygenLinkError 27" 28" The variable g:doxygen_codeword_font can be set to the guifont for marking \c 29" words - a 'typewriter' like font normally. Spaces must be escaped. It can 30" also be set to any highlight attribute. Alternatively, a highlight for doxygenCodeWord 31" can be used to override it. 32" 33" By default, highlighting is done assuming you have the JAVADOC_AUTOBRIEF 34" setting turned on in your Doxygen configuration. If you don't, you 35" can set the variable g:doxygen_javadoc_autobrief to 0 to have the 36" highlighting more accurately reflect the way Doxygen will interpret your 37" comments. 38" 39" Support for cpp, c, idl, doxygen and php. 40" 41" Special thanks to: Wu Yongwei, Toby Allsopp 42" 43 44if exists('b:suppress_doxygen') 45 unlet b:suppress_doxygen 46 finish 47endif 48 49if exists('b:current_syntax') && b:current_syntax =~ 'doxygen' && !exists('doxygen_debug_script') 50 finish 51endif 52 53let s:cpo_save = &cpo 54try 55 set cpo&vim 56 57 " Start of Doxygen syntax highlighting: 58 " 59 60 " C/C++ Style line comments 61 syn match doxygenCommentWhite +\s*\ze/\*\(\*/\)\@![*!]+ containedin=phpRegion 62 syn match doxygenCommentWhite +\s*\ze//[/!]+ containedin=phpRegion 63 syn match doxygenCommentWhite +\s*\ze/\*\(\*/\)\@![*!]+ 64 syn match doxygenCommentWhite +\s*\ze//[/!]+ containedin=phpRegion 65 66 syn region doxygenComment start=+/\*\(\*/\)\@![*!]+ end=+\*/+ contains=doxygenSyncStart,doxygenStart,doxygenTODO,doxygenLeadingWhite keepend fold containedin=phpRegion 67 syn region doxygenCommentL start=+//[/!]<\@!+me=e-1 end=+$+ contains=doxygenLeadingLWhite,doxygenStartL,@Spell keepend skipwhite skipnl nextgroup=doxygenCommentWhite2 fold containedin=phpRegion 68 syn region doxygenCommentL start=+//[/!]<+me=e-2 end=+$+ contains=doxygenStartL,@Spell keepend skipwhite skipnl fold containedin=phpRegion 69 syn region doxygenCommentL start=+//@\ze[{}]+ end=+$+ contains=doxygenGroupDefine,doxygenGroupDefineSpecial,@Spell fold containedin=phpRegion 70 syn region doxygenComment start=+/\*@\ze[{}]+ end=+\*/+ contains=doxygenGroupDefine,doxygenGroupDefineSpecial,@Spell fold containedin=phpRegion 71 72 " Single line brief followed by multiline comment. 73 syn match doxygenCommentWhite2 +\_s*\ze/\*\(\*/\)\@![*!]+ contained nextgroup=doxygenComment2 74 syn region doxygenComment2 start=+/\*\(\*/\)\@![*!]+ end=+\*/+ contained contains=doxygenSyncStart2,doxygenStart2,doxygenTODO keepend fold 75 " This helps with sync-ing as for some reason, syncing behaves differently to a normal region, and the start pattern does not get matched. 76 syn match doxygenSyncStart2 +[^*/]+ contained nextgroup=doxygenBody,doxygenPrev,doxygenStartSpecial,doxygenSkipComment,doxygenStartSkip2 skipwhite skipnl 77 78 " Skip empty lines at the start for when comments start on the 2nd/3rd line. 79 syn match doxygenStartSkip2 +^\s*\*[^/]+me=e-1 contained nextgroup=doxygenBody,doxygenStartSpecial,doxygenStartSkipWhite skipwhite skipnl 80 syn match doxygenStartSkip2 +^\s*\*$+ contained nextgroup=doxygenBody,doxygenStartSpecial,doxygenStartSkipWhite skipwhite skipnl 81 syn match doxygenStart2 +/\*[*!]+ contained nextgroup=doxygenBody,doxygenPrev,doxygenStartSpecial,doxygenStartSkip2 skipwhite skipnl 82 83 84 " Match the Starting pattern (effectively creating the start of a BNF) 85 if !exists('g:doxygen_javadoc_autobrief') || g:doxygen_javadoc_autobrief 86 syn match doxygenStart +/\*[*!]+ contained nextgroup=doxygenBrief,doxygenPrev,doxygenFindBriefSpecial,doxygenStartSpecial,doxygenStartSkipWhite,doxygenPage skipwhite skipnl 87 syn match doxygenLeadingLWhite +\s\++ contained nextgroup=doxygenPrevL,doxygenBriefL,doxygenSpecial 88 syn match doxygenStartL +//[/!]+ contained nextgroup=doxygenLeaingLWhite,doxygenPrevL,doxygenBriefL,doxygenSpecial 89 " Match the first sentence as a brief comment 90 if ! exists('g:doxygen_end_punctuation') 91 let g:doxygen_end_punctuation='[.]' 92 endif 93 94 exe 'syn region doxygenBrief contained start=+[\\@]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@*]+ start=+\(^\s*\)\@<!\*/\@!+ start=+\<\k+ skip=+'.doxygen_end_punctuation.'\S\@=+ end=+'.doxygen_end_punctuation.'+ end=+\(\s*\(\n\s*\*\=\s*\)[@\\]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\@!\)\@=+ contains=doxygenSmallSpecial,doxygenContinueCommentWhite,doxygenLeadingWhite,doxygenBriefEndComment,doxygenFindBriefSpecial,doxygenSmallSpecial,@doxygenHtmlGroup,doxygenTODO,doxygenHyperLink,doxygenHashLink,@Spell skipnl nextgroup=doxygenBody' 95 96 syn match doxygenBriefEndComment +\*/+ contained 97 98 exe 'syn region doxygenBriefL start=+@\k\@!\|[\\@]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@]+ start=+\<+ skip=+'.doxygen_end_punctuation.'\S+ end=+'.doxygen_end_punctuation.'\|$+ contained contains=doxygenSmallSpecial,doxygenHyperLink,doxygenHashLink,@doxygenHtmlGroup,@Spell keepend' 99 syn match doxygenPrevL +<+ contained nextgroup=doxygenBriefL,doxygenSpecial skipwhite 100 else 101 syn match doxygenStart +/\*[*!]+ contained nextgroup=doxygenBody,doxygenPrev,doxygenFindBriefSpecial,doxygenStartSpecial,doxygenStartSkipWhite,doxygenPage skipwhite skipnl 102 syn match doxygenStartL +//[/!]+ contained nextgroup=doxygenLeadingLWhite,doxygenPrevL,doxygenLine,doxygenSpecial 103 syn match doxygenLeadingLWhite +\s\++ contained nextgroup=doxygenPrevL,doxygenLine,doxygenSpecial 104 syn region doxygenLine start=+@\k\@!\|[\\@]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@<]+ start=+\<+ end='$' contained contains=doxygenSmallSpecial,doxygenHyperLink,doxygenHashLink,@doxygenHtmlGroup,@Spell keepend 105 syn match doxygenPrevL +<+ contained nextgroup=doxygenLine,doxygenSpecial skipwhite 106 107 endif 108 109 " This helps with sync-ing as for some reason, syncing behaves differently to a normal region, and the start pattern does not get matched. 110 syn match doxygenSyncStart +\ze[^*/]+ contained nextgroup=doxygenBrief,doxygenPrev,doxygenStartSpecial,doxygenFindBriefSpecial,doxygenStartSkipWhite,doxygenPage skipwhite skipnl 111 " Match an [@\]brief so that it moves to body-mode. 112 " 113 " 114 " syn match doxygenBriefLine contained 115 syn match doxygenBriefSpecial contained +[@\\]+ nextgroup=doxygenBriefWord skipwhite 116 " syn region doxygenFindBriefSpecial start=+[@\\]brief\>+ end=+\(\n\s*\*\=\s*\([@\\]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\@!\)\|\s*$\)\@=+ keepend contains=doxygenBriefSpecial nextgroup=doxygenBody keepend skipwhite skipnl contained 117 syn region doxygenFindBriefSpecial start=+[@\\]brief\>+ skip=+^\s*\(\*/\@!\s*\)\=\(\<\|[@\\]\<\([npcbea]\>\|em\>\|ref\|link\>\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@*]\)+ end=+^+ keepend contains=doxygenBriefSpecial nextgroup=doxygenBody keepend skipwhite skipnl contained 118 119 120 121" end=+\(\n\s*\*\=\s*\([@\\]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\@!\)\|\s*$\)\@=+ 122"syn region doxygenBriefLine contained start=+\<\k+ skip=+^\s*\(\*/\@!\s*\)\=\(\<\|[@\\]\<\([npcbea]\>\|em\>\|ref\|link\>\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@*]\)+ end=+^+ contains=doxygenContinueCommentWhite,doxygenSmallSpecial,@doxygenHtmlGroup,doxygenTODO,doxygenHyperLink,doxygenHashLink,@Spell skipwhite keepend matchgroup=xxx 123syn region doxygenBriefLine contained start=+\<\k+ skip=+^\s*\(\*/\@!\s*\)\=\(\<\|[@\\]\<\([npcbea]\>\|em\>\|ref\|link\>\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@*]\)+ end=+^+ skipwhite keepend matchgroup=xxx 124" syn region doxygenBriefLine matchgroup=xxxy contained start=+\<\k.\++ skip=+^\s*\k+ end=+end+ skipwhite keepend 125"doxygenFindBriefSpecial, 126 "" syn region doxygenSpecialMultilineDesc start=+.\++ contained contains=doxygenSpecialContinueCommentWhite,doxygenSmallSpecial,doxygenHyperLink,doxygenHashLink,@doxygenHtmlGroup,@Spell skipwhite keepend 127 128 129 " Match a '<' for applying a comment to the previous element. 130 syn match doxygenPrev +<+ contained nextgroup=doxygenBrief,doxygenBody,doxygenSpecial,doxygenStartSkipWhite skipwhite 131 132if exists("c_comment_strings") 133 " These are anti-Doxygen comments. If there are more than two asterisks or 3 '/'s 134 " then turn the comments back into normal C comments. 135 syn region cComment start="/\*\*\*" end="\*/" contains=@cCommentGroup,cCommentString,cCharacter,cNumbersCom,cSpaceError 136 syn region cCommentL start="////" skip="\\$" end="$" contains=@cCommentGroup,cComment2String,cCharacter,cNumbersCom,cSpaceError 137else 138 syn region cComment start="/\*\*\*" end="\*/" contains=@cCommentGroup,cSpaceError 139 syn region cCommentL start="////" skip="\\$" end="$" contains=@cCommentGroup,cSpaceError 140endif 141 142 " Special commands at the start of the area: starting with '@' or '\' 143 syn region doxygenStartSpecial contained start=+[@\\]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\@!+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=doxygenSpecial nextgroup=doxygenSkipComment skipnl keepend 144 syn match doxygenSkipComment contained +^\s*\*/\@!+ nextgroup=doxygenBrief,doxygenStartSpecial,doxygenFindBriefSpecial,doxygenPage skipwhite 145 146 "syn region doxygenBodyBit contained start=+$+ 147 148 " The main body of a doxygen comment. 149 syn region doxygenBody contained start=+\(/\*[*!]\)\@<!<\|[^<]\|$+ matchgroup=doxygenEndComment end=+\*/+re=e-2,me=e-2 contains=doxygenContinueCommentWhite,doxygenTODO,doxygenSpecial,doxygenSmallSpecial,doxygenHyperLink,doxygenHashLink,@doxygenHtmlGroup,@Spell 150 151 " These allow the skipping of comment continuation '*' characters. 152 syn match doxygenContinueCommentWhite contained +^\s*\ze\*+ nextgroup=doxygenContinueComment 153 syn match doxygenContinueComment contained +\*/\@!+ 154 155 " Catch a Brief comment without punctuation - flag it as an error but 156 " make sure the end comment is picked up also. 157 syn match doxygenErrorComment contained +\*/+ 158 159 160 " Skip empty lines at the start for when comments start on the 2nd/3rd line. 161 if !exists('g:doxygen_javadoc_autobrief') || g:doxygen_javadoc_autobrief 162 syn match doxygenStartSkipWhite +^\s*\ze\*/\@!+ contained nextgroup=doxygenBrief,doxygenStartSpecial,doxygenFindBriefSpecial,doxygenStartSkipWhite,doxygenPage skipwhite skipnl 163 "syn match doxygenStartSkipWhite +^\s*\ze\*$+ contained nextgroup=doxygenBrief,doxygenStartSpecial,doxygenFindBriefSpecial,doxygenStartSkipWhite,doxygenPage skipwhite skipnl 164 else 165 syn match doxygenStartSkipWhite +^\s*\*[^/]+me=e-1 contained nextgroup=doxygenStartSpecial,doxygenFindBriefSpecial,doxygenStartSkipWhite,doxygenPage,doxygenBody skipwhite skipnl 166 syn match doxygenStartSkipWhite +^\s*\*$+ contained nextgroup=doxygenStartSpecial,doxygenFindBriefSpecial,doxygenStartSkipWhite,doxygenPage,doxygenBody skipwhite skipnl 167 endif 168 169 " Create the single word matching special identifiers. 170 171 fun! s:DxyCreateSmallSpecial( kword, name ) 172 173 let mx='[-:0-9A-Za-z_%=&+*/!~>|]\@<!\([-0-9A-Za-z_%=+*/!~>|#]\+[-0-9A-Za-z_%=+*/!~>|]\@!\|\\[\\<>&.]@\|[.,]\w\@=\|::\|([^)]*)\|&[0-9a-zA-Z]\{2,7};\)\+' 174 exe 'syn region doxygenSpecial'.a:name.'Word contained start=+'.a:kword.'+ end=+\(\_s\+'.mx.'\)\@<=[-a-zA-Z_0-9+*/^%|~!=&\\]\@!+ skipwhite contains=doxygenContinueCommentWhite,doxygen'.a:name.'Word' 175 exe 'syn match doxygen'.a:name.'Word contained "\_s\@<='.mx.'" contains=doxygenHtmlSpecial,@Spell keepend' 176 endfun 177 call s:DxyCreateSmallSpecial('p', 'Code') 178 call s:DxyCreateSmallSpecial('c', 'Code') 179 call s:DxyCreateSmallSpecial('b', 'Bold') 180 call s:DxyCreateSmallSpecial('e', 'Emphasised') 181 call s:DxyCreateSmallSpecial('em', 'Emphasised') 182 call s:DxyCreateSmallSpecial('a', 'Argument') 183 call s:DxyCreateSmallSpecial('ref', 'Ref') 184 delfun s:DxyCreateSmallSpecial 185 186 syn match doxygenSmallSpecial contained +[@\\]\(\<[npcbea]\>\|\<em\>\|\<ref\>\|\<link\>\|f\$\|[$\\&<>#]\)\@=+ nextgroup=doxygenOtherLink,doxygenHyperLink,doxygenHashLink,doxygenFormula,doxygenSymbol,doxygenSpecial.*Word 187 188 " Now for special characters 189 syn match doxygenSpecial contained +[@\\]\(\<[npcbea]\>\|\<em\>\|\<ref\|\<link\>\>\|\<f\$\|[$\\&<>#]\)\@!+ nextgroup=doxygenParam,doxygenTParam,doxygenRetval,doxygenBriefWord,doxygenBold,doxygenBOther,doxygenOther,doxygenOtherTODO,doxygenOtherWARN,doxygenOtherBUG,doxygenPage,doxygenGroupDefine,doxygenCodeRegion,doxygenVerbatimRegion,doxygenDotRegion 190 " doxygenOtherLink,doxygenSymbol,doxygenFormula,doxygenErrorSpecial,doxygenSpecial.*Word 191 " 192 syn match doxygenGroupDefine contained +@\@<=[{}]+ 193 syn match doxygenGroupDefineSpecial contained +@\ze[{}]+ 194 195 syn match doxygenErrorSpecial contained +\s+ 196 197 " Match parameters and retvals (highlighting the first word as special). 198 syn match doxygenParamDirection contained "\v\[(\s*in>((]\s*\[|\s*,\s*)out>)=|out>((]\s*\[|\s*,\s*)in>)=)\]" nextgroup=doxygenParamName skipwhite 199 syn keyword doxygenParam contained param nextgroup=doxygenParamName,doxygenParamDirection skipwhite 200 syn keyword doxygenTParam contained tparam nextgroup=doxygenParamName skipwhite 201 syn match doxygenParamName contained +[A-Za-z0-9_:]\++ nextgroup=doxygenSpecialMultilineDesc skipwhite 202 syn keyword doxygenRetval contained retval throw throws exception nextgroup=doxygenReturnValue skipwhite 203 syn match doxygenReturnValue contained +\S\++ nextgroup=doxygenSpecialMultilineDesc skipwhite 204 205 " Match one line identifiers. 206 syn keyword doxygenOther contained addindex anchor 207 \ dontinclude endhtmlonly endlatexonly showinitializer hideinitializer 208 \ example htmlonly image include includelineno ingroup latexonly line 209 \ overload relates related relatesalso relatedalso sa skip skipline 210 \ until verbinclude version addtogroup htmlinclude copydoc dotfile 211 \ xmlonly endxmlonly 212 \ nextgroup=doxygenSpecialOnelineDesc copybrief copydetails copyright dir extends 213 \ implements 214 215 syn region doxygenCodeRegion contained matchgroup=doxygenOther start=+\<code\>+ matchgroup=doxygenOther end=+[\\@]\@<=\<endcode\>+ contains=doxygenCodeRegionSpecial,doxygenContinueCommentWhite,doxygenErrorComment,@NoSpell 216 syn match doxygenCodeRegionSpecial contained +[\\@]\(endcode\>\)\@=+ 217 218 syn region doxygenVerbatimRegion contained matchgroup=doxygenOther start=+\<verbatim\>+ matchgroup=doxygenOther end=+[\\@]\@<=\<endverbatim\>+ contains=doxygenVerbatimRegionSpecial,doxygenContinueCommentWhite,doxygenErrorComment,@NoSpell 219 syn match doxygenVerbatimRegionSpecial contained +[\\@]\(endverbatim\>\)\@=+ 220 221 if exists('b:current_syntax') 222 let b:doxygen_syntax_save=b:current_syntax 223 unlet b:current_syntax 224 endif 225 226 syn include @Dotx syntax/dot.vim 227 228 if exists('b:doxygen_syntax_save') 229 let b:current_syntax=b:doxygen_syntax_save 230 unlet b:doxygen_syntax_save 231 else 232 unlet b:current_syntax 233 endif 234 235 syn region doxygenDotRegion contained matchgroup=doxygenOther start=+\<dot\>+ matchgroup=doxygenOther end=+[\\@]\@<=\<enddot\>+ contains=doxygenDotRegionSpecial,doxygenErrorComment,doxygenContinueCommentWhite,@NoSpell,@Dotx 236 syn match doxygenDotRegionSpecial contained +[\\@]\(enddot\>\)\@=+ 237 238 " Match single line identifiers. 239 syn keyword doxygenBOther contained class enum file fn mainpage interface 240 \ namespace struct typedef union var def name 241 \ nextgroup=doxygenSpecialTypeOnelineDesc 242 243 syn keyword doxygenOther contained par nextgroup=doxygenHeaderLine 244 syn region doxygenHeaderLine start=+.+ end=+^+ contained skipwhite nextgroup=doxygenSpecialMultilineDesc 245 " Match the start of other multiline comments. 246 syn keyword doxygenOther contained arg author authors date deprecated li return returns result see invariant note post pre remarks since test internal nextgroup=doxygenSpecialMultilineDesc 247 syn keyword doxygenOtherTODO contained todo attention nextgroup=doxygenSpecialMultilineDesc 248 syn keyword doxygenOtherWARN contained warning nextgroup=doxygenSpecialMultilineDesc 249 syn keyword doxygenOtherBUG contained bug nextgroup=doxygenSpecialMultilineDesc 250 251 " Handle \link, \endlink, highlighting the link-to and the link text bits separately. 252 syn region doxygenOtherLink matchgroup=doxygenOther start=+\<link\>+ end=+[\@]\@<=endlink\>+ contained contains=doxygenLinkWord,doxygenContinueCommentWhite,doxygenLinkError,doxygenEndlinkSpecial 253 syn match doxygenEndlinkSpecial contained +[\\@]\zeendlink\>+ 254 255 syn match doxygenLinkWord "[_a-zA-Z:#()][_a-z0-9A-Z:#()]*\>" contained skipnl nextgroup=doxygenLinkRest,doxygenContinueLinkComment 256 syn match doxygenLinkRest +[^*@\\]\|\*/\@!\|[@\\]\(endlink\>\)\@!+ contained skipnl nextgroup=doxygenLinkRest,doxygenContinueLinkComment 257 syn match doxygenContinueLinkComment contained +^\s*\*\=[^/]+me=e-1 nextgroup=doxygenLinkRest 258 syn match doxygenLinkError "\*/" contained 259 " #Link highlighting. 260 syn match doxygenHashLink /\(\h\w*\)\?#\(\.\w\@=\|\w\+\|::\|()\)\+/ contained contains=doxygenHashSpecial 261 syn match doxygenHashSpecial /#/ contained 262 syn match doxygenHyperLink /\(\s\|^\s*\*\?\)\@<=\(http\|https\|ftp\):\/\/[-0-9a-zA-Z_?&=+#%/.!':;@~]\+/ contained 263 264 " Handle \page. This does not use doxygenBrief. 265 syn match doxygenPage "[\\@]page\>"me=s+1 contained skipwhite nextgroup=doxygenPagePage 266 syn keyword doxygenPagePage page contained skipwhite nextgroup=doxygenPageIdent 267 syn region doxygenPageDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend skipwhite skipnl nextgroup=doxygenBody 268 syn match doxygenPageIdent "\<\w\+\>" contained nextgroup=doxygenPageDesc 269 270 " Handle section 271 syn keyword doxygenOther defgroup section subsection subsubsection weakgroup contained skipwhite nextgroup=doxygenSpecialIdent 272 syn region doxygenSpecialSectionDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend skipwhite skipnl nextgroup=doxygenContinueCommentWhite 273 syn match doxygenSpecialIdent "\<\w\+\>" contained nextgroup=doxygenSpecialSectionDesc 274 275 " Does the one-line description for the one-line type identifiers. 276 syn region doxygenSpecialTypeOnelineDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend 277 syn region doxygenSpecialOnelineDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend 278 279 " Handle the multiline description for the multiline type identifiers. 280 " Continue until an 'empty' line (can contain a '*' continuation) or until the 281 " next whole-line @ command \ command. 282 syn region doxygenSpecialMultilineDesc start=+.\++ skip=+^\s*\(\*/\@!\s*\)\=\(\<\|[@\\]\<\([npcbea]\>\|em\>\|ref\|link\>\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@*]\)+ end=+^+ contained contains=doxygenSpecialContinueCommentWhite,doxygenSmallSpecial,doxygenHyperLink,doxygenHashLink,@doxygenHtmlGroup,@Spell skipwhite keepend 283 284" syn match doxygenSpecialContinueComment contained +^\s*\*/\@!\s*+ nextgroup=doxygenSpecial skipwhite 285 syn match doxygenSpecialContinueCommentWhite contained +^\s*\ze\*+ nextgroup=doxygenSpecialContinueComment 286 syn match doxygenSpecialContinueComment contained +\*/\@!+ 287 288 289 " Handle special cases 'bold' and 'group' 290 syn keyword doxygenBold contained bold nextgroup=doxygenSpecialHeading 291 syn keyword doxygenBriefWord contained brief nextgroup=doxygenBriefLine skipwhite 292 syn match doxygenSpecialHeading +.\++ contained skipwhite 293 syn keyword doxygenGroup contained group nextgroup=doxygenGroupName skipwhite 294 syn keyword doxygenGroupName contained +\k\++ nextgroup=doxygenSpecialOnelineDesc skipwhite 295 296 " Handle special symbol identifiers @$, @\, @$ etc 297 syn match doxygenSymbol contained +[$\\&<>#n]+ 298 299 " Simplistic handling of formula regions 300 syn region doxygenFormula contained matchgroup=doxygenFormulaEnds start=+f\$+ end=+[@\\]f\$+ contains=doxygenFormulaSpecial,doxygenFormulaOperator 301 syn match doxygenFormulaSpecial contained +[@\\]\(f[^$]\|[^f]\)+me=s+1 nextgroup=doxygenFormulaKeyword,doxygenFormulaEscaped 302 syn match doxygenFormulaEscaped contained "." 303 syn match doxygenFormulaKeyword contained "[a-z]\+" 304 syn match doxygenFormulaOperator contained +[_^]+ 305 306 syn region doxygenFormula contained matchgroup=doxygenFormulaEnds start=+f\[+ end=+[@\\]f]+ contains=doxygenFormulaSpecial,doxygenFormulaOperator,doxygenAtom 307 syn region doxygenAtom contained transparent matchgroup=doxygenFormulaOperator start=+{+ end=+}+ contains=doxygenAtom,doxygenFormulaSpecial,doxygenFormulaOperator 308 309 " Add TODO highlighting. 310 syn keyword doxygenTODO contained TODO README XXX FIXME 311 312 " Supported HTML subset. Not perfect, but okay. 313 syn case ignore 314 syn region doxygenHtmlTag contained matchgroup=doxygenHtmlCh start=+\v\</=\ze([biuap]|em|strong|img|br|center|code|dfn|d[ldt]|hr|h[0-3]|li|[ou]l|pre|small|sub|sup|table|tt|var|caption|src|alt|longdesc|name|height|width|usemap|ismap|href|type)>+ skip=+\\<\|\<\k\+=\("[^"]*"\|'[^']*\)+ end=+>+ contains=doxygenHtmlCmd,doxygenContinueCommentWhite,doxygenHtmlVar 315 syn keyword doxygenHtmlCmd contained b i em strong u img a br p center code dfn dl dd dt hr h1 h2 h3 li ol ul pre small sub sup table tt var caption nextgroup=doxygenHtmlVar skipwhite 316 syn keyword doxygenHtmlVar contained src alt longdesc name height width usemap ismap href type nextgroup=doxygenHtmlEqu skipwhite 317 syn match doxygenHtmlEqu contained +=+ nextgroup=doxygenHtmlExpr skipwhite 318 syn match doxygenHtmlExpr contained +"\(\\.\|[^"]\)*"\|'\(\\.\|[^']\)*'+ nextgroup=doxygenHtmlVar skipwhite 319 syn case match 320 syn match doxygenHtmlSpecial contained "&\(copy\|quot\|[AEIOUYaeiouy]uml\|[AEIOUYaeiouy]acute\|[AEIOUaeiouy]grave\|[AEIOUaeiouy]circ\|[ANOano]tilde\|szlig\|[Aa]ring\|nbsp\|gt\|lt\|amp\);" 321 322 syn cluster doxygenHtmlGroup contains=doxygenHtmlCode,doxygenHtmlBold,doxygenHtmlUnderline,doxygenHtmlItalic,doxygenHtmlSpecial,doxygenHtmlTag,doxygenHtmlLink 323 324 syn cluster doxygenHtmlTop contains=@Spell,doxygenHtmlSpecial,doxygenHtmlTag,doxygenContinueCommentWhite 325 " Html Support 326 syn region doxygenHtmlLink contained start=+<[aA]\>\s*\(\n\s*\*\s*\)\=\(\(name\|href\)=\("[^"]*"\|'[^']*'\)\)\=\s*>+ end=+</[aA]>+me=e-4 contains=@doxygenHtmlTop 327 hi link doxygenHtmlLink Underlined 328 329 syn region doxygenHtmlBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderline,doxygenHtmlBoldItalic,@Spell 330 syn region doxygenHtmlBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderline,doxygenHtmlBoldItalic,@Spell 331 syn region doxygenHtmlBoldUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderlineItalic,@Spell 332 syn region doxygenHtmlBoldItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldItalicUnderline,@Spell 333 syn region doxygenHtmlBoldItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop,doxygenHtmlBoldItalicUnderline,@Spell 334 syn region doxygenHtmlBoldUnderlineItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop,@Spell 335 syn region doxygenHtmlBoldUnderlineItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop,@Spell 336 syn region doxygenHtmlBoldItalicUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderlineItalic,@Spell 337 338 syn region doxygenHtmlUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlUnderlineBold,doxygenHtmlUnderlineItalic,@Spell 339 syn region doxygenHtmlUnderlineBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlUnderlineBoldItalic,@Spell 340 syn region doxygenHtmlUnderlineBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop,doxygenHtmlUnderlineBoldItalic,@Spell 341 syn region doxygenHtmlUnderlineItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop,htmUnderlineItalicBold,@Spell 342 syn region doxygenHtmlUnderlineItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop,htmUnderlineItalicBold,@Spell 343 syn region doxygenHtmlUnderlineItalicBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop,@Spell 344 syn region doxygenHtmlUnderlineItalicBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop,@Spell 345 syn region doxygenHtmlUnderlineBoldItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop,@Spell 346 syn region doxygenHtmlUnderlineBoldItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop,@Spell 347 348 syn region doxygenHtmlItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlItalicBold,doxygenHtmlItalicUnderline,@Spell 349 syn region doxygenHtmlItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop,@Spell 350 syn region doxygenHtmlItalicBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlItalicBoldUnderline,@Spell 351 syn region doxygenHtmlItalicBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop,doxygenHtmlItalicBoldUnderline,@Spell 352 syn region doxygenHtmlItalicBoldUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop,@Spell 353 syn region doxygenHtmlItalicUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlItalicUnderlineBold,@Spell 354 syn region doxygenHtmlItalicUnderlineBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop,@Spell 355 syn region doxygenHtmlItalicUnderlineBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop,@Spell 356 357 syn region doxygenHtmlCode contained start="\c<code\>" end="\c</code>"me=e-7 contains=@doxygenHtmlTop,@NoSpell 358 359 " Prevent the doxygen contained matches from leaking into the c/rc groups. 360 syn cluster cParenGroup add=doxygen.* 361 syn cluster cParenGroup remove=doxygenComment,doxygenCommentL 362 syn cluster cPreProcGroup add=doxygen.* 363 syn cluster cMultiGroup add=doxygen.* 364 syn cluster rcParenGroup add=doxygen.* 365 syn cluster rcParenGroup remove=doxygenComment,doxygenCommentL 366 syn cluster rcGroup add=doxygen.* 367 368 let s:my_syncolor=0 369 if !exists(':SynColor') 370 command -nargs=+ SynColor hi def <args> 371 let s:my_syncolor=1 372 endif 373 374 let s:my_synlink=0 375 if !exists(':SynLink') 376 command -nargs=+ SynLink hi def link <args> 377 let s:my_synlink=1 378 endif 379 380 try 381 "let did_doxygen_syntax_inits = &background 382 hi doxygen_Dummy guifg=black 383 384 fun! s:Doxygen_Hilights_Base() 385 SynLink doxygenHtmlSpecial Special 386 SynLink doxygenHtmlVar Type 387 SynLink doxygenHtmlExpr String 388 389 SynLink doxygenSmallSpecial SpecialChar 390 391 SynLink doxygenSpecialCodeWord doxygenSmallSpecial 392 SynLink doxygenSpecialBoldWord doxygenSmallSpecial 393 SynLink doxygenSpecialEmphasisedWord doxygenSmallSpecial 394 SynLink doxygenSpecialArgumentWord doxygenSmallSpecial 395 396 " SynColor doxygenFormulaKeyword cterm=bold ctermfg=DarkMagenta guifg=DarkMagenta gui=bold 397 SynLink doxygenFormulaKeyword Keyword 398 "SynColor doxygenFormulaEscaped ctermfg=DarkMagenta guifg=DarkMagenta gui=bold 399 SynLink doxygenFormulaEscaped Special 400 SynLink doxygenFormulaOperator Operator 401 SynLink doxygenFormula Statement 402 SynLink doxygenSymbol Constant 403 SynLink doxygenSpecial Special 404 SynLink doxygenFormulaSpecial Special 405 "SynColor doxygenFormulaSpecial ctermfg=DarkBlue guifg=DarkBlue 406 endfun 407 call s:Doxygen_Hilights_Base() 408 409 fun! s:Doxygen_Hilights() 410 " Pick a sensible default for 'codeword'. 411 let font='' 412 if exists('g:doxygen_codeword_font') 413 if g:doxygen_codeword_font !~ '\<\k\+=' 414 let font='font='.g:doxygen_codeword_font 415 else 416 let font=g:doxygen_codeword_font 417 endif 418 else 419 " Try and pick a font (only some platforms have been tested). 420 if has('gui_running') 421 if has('gui_gtk2') 422 if &guifont == '' 423 let font="font='FreeSerif 12'" 424 else 425 let font="font='".substitute(&guifont, '^.\{-}\(\d\+\)$', 'FreeSerif \1','')."'" 426 endif 427 428 elseif has('gui_win32') || has('gui_win16') || has('gui_win95') 429 430 if exists('g:doxygen_use_bitsream_vera') && g:doxygen_use_bitsream_vera 431 let font_base='Bitstream_Vera_Sans_Mono' 432 else 433 let font_base='Lucida_Console' 434 endif 435 if &guifont == '' 436 let font='font='.font_base.':h10' 437 else 438 let font='font='.matchstr(substitute(&guifont, '^[^:]*', font_base,''),'[^,]*') 439 endif 440 elseif has('gui_athena') || has('gui_gtk') || &guifont=~'^\(-[^-]\+\)\{14}' 441 if &guifont == '' 442 let font='font=-b&h-lucidatypewriter-medium-r-normal-*-*-140-*-*-m-*-iso8859-1' 443 else 444 " let font='font='.substitute(&guifont,'^\(-[^-]\+\)\{7}-\([0-9]\+\).*', '-b\&h-lucidatypewriter-medium-r-normal-*-*-\2-*-*-m-*-iso8859-1','') 445 " The above line works, but it is hard to expect the combination of 446 " the two fonts will look good. 447 endif 448 elseif has('gui_kde') 449 " let font='font=Bitstream\ Vera\ Sans\ Mono/12/-1/5/50/0/0/0/0/0' 450 endif 451 endif 452 endif 453 if font=='' | let font='gui=bold' | endif 454 exe 'SynColor doxygenCodeWord term=bold cterm=bold '.font 455 if (exists('g:doxygen_enhanced_color') && g:doxygen_enhanced_color) || (exists('g:doxygen_enhanced_colour') && g:doxygen_enhanced_colour) 456 if &background=='light' 457 SynColor doxygenComment ctermfg=DarkRed guifg=DarkRed 458 SynColor doxygenBrief cterm=bold ctermfg=Cyan guifg=DarkBlue gui=bold 459 SynColor doxygenBody ctermfg=DarkBlue guifg=DarkBlue 460 SynColor doxygenSpecialTypeOnelineDesc cterm=bold ctermfg=DarkRed guifg=firebrick3 gui=bold 461 SynColor doxygenBOther cterm=bold ctermfg=DarkMagenta guifg=#aa50aa gui=bold 462 SynColor doxygenParam ctermfg=DarkGray guifg=#aa50aa 463 SynColor doxygenParamName cterm=italic ctermfg=DarkBlue guifg=DeepSkyBlue4 gui=italic,bold 464 SynColor doxygenSpecialOnelineDesc cterm=bold ctermfg=DarkCyan guifg=DodgerBlue3 gui=bold 465 SynColor doxygenSpecialHeading cterm=bold ctermfg=DarkBlue guifg=DeepSkyBlue4 gui=bold 466 SynColor doxygenPrev ctermfg=DarkGreen guifg=DarkGreen 467 else 468 SynColor doxygenComment ctermfg=LightRed guifg=LightRed 469 SynColor doxygenBrief cterm=bold ctermfg=Cyan ctermbg=darkgrey guifg=LightBlue gui=Bold,Italic 470 SynColor doxygenBody ctermfg=Cyan guifg=LightBlue 471 SynColor doxygenSpecialTypeOnelineDesc cterm=bold ctermfg=Red guifg=firebrick3 gui=bold 472 SynColor doxygenBOther cterm=bold ctermfg=Magenta guifg=#aa50aa gui=bold 473 SynColor doxygenParam ctermfg=LightGray guifg=LightGray 474 SynColor doxygenParamName cterm=italic ctermfg=LightBlue guifg=LightBlue gui=italic,bold 475 SynColor doxygenSpecialOnelineDesc cterm=bold ctermfg=LightCyan guifg=LightCyan gui=bold 476 SynColor doxygenSpecialHeading cterm=bold ctermfg=LightBlue guifg=LightBlue gui=bold 477 SynColor doxygenPrev ctermfg=LightGreen guifg=LightGreen 478 endif 479 SynLink doxygenValue doxygenParamName 480 else 481 SynLink doxygenComment SpecialComment 482 SynLink doxygenBrief Statement 483 SynLink doxygenBody Comment 484 SynLink doxygenSpecialTypeOnelineDesc Statement 485 SynLink doxygenBOther Constant 486 SynLink doxygenParam SpecialComment 487 SynLink doxygenParamName Underlined 488 SynLink doxygenSpecialOnelineDesc Statement 489 SynLink doxygenSpecialHeading Statement 490 SynLink doxygenPrev SpecialComment 491 SynLink doxygenValue Constant 492 endif 493 SynLink doxygenTParam doxygenParam 494 495 endfun 496 497 call s:Doxygen_Hilights() 498 499 syn match doxygenLeadingWhite +\(^\s*\*\)\@<=\s*+ contained 500 501 " This is still a proposal, but won't do any harm. 502 aug doxygengroup 503 au! 504 au Syntax UserColor_reset nested call s:Doxygen_Hilights_Base() 505 au Syntax UserColor_{on,reset,enable} nested call s:Doxygen_Hilights() 506 aug END 507 508 509 SynLink doxygenBody Comment 510 SynLink doxygenLine doxygenBody 511 SynLink doxygenTODO Todo 512 SynLink doxygenOtherTODO Todo 513 SynLink doxygenOtherWARN Todo 514 SynLink doxygenOtherBUG Todo 515 SynLink doxygenLeadingLWhite doxygenBody 516 517 SynLink doxygenErrorSpecial Error 518 SynLink doxygenErrorEnd Error 519 SynLink doxygenErrorComment Error 520 SynLink doxygenLinkError Error 521 SynLink doxygenBriefSpecial doxygenSpecial 522 SynLink doxygenHashSpecial doxygenSpecial 523 SynLink doxygenGroupDefineSpecial doxygenSpecial 524 SynLink doxygenEndlinkSpecial doxygenSpecial 525 SynLink doxygenCodeRegionSpecial doxygenSpecial 526 SynLink doxygenVerbatimRegionSpecial doxygenSpecial 527 SynLink doxygenDotRegionSpecial doxygenSpecial 528 SynLink doxygenGroupDefine doxygenParam 529 530 SynLink doxygenSpecialMultilineDesc doxygenSpecialOnelineDesc 531 SynLink doxygenFormulaEnds doxygenSpecial 532 SynLink doxygenBold doxygenParam 533 SynLink doxygenBriefWord doxygenParam 534 SynLink doxygenRetval doxygenParam 535 SynLink doxygenOther doxygenParam 536 SynLink doxygenStart doxygenComment 537 SynLink doxygenStart2 doxygenStart 538 SynLink doxygenComment2 doxygenComment 539 SynLink doxygenCommentL doxygenComment 540 SynLink doxygenContinueComment doxygenComment 541 SynLink doxygenSpecialContinueComment doxygenComment 542 SynLink doxygenSkipComment doxygenComment 543 SynLink doxygenEndComment doxygenComment 544 SynLink doxygenStartL doxygenComment 545 SynLink doxygenBriefEndComment doxygenComment 546 SynLink doxygenPrevL doxygenPrev 547 SynLink doxygenBriefL doxygenBrief 548 SynLink doxygenBriefLine doxygenBrief 549 SynLink doxygenHeaderLine doxygenSpecialHeading 550 SynLink doxygenCommentWhite Normal 551 SynLink doxygenCommentWhite2 doxygenCommentWhite 552 SynLink doxygenContinueCommentWhite doxygenCommentWhite 553 SynLink doxygenStartSkipWhite doxygenContinueCommentWhite 554 SynLink doxygenLinkWord doxygenParamName 555 SynLink doxygenLinkRest doxygenSpecialMultilineDesc 556 SynLink doxygenHyperLink doxygenLinkWord 557 SynLink doxygenHashLink doxygenLinkWord 558 SynLink doxygenReturnValue doxygenValue 559 560 SynLink doxygenPage doxygenSpecial 561 SynLink doxygenPagePage doxygenBOther 562 SynLink doxygenPageIdent doxygenParamName 563 SynLink doxygenPageDesc doxygenSpecialTypeOnelineDesc 564 565 SynLink doxygenSpecialIdent doxygenPageIdent 566 SynLink doxygenSpecialSectionDesc doxygenSpecialMultilineDesc 567 568 SynLink doxygenSpecialRefWord doxygenOther 569 SynLink doxygenRefWord doxygenPageIdent 570 SynLink doxygenContinueLinkComment doxygenComment 571 572 SynLink doxygenHtmlCh Function 573 SynLink doxygenHtmlCmd Statement 574 SynLink doxygenHtmlBoldItalicUnderline doxygenHtmlBoldUnderlineItalic 575 SynLink doxygenHtmlUnderlineBold doxygenHtmlBoldUnderline 576 SynLink doxygenHtmlUnderlineItalicBold doxygenHtmlBoldUnderlineItalic 577 SynLink doxygenHtmlUnderlineBoldItalic doxygenHtmlBoldUnderlineItalic 578 SynLink doxygenHtmlItalicUnderline doxygenHtmlUnderlineItalic 579 SynLink doxygenHtmlItalicBold doxygenHtmlBoldItalic 580 SynLink doxygenHtmlItalicBoldUnderline doxygenHtmlBoldUnderlineItalic 581 SynLink doxygenHtmlItalicUnderlineBold doxygenHtmlBoldUnderlineItalic 582 SynLink doxygenHtmlLink Underlined 583 584 SynLink doxygenParamDirection StorageClass 585 586 587 if !exists("doxygen_my_rendering") && !exists("html_my_rendering") 588 SynColor doxygenBoldWord term=bold cterm=bold gui=bold 589 SynColor doxygenEmphasisedWord term=italic cterm=italic gui=italic 590 SynLink doxygenArgumentWord doxygenEmphasisedWord 591 SynLink doxygenHtmlCode doxygenCodeWord 592 SynLink doxygenHtmlBold doxygenBoldWord 593 SynColor doxygenHtmlBoldUnderline term=bold,underline cterm=bold,underline gui=bold,underline 594 SynColor doxygenHtmlBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic 595 SynColor doxygenHtmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline 596 SynColor doxygenHtmlUnderline term=underline cterm=underline gui=underline 597 SynColor doxygenHtmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline 598 SynColor doxygenHtmlItalic term=italic cterm=italic gui=italic 599 endif 600 601 finally 602 if s:my_synlink | delcommand SynLink | endif 603 if s:my_syncolor | delcommand SynColor | endif 604 endtry 605 606 if &syntax=='idl' 607 syn cluster idlCommentable add=doxygenComment,doxygenCommentL 608 endif 609 610 "syn sync clear 611 "syn sync maxlines=500 612 "syn sync minlines=50 613 syn sync match doxygenComment groupthere cComment "/\@<!/\*" 614 syn sync match doxygenSyncComment grouphere doxygenComment "/\@<!/\*[*!]" 615 "syn sync match doxygenSyncComment grouphere doxygenComment "/\*[*!]" contains=doxygenStart,doxygenTODO keepend 616 syn sync match doxygenSyncEndComment groupthere NONE "\*/" 617 618 if !exists('b:current_syntax') 619 let b:current_syntax = "doxygen" 620 else 621 let b:current_syntax = b:current_syntax.'.doxygen' 622 endif 623 624finally 625 let &cpo = s:cpo_save 626 unlet s:cpo_save 627endtry 628let suppress_doxygen=1 629" vim:et sw=2 sts=2 630