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