xref: /vim-8.2.3635/runtime/syntax/doxygen.vim (revision 6c391a74)
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