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