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