1 " DoxyGen syntax hilighting extension for c/c++/idl/java
2 " Language: doxygen on top of c, cpp, idl, java
3 " Maintainer: Michael Geddes <vimmer@frog.wheelycreek.net>
4 " Author: Michael Geddes
5 " Last Change: April 2007
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.
14 " NOTE: Comments welcome!
16 " There are two variables that control the syntax highlighting produced by this
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.
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
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.
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
39 " Special thanks to: Wu Yongwei, Toby Allsopp
42 if exists('b:suppress_doxygen')
43 unlet b:suppress_doxygen
47 if exists('b:current_syntax') && b:current_syntax =~ 'doxygen' && !exists('doxygen_debug_script')
55 " Start of Doxygen syntax hilighting:
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
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
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
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='[.]'
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'
86 syn match doxygenBriefEndComment +\*/+ contained
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
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
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
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
103 " Match a '<' for applying a comment to the previous element.
104 syn match doxygenPrev +<+ contained nextgroup=doxygenBrief,doxygenBody,doxygenSpecial,doxygenStartSkip skipwhite
106 if 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
112 syn region cComment start="/\*\*\*" end="\*/" contains=@cCommentGroup,cSpaceError
113 syn region cCommentL start="////" skip="\\$" end="$" contains=@cCommentGroup,cSpaceError
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
120 "syn region doxygenBodyBit contained start=+$+
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
125 " These allow the skipping of comment continuation '*' characters.
126 syn match doxygenContinueComment contained +^\s*\*/\@!\s*+
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 +\*/+
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
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
142 " Match an [@\]brief so that it moves to body-mode.
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
150 " Create the single word matching special identifiers.
152 fun! s:DxyCreateSmallSpecial( kword, name )
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'
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
167 syn match doxygenSmallSpecial contained +[@\\]\(\<[npcbea]\>\|\<em\>\|\<ref\>\|\<link\>\|f\$\|[$\\&<>#]\)\@=+ nextgroup=doxygenOtherLink,doxygenHyperLink,doxygenHashLink,doxygenFormula,doxygenSymbol,doxygenSpecial.*Word
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
173 syn match doxygenGroupDefine contained +@\@<=[{}]+
174 syn match doxygenGroupDefineSpecial contained +@\ze[{}]+
176 syn match doxygenErrorSpecial contained +\s+
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
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
191 \ nextgroup=doxygenSpecialOnelineDesc
193 syn region doxygenCodeRegion contained matchgroup=doxygenOther start=+\<code\>+ matchgroup=doxygenOther end=+[\\@]\@<=\<endcode\>+ contains=doxygenCodeRegionSpecial,doxygenContinueComment,doxygenErrorComment,@NoSpell
194 syn match doxygenCodeRegionSpecial contained +[\\@]\(endcode\>\)\@=+
196 syn region doxygenVerbatimRegion contained matchgroup=doxygenOther start=+\<verbatim\>+ matchgroup=doxygenOther end=+[\\@]\@<=\<endverbatim\>+ contains=doxygenVerbatimRegionSpecial,doxygenContinueComment,doxygenErrorComment,@NoSpell
197 syn match doxygenVerbatimRegionSpecial contained +[\\@]\(endverbatim\>\)\@=+
199 if exists('b:current_syntax')
200 let b:doxygen_syntax_save=b:current_syntax
201 unlet b:current_syntax
204 syn include @Dotx syntax/dot.vim
206 if exists('b:doxygen_syntax_save')
207 let b:current_syntax=b:doxygen_syntax_save
208 unlet b:doxygen_syntax_save
210 unlet b:current_syntax
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\>\)\@=+
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
221 syn keyword doxygenOther contained par nextgroup=doxygenHeaderLine
222 syn region doxygenHeaderLine start=+.+ end=+^+ contained skipwhite nextgroup=doxygenSpecialMultilineDesc
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
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\>+
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
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
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
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
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
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
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
270 " Handle special symbol identifiers @$, @\, @$ etc
271 syn match doxygenSymbol contained +[$\\&<>#n]+
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 +[_^]+
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
283 " Add TODO hilighting.
284 syn keyword doxygenTODO contained TODO README XXX FIXME
286 " Supported HTML subset. Not perfect, but okay.
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
294 syn match doxygenHtmlSpecial contained "&\(copy\|quot\|[AEIOUYaeiouy]uml\|[AEIOUYaeiouy]acute\|[AEIOUaeiouy]grave\|[AEIOUaeiouy]circ\|[ANOano]tilde\|szlig\|[Aa]ring\|nbsp\|gt\|lt\|amp\);"
296 syn cluster doxygenHtmlGroup contains=doxygenHtmlCode,doxygenHtmlBold,doxygenHtmlUnderline,doxygenHtmlItalic,doxygenHtmlSpecial,doxygenHtmlTag,doxygenHtmlLink
298 syn cluster doxygenHtmlTop contains=@Spell,doxygenHtmlSpecial,doxygenHtmlTag,doxygenContinueComment
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
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
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
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
331 syn region doxygenHtmlCode contained start="\c<code\>" end="\c</code>"me=e-7 contains=@doxygenHtmlTop,@NoSpell
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.*
343 if !exists(':SynColor')
344 command -nargs=+ SynColor hi def <args>
349 if !exists(':SynLink')
350 command -nargs=+ SynLink hi def link <args>
355 "let did_doxygen_syntax_inits = &background
356 hi doxygen_Dummy guifg=black
358 fun! s:Doxygen_Hilights_Base()
359 SynLink doxygenHtmlSpecial Special
360 SynLink doxygenHtmlVar Type
361 SynLink doxygenHtmlExpr String
363 SynLink doxygenSmallSpecial SpecialChar
365 SynLink doxygenSpecialCodeWord doxygenSmallSpecial
366 SynLink doxygenSpecialBoldWord doxygenSmallSpecial
367 SynLink doxygenSpecialEmphasisedWord doxygenSmallSpecial
368 SynLink doxygenSpecialArgumentWord doxygenSmallSpecial
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
381 call s:Doxygen_Hilights_Base()
383 fun! s:Doxygen_Hilights()
384 " Pick a sensible default for 'codeword'.
386 if exists('g:doxygen_codeword_font')
387 if g:doxygen_codeword_font !~ '\<\k\+='
388 let font='font='.g:doxygen_codeword_font
390 let font=g:doxygen_codeword_font
393 " Try and pick a font (only some platforms have been tested).
394 if has('gui_running')
397 let font="font='FreeSerif 12'"
399 let font="font='".substitute(&guifont, '^.\{-}\([0-9]\+\)$', 'FreeSerif \1','')."'"
402 elseif has('gui_win32') || has('gui_win16') || has('gui_win95')
404 if exists('g:doxygen_use_bitsream_vera') && g:doxygen_use_bitsream_vera
405 let font_base='Bitstream_Vera_Sans_Mono'
407 let font_base='Lucida_Console'
410 let font='font='.font_base.':h10'
412 let font='font='.matchstr(substitute(&guifont, '^[^:]*', font_base,''),'[^,]*')
414 elseif has('gui_athena') || has('gui_gtk') || &guifont=~'^\(-[^-]\+\)\{14}'
416 let font='font=-b&h-lucidatypewriter-medium-r-normal-*-*-140-*-*-m-*-iso8859-1'
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.
422 elseif has('gui_kde')
423 " let font='font=Bitstream\ Vera\ Sans\ Mono/12/-1/5/50/0/0/0/0/0'
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
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
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
467 call s:Doxygen_Hilights()
469 " This is still a proposal, but won't do any harm.
472 au Syntax UserColor_reset nested call s:Doxygen_Hilights_Base()
473 au Syntax UserColor_{on,reset,enable} nested call s:Doxygen_Hilights()
477 SynLink doxygenBody Comment
478 SynLink doxygenLine doxygenBody
479 SynLink doxygenTODO Todo
480 SynLink doxygenOtherTODO Todo
481 SynLink doxygenOtherWARN Todo
482 SynLink doxygenOtherBUG Todo
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
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
523 SynLink doxygenPage doxygenSpecial
524 SynLink doxygenPagePage doxygenBOther
525 SynLink doxygenPageIdent doxygenParamName
526 SynLink doxygenPageDesc doxygenSpecialTypeOnelineDesc
528 SynLink doxygenSpecialIdent doxygenPageIdent
529 SynLink doxygenSpecialSectionDesc doxygenSpecialMultilineDesc
531 SynLink doxygenSpecialRefWord doxygenOther
532 SynLink doxygenRefWord doxygenPageIdent
533 SynLink doxygenContinueLinkComment doxygenComment
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
547 SynLink doxygenParamDirection StorageClass
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
565 if s:my_synlink | delcommand SynLink | endif
566 if s:my_syncolor | delcommand SynColor | endif
570 syn cluster idlCommentable add=doxygenComment,doxygenCommentL
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 "\*/"
581 if !exists('b:current_syntax')
582 let b:current_syntax = "doxygen"
584 let b:current_syntax = b:current_syntax.'.doxygen'
588 let &cpo = s:cpo_save