blob: bc04ae933b193dc6a22cb5f2cd82e7a5850fd721 [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)
Bram Moolenaarb21e5842006-04-16 18:30:08 +0000323if !exists(':SynColor')
324 if exists("did_doxygen_syntax_inits")
325 if did_doxygen_syntax_inits != &background && synIDattr(highlightID('doxygen_Dummy'), 'fg', 'gui')==''
326 command -nargs=+ SynColor hi <args>
327 unlet did_doxygen_syntax_inits
328 endif
329 else
330 command -nargs=+ SynColor hi def <args>
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000331 endif
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000332endif
333
334if !exists("did_doxygen_syntax_inits")
335 command -nargs=+ SynLink hi def link <args>
336 let did_doxygen_syntax_inits = &background
337 hi doxygen_Dummy guifg=black
338
339 fun! s:Doxygen_Hilights_Base()
340 SynLink doxygenHtmlSpecial Special
341 SynLink doxygenHtmlVar Type
342 SynLink doxygenHtmlExpr String
343
344 SynLink doxygenSmallSpecial SpecialChar
345
346 SynLink doxygenSpecialCodeWord doxygenSmallSpecial
347 SynLink doxygenSpecialBoldWord doxygenSmallSpecial
348 SynLink doxygenSpecialEmphasisedWord doxygenSmallSpecial
349 SynLink doxygenSpecialArgumentWord doxygenSmallSpecial
350
351 " SynColor doxygenFormulaKeyword cterm=bold ctermfg=DarkMagenta guifg=DarkMagenta gui=bold
352 SynLink doxygenFormulaKeyword Keyword
353 "SynColor doxygenFormulaEscaped ctermfg=DarkMagenta guifg=DarkMagenta gui=bold
354 SynLink doxygenFormulaEscaped Special
355 SynLink doxygenFormulaOperator Operator
356 SynLink doxygenFormula Statement
357 SynLink doxygenSymbol Constant
358 SynLink doxygenSpecial Special
359 SynLink doxygenFormulaSpecial Special
360 "SynColor doxygenFormulaSpecial ctermfg=DarkBlue guifg=DarkBlue
361 endfun
362 call s:Doxygen_Hilights_Base()
363
364 fun! s:Doxygen_Hilights()
365 " Pick a sensible default for 'codeword'.
366 let font=''
367 if exists('g:doxygen_codeword_font')
368 if g:doxygen_codeword_font !~ '\<\k\+='
369 let font='font='.g:doxygen_codeword_font
370 else
371 let font=g:doxygen_codeword_font
372 endif
373 else
374 " Try and pick a font (only some platforms have been tested).
375 if has('gui_running')
376 if has('gui_gtk2')
377 if &guifont == ''
378 let font="font='FreeSerif 12'"
379 else
380 let font="font='".substitute(&guifont, '^.\{-}\([0-9]\+\)$', 'FreeSerif \1','')."'"
381 endif
382
383 elseif has('gui_win32') || has('gui_win16') || has('gui_win95')
384 if &guifont == ''
385 let font='font=Lucida_Console:h10'
386 else
387 let font='font='.substitute(&guifont, '^[^:]*', 'Lucida_Console','')
388 endif
389 elseif has('gui_athena') || has('gui_gtk') || &guifont=~'^\(-[^-]\+\)\{14}'
390 if &guifont == ''
391 let font='font=-b&h-lucidatypewriter-medium-r-normal-*-*-140-*-*-m-*-iso8859-1'
392 else
393 " let font='font='.substitute(&guifont,'^\(-[^-]\+\)\{7}-\([0-9]\+\).*', '-b\&h-lucidatypewriter-medium-r-normal-*-*-\2-*-*-m-*-iso8859-1','')
394 " The above line works, but it is hard to expect the combination of
395 " the two fonts will look good.
396 endif
397 elseif has('gui_kde')
398 " let font='font=Bitstream\ Vera\ Sans\ Mono/12/-1/5/50/0/0/0/0/0'
399 endif
400 endif
401 endif
402 if font=='' | let font='gui=bold' | endif
403 exe 'SynColor doxygenCodeWord term=bold cterm=bold '.font
404 if (exists('g:doxygen_enhanced_color') && g:doxygen_enhanced_color) || (exists('g:doxygen_enhanced_colour') && g:doxygen_enhanced_colour)
405 if &background=='light'
406 SynColor doxygenComment ctermfg=DarkRed guifg=DarkRed
407 SynColor doxygenBrief cterm=bold ctermfg=Cyan guifg=DarkBlue gui=bold
408 SynColor doxygenBody ctermfg=DarkBlue guifg=DarkBlue
409 SynColor doxygenSpecialTypeOnelineDesc cterm=bold ctermfg=DarkRed guifg=firebrick3 gui=bold
410 SynColor doxygenBOther cterm=bold ctermfg=DarkMagenta guifg=#aa50aa gui=bold
411 SynColor doxygenParam ctermfg=DarkGray guifg=#aa50aa
412 SynColor doxygenParamName cterm=italic ctermfg=DarkBlue guifg=DeepSkyBlue4 gui=italic,bold
413 SynColor doxygenSpecialOnelineDesc cterm=bold ctermfg=DarkCyan guifg=DodgerBlue3 gui=bold
414 SynColor doxygenSpecialHeading cterm=bold ctermfg=DarkBlue guifg=DeepSkyBlue4 gui=bold
415 SynColor doxygenPrev ctermfg=DarkGreen guifg=DarkGreen
416 else
417 SynColor doxygenComment ctermfg=LightRed guifg=LightRed
418 SynColor doxygenBrief cterm=bold ctermfg=Cyan ctermbg=darkgrey guifg=LightBlue gui=Bold,Italic
419 SynColor doxygenBody ctermfg=Cyan guifg=LightBlue
420 SynColor doxygenSpecialTypeOnelineDesc cterm=bold ctermfg=Red guifg=firebrick3 gui=bold
421 SynColor doxygenBOther cterm=bold ctermfg=Magenta guifg=#aa50aa gui=bold
422 SynColor doxygenParam ctermfg=LightGray guifg=LightGray
423 SynColor doxygenParamName cterm=italic ctermfg=LightBlue guifg=LightBlue gui=italic,bold
424 SynColor doxygenSpecialOnelineDesc cterm=bold ctermfg=LightCyan guifg=LightCyan gui=bold
425 SynColor doxygenSpecialHeading cterm=bold ctermfg=LightBlue guifg=LightBlue gui=bold
426 SynColor doxygenPrev ctermfg=LightGreen guifg=LightGreen
427 endif
428 else
429 SynLink doxygenComment SpecialComment
430 SynLink doxygenBrief Statement
431 SynLink doxygenBody Comment
432 SynLink doxygenSpecialTypeOnelineDesc Statement
433 SynLink doxygenBOther Constant
434 SynLink doxygenParam SpecialComment
435 SynLink doxygenParamName Underlined
436 SynLink doxygenSpecialOnelineDesc Statement
437 SynLink doxygenSpecialHeading Statement
438 SynLink doxygenPrev SpecialComment
439 endif
440 endfun
Bram Moolenaarb21e5842006-04-16 18:30:08 +0000441 fun! s:Doxygen_ResetSyntax()
442 if exists("did_doxygen_syntax_inits")
443 unlet did_doxygen_syntax_inits
444 endif
445 endfun
446
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000447 call s:Doxygen_Hilights()
448 " This is still a proposal, but won't do any harm.
449 au Syntax UserColor_reset nested call s:Doxygen_Hilights_Base()
450 au Syntax UserColor_{on,reset,enable} nested call s:Doxygen_Hilights()
Bram Moolenaarb21e5842006-04-16 18:30:08 +0000451 "au User Syntax_UserColor_off nested call s:Doxygen_ResetSyntax()
452
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000453
454 SynLink doxygenBody Comment
455 SynLink doxygenTODO Todo
456 SynLink doxygenOtherTODO Todo
457 SynLink doxygenOtherWARN Todo
458 SynLink doxygenOtherBUG Todo
459
460 SynLink doxygenErrorSpecial Error
461 SynLink doxygenErrorEnd Error
462 SynLink doxygenErrorComment Error
463 SynLink doxygenLinkError Error
464 SynLink doxygenBriefSpecial doxygenSpecial
465 SynLink doxygenHashSpecial doxygenSpecial
466 SynLink doxygenGroupDefineSpecial doxygenSpecial
467 SynLink doxygenEndlinkSpecial doxygenSpecial
468 SynLink doxygenCodeRegionSpecial doxygenSpecial
469 SynLink doxygenVerbatimRegionSpecial doxygenSpecial
470 SynLink doxygenGroupDefine doxygenParam
471
472 SynLink doxygenSpecialMultilineDesc doxygenSpecialOnelineDesc
473 SynLink doxygenFormulaEnds doxygenSpecial
474 SynLink doxygenBold doxygenParam
475 SynLink doxygenBriefWord doxygenParam
476 SynLink doxygenRetval doxygenParam
477 SynLink doxygenOther doxygenParam
478 SynLink doxygenStart doxygenComment
479 SynLink doxygenStart2 doxygenStart
480 SynLink doxygenComment2 doxygenComment
481 SynLink doxygenCommentL doxygenComment
482 SynLink doxygenContinueComment doxygenComment
483 SynLink doxygenSpecialContinueComment doxygenComment
484 SynLink doxygenSkipComment doxygenComment
485 SynLink doxygenEndComment doxygenComment
486 SynLink doxygenStartL doxygenComment
487 SynLink doxygenBriefEndComment doxygenComment
488 SynLink doxygenPrevL doxygenPrev
489 SynLink doxygenBriefL doxygenBrief
490 SynLink doxygenBriefLine doxygenBrief
491 SynLink doxygenHeaderLine doxygenSpecialHeading
492 SynLink doxygenStartSkip doxygenContinueComment
493 SynLink doxygenLinkWord doxygenParamName
494 SynLink doxygenLinkRest doxygenSpecialMultilineDesc
495 SynLink doxygenHyperLink doxygenLinkWord
496 SynLink doxygenHashLink doxygenLinkWord
497
498 SynLink doxygenPage doxygenSpecial
499 SynLink doxygenPagePage doxygenBOther
500 SynLink doxygenPageIdent doxygenParamName
501 SynLink doxygenPageDesc doxygenSpecialTypeOnelineDesc
502
503 SynLink doxygenSpecialIdent doxygenPageIdent
504 SynLink doxygenSpecialSectionDesc doxygenSpecialMultilineDesc
505
506 SynLink doxygenSpecialRefWord doxygenOther
507 SynLink doxygenRefWord doxygenPageIdent
508 SynLink doxygenContinueLinkComment doxygenComment
509
510 SynLink doxygenHtmlCh Function
511 SynLink doxygenHtmlCmd Statement
512 SynLink doxygenHtmlBoldItalicUnderline doxygenHtmlBoldUnderlineItalic
513 SynLink doxygenHtmlUnderlineBold doxygenHtmlBoldUnderline
514 SynLink doxygenHtmlUnderlineItalicBold doxygenHtmlBoldUnderlineItalic
515 SynLink doxygenHtmlUnderlineBoldItalic doxygenHtmlBoldUnderlineItalic
516 SynLink doxygenHtmlItalicUnderline doxygenHtmlUnderlineItalic
517 SynLink doxygenHtmlItalicBold doxygenHtmlBoldItalic
518 SynLink doxygenHtmlItalicBoldUnderline doxygenHtmlBoldUnderlineItalic
519 SynLink doxygenHtmlItalicUnderlineBold doxygenHtmlBoldUnderlineItalic
520 SynLink doxygenHtmlLink Underlined
521
522 SynLink doxygenParamDirection StorageClass
523
524
525 if !exists("doxygen_my_rendering") && !exists("html_my_rendering")
526 SynColor doxygenBoldWord term=bold cterm=bold gui=bold
527 SynColor doxygenEmphasisedWord term=italic cterm=italic gui=italic
528 SynLink doxygenArgumentWord doxygenEmphasisedWord
529 SynLink doxygenHtmlCode doxygenCodeWord
530 SynLink doxygenHtmlBold doxygenBoldWord
531 SynColor doxygenHtmlBoldUnderline term=bold,underline cterm=bold,underline gui=bold,underline
532 SynColor doxygenHtmlBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic
533 SynColor doxygenHtmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
534 SynColor doxygenHtmlUnderline term=underline cterm=underline gui=underline
535 SynColor doxygenHtmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline
536 SynColor doxygenHtmlItalic term=italic cterm=italic gui=italic
537 endif
538 delcommand SynLink
539 delcommand SynColor
540endif
541
542if &syntax=='idl'
543 syn cluster idlCommentable add=doxygenComment,doxygenCommentL
544endif
545
546"syn sync clear
547"syn sync maxlines=500
548"syn sync minlines=50
549if v:version >= 600
550syn sync match doxygenComment groupthere cComment "/\@<!/\*"
551syn sync match doxygenSyncComment grouphere doxygenComment "/\@<!/\*[*!]"
552else
553syn sync match doxygencComment groupthere cComment "/\*"
554syn sync match doxygenSyncComment grouphere doxygenComment "/\*[*!]"
555endif
556"syn sync match doxygenSyncComment grouphere doxygenComment "/\*[*!]" contains=doxygenStart,doxygenTODO keepend
557syn sync match doxygenSyncEndComment groupthere NONE "\*/"
558
559if !exists('b:current_syntax')
560 let b:current_syntax = "doxygen"
561else
Bram Moolenaarb21e5842006-04-16 18:30:08 +0000562 let b:current_syntax = b:current_syntax.'.doxygen'
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000563endif
564
565let &cpo = s:cpo_save
566unlet s:cpo_save
567" vim:et sw=2 sts=2