blob: 5e3126ea4f754ef52f4b30ac23890b2d96e6f8ff [file] [log] [blame]
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00001" DoxyGen syntax hilighting extension for c/c++/idl/java
2" Language: doxygen on top of c, cpp, idl, java
3" Maintainer: Michael Geddes <michaelrgeddes@optushome.com.au>
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
Bram Moolenaara93fa7e2006-04-17 22:14:47 +000051try
52 set cpo&vim
Bram Moolenaarc6249bb2006-04-15 20:25:09 +000053
Bram Moolenaara93fa7e2006-04-17 22:14:47 +000054 " Start of Doxygen syntax hilighting:
55 "
Bram Moolenaarc6249bb2006-04-15 20:25:09 +000056
Bram Moolenaara93fa7e2006-04-17 22:14:47 +000057 " 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
Bram Moolenaarc6249bb2006-04-15 20:25:09 +000062
Bram Moolenaara93fa7e2006-04-17 22:14:47 +000063 " 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
Bram Moolenaarc6249bb2006-04-15 20:25:09 +000067
Bram Moolenaara93fa7e2006-04-17 22:14:47 +000068 " 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
Bram Moolenaarc6249bb2006-04-15 20:25:09 +000072
Bram Moolenaara93fa7e2006-04-17 22:14:47 +000073 " 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
Bram Moolenaarb21e5842006-04-16 18:30:08 +000076 else
Bram Moolenaara93fa7e2006-04-17 22:14:47 +000077 syn match doxygenStart +/\*[*!]+ contained nextgroup=doxygenBody,doxygenPrev,doxygenFindBriefSpecial,doxygenStartSpecial,doxygenStartSkip,doxygenPage skipwhite skipnl
Bram Moolenaarc6249bb2006-04-15 20:25:09 +000078 endif
Bram Moolenaara93fa7e2006-04-17 22:14:47 +000079 syn match doxygenStartL +//[/!]+ contained nextgroup=doxygenPrevL,doxygenBriefL,doxygenSpecial skipwhite
Bram Moolenaarc6249bb2006-04-15 20:25:09 +000080
Bram Moolenaara93fa7e2006-04-17 22:14:47 +000081 " 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
Bram Moolenaarc6249bb2006-04-15 20:25:09 +000083
Bram Moolenaara93fa7e2006-04-17 22:14:47 +000084 " 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'
Bram Moolenaarc6249bb2006-04-15 20:25:09 +000089
Bram Moolenaara93fa7e2006-04-17 22:14:47 +000090 syn match doxygenBriefEndComment +\*/+ contained
Bram Moolenaarc6249bb2006-04-15 20:25:09 +000091
Bram Moolenaara93fa7e2006-04-17 22:14:47 +000092 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'
Bram Moolenaarc6249bb2006-04-15 20:25:09 +000093
Bram Moolenaara93fa7e2006-04-17 22:14:47 +000094 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'
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000146 endfun
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000147 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
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000155
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000156 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
Bram Moolenaareb3593b2006-04-22 22:33:57 +0000188 if exists('b:current_syntax')
189 let b:doxygen_syntax_save=b:current_syntax
190 unlet b:current_syntax
191 endif
192
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000193 syn include @Dotx syntax/dot.vim
Bram Moolenaareb3593b2006-04-22 22:33:57 +0000194
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
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000202 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
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000381 else
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000382 " 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
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000390
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000391 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'
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000407 endif
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000408 endif
409 endif
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000410 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
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000436 else
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000437 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
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000447 endif
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000448 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
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000543 endif
Bram Moolenaarb21e5842006-04-16 18:30:08 +0000544
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000545 finally
546 if s:my_synlink | delcommand SynLink | endif
547 if s:my_syncolor | delcommand SynColor | endif
548 endtry
Bram Moolenaarb21e5842006-04-16 18:30:08 +0000549
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000550 if &syntax=='idl'
551 syn cluster idlCommentable add=doxygenComment,doxygenCommentL
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000552 endif
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000553
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000554 "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 "\*/"
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000561
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000562 if !exists('b:current_syntax')
563 let b:current_syntax = "doxygen"
564 else
565 let b:current_syntax = b:current_syntax.'.doxygen'
566 endif
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000567
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000568finally
569 let &cpo = s:cpo_save
570 unlet s:cpo_save
571endtry
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000572
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000573" vim:et sw=2 sts=2