Synced with the latest branch.
[MacVim.git] / runtime / syntax / doxygen.vim
blobfb4d3cca4623d9635d3bc97e6a050de6c2f68d8a
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:  July 2008
6 " Version:      1.22
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
17 " script:
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
37 " comments.
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
46   finish
47 endif
49 if exists('b:current_syntax') && b:current_syntax =~ 'doxygen' && !exists('doxygen_debug_script')
50   finish
51 endif
53 let s:cpo_save = &cpo
54 try
55   set cpo&vim
57   " Start of Doxygen syntax hilighting:
58   "
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='[.]'
84     endif
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
92   else
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
98   endif
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
113 else
114   syn region cComment start="/\*\*\*" end="\*/" contains=@cCommentGroup,cSpaceError
115   syn region cCommentL start="////" skip="\\$" end="$" contains=@cCommentGroup,cSpaceError
116 endif
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
139   else
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
142   endif
144   " Match an [@\]brief so that it moves to body-mode.
145   "
146   "
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'
159   endfun
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
174   "
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
192   \ xmlonly endxmlonly
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
204   endif
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
211   else
212     unlet b:current_syntax
213   endif
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
239   " #Link hilighting.
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
250   " Handle section
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.
289   syn case ignore
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
295   syn case match
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
301   " Html Support
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.*
344   let s:my_syncolor=0
345   if !exists(':SynColor') 
346     command -nargs=+ SynColor hi def <args>
347     let s:my_syncolor=1
348   endif
350   let s:my_synlink=0
351   if !exists(':SynLink')
352     command -nargs=+ SynLink hi def link <args>
353     let s:my_synlink=1
354   endif
356   try
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
382     endfun
383     call s:Doxygen_Hilights_Base()
385     fun! s:Doxygen_Hilights()
386       " Pick a sensible default for 'codeword'.
387       let font=''
388       if exists('g:doxygen_codeword_font')
389         if g:doxygen_codeword_font !~ '\<\k\+='
390           let font='font='.g:doxygen_codeword_font
391         else
392           let font=g:doxygen_codeword_font
393         endif
394       else
395         " Try and pick a font (only some platforms have been tested).
396         if has('gui_running')
397           if has('gui_gtk2')
398             if &guifont == ''
399               let font="font='FreeSerif 12'"
400             else
401               let font="font='".substitute(&guifont, '^.\{-}\([0-9]\+\)$', 'FreeSerif \1','')."'"
402             endif
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'
408             else
409               let font_base='Lucida_Console'
410             endif
411             if &guifont == ''
412               let font='font='.font_base.':h10'
413             else
414               let font='font='.matchstr(substitute(&guifont, '^[^:]*', font_base,''),'[^,]*')
415             endif
416           elseif has('gui_athena') || has('gui_gtk') || &guifont=~'^\(-[^-]\+\)\{14}'
417             if &guifont == ''
418               let font='font=-b&h-lucidatypewriter-medium-r-normal-*-*-140-*-*-m-*-iso8859-1'
419             else
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.
423             endif
424           elseif has('gui_kde')
425             " let font='font=Bitstream\ Vera\ Sans\ Mono/12/-1/5/50/0/0/0/0/0'
426           endif
427         endif
428       endif
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
443         else
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
454         endif
455       else
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
466       endif
467     endfun
469     call s:Doxygen_Hilights()
471     " This is still a proposal, but won't do any harm.
472     aug doxygengroup
473     au!
474     au Syntax UserColor_reset nested call s:Doxygen_Hilights_Base()
475     au Syntax UserColor_{on,reset,enable} nested call s:Doxygen_Hilights()
476     aug END
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
564     endif
566   finally
567     if s:my_synlink | delcommand SynLink | endif
568     if s:my_syncolor | delcommand SynColor | endif
569   endtry
571   if &syntax=='idl'
572     syn cluster idlCommentable add=doxygenComment,doxygenCommentL
573   endif
575   "syn sync clear
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"
585   else
586     let b:current_syntax = b:current_syntax.'.doxygen'
587   endif
589 finally
590   let &cpo = s:cpo_save
591   unlet s:cpo_save
592 endtry
594 " vim:et sw=2 sts=2