blob: c77b89eb9eb08f08bc27ebfe3612ddc8374812d2 [file] [log] [blame]
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00001" DoxyGen syntax hilighting extension for c/c++/idl/java
2" Language: doxygen on top of c, cpp, idl, java
3" Maintainer: Michael Geddes <michaelrgeddes@optushome.com.au>
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