xref: /vim-8.2.3635/runtime/syntax/doxygen.vim (revision cb03397a)
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 Change:  Jan 2009 (\tparam by Domnique Pelle, Aug 2013)
6" Version:      1.23
7"
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.
13
14" NOTE:  Comments welcome!
15"
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.
21"
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
27"
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.
32"
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.
38"
39" Support for cpp, c, idl, doxygen and php.
40"
41" Special thanks to:  Wu Yongwei, Toby Allsopp
42"
43
44if exists('b:suppress_doxygen')
45  unlet b:suppress_doxygen
46  finish
47endif
48
49if exists('b:current_syntax') && b:current_syntax =~ 'doxygen' && !exists('doxygen_debug_script')
50  finish
51endif
52
53let s:cpo_save = &cpo
54try
55  set cpo&vim
56
57  " Start of Doxygen syntax hilighting:
58  "
59
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
65
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
70
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
75
76
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
85
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'
87
88    syn match doxygenBriefEndComment +\*/+ contained
89
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
97
98  endif
99
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
102
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
104
105  " Match a '<' for applying a comment to the previous element.
106  syn match doxygenPrev +<+ contained nextgroup=doxygenBrief,doxygenBody,doxygenSpecial,doxygenStartSkip skipwhite
107
108if 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
113else
114  syn region cComment start="/\*\*\*" end="\*/" contains=@cCommentGroup,cSpaceError
115  syn region cCommentL start="////" skip="\\$" end="$" contains=@cCommentGroup,cSpaceError
116endif
117
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
121
122  "syn region doxygenBodyBit contained start=+$+
123
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
126
127  " These allow the skipping of comment continuation '*' characters.
128  syn match doxygenContinueComment contained +^\s*\*/\@!\s*+
129
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 +\*/+
133
134
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
143
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
150
151
152  " Create the single word matching special identifiers.
153
154  fun! s:DxyCreateSmallSpecial( kword, name )
155
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
168
169  syn match doxygenSmallSpecial contained +[@\\]\(\<[npcbea]\>\|\<em\>\|\<ref\>\|\<link\>\|f\$\|[$\\&<>#]\)\@=+ nextgroup=doxygenOtherLink,doxygenHyperLink,doxygenHashLink,doxygenFormula,doxygenSymbol,doxygenSpecial.*Word
170
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[{}]+
177
178  syn match doxygenErrorSpecial contained +\s+
179
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 tparam 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
185
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
194
195  syn region doxygenCodeRegion contained matchgroup=doxygenOther start=+\<code\>+ matchgroup=doxygenOther end=+[\\@]\@<=\<endcode\>+ contains=doxygenCodeRegionSpecial,doxygenContinueComment,doxygenErrorComment,@NoSpell
196  syn match doxygenCodeRegionSpecial contained +[\\@]\(endcode\>\)\@=+
197
198  syn region doxygenVerbatimRegion contained matchgroup=doxygenOther start=+\<verbatim\>+ matchgroup=doxygenOther end=+[\\@]\@<=\<endverbatim\>+ contains=doxygenVerbatimRegionSpecial,doxygenContinueComment,doxygenErrorComment,@NoSpell
199  syn match doxygenVerbatimRegionSpecial contained +[\\@]\(endverbatim\>\)\@=+
200
201  if exists('b:current_syntax')
202    let b:doxygen_syntax_save=b:current_syntax
203    unlet b:current_syntax
204  endif
205
206  syn include @Dotx syntax/dot.vim
207
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
214
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\>\)\@=+
217
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
222
223  syn keyword doxygenOther contained par nextgroup=doxygenHeaderLine
224  syn region doxygenHeaderLine start=+.+ end=+^+ contained skipwhite nextgroup=doxygenSpecialMultilineDesc
225
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
230
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\>+
234
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
243
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
249
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
254
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
258
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
264
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
271
272  " Handle special symbol identifiers  @$, @\, @$ etc
273  syn match doxygenSymbol contained +[$\\&<>#n]+
274
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 +[_^]+
281
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
284
285  " Add TODO hilighting.
286  syn keyword doxygenTODO contained TODO README XXX FIXME
287
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\);"
297
298  syn cluster doxygenHtmlGroup contains=doxygenHtmlCode,doxygenHtmlBold,doxygenHtmlUnderline,doxygenHtmlItalic,doxygenHtmlSpecial,doxygenHtmlTag,doxygenHtmlLink
299
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
304
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
313
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
323
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
332
333  syn region doxygenHtmlCode contained start="\c<code\>" end="\c</code>"me=e-7 contains=@doxygenHtmlTop,@NoSpell
334
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.*
343
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
349
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
355
356  try
357    "let did_doxygen_syntax_inits = &background
358    hi doxygen_Dummy guifg=black
359
360    fun! s:Doxygen_Hilights_Base()
361      SynLink doxygenHtmlSpecial Special
362      SynLink doxygenHtmlVar Type
363      SynLink doxygenHtmlExpr String
364
365      SynLink doxygenSmallSpecial SpecialChar
366
367      SynLink doxygenSpecialCodeWord doxygenSmallSpecial
368      SynLink doxygenSpecialBoldWord doxygenSmallSpecial
369      SynLink doxygenSpecialEmphasisedWord doxygenSmallSpecial
370      SynLink doxygenSpecialArgumentWord doxygenSmallSpecial
371
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()
384
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
403
404          elseif has('gui_win32') || has('gui_win16') || has('gui_win95')
405
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
468
469    call s:Doxygen_Hilights()
470
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
477
478
479    SynLink doxygenBody                   Comment
480    SynLink doxygenLine                   doxygenBody
481    SynLink doxygenTODO                   Todo
482    SynLink doxygenOtherTODO              Todo
483    SynLink doxygenOtherWARN              Todo
484    SynLink doxygenOtherBUG               Todo
485
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
498
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
524
525    SynLink doxygenPage                   doxygenSpecial
526    SynLink doxygenPagePage               doxygenBOther
527    SynLink doxygenPageIdent              doxygenParamName
528    SynLink doxygenPageDesc               doxygenSpecialTypeOnelineDesc
529
530    SynLink doxygenSpecialIdent           doxygenPageIdent
531    SynLink doxygenSpecialSectionDesc     doxygenSpecialMultilineDesc
532
533    SynLink doxygenSpecialRefWord         doxygenOther
534    SynLink doxygenRefWord                doxygenPageIdent
535    SynLink doxygenContinueLinkComment    doxygenComment
536
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
548
549    SynLink doxygenParamDirection              StorageClass
550
551
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
565
566  finally
567    if s:my_synlink | delcommand SynLink | endif
568    if s:my_syncolor | delcommand SynColor | endif
569  endtry
570
571  if &syntax=='idl'
572    syn cluster idlCommentable add=doxygenComment,doxygenCommentL
573  endif
574
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 "\*/"
582
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
588
589finally
590  let &cpo = s:cpo_save
591  unlet s:cpo_save
592endtry
593
594" vim:et sw=2 sts=2
595