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