1" DoxyGen syntax hilighting 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: November 2017 (\throws by Candy Gumdrop) 6" Version: 1.27 7" 8" Copyright 2004-2017 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 hilighting: 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_%=+*/!~>|]\@!\|\\[\\<>&.]@\|[.,][0-9a-zA-Z_]\@=\|::\|([^)]*)\|&[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,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=doxygenParamName skipwhite 203 204 " Match one line identifiers. 205 syn keyword doxygenOther contained addindex anchor 206 \ dontinclude endhtmlonly endlatexonly showinitializer hideinitializer 207 \ example htmlonly image include includelineno ingroup internal latexonly line 208 \ overload relates relatesalso sa skip skipline 209 \ until verbinclude version addtogroup htmlinclude copydoc dotfile 210 \ xmlonly endxmlonly 211 \ nextgroup=doxygenSpecialOnelineDesc copybrief copydetails copyright dir extends 212 \ implements 213 214 syn region doxygenCodeRegion contained matchgroup=doxygenOther start=+\<code\>+ matchgroup=doxygenOther end=+[\\@]\@<=\<endcode\>+ contains=doxygenCodeRegionSpecial,doxygenContinueCommentWhite,doxygenErrorComment,@NoSpell 215 syn match doxygenCodeRegionSpecial contained +[\\@]\(endcode\>\)\@=+ 216 217 syn region doxygenVerbatimRegion contained matchgroup=doxygenOther start=+\<verbatim\>+ matchgroup=doxygenOther end=+[\\@]\@<=\<endverbatim\>+ contains=doxygenVerbatimRegionSpecial,doxygenContinueCommentWhite,doxygenErrorComment,@NoSpell 218 syn match doxygenVerbatimRegionSpecial contained +[\\@]\(endverbatim\>\)\@=+ 219 220 if exists('b:current_syntax') 221 let b:doxygen_syntax_save=b:current_syntax 222 unlet b:current_syntax 223 endif 224 225 syn include @Dotx syntax/dot.vim 226 227 if exists('b:doxygen_syntax_save') 228 let b:current_syntax=b:doxygen_syntax_save 229 unlet b:doxygen_syntax_save 230 else 231 unlet b:current_syntax 232 endif 233 234 syn region doxygenDotRegion contained matchgroup=doxygenOther start=+\<dot\>+ matchgroup=doxygenOther end=+[\\@]\@<=\<enddot\>+ contains=doxygenDotRegionSpecial,doxygenErrorComment,doxygenContinueCommentWhite,@NoSpell,@Dotx 235 syn match doxygenDotRegionSpecial contained +[\\@]\(enddot\>\)\@=+ 236 237 " Match single line identifiers. 238 syn keyword doxygenBOther contained class enum file fn mainpage interface 239 \ namespace struct typedef union var def name 240 \ nextgroup=doxygenSpecialTypeOnelineDesc 241 242 syn keyword doxygenOther contained par nextgroup=doxygenHeaderLine 243 syn region doxygenHeaderLine start=+.+ end=+^+ contained skipwhite nextgroup=doxygenSpecialMultilineDesc 244 245 syn keyword doxygenOther contained arg author authors date deprecated li return returns see invariant note post pre remarks since test nextgroup=doxygenSpecialMultilineDesc 246 syn keyword doxygenOtherTODO contained todo attention nextgroup=doxygenSpecialMultilineDesc 247 syn keyword doxygenOtherWARN contained warning nextgroup=doxygenSpecialMultilineDesc 248 syn keyword doxygenOtherBUG contained bug nextgroup=doxygenSpecialMultilineDesc 249 250 " Handle \link, \endlink, highlighting the link-to and the link text bits separately. 251 syn region doxygenOtherLink matchgroup=doxygenOther start=+\<link\>+ end=+[\@]\@<=endlink\>+ contained contains=doxygenLinkWord,doxygenContinueCommentWhite,doxygenLinkError,doxygenEndlinkSpecial 252 syn match doxygenEndlinkSpecial contained +[\\@]\zeendlink\>+ 253 254 syn match doxygenLinkWord "[_a-zA-Z:#()][_a-z0-9A-Z:#()]*\>" contained skipnl nextgroup=doxygenLinkRest,doxygenContinueLinkComment 255 syn match doxygenLinkRest +[^*@\\]\|\*/\@!\|[@\\]\(endlink\>\)\@!+ contained skipnl nextgroup=doxygenLinkRest,doxygenContinueLinkComment 256 syn match doxygenContinueLinkComment contained +^\s*\*\=[^/]+me=e-1 nextgroup=doxygenLinkRest 257 syn match doxygenLinkError "\*/" contained 258 " #Link hilighting. 259 syn match doxygenHashLink /\([a-zA-Z_][0-9a-zA-Z_]*\)\?#\(\.[0-9a-zA-Z_]\@=\|[a-zA-Z0-9_]\+\|::\|()\)\+/ contained contains=doxygenHashSpecial 260 syn match doxygenHashSpecial /#/ contained 261 syn match doxygenHyperLink /\(\s\|^\s*\*\?\)\@<=\(http\|https\|ftp\):\/\/[-0-9a-zA-Z_?&=+#%/.!':;@~]\+/ contained 262 263 " Handle \page. This does not use doxygenBrief. 264 syn match doxygenPage "[\\@]page\>"me=s+1 contained skipwhite nextgroup=doxygenPagePage 265 syn keyword doxygenPagePage page contained skipwhite nextgroup=doxygenPageIdent 266 syn region doxygenPageDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend skipwhite skipnl nextgroup=doxygenBody 267 syn match doxygenPageIdent "\<[a-zA-Z_0-9]\+\>" contained nextgroup=doxygenPageDesc 268 269 " Handle section 270 syn keyword doxygenOther defgroup section subsection subsubsection weakgroup contained skipwhite nextgroup=doxygenSpecialIdent 271 syn region doxygenSpecialSectionDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend skipwhite skipnl nextgroup=doxygenContinueCommentWhite 272 syn match doxygenSpecialIdent "\<[a-zA-Z_0-9]\+\>" contained nextgroup=doxygenSpecialSectionDesc 273 274 " Does the one-line description for the one-line type identifiers. 275 syn region doxygenSpecialTypeOnelineDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend 276 syn region doxygenSpecialOnelineDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend 277 278 " Handle the multiline description for the multiline type identifiers. 279 " Continue until an 'empty' line (can contain a '*' continuation) or until the 280 " next whole-line @ command \ command. 281 syn region doxygenSpecialMultilineDesc start=+.\++ skip=+^\s*\(\*/\@!\s*\)\=\(\<\|[@\\]\<\([npcbea]\>\|em\>\|ref\|link\>\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@*]\)+ end=+^+ contained contains=doxygenSpecialContinueCommentWhite,doxygenSmallSpecial,doxygenHyperLink,doxygenHashLink,@doxygenHtmlGroup,@Spell skipwhite keepend 282 283" syn match doxygenSpecialContinueComment contained +^\s*\*/\@!\s*+ nextgroup=doxygenSpecial skipwhite 284 syn match doxygenSpecialContinueCommentWhite contained +^\s*\ze\*+ nextgroup=doxygenSpecialContinueComment 285 syn match doxygenSpecialContinueComment contained +\*/\@!+ 286 287 288 " Handle special cases 'bold' and 'group' 289 syn keyword doxygenBold contained bold nextgroup=doxygenSpecialHeading 290 syn keyword doxygenBriefWord contained brief nextgroup=doxygenBriefLine skipwhite 291 syn match doxygenSpecialHeading +.\++ contained skipwhite 292 syn keyword doxygenGroup contained group nextgroup=doxygenGroupName skipwhite 293 syn keyword doxygenGroupName contained +\k\++ nextgroup=doxygenSpecialOnelineDesc skipwhite 294 295 " Handle special symbol identifiers @$, @\, @$ etc 296 syn match doxygenSymbol contained +[$\\&<>#n]+ 297 298 " Simplistic handling of formula regions 299 syn region doxygenFormula contained matchgroup=doxygenFormulaEnds start=+f\$+ end=+[@\\]f\$+ contains=doxygenFormulaSpecial,doxygenFormulaOperator 300 syn match doxygenFormulaSpecial contained +[@\\]\(f[^$]\|[^f]\)+me=s+1 nextgroup=doxygenFormulaKeyword,doxygenFormulaEscaped 301 syn match doxygenFormulaEscaped contained "." 302 syn match doxygenFormulaKeyword contained "[a-z]\+" 303 syn match doxygenFormulaOperator contained +[_^]+ 304 305 syn region doxygenFormula contained matchgroup=doxygenFormulaEnds start=+f\[+ end=+[@\\]f]+ contains=doxygenFormulaSpecial,doxygenFormulaOperator,doxygenAtom 306 syn region doxygenAtom contained transparent matchgroup=doxygenFormulaOperator start=+{+ end=+}+ contains=doxygenAtom,doxygenFormulaSpecial,doxygenFormulaOperator 307 308 " Add TODO hilighting. 309 syn keyword doxygenTODO contained TODO README XXX FIXME 310 311 " Supported HTML subset. Not perfect, but okay. 312 syn case ignore 313 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 314 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 315 syn keyword doxygenHtmlVar contained src alt longdesc name height width usemap ismap href type nextgroup=doxygenHtmlEqu skipwhite 316 syn match doxygenHtmlEqu contained +=+ nextgroup=doxygenHtmlExpr skipwhite 317 syn match doxygenHtmlExpr contained +"\(\\.\|[^"]\)*"\|'\(\\.\|[^']\)*'+ nextgroup=doxygenHtmlVar skipwhite 318 syn case match 319 syn match doxygenHtmlSpecial contained "&\(copy\|quot\|[AEIOUYaeiouy]uml\|[AEIOUYaeiouy]acute\|[AEIOUaeiouy]grave\|[AEIOUaeiouy]circ\|[ANOano]tilde\|szlig\|[Aa]ring\|nbsp\|gt\|lt\|amp\);" 320 321 syn cluster doxygenHtmlGroup contains=doxygenHtmlCode,doxygenHtmlBold,doxygenHtmlUnderline,doxygenHtmlItalic,doxygenHtmlSpecial,doxygenHtmlTag,doxygenHtmlLink 322 323 syn cluster doxygenHtmlTop contains=@Spell,doxygenHtmlSpecial,doxygenHtmlTag,doxygenContinueCommentWhite 324 " Html Support 325 syn region doxygenHtmlLink contained start=+<[aA]\>\s*\(\n\s*\*\s*\)\=\(\(name\|href\)=\("[^"]*"\|'[^']*'\)\)\=\s*>+ end=+</[aA]>+me=e-4 contains=@doxygenHtmlTop 326 hi link doxygenHtmlLink Underlined 327 328 syn region doxygenHtmlBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderline,doxygenHtmlBoldItalic,@Spell 329 syn region doxygenHtmlBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderline,doxygenHtmlBoldItalic,@Spell 330 syn region doxygenHtmlBoldUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderlineItalic,@Spell 331 syn region doxygenHtmlBoldItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldItalicUnderline,@Spell 332 syn region doxygenHtmlBoldItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop,doxygenHtmlBoldItalicUnderline,@Spell 333 syn region doxygenHtmlBoldUnderlineItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop,@Spell 334 syn region doxygenHtmlBoldUnderlineItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop,@Spell 335 syn region doxygenHtmlBoldItalicUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderlineItalic,@Spell 336 337 syn region doxygenHtmlUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlUnderlineBold,doxygenHtmlUnderlineItalic,@Spell 338 syn region doxygenHtmlUnderlineBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlUnderlineBoldItalic,@Spell 339 syn region doxygenHtmlUnderlineBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop,doxygenHtmlUnderlineBoldItalic,@Spell 340 syn region doxygenHtmlUnderlineItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop,htmUnderlineItalicBold,@Spell 341 syn region doxygenHtmlUnderlineItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop,htmUnderlineItalicBold,@Spell 342 syn region doxygenHtmlUnderlineItalicBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop,@Spell 343 syn region doxygenHtmlUnderlineItalicBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop,@Spell 344 syn region doxygenHtmlUnderlineBoldItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop,@Spell 345 syn region doxygenHtmlUnderlineBoldItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop,@Spell 346 347 syn region doxygenHtmlItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlItalicBold,doxygenHtmlItalicUnderline,@Spell 348 syn region doxygenHtmlItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop,@Spell 349 syn region doxygenHtmlItalicBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlItalicBoldUnderline,@Spell 350 syn region doxygenHtmlItalicBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop,doxygenHtmlItalicBoldUnderline,@Spell 351 syn region doxygenHtmlItalicBoldUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop,@Spell 352 syn region doxygenHtmlItalicUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlItalicUnderlineBold,@Spell 353 syn region doxygenHtmlItalicUnderlineBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop,@Spell 354 syn region doxygenHtmlItalicUnderlineBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop,@Spell 355 356 syn region doxygenHtmlCode contained start="\c<code\>" end="\c</code>"me=e-7 contains=@doxygenHtmlTop,@NoSpell 357 358 " Prevent the doxygen contained matches from leaking into the c/rc groups. 359 syn cluster cParenGroup add=doxygen.* 360 syn cluster cParenGroup remove=doxygenComment,doxygenCommentL 361 syn cluster cPreProcGroup add=doxygen.* 362 syn cluster cMultiGroup add=doxygen.* 363 syn cluster rcParenGroup add=doxygen.* 364 syn cluster rcParenGroup remove=doxygenComment,doxygenCommentL 365 syn cluster rcGroup add=doxygen.* 366 367 let s:my_syncolor=0 368 if !exists(':SynColor') 369 command -nargs=+ SynColor hi def <args> 370 let s:my_syncolor=1 371 endif 372 373 let s:my_synlink=0 374 if !exists(':SynLink') 375 command -nargs=+ SynLink hi def link <args> 376 let s:my_synlink=1 377 endif 378 379 try 380 "let did_doxygen_syntax_inits = &background 381 hi doxygen_Dummy guifg=black 382 383 fun! s:Doxygen_Hilights_Base() 384 SynLink doxygenHtmlSpecial Special 385 SynLink doxygenHtmlVar Type 386 SynLink doxygenHtmlExpr String 387 388 SynLink doxygenSmallSpecial SpecialChar 389 390 SynLink doxygenSpecialCodeWord doxygenSmallSpecial 391 SynLink doxygenSpecialBoldWord doxygenSmallSpecial 392 SynLink doxygenSpecialEmphasisedWord doxygenSmallSpecial 393 SynLink doxygenSpecialArgumentWord doxygenSmallSpecial 394 395 " SynColor doxygenFormulaKeyword cterm=bold ctermfg=DarkMagenta guifg=DarkMagenta gui=bold 396 SynLink doxygenFormulaKeyword Keyword 397 "SynColor doxygenFormulaEscaped ctermfg=DarkMagenta guifg=DarkMagenta gui=bold 398 SynLink doxygenFormulaEscaped Special 399 SynLink doxygenFormulaOperator Operator 400 SynLink doxygenFormula Statement 401 SynLink doxygenSymbol Constant 402 SynLink doxygenSpecial Special 403 SynLink doxygenFormulaSpecial Special 404 "SynColor doxygenFormulaSpecial ctermfg=DarkBlue guifg=DarkBlue 405 endfun 406 call s:Doxygen_Hilights_Base() 407 408 fun! s:Doxygen_Hilights() 409 " Pick a sensible default for 'codeword'. 410 let font='' 411 if exists('g:doxygen_codeword_font') 412 if g:doxygen_codeword_font !~ '\<\k\+=' 413 let font='font='.g:doxygen_codeword_font 414 else 415 let font=g:doxygen_codeword_font 416 endif 417 else 418 " Try and pick a font (only some platforms have been tested). 419 if has('gui_running') 420 if has('gui_gtk2') 421 if &guifont == '' 422 let font="font='FreeSerif 12'" 423 else 424 let font="font='".substitute(&guifont, '^.\{-}\([0-9]\+\)$', 'FreeSerif \1','')."'" 425 endif 426 427 elseif has('gui_win32') || has('gui_win16') || has('gui_win95') 428 429 if exists('g:doxygen_use_bitsream_vera') && g:doxygen_use_bitsream_vera 430 let font_base='Bitstream_Vera_Sans_Mono' 431 else 432 let font_base='Lucida_Console' 433 endif 434 if &guifont == '' 435 let font='font='.font_base.':h10' 436 else 437 let font='font='.matchstr(substitute(&guifont, '^[^:]*', font_base,''),'[^,]*') 438 endif 439 elseif has('gui_athena') || has('gui_gtk') || &guifont=~'^\(-[^-]\+\)\{14}' 440 if &guifont == '' 441 let font='font=-b&h-lucidatypewriter-medium-r-normal-*-*-140-*-*-m-*-iso8859-1' 442 else 443 " let font='font='.substitute(&guifont,'^\(-[^-]\+\)\{7}-\([0-9]\+\).*', '-b\&h-lucidatypewriter-medium-r-normal-*-*-\2-*-*-m-*-iso8859-1','') 444 " The above line works, but it is hard to expect the combination of 445 " the two fonts will look good. 446 endif 447 elseif has('gui_kde') 448 " let font='font=Bitstream\ Vera\ Sans\ Mono/12/-1/5/50/0/0/0/0/0' 449 endif 450 endif 451 endif 452 if font=='' | let font='gui=bold' | endif 453 exe 'SynColor doxygenCodeWord term=bold cterm=bold '.font 454 if (exists('g:doxygen_enhanced_color') && g:doxygen_enhanced_color) || (exists('g:doxygen_enhanced_colour') && g:doxygen_enhanced_colour) 455 if &background=='light' 456 SynColor doxygenComment ctermfg=DarkRed guifg=DarkRed 457 SynColor doxygenBrief cterm=bold ctermfg=Cyan guifg=DarkBlue gui=bold 458 SynColor doxygenBody ctermfg=DarkBlue guifg=DarkBlue 459 SynColor doxygenSpecialTypeOnelineDesc cterm=bold ctermfg=DarkRed guifg=firebrick3 gui=bold 460 SynColor doxygenBOther cterm=bold ctermfg=DarkMagenta guifg=#aa50aa gui=bold 461 SynColor doxygenParam ctermfg=DarkGray guifg=#aa50aa 462 SynColor doxygenParamName cterm=italic ctermfg=DarkBlue guifg=DeepSkyBlue4 gui=italic,bold 463 SynColor doxygenSpecialOnelineDesc cterm=bold ctermfg=DarkCyan guifg=DodgerBlue3 gui=bold 464 SynColor doxygenSpecialHeading cterm=bold ctermfg=DarkBlue guifg=DeepSkyBlue4 gui=bold 465 SynColor doxygenPrev ctermfg=DarkGreen guifg=DarkGreen 466 else 467 SynColor doxygenComment ctermfg=LightRed guifg=LightRed 468 SynColor doxygenBrief cterm=bold ctermfg=Cyan ctermbg=darkgrey guifg=LightBlue gui=Bold,Italic 469 SynColor doxygenBody ctermfg=Cyan guifg=LightBlue 470 SynColor doxygenSpecialTypeOnelineDesc cterm=bold ctermfg=Red guifg=firebrick3 gui=bold 471 SynColor doxygenBOther cterm=bold ctermfg=Magenta guifg=#aa50aa gui=bold 472 SynColor doxygenParam ctermfg=LightGray guifg=LightGray 473 SynColor doxygenParamName cterm=italic ctermfg=LightBlue guifg=LightBlue gui=italic,bold 474 SynColor doxygenSpecialOnelineDesc cterm=bold ctermfg=LightCyan guifg=LightCyan gui=bold 475 SynColor doxygenSpecialHeading cterm=bold ctermfg=LightBlue guifg=LightBlue gui=bold 476 SynColor doxygenPrev ctermfg=LightGreen guifg=LightGreen 477 endif 478 else 479 SynLink doxygenComment SpecialComment 480 SynLink doxygenBrief Statement 481 SynLink doxygenBody Comment 482 SynLink doxygenSpecialTypeOnelineDesc Statement 483 SynLink doxygenBOther Constant 484 SynLink doxygenParam SpecialComment 485 SynLink doxygenParamName Underlined 486 SynLink doxygenSpecialOnelineDesc Statement 487 SynLink doxygenSpecialHeading Statement 488 SynLink doxygenPrev SpecialComment 489 endif 490 endfun 491 492 call s:Doxygen_Hilights() 493 494 syn match doxygenLeadingWhite +\(^\s*\*\)\@<=\s*+ contained 495 496 " This is still a proposal, but won't do any harm. 497 aug doxygengroup 498 au! 499 au Syntax UserColor_reset nested call s:Doxygen_Hilights_Base() 500 au Syntax UserColor_{on,reset,enable} nested call s:Doxygen_Hilights() 501 aug END 502 503 504 SynLink doxygenBody Comment 505 SynLink doxygenLine doxygenBody 506 SynLink doxygenTODO Todo 507 SynLink doxygenOtherTODO Todo 508 SynLink doxygenOtherWARN Todo 509 SynLink doxygenOtherBUG Todo 510 SynLink doxygenLeadingLWhite doxygenBody 511 512 SynLink doxygenErrorSpecial Error 513 SynLink doxygenErrorEnd Error 514 SynLink doxygenErrorComment Error 515 SynLink doxygenLinkError Error 516 SynLink doxygenBriefSpecial doxygenSpecial 517 SynLink doxygenHashSpecial doxygenSpecial 518 SynLink doxygenGroupDefineSpecial doxygenSpecial 519 SynLink doxygenEndlinkSpecial doxygenSpecial 520 SynLink doxygenCodeRegionSpecial doxygenSpecial 521 SynLink doxygenVerbatimRegionSpecial doxygenSpecial 522 SynLink doxygenDotRegionSpecial doxygenSpecial 523 SynLink doxygenGroupDefine doxygenParam 524 525 SynLink doxygenSpecialMultilineDesc doxygenSpecialOnelineDesc 526 SynLink doxygenFormulaEnds doxygenSpecial 527 SynLink doxygenBold doxygenParam 528 SynLink doxygenBriefWord doxygenParam 529 SynLink doxygenRetval doxygenParam 530 SynLink doxygenOther doxygenParam 531 SynLink doxygenStart doxygenComment 532 SynLink doxygenStart2 doxygenStart 533 SynLink doxygenComment2 doxygenComment 534 SynLink doxygenCommentL doxygenComment 535 SynLink doxygenContinueComment doxygenComment 536 SynLink doxygenSpecialContinueComment doxygenComment 537 SynLink doxygenSkipComment doxygenComment 538 SynLink doxygenEndComment doxygenComment 539 SynLink doxygenStartL doxygenComment 540 SynLink doxygenBriefEndComment doxygenComment 541 SynLink doxygenPrevL doxygenPrev 542 SynLink doxygenBriefL doxygenBrief 543 SynLink doxygenBriefLine doxygenBrief 544 SynLink doxygenHeaderLine doxygenSpecialHeading 545 SynLink doxygenCommentWhite Normal 546 SynLink doxygenCommentWhite2 doxygenCommentWhite 547 SynLink doxygenContinueCommentWhite doxygenCommentWhite 548 SynLink doxygenStartSkipWhite doxygenContinueCommentWhite 549 SynLink doxygenLinkWord doxygenParamName 550 SynLink doxygenLinkRest doxygenSpecialMultilineDesc 551 SynLink doxygenHyperLink doxygenLinkWord 552 SynLink doxygenHashLink doxygenLinkWord 553 554 SynLink doxygenPage doxygenSpecial 555 SynLink doxygenPagePage doxygenBOther 556 SynLink doxygenPageIdent doxygenParamName 557 SynLink doxygenPageDesc doxygenSpecialTypeOnelineDesc 558 559 SynLink doxygenSpecialIdent doxygenPageIdent 560 SynLink doxygenSpecialSectionDesc doxygenSpecialMultilineDesc 561 562 SynLink doxygenSpecialRefWord doxygenOther 563 SynLink doxygenRefWord doxygenPageIdent 564 SynLink doxygenContinueLinkComment doxygenComment 565 566 SynLink doxygenHtmlCh Function 567 SynLink doxygenHtmlCmd Statement 568 SynLink doxygenHtmlBoldItalicUnderline doxygenHtmlBoldUnderlineItalic 569 SynLink doxygenHtmlUnderlineBold doxygenHtmlBoldUnderline 570 SynLink doxygenHtmlUnderlineItalicBold doxygenHtmlBoldUnderlineItalic 571 SynLink doxygenHtmlUnderlineBoldItalic doxygenHtmlBoldUnderlineItalic 572 SynLink doxygenHtmlItalicUnderline doxygenHtmlUnderlineItalic 573 SynLink doxygenHtmlItalicBold doxygenHtmlBoldItalic 574 SynLink doxygenHtmlItalicBoldUnderline doxygenHtmlBoldUnderlineItalic 575 SynLink doxygenHtmlItalicUnderlineBold doxygenHtmlBoldUnderlineItalic 576 SynLink doxygenHtmlLink Underlined 577 578 SynLink doxygenParamDirection StorageClass 579 580 581 if !exists("doxygen_my_rendering") && !exists("html_my_rendering") 582 SynColor doxygenBoldWord term=bold cterm=bold gui=bold 583 SynColor doxygenEmphasisedWord term=italic cterm=italic gui=italic 584 SynLink doxygenArgumentWord doxygenEmphasisedWord 585 SynLink doxygenHtmlCode doxygenCodeWord 586 SynLink doxygenHtmlBold doxygenBoldWord 587 SynColor doxygenHtmlBoldUnderline term=bold,underline cterm=bold,underline gui=bold,underline 588 SynColor doxygenHtmlBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic 589 SynColor doxygenHtmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline 590 SynColor doxygenHtmlUnderline term=underline cterm=underline gui=underline 591 SynColor doxygenHtmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline 592 SynColor doxygenHtmlItalic term=italic cterm=italic gui=italic 593 endif 594 595 finally 596 if s:my_synlink | delcommand SynLink | endif 597 if s:my_syncolor | delcommand SynColor | endif 598 endtry 599 600 if &syntax=='idl' 601 syn cluster idlCommentable add=doxygenComment,doxygenCommentL 602 endif 603 604 "syn sync clear 605 "syn sync maxlines=500 606 "syn sync minlines=50 607 syn sync match doxygenComment groupthere cComment "/\@<!/\*" 608 syn sync match doxygenSyncComment grouphere doxygenComment "/\@<!/\*[*!]" 609 "syn sync match doxygenSyncComment grouphere doxygenComment "/\*[*!]" contains=doxygenStart,doxygenTODO keepend 610 syn sync match doxygenSyncEndComment groupthere NONE "\*/" 611 612 if !exists('b:current_syntax') 613 let b:current_syntax = "doxygen" 614 else 615 let b:current_syntax = b:current_syntax.'.doxygen' 616 endif 617 618finally 619 let &cpo = s:cpo_save 620 unlet s:cpo_save 621endtry 622let suppress_doxygen=1 623" vim:et sw=2 sts=2 624