blob: 4ae3a93b634bca275d9682dbf0a5e78fb94886db [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
188 let b:doxygen_syntax_save=b:current_syntax
189 unlet b:current_syntax
190 syn include @Dotx syntax/dot.vim
191 let b:current_syntax=b:doxygen_syntax_save
192 unlet b:doxygen_syntax_save
193 syn region doxygenDotRegion contained matchgroup=doxygenOther start=+\<dot\>+ matchgroup=doxygenOther end=+[\\@]\@<=\<enddot\>+ contains=doxygenDotRegionSpecial,doxygenErrorComment,doxygenContinueComment,@Dotx
194 syn match doxygenDotRegionSpecial contained +[\\@]\(enddot\>\)\@=+
195
196 " Match single line identifiers.
197 syn keyword doxygenBOther contained class enum file fn mainpage interface
198 \ namespace struct typedef union var def name
199 \ nextgroup=doxygenSpecialTypeOnelineDesc
200
201 syn keyword doxygenOther contained par nextgroup=doxygenHeaderLine
202 syn region doxygenHeaderLine start=+.+ end=+^+ contained skipwhite nextgroup=doxygenSpecialMultilineDesc
203
204 syn keyword doxygenOther contained arg author date deprecated li return see invariant note post pre remarks since test nextgroup=doxygenSpecialMultilineDesc
205 syn keyword doxygenOtherTODO contained todo attention nextgroup=doxygenSpecialMultilineDesc
206 syn keyword doxygenOtherWARN contained warning nextgroup=doxygenSpecialMultilineDesc
207 syn keyword doxygenOtherBUG contained bug nextgroup=doxygenSpecialMultilineDesc
208
209 " Handle \link, \endlink, hilighting the link-to and the link text bits separately.
210 syn region doxygenOtherLink matchgroup=doxygenOther start=+link+ end=+[\@]\@<=endlink\>+ contained contains=doxygenLinkWord,doxygenContinueComment,doxygenLinkError,doxygenEndlinkSpecial
211 syn match doxygenEndlinkSpecial contained +[\\@]\zeendlink\>+
212
213 syn match doxygenLinkWord "[_a-zA-Z:#()][_a-z0-9A-Z:#()]*\>" contained skipnl nextgroup=doxygenLinkRest,doxygenContinueLinkComment
214 syn match doxygenLinkRest +[^*@\\]\|\*/\@!\|[@\\]\(endlink\>\)\@!+ contained skipnl nextgroup=doxygenLinkRest,doxygenContinueLinkComment
215 syn match doxygenContinueLinkComment contained +^\s*\*\=[^/]+me=e-1 nextgroup=doxygenLinkRest
216 syn match doxygenLinkError "\*/" contained
217 " #Link hilighting.
218 syn match doxygenHashLink /\([a-zA-Z_][0-9a-zA-Z_]*\)\?#\(\.[0-9a-zA-Z_]\@=\|[a-zA-Z0-9_]\+\|::\|()\)\+/ contained contains=doxygenHashSpecial
219 syn match doxygenHashSpecial /#/ contained
220 syn match doxygenHyperLink /\(\s\|^\s*\*\?\)\@<=\(http\|https\|ftp\):\/\/[-0-9a-zA-Z_?&=+#%/.!':;@]\+/ contained
221
222 " Handle \page. This does not use doxygenBrief.
223 syn match doxygenPage "[\\@]page\>"me=s+1 contained skipwhite nextgroup=doxygenPagePage
224 syn keyword doxygenPagePage page contained skipwhite nextgroup=doxygenPageIdent
225 syn region doxygenPageDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend skipwhite skipnl nextgroup=doxygenBody
226 syn match doxygenPageIdent "\<[a-zA-Z0-9]\+\>" contained nextgroup=doxygenPageDesc
227
228 " Handle section
229 syn keyword doxygenOther defgroup section subsection subsubsection weakgroup contained skipwhite nextgroup=doxygenSpecialIdent
230 syn region doxygenSpecialSectionDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend skipwhite skipnl nextgroup=doxygenContinueComment
231 syn match doxygenSpecialIdent "\<[a-zA-Z0-9]\+\>" contained nextgroup=doxygenSpecialSectionDesc
232
233 " Does the one-line description for the one-line type identifiers.
234 syn region doxygenSpecialTypeOnelineDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend
235 syn region doxygenSpecialOnelineDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend
236
237 " Handle the multiline description for the multiline type identifiers.
238 " Continue until an 'empty' line (can contain a '*' continuation) or until the
239 " next whole-line @ command \ command.
240 syn region doxygenSpecialMultilineDesc start=+.\++ skip=+^\s*\(\*/\@!\s*\)\=\(\<\|[@\\]\<\([pcbea]\>\|em\>\|ref\|link\>\>\|f\$\|[$\\&<>#]\)\|[^ \t\\@*]\)+ end=+^+ contained contains=doxygenSpecialContinueComment,doxygenSmallSpecial,doxygenHyperLink,doxygenHashLink,@doxygenHtmlGroup skipwhite keepend
241 syn match doxygenSpecialContinueComment contained +^\s*\*/\@!\s*+ nextgroup=doxygenSpecial skipwhite
242
243 " Handle special cases 'bold' and 'group'
244 syn keyword doxygenBold contained bold nextgroup=doxygenSpecialHeading
245 syn keyword doxygenBriefWord contained brief nextgroup=doxygenBriefLine skipwhite
246 syn match doxygenSpecialHeading +.\++ contained skipwhite
247 syn keyword doxygenGroup contained group nextgroup=doxygenGroupName skipwhite
248 syn keyword doxygenGroupName contained +\k\++ nextgroup=doxygenSpecialOnelineDesc skipwhite
249
250 " Handle special symbol identifiers @$, @\, @$ etc
251 syn match doxygenSymbol contained +[$\\&<>#]+
252
253 " Simplistic handling of formula regions
254 syn region doxygenFormula contained matchgroup=doxygenFormulaEnds start=+f\$+ end=+[@\\]f\$+ contains=doxygenFormulaSpecial,doxygenFormulaOperator
255 syn match doxygenFormulaSpecial contained +[@\\]\(f[^$]\|[^f]\)+me=s+1 nextgroup=doxygenFormulaKeyword,doxygenFormulaEscaped
256 syn match doxygenFormulaEscaped contained "."
257 syn match doxygenFormulaKeyword contained "[a-z]\+"
258 syn match doxygenFormulaOperator contained +[_^]+
259
260 syn region doxygenFormula contained matchgroup=doxygenFormulaEnds start=+f\[+ end=+[@\\]f]+ contains=doxygenFormulaSpecial,doxygenFormulaOperator,doxygenAtom
261 syn region doxygenAtom contained transparent matchgroup=doxygenFormulaOperator start=+{+ end=+}+ contains=doxygenAtom,doxygenFormulaSpecial,doxygenFormulaOperator
262
263 " Add TODO hilighting.
264 syn keyword doxygenTODO contained TODO README XXX FIXME
265
266 " Supported HTML subset. Not perfect, but okay.
267 syn case ignore
268 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
269 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
270 syn keyword doxygenHtmlVar contained src alt longdesc name height width usemap ismap href type nextgroup=doxygenHtmlEqu skipwhite
271 syn match doxygenHtmlEqu contained +=+ nextgroup=doxygenHtmlExpr skipwhite
272 syn match doxygenHtmlExpr contained +"\(\\.\|[^"]\)*"\|'\(\\.\|[^']\)*'+ nextgroup=doxygenHtmlVar skipwhite
273 syn case match
274 syn match doxygenHtmlSpecial contained "&\(copy\|quot\|[AEIOUYaeiouy]uml\|[AEIOUYaeiouy]acute\|[AEIOUaeiouy]grave\|[AEIOUaeiouy]circ\|[ANOano]tilde\|szlig\|[Aa]ring\|nbsp\|gt\|lt\|amp\);"
275
276 syn cluster doxygenHtmlGroup contains=doxygenHtmlCode,doxygenHtmlBold,doxygenHtmlUnderline,doxygenHtmlItalic,doxygenHtmlSpecial,doxygenHtmlTag,doxygenHtmlLink
277
278 syn cluster doxygenHtmlTop contains=@Spell,doxygenHtmlSpecial,doxygenHtmlTag,doxygenContinueComment
279 " Html Support
280 syn region doxygenHtmlLink contained start=+<[aA]\>\s*\(\n\s*\*\s*\)\=\(\(name\|href\)=\("[^"]*"\|'[^']*'\)\)\=\s*>+ end=+</[aA]>+me=e-4 contains=@doxygenHtmlTop
281 hi link doxygenHtmlLink Underlined
282
283 syn region doxygenHtmlBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderline,doxygenHtmlBoldItalic
284 syn region doxygenHtmlBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderline,doxygenHtmlBoldItalic
285 syn region doxygenHtmlBoldUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderlineItalic
286 syn region doxygenHtmlBoldItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldItalicUnderline
287 syn region doxygenHtmlBoldItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop,doxygenHtmlBoldItalicUnderline
288 syn region doxygenHtmlBoldUnderlineItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop
289 syn region doxygenHtmlBoldUnderlineItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop
290 syn region doxygenHtmlBoldItalicUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlBoldUnderlineItalic
291
292 syn region doxygenHtmlUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlUnderlineBold,doxygenHtmlUnderlineItalic
293 syn region doxygenHtmlUnderlineBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlUnderlineBoldItalic
294 syn region doxygenHtmlUnderlineBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop,doxygenHtmlUnderlineBoldItalic
295 syn region doxygenHtmlUnderlineItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop,htmUnderlineItalicBold
296 syn region doxygenHtmlUnderlineItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop,htmUnderlineItalicBold
297 syn region doxygenHtmlUnderlineItalicBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop
298 syn region doxygenHtmlUnderlineItalicBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop
299 syn region doxygenHtmlUnderlineBoldItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop
300 syn region doxygenHtmlUnderlineBoldItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop
301
302 syn region doxygenHtmlItalic contained start="\c<i\>" end="\c</i>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlItalicBold,doxygenHtmlItalicUnderline
303 syn region doxygenHtmlItalic contained start="\c<em\>" end="\c</em>"me=e-5 contains=@doxygenHtmlTop
304 syn region doxygenHtmlItalicBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlItalicBoldUnderline
305 syn region doxygenHtmlItalicBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop,doxygenHtmlItalicBoldUnderline
306 syn region doxygenHtmlItalicBoldUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop
307 syn region doxygenHtmlItalicUnderline contained start="\c<u\>" end="\c</u>"me=e-4 contains=@doxygenHtmlTop,doxygenHtmlItalicUnderlineBold
308 syn region doxygenHtmlItalicUnderlineBold contained start="\c<b\>" end="\c</b>"me=e-4 contains=@doxygenHtmlTop
309 syn region doxygenHtmlItalicUnderlineBold contained start="\c<strong\>" end="\c</strong>"me=e-9 contains=@doxygenHtmlTop
310
311 syn region doxygenHtmlCode contained start="\c<code\>" end="\c</code>"me=e-7 contains=@doxygenHtmlTop
312
313 " Prevent the doxygen contained matches from leaking into the c groups.
314 syn cluster cParenGroup add=doxygen.*
315 syn cluster cParenGroup remove=doxygenComment,doxygenCommentL
316 syn cluster cPreProcGroup add=doxygen.*
317 syn cluster cMultiGroup add=doxygen.*
318 syn cluster rcParenGroup add=doxygen.*
319 syn cluster rcParenGroup remove=doxygenComment,doxygenCommentL
320 syn cluster rcGroup add=doxygen.*
321
322 let s:my_syncolor=0
323 if !exists(':SynColor')
324 command -nargs=+ SynColor hi def <args>
325 let s:my_syncolor=1
326 endif
327
328 let s:my_synlink=0
329 if !exists(':SynLink')
330 command -nargs=+ SynLink hi def link <args>
331 let s:my_synlink=1
332 endif
333
334 try
335 "let did_doxygen_syntax_inits = &background
336 hi doxygen_Dummy guifg=black
337
338 fun! s:Doxygen_Hilights_Base()
339 SynLink doxygenHtmlSpecial Special
340 SynLink doxygenHtmlVar Type
341 SynLink doxygenHtmlExpr String
342
343 SynLink doxygenSmallSpecial SpecialChar
344
345 SynLink doxygenSpecialCodeWord doxygenSmallSpecial
346 SynLink doxygenSpecialBoldWord doxygenSmallSpecial
347 SynLink doxygenSpecialEmphasisedWord doxygenSmallSpecial
348 SynLink doxygenSpecialArgumentWord doxygenSmallSpecial
349
350 " SynColor doxygenFormulaKeyword cterm=bold ctermfg=DarkMagenta guifg=DarkMagenta gui=bold
351 SynLink doxygenFormulaKeyword Keyword
352 "SynColor doxygenFormulaEscaped ctermfg=DarkMagenta guifg=DarkMagenta gui=bold
353 SynLink doxygenFormulaEscaped Special
354 SynLink doxygenFormulaOperator Operator
355 SynLink doxygenFormula Statement
356 SynLink doxygenSymbol Constant
357 SynLink doxygenSpecial Special
358 SynLink doxygenFormulaSpecial Special
359 "SynColor doxygenFormulaSpecial ctermfg=DarkBlue guifg=DarkBlue
360 endfun
361 call s:Doxygen_Hilights_Base()
362
363 fun! s:Doxygen_Hilights()
364 " Pick a sensible default for 'codeword'.
365 let font=''
366 if exists('g:doxygen_codeword_font')
367 if g:doxygen_codeword_font !~ '\<\k\+='
368 let font='font='.g:doxygen_codeword_font
369 else
370 let font=g:doxygen_codeword_font
371 endif
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000372 else
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000373 " Try and pick a font (only some platforms have been tested).
374 if has('gui_running')
375 if has('gui_gtk2')
376 if &guifont == ''
377 let font="font='FreeSerif 12'"
378 else
379 let font="font='".substitute(&guifont, '^.\{-}\([0-9]\+\)$', 'FreeSerif \1','')."'"
380 endif
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000381
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000382 elseif has('gui_win32') || has('gui_win16') || has('gui_win95')
383 if &guifont == ''
384 let font='font=Lucida_Console:h10'
385 else
386 let font='font='.substitute(&guifont, '^[^:]*', 'Lucida_Console','')
387 endif
388 elseif has('gui_athena') || has('gui_gtk') || &guifont=~'^\(-[^-]\+\)\{14}'
389 if &guifont == ''
390 let font='font=-b&h-lucidatypewriter-medium-r-normal-*-*-140-*-*-m-*-iso8859-1'
391 else
392 " let font='font='.substitute(&guifont,'^\(-[^-]\+\)\{7}-\([0-9]\+\).*', '-b\&h-lucidatypewriter-medium-r-normal-*-*-\2-*-*-m-*-iso8859-1','')
393 " The above line works, but it is hard to expect the combination of
394 " the two fonts will look good.
395 endif
396 elseif has('gui_kde')
397 " let font='font=Bitstream\ Vera\ Sans\ Mono/12/-1/5/50/0/0/0/0/0'
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000398 endif
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000399 endif
400 endif
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000401 if font=='' | let font='gui=bold' | endif
402 exe 'SynColor doxygenCodeWord term=bold cterm=bold '.font
403 if (exists('g:doxygen_enhanced_color') && g:doxygen_enhanced_color) || (exists('g:doxygen_enhanced_colour') && g:doxygen_enhanced_colour)
404 if &background=='light'
405 SynColor doxygenComment ctermfg=DarkRed guifg=DarkRed
406 SynColor doxygenBrief cterm=bold ctermfg=Cyan guifg=DarkBlue gui=bold
407 SynColor doxygenBody ctermfg=DarkBlue guifg=DarkBlue
408 SynColor doxygenSpecialTypeOnelineDesc cterm=bold ctermfg=DarkRed guifg=firebrick3 gui=bold
409 SynColor doxygenBOther cterm=bold ctermfg=DarkMagenta guifg=#aa50aa gui=bold
410 SynColor doxygenParam ctermfg=DarkGray guifg=#aa50aa
411 SynColor doxygenParamName cterm=italic ctermfg=DarkBlue guifg=DeepSkyBlue4 gui=italic,bold
412 SynColor doxygenSpecialOnelineDesc cterm=bold ctermfg=DarkCyan guifg=DodgerBlue3 gui=bold
413 SynColor doxygenSpecialHeading cterm=bold ctermfg=DarkBlue guifg=DeepSkyBlue4 gui=bold
414 SynColor doxygenPrev ctermfg=DarkGreen guifg=DarkGreen
415 else
416 SynColor doxygenComment ctermfg=LightRed guifg=LightRed
417 SynColor doxygenBrief cterm=bold ctermfg=Cyan ctermbg=darkgrey guifg=LightBlue gui=Bold,Italic
418 SynColor doxygenBody ctermfg=Cyan guifg=LightBlue
419 SynColor doxygenSpecialTypeOnelineDesc cterm=bold ctermfg=Red guifg=firebrick3 gui=bold
420 SynColor doxygenBOther cterm=bold ctermfg=Magenta guifg=#aa50aa gui=bold
421 SynColor doxygenParam ctermfg=LightGray guifg=LightGray
422 SynColor doxygenParamName cterm=italic ctermfg=LightBlue guifg=LightBlue gui=italic,bold
423 SynColor doxygenSpecialOnelineDesc cterm=bold ctermfg=LightCyan guifg=LightCyan gui=bold
424 SynColor doxygenSpecialHeading cterm=bold ctermfg=LightBlue guifg=LightBlue gui=bold
425 SynColor doxygenPrev ctermfg=LightGreen guifg=LightGreen
426 endif
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000427 else
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000428 SynLink doxygenComment SpecialComment
429 SynLink doxygenBrief Statement
430 SynLink doxygenBody Comment
431 SynLink doxygenSpecialTypeOnelineDesc Statement
432 SynLink doxygenBOther Constant
433 SynLink doxygenParam SpecialComment
434 SynLink doxygenParamName Underlined
435 SynLink doxygenSpecialOnelineDesc Statement
436 SynLink doxygenSpecialHeading Statement
437 SynLink doxygenPrev SpecialComment
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000438 endif
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000439 endfun
440
441 call s:Doxygen_Hilights()
442
443 " This is still a proposal, but won't do any harm.
444 aug doxygengroup
445 au!
446 au Syntax UserColor_reset nested call s:Doxygen_Hilights_Base()
447 au Syntax UserColor_{on,reset,enable} nested call s:Doxygen_Hilights()
448 aug END
449
450
451 SynLink doxygenBody Comment
452 SynLink doxygenTODO Todo
453 SynLink doxygenOtherTODO Todo
454 SynLink doxygenOtherWARN Todo
455 SynLink doxygenOtherBUG Todo
456
457 SynLink doxygenErrorSpecial Error
458 SynLink doxygenErrorEnd Error
459 SynLink doxygenErrorComment Error
460 SynLink doxygenLinkError Error
461 SynLink doxygenBriefSpecial doxygenSpecial
462 SynLink doxygenHashSpecial doxygenSpecial
463 SynLink doxygenGroupDefineSpecial doxygenSpecial
464 SynLink doxygenEndlinkSpecial doxygenSpecial
465 SynLink doxygenCodeRegionSpecial doxygenSpecial
466 SynLink doxygenVerbatimRegionSpecial doxygenSpecial
467 SynLink doxygenGroupDefine doxygenParam
468
469 SynLink doxygenSpecialMultilineDesc doxygenSpecialOnelineDesc
470 SynLink doxygenFormulaEnds doxygenSpecial
471 SynLink doxygenBold doxygenParam
472 SynLink doxygenBriefWord doxygenParam
473 SynLink doxygenRetval doxygenParam
474 SynLink doxygenOther doxygenParam
475 SynLink doxygenStart doxygenComment
476 SynLink doxygenStart2 doxygenStart
477 SynLink doxygenComment2 doxygenComment
478 SynLink doxygenCommentL doxygenComment
479 SynLink doxygenContinueComment doxygenComment
480 SynLink doxygenSpecialContinueComment doxygenComment
481 SynLink doxygenSkipComment doxygenComment
482 SynLink doxygenEndComment doxygenComment
483 SynLink doxygenStartL doxygenComment
484 SynLink doxygenBriefEndComment doxygenComment
485 SynLink doxygenPrevL doxygenPrev
486 SynLink doxygenBriefL doxygenBrief
487 SynLink doxygenBriefLine doxygenBrief
488 SynLink doxygenHeaderLine doxygenSpecialHeading
489 SynLink doxygenStartSkip doxygenContinueComment
490 SynLink doxygenLinkWord doxygenParamName
491 SynLink doxygenLinkRest doxygenSpecialMultilineDesc
492 SynLink doxygenHyperLink doxygenLinkWord
493 SynLink doxygenHashLink doxygenLinkWord
494
495 SynLink doxygenPage doxygenSpecial
496 SynLink doxygenPagePage doxygenBOther
497 SynLink doxygenPageIdent doxygenParamName
498 SynLink doxygenPageDesc doxygenSpecialTypeOnelineDesc
499
500 SynLink doxygenSpecialIdent doxygenPageIdent
501 SynLink doxygenSpecialSectionDesc doxygenSpecialMultilineDesc
502
503 SynLink doxygenSpecialRefWord doxygenOther
504 SynLink doxygenRefWord doxygenPageIdent
505 SynLink doxygenContinueLinkComment doxygenComment
506
507 SynLink doxygenHtmlCh Function
508 SynLink doxygenHtmlCmd Statement
509 SynLink doxygenHtmlBoldItalicUnderline doxygenHtmlBoldUnderlineItalic
510 SynLink doxygenHtmlUnderlineBold doxygenHtmlBoldUnderline
511 SynLink doxygenHtmlUnderlineItalicBold doxygenHtmlBoldUnderlineItalic
512 SynLink doxygenHtmlUnderlineBoldItalic doxygenHtmlBoldUnderlineItalic
513 SynLink doxygenHtmlItalicUnderline doxygenHtmlUnderlineItalic
514 SynLink doxygenHtmlItalicBold doxygenHtmlBoldItalic
515 SynLink doxygenHtmlItalicBoldUnderline doxygenHtmlBoldUnderlineItalic
516 SynLink doxygenHtmlItalicUnderlineBold doxygenHtmlBoldUnderlineItalic
517 SynLink doxygenHtmlLink Underlined
518
519 SynLink doxygenParamDirection StorageClass
520
521
522 if !exists("doxygen_my_rendering") && !exists("html_my_rendering")
523 SynColor doxygenBoldWord term=bold cterm=bold gui=bold
524 SynColor doxygenEmphasisedWord term=italic cterm=italic gui=italic
525 SynLink doxygenArgumentWord doxygenEmphasisedWord
526 SynLink doxygenHtmlCode doxygenCodeWord
527 SynLink doxygenHtmlBold doxygenBoldWord
528 SynColor doxygenHtmlBoldUnderline term=bold,underline cterm=bold,underline gui=bold,underline
529 SynColor doxygenHtmlBoldItalic term=bold,italic cterm=bold,italic gui=bold,italic
530 SynColor doxygenHtmlBoldUnderlineItalic term=bold,italic,underline cterm=bold,italic,underline gui=bold,italic,underline
531 SynColor doxygenHtmlUnderline term=underline cterm=underline gui=underline
532 SynColor doxygenHtmlUnderlineItalic term=italic,underline cterm=italic,underline gui=italic,underline
533 SynColor doxygenHtmlItalic term=italic cterm=italic gui=italic
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000534 endif
Bram Moolenaarb21e5842006-04-16 18:30:08 +0000535
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000536 finally
537 if s:my_synlink | delcommand SynLink | endif
538 if s:my_syncolor | delcommand SynColor | endif
539 endtry
Bram Moolenaarb21e5842006-04-16 18:30:08 +0000540
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000541 if &syntax=='idl'
542 syn cluster idlCommentable add=doxygenComment,doxygenCommentL
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000543 endif
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000544
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000545 "syn sync clear
546 "syn sync maxlines=500
547 "syn sync minlines=50
548 syn sync match doxygenComment groupthere cComment "/\@<!/\*"
549 syn sync match doxygenSyncComment grouphere doxygenComment "/\@<!/\*[*!]"
550 "syn sync match doxygenSyncComment grouphere doxygenComment "/\*[*!]" contains=doxygenStart,doxygenTODO keepend
551 syn sync match doxygenSyncEndComment groupthere NONE "\*/"
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000552
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000553 if !exists('b:current_syntax')
554 let b:current_syntax = "doxygen"
555 else
556 let b:current_syntax = b:current_syntax.'.doxygen'
557 endif
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000558
Bram Moolenaara93fa7e2006-04-17 22:14:47 +0000559finally
560 let &cpo = s:cpo_save
561 unlet s:cpo_save
562endtry
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000563
Bram Moolenaarc6249bb2006-04-15 20:25:09 +0000564" vim:et sw=2 sts=2