neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

doxygen.vim (39086B)


      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 <vimmer@frog.wheelycreek.net>
      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 
     44 if exists('b:suppress_doxygen')
     45  unlet b:suppress_doxygen
     46  finish
     47 endif
     48 
     49 if exists('b:current_syntax') && b:current_syntax =~ 'doxygen' && !exists('doxygen_debug_script')
     50  finish
     51 endif
     52 
     53 let s:cpo_save = &cpo
     54 try
     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
    123 syn region doxygenBriefLine contained start=+\<\k+ skip=+^\s*\(\*/\@!\s*\)\=\(\<\|[@\\]\<\([npcbea]\>\|em\>\|ref\|link\>\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@*]\)+ end=+^+  skipwhite keepend matchgroup=xxx contains=@Spell
    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 
    132 if 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
    137 else
    138  syn region cComment start="/\*\*\*" end="\*/" contains=@cCommentGroup,cSpaceError
    139  syn region cCommentL start="////" skip="\\$" end="$" contains=@cCommentGroup,cSpaceError
    140 endif
    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 it is probably fine.  However, it doesn't
    502    " work when 'syntax' is set in a modeline, catch the security error.
    503    try
    504      aug doxygengroup
    505        au!
    506        au Syntax UserColor_reset nested call s:Doxygen_Hilights_Base()
    507        au Syntax UserColor_{on,reset,enable} nested call s:Doxygen_Hilights()
    508      aug END
    509    catch /E12:/
    510    endtry
    511 
    512 
    513    SynLink doxygenBody                   Comment
    514    SynLink doxygenLine                   doxygenBody
    515    SynLink doxygenTODO                   Todo
    516    SynLink doxygenOtherTODO              Todo
    517    SynLink doxygenOtherWARN              Todo
    518    SynLink doxygenOtherBUG               Todo
    519    SynLink doxygenLeadingLWhite          doxygenBody
    520 
    521    SynLink doxygenErrorSpecial           Error
    522    SynLink doxygenErrorEnd               Error
    523    SynLink doxygenErrorComment           Error
    524    SynLink doxygenLinkError              Error
    525    SynLink doxygenBriefSpecial           doxygenSpecial
    526    SynLink doxygenHashSpecial            doxygenSpecial
    527    SynLink doxygenGroupDefineSpecial     doxygenSpecial
    528    SynLink doxygenEndlinkSpecial         doxygenSpecial
    529    SynLink doxygenCodeRegionSpecial      doxygenSpecial
    530    SynLink doxygenVerbatimRegionSpecial  doxygenSpecial
    531    SynLink doxygenDotRegionSpecial       doxygenSpecial
    532    SynLink doxygenGroupDefine            doxygenParam
    533 
    534    SynLink doxygenSpecialMultilineDesc   doxygenSpecialOnelineDesc
    535    SynLink doxygenFormulaEnds            doxygenSpecial
    536    SynLink doxygenBold                   doxygenParam
    537    SynLink doxygenBriefWord              doxygenParam
    538    SynLink doxygenRetval                 doxygenParam
    539    SynLink doxygenOther                  doxygenParam
    540    SynLink doxygenStart                  doxygenComment
    541    SynLink doxygenStart2                 doxygenStart
    542    SynLink doxygenComment2               doxygenComment
    543    SynLink doxygenCommentL               doxygenComment
    544    SynLink doxygenContinueComment        doxygenComment
    545    SynLink doxygenSpecialContinueComment doxygenComment
    546    SynLink doxygenSkipComment            doxygenComment
    547    SynLink doxygenEndComment             doxygenComment
    548    SynLink doxygenStartL                 doxygenComment
    549    SynLink doxygenBriefEndComment        doxygenComment
    550    SynLink doxygenPrevL                  doxygenPrev
    551    SynLink doxygenBriefL                 doxygenBrief
    552    SynLink doxygenBriefLine              doxygenBrief
    553    SynLink doxygenHeaderLine             doxygenSpecialHeading
    554    SynLink doxygenCommentWhite           Normal
    555    SynLink doxygenCommentWhite2          doxygenCommentWhite
    556    SynLink doxygenContinueCommentWhite   doxygenCommentWhite
    557    SynLink doxygenStartSkipWhite         doxygenContinueCommentWhite
    558    SynLink doxygenLinkWord               doxygenParamName
    559    SynLink doxygenLinkRest               doxygenSpecialMultilineDesc
    560    SynLink doxygenHyperLink              doxygenLinkWord
    561    SynLink doxygenHashLink               doxygenLinkWord
    562    SynLink doxygenReturnValue            doxygenValue
    563 
    564    SynLink doxygenPage                   doxygenSpecial
    565    SynLink doxygenPagePage               doxygenBOther
    566    SynLink doxygenPageIdent              doxygenParamName
    567    SynLink doxygenPageDesc               doxygenSpecialTypeOnelineDesc
    568 
    569    SynLink doxygenSpecialIdent           doxygenPageIdent
    570    SynLink doxygenSpecialSectionDesc     doxygenSpecialMultilineDesc
    571 
    572    SynLink doxygenSpecialRefWord         doxygenOther
    573    SynLink doxygenRefWord                doxygenPageIdent
    574    SynLink doxygenContinueLinkComment    doxygenComment
    575 
    576    SynLink doxygenHtmlCh                 Function
    577    SynLink doxygenHtmlCmd                Statement
    578    SynLink doxygenHtmlBoldItalicUnderline     doxygenHtmlBoldUnderlineItalic
    579    SynLink doxygenHtmlUnderlineBold           doxygenHtmlBoldUnderline
    580    SynLink doxygenHtmlUnderlineItalicBold     doxygenHtmlBoldUnderlineItalic
    581    SynLink doxygenHtmlUnderlineBoldItalic     doxygenHtmlBoldUnderlineItalic
    582    SynLink doxygenHtmlItalicUnderline         doxygenHtmlUnderlineItalic
    583    SynLink doxygenHtmlItalicBold              doxygenHtmlBoldItalic
    584    SynLink doxygenHtmlItalicBoldUnderline     doxygenHtmlBoldUnderlineItalic
    585    SynLink doxygenHtmlItalicUnderlineBold     doxygenHtmlBoldUnderlineItalic
    586    SynLink doxygenHtmlLink                    Underlined
    587 
    588    SynLink doxygenParamDirection              StorageClass
    589 
    590 
    591    if !exists("doxygen_my_rendering") && !exists("html_my_rendering")
    592      SynColor doxygenBoldWord             term=bold cterm=bold gui=bold
    593      SynColor doxygenEmphasisedWord       term=italic cterm=italic gui=italic
    594      SynLink  doxygenArgumentWord         doxygenEmphasisedWord
    595      SynLink  doxygenHtmlCode             doxygenCodeWord
    596      SynLink  doxygenHtmlBold             doxygenBoldWord
    597      SynColor doxygenHtmlBoldUnderline       term=bold,underline cterm=bold,underline gui=bold,underline
    598      SynColor doxygenHtmlBoldItalic          term=bold,italic cterm=bold,italic gui=bold,italic
    599      SynColor doxygenHtmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
    600      SynColor doxygenHtmlUnderline        term=underline cterm=underline gui=underline
    601      SynColor doxygenHtmlUnderlineItalic  term=italic,underline cterm=italic,underline gui=italic,underline
    602      SynColor doxygenHtmlItalic           term=italic cterm=italic gui=italic
    603    endif
    604 
    605  finally
    606    if s:my_synlink | delcommand SynLink | endif
    607    if s:my_syncolor | delcommand SynColor | endif
    608  endtry
    609 
    610  if &syntax=='idl'
    611    syn cluster idlCommentable add=doxygenComment,doxygenCommentL
    612  endif
    613 
    614  "syn sync clear
    615  "syn sync maxlines=500
    616  "syn sync minlines=50
    617  syn sync match doxygenComment groupthere cComment "/\@<!/\*"
    618  syn sync match doxygenSyncComment grouphere doxygenComment "/\@<!/\*[*!]"
    619  "syn sync match doxygenSyncComment grouphere doxygenComment "/\*[*!]" contains=doxygenStart,doxygenTODO keepend
    620  syn sync match doxygenSyncEndComment groupthere NONE "\*/"
    621 
    622  if !exists('b:current_syntax')
    623    let b:current_syntax = "doxygen"
    624  else
    625    let b:current_syntax = b:current_syntax.'.doxygen'
    626  endif
    627 
    628 finally
    629  let &cpo = s:cpo_save
    630  unlet s:cpo_save
    631 endtry
    632 let suppress_doxygen=1
    633 " vim:et sw=2 sts=2