Merged from the latest developing branch.
[MacVim/jjgod.git] / runtime / syntax / doxygen.vim
blob4916b4d364abfcaf9818a889b5f280e656f2cade
1 " DoxyGen syntax hilighting extension for c/c++/idl/java
2 " Language:     doxygen on top of c, cpp, idl, java
3 " Maintainer:   Michael Geddes <vimmer@frog.wheelycreek.net>
4 " Author:       Michael Geddes
5 " Last Change:  April 2007
6 " Version:      1.20
8 " Copyright 2004-2006 Michael Geddes
9 " Please feel free to use, modify & distribute all or part of this script,
10 " providing this copyright message remains.
11 " I would appreciate being acknowledged in any derived scripts, and would
12 " appreciate and welcome any updates, modifications or suggestions.
14 " NOTE:  Comments welcome!
16 " There are two variables that control the syntax highlighting produced by this
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 assumng you have the JAVADOC_AUTOBRIEF
34 " setting turned on in your Doxygen configuration.  If you don't, you
35 " can set the variable g:doxygen_javadoc_autobrief to 0 to have the
36 " highlighting more accurately reflect the way Doxygen will interpret your
37 " comments.
39 " Special thanks to:  Wu Yongwei, Toby Allsopp
42 if exists('b:suppress_doxygen')
43   unlet b:suppress_doxygen
44   finish
45 endif
47 if exists('b:current_syntax') && b:current_syntax =~ 'doxygen' && !exists('doxygen_debug_script')
48   finish
49 endif
51 let s:cpo_save = &cpo
52 try
53   set cpo&vim
55   " Start of Doxygen syntax hilighting:
56   "
58   " C/C++ Style line comments
59   syn region doxygenComment start=+/\*\(\*/\)\@![*!]+  end=+\*/+ contains=doxygenSyncStart,doxygenStart,doxygenTODO keepend fold
60   syn region doxygenCommentL start=+//[/!]<\@!+me=e-1 end=+$+ contains=doxygenStartL keepend skipwhite skipnl nextgroup=doxygenComment2 fold
61   syn region doxygenCommentL start=+//[/!]<+me=e-2 end=+$+ contains=doxygenStartL keepend skipwhite skipnl fold
62   syn region doxygenCommentL start=+//@\ze[{}]+ end=+$+ contains=doxygenGroupDefine,doxygenGroupDefineSpecial fold
64   " Single line brief followed by multiline comment.
65   syn region doxygenComment2 start=+/\*\(\*/\)\@![*!]+ end=+\*/+ contained contains=doxygenSyncStart2,doxygenStart2,doxygenTODO keepend fold
66   " This helps with sync-ing as for some reason, syncing behaves differently to a normal region, and the start pattern does not get matched.
67   syn match doxygenSyncStart2 +[^*/]+ contained nextgroup=doxygenBody,doxygenPrev,doxygenStartSpecial,doxygenSkipComment,doxygenStartSkip2 skipwhite skipnl
69   " Skip empty lines at the start for when comments start on the 2nd/3rd line.
70   syn match doxygenStartSkip2 +^\s*\*[^/]+me=e-1 contained nextgroup=doxygenBody,doxygenStartSpecial,doxygenStartSkip skipwhite skipnl
71   syn match doxygenStartSkip2 +^\s*\*$+ contained nextgroup=doxygenBody,doxygenStartSpecial,,doxygenStartSkip skipwhite skipnl
72   syn match doxygenStart2 +/\*[*!]+ contained nextgroup=doxygenBody,doxygenPrev,doxygenStartSpecial,doxygenStartSkip2 skipwhite skipnl
75   " Match the Starting pattern (effectively creating the start of a BNF)
76   if !exists('g:doxygen_javadoc_autobrief') || g:doxygen_javadoc_autobrief
77     syn match doxygenStart +/\*[*!]+ contained nextgroup=doxygenBrief,doxygenPrev,doxygenFindBriefSpecial,doxygenStartSpecial,doxygenStartSkip,doxygenPage skipwhite skipnl
78     syn match doxygenStartL +//[/!]+ contained nextgroup=doxygenPrevL,doxygenBriefL,doxygenSpecial skipwhite
79     " Match the first sentence as a brief comment
80     if ! exists('g:doxygen_end_punctuation')
81       let g:doxygen_end_punctuation='[.]'
82     endif
84     exe 'syn region doxygenBrief contained start=+[\\@]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@*]+ start=+\(^\s*\)\@<!\*/\@!+ start=+\<\k+ skip=+'.doxygen_end_punctuation.'\S\@=+ end=+'.doxygen_end_punctuation.'+ end=+\(\s*\(\n\s*\*\=\s*\)[@\\]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\@!\)\@=+ contains=doxygenSmallSpecial,doxygenContinueComment,doxygenBriefEndComment,doxygenFindBriefSpecial,doxygenSmallSpecial,@doxygenHtmlGroup,doxygenTODO,doxygenHyperLink,doxygenHashLink,@Spell  skipnl nextgroup=doxygenBody'
86     syn match doxygenBriefEndComment +\*/+ contained
88     exe 'syn region doxygenBriefL start=+@\k\@!\|[\\@]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@]+ start=+\<+ skip=+'.doxygen_end_punctuation.'\S+ end=+'.doxygen_end_punctuation.'\|$+ contained contains=doxygenSmallSpecial,doxygenHyperLink,doxygenHashLink,@doxygenHtmlGroup,@Spell keepend'
89     syn match doxygenPrevL +<+ contained  nextgroup=doxygenBriefL,doxygenSpecial skipwhite
90   else
91     syn match doxygenStart +/\*[*!]+ contained nextgroup=doxygenBody,doxygenPrev,doxygenFindBriefSpecial,doxygenStartSpecial,doxygenStartSkip,doxygenPage skipwhite skipnl
92     syn match doxygenStartL +//[/!]+ contained nextgroup=doxygenPrevL,doxygenLine,doxygenSpecial skipwhite
93     syn region doxygenLine start=+@\k\@!\|[\\@]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@<]+ start=+\<+ end='$' contained contains=doxygenSmallSpecial,doxygenHyperLink,doxygenHashLink,@doxygenHtmlGroup,@Spell keepend
94     syn match doxygenPrevL +<+ contained  nextgroup=doxygenLine,doxygenSpecial skipwhite
96   endif
98   " This helps with sync-ing as for some reason, syncing behaves differently to a normal region, and the start pattern does not get matched.
99   syn match doxygenSyncStart +\ze[^*/]+ contained nextgroup=doxygenBrief,doxygenPrev,doxygenStartSpecial,doxygenFindBriefSpecial,doxygenStartSkip,doxygenPage skipwhite skipnl
101   syn region doxygenBriefLine contained start=+\<\k+ end=+\(\n\s*\*\=\s*\([@\\]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\@!\)\|\s*$\)\@=+ contains=doxygenContinueComment,doxygenFindBriefSpecial,doxygenSmallSpecial,@doxygenHtmlGroup,doxygenTODO,doxygenHyperLink,doxygenHashLink  skipwhite keepend
103   " Match a '<' for applying a comment to the previous element.
104   syn match doxygenPrev +<+ contained nextgroup=doxygenBrief,doxygenBody,doxygenSpecial,doxygenStartSkip skipwhite
106 if exists("c_comment_strings")
107   " These are anti-Doxygen comments.  If there are more than two asterisks or 3 '/'s
108   " then turn the comments back into normal C comments.
109   syn region cComment start="/\*\*\*" end="\*/" contains=@cCommentGroup,cCommentString,cCharacter,cNumbersCom,cSpaceError
110   syn region cCommentL start="////" skip="\\$" end="$" contains=@cCommentGroup,cComment2String,cCharacter,cNumbersCom,cSpaceError
111 else
112   syn region cComment start="/\*\*\*" end="\*/" contains=@cCommentGroup,cSpaceError
113   syn region cCommentL start="////" skip="\\$" end="$" contains=@cCommentGroup,cSpaceError
114 endif
116   " Special commands at the start of the area:  starting with '@' or '\'
117   syn region doxygenStartSpecial contained start=+[@\\]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\@!+ end=+$+ end=+\*/+me=s-1,he=s-1  contains=doxygenSpecial nextgroup=doxygenSkipComment skipnl keepend
118   syn match doxygenSkipComment contained +^\s*\*/\@!+ nextgroup=doxygenBrief,doxygenStartSpecial,doxygenFindBriefSpecial,doxygenPage skipwhite
120   "syn region doxygenBodyBit contained start=+$+
122   " The main body of a doxygen comment.
123   syn region doxygenBody contained start=+\(/\*[*!]\)\@<!<\|[^<]\|$+ matchgroup=doxygenEndComment end=+\*/+re=e-2,me=e-2 contains=doxygenContinueComment,doxygenTODO,doxygenSpecial,doxygenSmallSpecial,doxygenHyperLink,doxygenHashLink,@doxygenHtmlGroup,@Spell
125   " These allow the skipping of comment continuation '*' characters.
126   syn match doxygenContinueComment contained +^\s*\*/\@!\s*+
128   " Catch a Brief comment without punctuation - flag it as an error but
129   " make sure the end comment is picked up also.
130   syn match doxygenErrorComment contained +\*/+
133   " Skip empty lines at the start for when comments start on the 2nd/3rd line.
134   if !exists('g:doxygen_javadoc_autobrief') || g:doxygen_javadoc_autobrief
135     syn match doxygenStartSkip +^\s*\*[^/]+me=e-1 contained nextgroup=doxygenBrief,doxygenStartSpecial,doxygenFindBriefSpecial,doxygenStartSkip,doxygenPage skipwhite skipnl
136     syn match doxygenStartSkip +^\s*\*$+ contained nextgroup=doxygenBrief,doxygenStartSpecial,doxygenFindBriefSpecial,doxygenStartSkip,doxygenPage skipwhite skipnl
137   else
138     syn match doxygenStartSkip +^\s*\*[^/]+me=e-1 contained nextgroup=doxygenStartSpecial,doxygenFindBriefSpecial,doxygenStartSkip,doxygenPage,doxygenBody skipwhite skipnl
139     syn match doxygenStartSkip +^\s*\*$+ contained nextgroup=doxygenStartSpecial,doxygenFindBriefSpecial,doxygenStartSkip,doxygenPage,doxygenBody skipwhite skipnl
140   endif
142   " Match an [@\]brief so that it moves to body-mode.
143   "
144   "
145   " syn match doxygenBriefLine  contained
146   syn match doxygenBriefSpecial contained +[@\\]+ nextgroup=doxygenBriefWord skipwhite
147   syn region doxygenFindBriefSpecial start=+[@\\]brief\>+ end=+\(\n\s*\*\=\s*\([@\\]\([npcbea]\>\|em\>\|ref\>\|link\>\|f\$\|[$\\&<>#]\)\@!\)\|\s*$\)\@=+ keepend contains=doxygenBriefSpecial nextgroup=doxygenBody keepend skipwhite skipnl contained
150   " Create the single word matching special identifiers.
152   fun! s:DxyCreateSmallSpecial( kword, name )
154     let mx='[-:0-9A-Za-z_%=&+*/!~>|]\@<!\([-0-9A-Za-z_%=+*/!~>|#]\+[-0-9A-Za-z_%=+*/!~>|]\@!\|\\[\\<>&.]@\|[.,][0-9a-zA-Z_]\@=\|::\|([^)]*)\|&[0-9a-zA-Z]\{2,7};\)\+'
155     exe 'syn region doxygenSpecial'.a:name.'Word contained start=+'.a:kword.'+ end=+\(\_s\+'.mx.'\)\@<=[-a-zA-Z_0-9+*/^%|~!=&\\]\@!+ skipwhite contains=doxygenContinueComment,doxygen'.a:name.'Word'
156     exe 'syn match doxygen'.a:name.'Word contained "\_s\@<='.mx.'" contains=doxygenHtmlSpecial,@Spell keepend'
157   endfun
158   call s:DxyCreateSmallSpecial('p', 'Code')
159   call s:DxyCreateSmallSpecial('c', 'Code')
160   call s:DxyCreateSmallSpecial('b', 'Bold')
161   call s:DxyCreateSmallSpecial('e', 'Emphasised')
162   call s:DxyCreateSmallSpecial('em', 'Emphasised')
163   call s:DxyCreateSmallSpecial('a', 'Argument')
164   call s:DxyCreateSmallSpecial('ref', 'Ref')
165   delfun s:DxyCreateSmallSpecial
167   syn match doxygenSmallSpecial contained +[@\\]\(\<[npcbea]\>\|\<em\>\|\<ref\>\|\<link\>\|f\$\|[$\\&<>#]\)\@=+ nextgroup=doxygenOtherLink,doxygenHyperLink,doxygenHashLink,doxygenFormula,doxygenSymbol,doxygenSpecial.*Word
169   " Now for special characters
170   syn match doxygenSpecial contained +[@\\]\(\<[npcbea]\>\|\<em\>\|\<ref\|\<link\>\>\|\<f\$\|[$\\&<>#]\)\@!+ nextgroup=doxygenParam,doxygenRetval,doxygenBriefWord,doxygenBold,doxygenBOther,doxygenOther,doxygenOtherTODO,doxygenOtherWARN,doxygenOtherBUG,doxygenPage,doxygenGroupDefine,doxygenCodeRegion,doxygenVerbatimRegion,doxygenDotRegion
171   " doxygenOtherLink,doxygenSymbol,doxygenFormula,doxygenErrorSpecial,doxygenSpecial.*Word
172   "
173   syn match doxygenGroupDefine contained +@\@<=[{}]+
174   syn match doxygenGroupDefineSpecial contained +@\ze[{}]+
176   syn match doxygenErrorSpecial contained +\s+
178   " Match parameters and retvals (highlighting the first word as special).
179   syn match doxygenParamDirection contained "\v\[(\s*in>((]\s*\[|\s*,\s*)out>)=|out>((]\s*\[|\s*,\s*)in>)=)\]" nextgroup=doxygenParamName skipwhite
180   syn keyword doxygenParam contained param nextgroup=doxygenParamName,doxygenParamDirection skipwhite
181   syn match doxygenParamName contained +[A-Za-z0-9_:]\++ nextgroup=doxygenSpecialMultilineDesc skipwhite
182   syn keyword doxygenRetval contained retval throw exception nextgroup=doxygenParamName skipwhite
184   " Match one line identifiers.
185   syn keyword doxygenOther contained addindex anchor
186   \ dontinclude endhtmlonly endlatexonly showinitializer hideinitializer
187   \ example htmlonly image include ingroup internal latexonly line
188   \ overload relates relatesalso sa skip skipline
189   \ until verbinclude version addtogroup htmlinclude copydoc dotfile
190   \ xmlonly endxmlonly
191   \ nextgroup=doxygenSpecialOnelineDesc
193   syn region doxygenCodeRegion contained matchgroup=doxygenOther start=+\<code\>+ matchgroup=doxygenOther end=+[\\@]\@<=\<endcode\>+ contains=doxygenCodeRegionSpecial,doxygenContinueComment,doxygenErrorComment,@NoSpell
194   syn match doxygenCodeRegionSpecial contained +[\\@]\(endcode\>\)\@=+
196   syn region doxygenVerbatimRegion contained matchgroup=doxygenOther start=+\<verbatim\>+ matchgroup=doxygenOther end=+[\\@]\@<=\<endverbatim\>+ contains=doxygenVerbatimRegionSpecial,doxygenContinueComment,doxygenErrorComment,@NoSpell
197   syn match doxygenVerbatimRegionSpecial contained +[\\@]\(endverbatim\>\)\@=+
199   if exists('b:current_syntax') 
200     let b:doxygen_syntax_save=b:current_syntax
201     unlet b:current_syntax
202   endif
204   syn include @Dotx syntax/dot.vim
206   if exists('b:doxygen_syntax_save') 
207     let b:current_syntax=b:doxygen_syntax_save
208     unlet b:doxygen_syntax_save
209   else
210     unlet b:current_syntax
211   endif
213   syn region doxygenDotRegion contained matchgroup=doxygenOther start=+\<dot\>+ matchgroup=doxygenOther end=+[\\@]\@<=\<enddot\>+ contains=doxygenDotRegionSpecial,doxygenErrorComment,doxygenContinueComment,@NoSpell,@Dotx
214   syn match doxygenDotRegionSpecial contained +[\\@]\(enddot\>\)\@=+
216   " Match single line identifiers.
217   syn keyword doxygenBOther contained class enum file fn mainpage interface
218   \ namespace struct typedef union var def name
219   \ nextgroup=doxygenSpecialTypeOnelineDesc
221   syn keyword doxygenOther contained par nextgroup=doxygenHeaderLine
222   syn region doxygenHeaderLine start=+.+ end=+^+ contained skipwhite nextgroup=doxygenSpecialMultilineDesc
224   syn keyword doxygenOther contained arg author date deprecated li return returns see invariant note post pre remarks since test nextgroup=doxygenSpecialMultilineDesc
225   syn keyword doxygenOtherTODO contained todo attention nextgroup=doxygenSpecialMultilineDesc
226   syn keyword doxygenOtherWARN contained warning nextgroup=doxygenSpecialMultilineDesc
227   syn keyword doxygenOtherBUG contained bug nextgroup=doxygenSpecialMultilineDesc
229   " Handle \link, \endlink, highlighting the link-to and the link text bits separately.
230   syn region doxygenOtherLink matchgroup=doxygenOther start=+\<link\>+ end=+[\@]\@<=endlink\>+ contained contains=doxygenLinkWord,doxygenContinueComment,doxygenLinkError,doxygenEndlinkSpecial
231   syn match doxygenEndlinkSpecial contained +[\\@]\zeendlink\>+
233   syn match doxygenLinkWord "[_a-zA-Z:#()][_a-z0-9A-Z:#()]*\>" contained skipnl nextgroup=doxygenLinkRest,doxygenContinueLinkComment
234   syn match doxygenLinkRest +[^*@\\]\|\*/\@!\|[@\\]\(endlink\>\)\@!+ contained skipnl nextgroup=doxygenLinkRest,doxygenContinueLinkComment
235   syn match doxygenContinueLinkComment contained +^\s*\*\=[^/]+me=e-1 nextgroup=doxygenLinkRest
236   syn match doxygenLinkError "\*/" contained
237   " #Link hilighting.
238   syn match doxygenHashLink /\([a-zA-Z_][0-9a-zA-Z_]*\)\?#\(\.[0-9a-zA-Z_]\@=\|[a-zA-Z0-9_]\+\|::\|()\)\+/ contained contains=doxygenHashSpecial
239   syn match doxygenHashSpecial /#/ contained
240   syn match doxygenHyperLink /\(\s\|^\s*\*\?\)\@<=\(http\|https\|ftp\):\/\/[-0-9a-zA-Z_?&=+#%/.!':;@]\+/ contained
242   " Handle \page.  This does not use doxygenBrief.
243   syn match doxygenPage "[\\@]page\>"me=s+1 contained skipwhite nextgroup=doxygenPagePage
244   syn keyword doxygenPagePage page contained skipwhite nextgroup=doxygenPageIdent
245   syn region doxygenPageDesc  start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend skipwhite skipnl nextgroup=doxygenBody
246   syn match doxygenPageIdent "\<[a-zA-Z_0-9]\+\>" contained nextgroup=doxygenPageDesc
248   " Handle section
249   syn keyword doxygenOther defgroup section subsection subsubsection weakgroup contained skipwhite nextgroup=doxygenSpecialIdent
250   syn region doxygenSpecialSectionDesc  start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend skipwhite skipnl nextgroup=doxygenContinueComment
251   syn match doxygenSpecialIdent "\<[a-zA-Z_0-9]\+\>" contained nextgroup=doxygenSpecialSectionDesc
253   " Does the one-line description for the one-line type identifiers.
254   syn region doxygenSpecialTypeOnelineDesc  start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend
255   syn region doxygenSpecialOnelineDesc  start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend
257   " Handle the multiline description for the multiline type identifiers.
258   " Continue until an 'empty' line (can contain a '*' continuation) or until the
259   " next whole-line @ command \ command.
260   syn region doxygenSpecialMultilineDesc  start=+.\++ skip=+^\s*\(\*/\@!\s*\)\=\(\<\|[@\\]\<\([npcbea]\>\|em\>\|ref\|link\>\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@*]\)+ end=+^+ contained contains=doxygenSpecialContinueComment,doxygenSmallSpecial,doxygenHyperLink,doxygenHashLink,@doxygenHtmlGroup,@Spell  skipwhite keepend
261   syn match doxygenSpecialContinueComment contained +^\s*\*/\@!\s*+ nextgroup=doxygenSpecial skipwhite
263   " Handle special cases  'bold' and 'group'
264   syn keyword doxygenBold contained bold nextgroup=doxygenSpecialHeading
265   syn keyword doxygenBriefWord contained brief nextgroup=doxygenBriefLine skipwhite
266   syn match doxygenSpecialHeading +.\++ contained skipwhite
267   syn keyword doxygenGroup contained group nextgroup=doxygenGroupName skipwhite
268   syn keyword doxygenGroupName contained +\k\++ nextgroup=doxygenSpecialOnelineDesc skipwhite
270   " Handle special symbol identifiers  @$, @\, @$ etc
271   syn match doxygenSymbol contained +[$\\&<>#n]+
273   " Simplistic handling of formula regions
274   syn region doxygenFormula contained matchgroup=doxygenFormulaEnds start=+f\$+ end=+[@\\]f\$+ contains=doxygenFormulaSpecial,doxygenFormulaOperator
275   syn match doxygenFormulaSpecial contained +[@\\]\(f[^$]\|[^f]\)+me=s+1 nextgroup=doxygenFormulaKeyword,doxygenFormulaEscaped
276   syn match doxygenFormulaEscaped contained "."
277   syn match doxygenFormulaKeyword contained  "[a-z]\+"
278   syn match doxygenFormulaOperator contained +[_^]+
280   syn region doxygenFormula contained matchgroup=doxygenFormulaEnds start=+f\[+ end=+[@\\]f]+ contains=doxygenFormulaSpecial,doxygenFormulaOperator,doxygenAtom
281   syn region doxygenAtom contained transparent matchgroup=doxygenFormulaOperator start=+{+ end=+}+ contains=doxygenAtom,doxygenFormulaSpecial,doxygenFormulaOperator
283   " Add TODO hilighting.
284   syn keyword doxygenTODO contained TODO README XXX FIXME
286   " Supported HTML subset.  Not perfect, but okay.
287   syn case ignore
288   syn region doxygenHtmlTag contained matchgroup=doxygenHtmlCh start=+\v\</=\ze([biuap]|em|strong|img|br|center|code|dfn|d[ldt]|hr|h[0-3]|li|[ou]l|pre|small|sub|sup|table|tt|var|caption|src|alt|longdesc|name|height|width|usemap|ismap|href|type)>+ skip=+\\<\|\<\k\+=\("[^"]*"\|'[^']*\)+ end=+>+ contains=doxygenHtmlCmd,doxygenContinueComment,doxygenHtmlVar
289   syn keyword doxygenHtmlCmd contained b i em strong u img a br p center code dfn dl dd dt hr h1 h2 h3 li ol ul pre small sub sup table tt var caption nextgroup=doxygenHtmlVar skipwhite
290   syn keyword doxygenHtmlVar contained src alt longdesc name height width usemap ismap href type nextgroup=doxygenHtmlEqu skipwhite
291   syn match doxygenHtmlEqu contained +=+ nextgroup=doxygenHtmlExpr skipwhite
292   syn match doxygenHtmlExpr contained +"\(\\.\|[^"]\)*"\|'\(\\.\|[^']\)*'+ nextgroup=doxygenHtmlVar skipwhite
293   syn case match
294   syn match doxygenHtmlSpecial contained "&\(copy\|quot\|[AEIOUYaeiouy]uml\|[AEIOUYaeiouy]acute\|[AEIOUaeiouy]grave\|[AEIOUaeiouy]circ\|[ANOano]tilde\|szlig\|[Aa]ring\|nbsp\|gt\|lt\|amp\);"
296   syn cluster doxygenHtmlGroup contains=doxygenHtmlCode,doxygenHtmlBold,doxygenHtmlUnderline,doxygenHtmlItalic,doxygenHtmlSpecial,doxygenHtmlTag,doxygenHtmlLink
298   syn cluster doxygenHtmlTop contains=@Spell,doxygenHtmlSpecial,doxygenHtmlTag,doxygenContinueComment
299   " Html Support
300   syn region doxygenHtmlLink contained start=+<[aA]\>\s*\(\n\s*\*\s*\)\=\(\(name\|href\)=\("[^"]*"\|'[^']*'\)\)\=\s*>+ end=+</[aA]>+me=e-4 contains=@doxygenHtmlTop
301   hi link doxygenHtmlLink Underlined
303   syn region doxygenHtmlBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderline,doxygenHtmlBoldItalic,@Spell
304   syn region doxygenHtmlBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderline,doxygenHtmlBoldItalic,@Spell
305   syn region doxygenHtmlBoldUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderlineItalic,@Spell
306   syn region doxygenHtmlBoldItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldItalicUnderline,@Spell
307   syn region doxygenHtmlBoldItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop,doxygenHtmlBoldItalicUnderline,@Spell
308   syn region doxygenHtmlBoldUnderlineItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop,@Spell
309   syn region doxygenHtmlBoldUnderlineItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop,@Spell
310   syn region doxygenHtmlBoldItalicUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderlineItalic,@Spell
312   syn region doxygenHtmlUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlUnderlineBold,doxygenHtmlUnderlineItalic,@Spell
313   syn region doxygenHtmlUnderlineBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlUnderlineBoldItalic,@Spell
314   syn region doxygenHtmlUnderlineBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop,doxygenHtmlUnderlineBoldItalic,@Spell
315   syn region doxygenHtmlUnderlineItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop,htmUnderlineItalicBold,@Spell
316   syn region doxygenHtmlUnderlineItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop,htmUnderlineItalicBold,@Spell
317   syn region doxygenHtmlUnderlineItalicBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop,@Spell
318   syn region doxygenHtmlUnderlineItalicBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop,@Spell
319   syn region doxygenHtmlUnderlineBoldItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop,@Spell
320   syn region doxygenHtmlUnderlineBoldItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop,@Spell
322   syn region doxygenHtmlItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlItalicBold,doxygenHtmlItalicUnderline,@Spell
323   syn region doxygenHtmlItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop,@Spell
324   syn region doxygenHtmlItalicBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlItalicBoldUnderline,@Spell
325   syn region doxygenHtmlItalicBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop,doxygenHtmlItalicBoldUnderline,@Spell
326   syn region doxygenHtmlItalicBoldUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop,@Spell
327   syn region doxygenHtmlItalicUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlItalicUnderlineBold,@Spell
328   syn region doxygenHtmlItalicUnderlineBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop,@Spell
329   syn region doxygenHtmlItalicUnderlineBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop,@Spell
331   syn region doxygenHtmlCode contained start="\c<code\>" end="\c</code>"me=e-7 contains=@doxygenHtmlTop,@NoSpell
333   " Prevent the doxygen contained matches from leaking into the c/rc groups.
334   syn cluster cParenGroup add=doxygen.*
335   syn cluster cParenGroup remove=doxygenComment,doxygenCommentL
336   syn cluster cPreProcGroup add=doxygen.*
337   syn cluster cMultiGroup add=doxygen.*
338   syn cluster rcParenGroup add=doxygen.*
339   syn cluster rcParenGroup remove=doxygenComment,doxygenCommentL
340   syn cluster rcGroup add=doxygen.*
342   let s:my_syncolor=0
343   if !exists(':SynColor') 
344     command -nargs=+ SynColor hi def <args>
345     let s:my_syncolor=1
346   endif
348   let s:my_synlink=0
349   if !exists(':SynLink')
350     command -nargs=+ SynLink hi def link <args>
351     let s:my_synlink=1
352   endif
354   try
355     "let did_doxygen_syntax_inits = &background
356     hi doxygen_Dummy guifg=black
358     fun! s:Doxygen_Hilights_Base()
359       SynLink doxygenHtmlSpecial Special
360       SynLink doxygenHtmlVar Type
361       SynLink doxygenHtmlExpr String
363       SynLink doxygenSmallSpecial SpecialChar
365       SynLink doxygenSpecialCodeWord doxygenSmallSpecial
366       SynLink doxygenSpecialBoldWord doxygenSmallSpecial
367       SynLink doxygenSpecialEmphasisedWord doxygenSmallSpecial
368       SynLink doxygenSpecialArgumentWord doxygenSmallSpecial
370       " SynColor doxygenFormulaKeyword cterm=bold ctermfg=DarkMagenta guifg=DarkMagenta gui=bold
371       SynLink doxygenFormulaKeyword Keyword
372       "SynColor doxygenFormulaEscaped  ctermfg=DarkMagenta guifg=DarkMagenta gui=bold
373       SynLink doxygenFormulaEscaped Special
374       SynLink doxygenFormulaOperator Operator
375       SynLink doxygenFormula Statement
376       SynLink doxygenSymbol Constant
377       SynLink doxygenSpecial Special
378       SynLink doxygenFormulaSpecial Special
379       "SynColor doxygenFormulaSpecial ctermfg=DarkBlue guifg=DarkBlue
380     endfun
381     call s:Doxygen_Hilights_Base()
383     fun! s:Doxygen_Hilights()
384       " Pick a sensible default for 'codeword'.
385       let font=''
386       if exists('g:doxygen_codeword_font')
387         if g:doxygen_codeword_font !~ '\<\k\+='
388           let font='font='.g:doxygen_codeword_font
389         else
390           let font=g:doxygen_codeword_font
391         endif
392       else
393         " Try and pick a font (only some platforms have been tested).
394         if has('gui_running')
395           if has('gui_gtk2')
396             if &guifont == ''
397               let font="font='FreeSerif 12'"
398             else
399               let font="font='".substitute(&guifont, '^.\{-}\([0-9]\+\)$', 'FreeSerif \1','')."'"
400             endif
402           elseif has('gui_win32') || has('gui_win16') || has('gui_win95')
404             if exists('g:doxygen_use_bitsream_vera')  && g:doxygen_use_bitsream_vera
405               let font_base='Bitstream_Vera_Sans_Mono'
406             else
407               let font_base='Lucida_Console'
408             endif
409             if &guifont == ''
410               let font='font='.font_base.':h10'
411             else
412               let font='font='.matchstr(substitute(&guifont, '^[^:]*', font_base,''),'[^,]*')
413             endif
414           elseif has('gui_athena') || has('gui_gtk') || &guifont=~'^\(-[^-]\+\)\{14}'
415             if &guifont == ''
416               let font='font=-b&h-lucidatypewriter-medium-r-normal-*-*-140-*-*-m-*-iso8859-1'
417             else
418             " let font='font='.substitute(&guifont,'^\(-[^-]\+\)\{7}-\([0-9]\+\).*', '-b\&h-lucidatypewriter-medium-r-normal-*-*-\2-*-*-m-*-iso8859-1','')
419             " The above line works, but it is hard to expect the combination of
420             " the two fonts will look good.
421             endif
422           elseif has('gui_kde')
423             " let font='font=Bitstream\ Vera\ Sans\ Mono/12/-1/5/50/0/0/0/0/0'
424           endif
425         endif
426       endif
427       if font=='' | let font='gui=bold' | endif
428       exe 'SynColor doxygenCodeWord             term=bold cterm=bold '.font
429       if (exists('g:doxygen_enhanced_color') && g:doxygen_enhanced_color) || (exists('g:doxygen_enhanced_colour') && g:doxygen_enhanced_colour)
430         if &background=='light'
431           SynColor doxygenComment ctermfg=DarkRed guifg=DarkRed
432           SynColor doxygenBrief cterm=bold ctermfg=Cyan guifg=DarkBlue gui=bold
433           SynColor doxygenBody ctermfg=DarkBlue guifg=DarkBlue
434           SynColor doxygenSpecialTypeOnelineDesc cterm=bold ctermfg=DarkRed guifg=firebrick3 gui=bold
435           SynColor doxygenBOther cterm=bold ctermfg=DarkMagenta guifg=#aa50aa gui=bold
436           SynColor doxygenParam ctermfg=DarkGray guifg=#aa50aa
437           SynColor doxygenParamName cterm=italic ctermfg=DarkBlue guifg=DeepSkyBlue4 gui=italic,bold
438           SynColor doxygenSpecialOnelineDesc cterm=bold ctermfg=DarkCyan guifg=DodgerBlue3 gui=bold
439           SynColor doxygenSpecialHeading cterm=bold ctermfg=DarkBlue guifg=DeepSkyBlue4 gui=bold
440           SynColor doxygenPrev ctermfg=DarkGreen guifg=DarkGreen
441         else
442           SynColor doxygenComment ctermfg=LightRed guifg=LightRed
443           SynColor doxygenBrief cterm=bold ctermfg=Cyan ctermbg=darkgrey guifg=LightBlue gui=Bold,Italic
444           SynColor doxygenBody ctermfg=Cyan guifg=LightBlue
445           SynColor doxygenSpecialTypeOnelineDesc cterm=bold ctermfg=Red guifg=firebrick3 gui=bold
446           SynColor doxygenBOther cterm=bold ctermfg=Magenta guifg=#aa50aa gui=bold
447           SynColor doxygenParam ctermfg=LightGray guifg=LightGray
448           SynColor doxygenParamName cterm=italic ctermfg=LightBlue guifg=LightBlue gui=italic,bold
449           SynColor doxygenSpecialOnelineDesc cterm=bold ctermfg=LightCyan guifg=LightCyan gui=bold
450           SynColor doxygenSpecialHeading cterm=bold ctermfg=LightBlue guifg=LightBlue gui=bold
451           SynColor doxygenPrev ctermfg=LightGreen guifg=LightGreen
452         endif
453       else
454         SynLink doxygenComment SpecialComment
455         SynLink doxygenBrief Statement
456         SynLink doxygenBody Comment
457         SynLink doxygenSpecialTypeOnelineDesc Statement
458         SynLink doxygenBOther Constant
459         SynLink doxygenParam SpecialComment
460         SynLink doxygenParamName Underlined
461         SynLink doxygenSpecialOnelineDesc Statement
462         SynLink doxygenSpecialHeading Statement
463         SynLink doxygenPrev SpecialComment
464       endif
465     endfun
467     call s:Doxygen_Hilights()
469     " This is still a proposal, but won't do any harm.
470     aug doxygengroup
471     au!
472     au Syntax UserColor_reset nested call s:Doxygen_Hilights_Base()
473     au Syntax UserColor_{on,reset,enable} nested call s:Doxygen_Hilights()
474     aug END
477     SynLink doxygenBody                   Comment
478     SynLink doxygenLine                   doxygenBody
479     SynLink doxygenTODO                   Todo
480     SynLink doxygenOtherTODO              Todo
481     SynLink doxygenOtherWARN              Todo
482     SynLink doxygenOtherBUG               Todo
484     SynLink doxygenErrorSpecial           Error
485     SynLink doxygenErrorEnd               Error
486     SynLink doxygenErrorComment           Error
487     SynLink doxygenLinkError              Error
488     SynLink doxygenBriefSpecial           doxygenSpecial
489     SynLink doxygenHashSpecial            doxygenSpecial
490     SynLink doxygenGroupDefineSpecial     doxygenSpecial
491     SynLink doxygenEndlinkSpecial         doxygenSpecial
492     SynLink doxygenCodeRegionSpecial      doxygenSpecial
493     SynLink doxygenVerbatimRegionSpecial  doxygenSpecial
494     SynLink doxygenDotRegionSpecial       doxygenSpecial
495     SynLink doxygenGroupDefine            doxygenParam
497     SynLink doxygenSpecialMultilineDesc   doxygenSpecialOnelineDesc
498     SynLink doxygenFormulaEnds            doxygenSpecial
499     SynLink doxygenBold                   doxygenParam
500     SynLink doxygenBriefWord              doxygenParam
501     SynLink doxygenRetval                 doxygenParam
502     SynLink doxygenOther                  doxygenParam
503     SynLink doxygenStart                  doxygenComment
504     SynLink doxygenStart2                 doxygenStart
505     SynLink doxygenComment2               doxygenComment
506     SynLink doxygenCommentL               doxygenComment
507     SynLink doxygenContinueComment        doxygenComment
508     SynLink doxygenSpecialContinueComment doxygenComment
509     SynLink doxygenSkipComment            doxygenComment
510     SynLink doxygenEndComment             doxygenComment
511     SynLink doxygenStartL                 doxygenComment
512     SynLink doxygenBriefEndComment        doxygenComment
513     SynLink doxygenPrevL                  doxygenPrev
514     SynLink doxygenBriefL                 doxygenBrief
515     SynLink doxygenBriefLine              doxygenBrief
516     SynLink doxygenHeaderLine             doxygenSpecialHeading
517     SynLink doxygenStartSkip              doxygenContinueComment
518     SynLink doxygenLinkWord               doxygenParamName
519     SynLink doxygenLinkRest               doxygenSpecialMultilineDesc
520     SynLink doxygenHyperLink              doxygenLinkWord
521     SynLink doxygenHashLink               doxygenLinkWord
523     SynLink doxygenPage                   doxygenSpecial
524     SynLink doxygenPagePage               doxygenBOther
525     SynLink doxygenPageIdent              doxygenParamName
526     SynLink doxygenPageDesc               doxygenSpecialTypeOnelineDesc
528     SynLink doxygenSpecialIdent           doxygenPageIdent
529     SynLink doxygenSpecialSectionDesc     doxygenSpecialMultilineDesc
531     SynLink doxygenSpecialRefWord         doxygenOther
532     SynLink doxygenRefWord                doxygenPageIdent
533     SynLink doxygenContinueLinkComment    doxygenComment
535     SynLink doxygenHtmlCh                 Function
536     SynLink doxygenHtmlCmd                Statement
537     SynLink doxygenHtmlBoldItalicUnderline     doxygenHtmlBoldUnderlineItalic
538     SynLink doxygenHtmlUnderlineBold           doxygenHtmlBoldUnderline
539     SynLink doxygenHtmlUnderlineItalicBold     doxygenHtmlBoldUnderlineItalic
540     SynLink doxygenHtmlUnderlineBoldItalic     doxygenHtmlBoldUnderlineItalic
541     SynLink doxygenHtmlItalicUnderline         doxygenHtmlUnderlineItalic
542     SynLink doxygenHtmlItalicBold              doxygenHtmlBoldItalic
543     SynLink doxygenHtmlItalicBoldUnderline     doxygenHtmlBoldUnderlineItalic
544     SynLink doxygenHtmlItalicUnderlineBold     doxygenHtmlBoldUnderlineItalic
545     SynLink doxygenHtmlLink                    Underlined
547     SynLink doxygenParamDirection              StorageClass
550     if !exists("doxygen_my_rendering") && !exists("html_my_rendering")
551       SynColor doxygenBoldWord             term=bold cterm=bold gui=bold
552       SynColor doxygenEmphasisedWord       term=italic cterm=italic gui=italic
553       SynLink  doxygenArgumentWord         doxygenEmphasisedWord
554       SynLink  doxygenHtmlCode             doxygenCodeWord
555       SynLink  doxygenHtmlBold             doxygenBoldWord
556       SynColor doxygenHtmlBoldUnderline       term=bold,underline cterm=bold,underline gui=bold,underline
557       SynColor doxygenHtmlBoldItalic          term=bold,italic cterm=bold,italic gui=bold,italic
558       SynColor doxygenHtmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
559       SynColor doxygenHtmlUnderline        term=underline cterm=underline gui=underline
560       SynColor doxygenHtmlUnderlineItalic  term=italic,underline cterm=italic,underline gui=italic,underline
561       SynColor doxygenHtmlItalic           term=italic cterm=italic gui=italic
562     endif
564   finally
565     if s:my_synlink | delcommand SynLink | endif
566     if s:my_syncolor | delcommand SynColor | endif
567   endtry
569   if &syntax=='idl'
570     syn cluster idlCommentable add=doxygenComment,doxygenCommentL
571   endif
573   "syn sync clear
574   "syn sync maxlines=500
575   "syn sync minlines=50
576   syn sync match doxygenComment groupthere cComment "/\@<!/\*"
577   syn sync match doxygenSyncComment grouphere doxygenComment "/\@<!/\*[*!]"
578   "syn sync match doxygenSyncComment grouphere doxygenComment "/\*[*!]" contains=doxygenStart,doxygenTODO keepend
579   syn sync match doxygenSyncEndComment groupthere NONE "\*/"
581   if !exists('b:current_syntax')
582     let b:current_syntax = "doxygen"
583   else
584     let b:current_syntax = b:current_syntax.'.doxygen'
585   endif
587 finally
588   let &cpo = s:cpo_save
589   unlet s:cpo_save
590 endtry
592 " vim:et sw=2 sts=2