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