home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / runtime / syntax / doxygen.vim < prev    next >
Encoding:
Text File  |  2010-08-15  |  35.2 KB  |  595 lines

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