xref: /vim-8.2.3635/runtime/syntax/doxygen.vim (revision d0bce504)
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: 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 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_%=+*/!~>|]\@!\|\\[\\<>&.]@\|[.,]\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 hilighting.
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 hilighting.
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