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