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