10b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
20b57cec5SDimitry Andric// Define command classes.
30b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
40b57cec5SDimitry Andric
50b57cec5SDimitry Andricclass Command<string name> {
60b57cec5SDimitry Andric  string Name = name;
70b57cec5SDimitry Andric  string EndCommandName = "";
80b57cec5SDimitry Andric
90b57cec5SDimitry Andric  int NumArgs = 0;
100b57cec5SDimitry Andric
110b57cec5SDimitry Andric  bit IsInlineCommand = 0;
120b57cec5SDimitry Andric
130b57cec5SDimitry Andric  bit IsBlockCommand = 0;
140b57cec5SDimitry Andric  bit IsBriefCommand = 0;
150b57cec5SDimitry Andric  bit IsReturnsCommand = 0;
160b57cec5SDimitry Andric  bit IsParamCommand = 0;
170b57cec5SDimitry Andric  bit IsTParamCommand = 0;
180b57cec5SDimitry Andric  bit IsThrowsCommand = 0;
190b57cec5SDimitry Andric  bit IsDeprecatedCommand = 0;
200b57cec5SDimitry Andric  bit IsHeaderfileCommand = 0;
210b57cec5SDimitry Andric
220b57cec5SDimitry Andric  bit IsEmptyParagraphAllowed = 0;
230b57cec5SDimitry Andric
240b57cec5SDimitry Andric  bit IsVerbatimBlockCommand = 0;
250b57cec5SDimitry Andric  bit IsVerbatimBlockEndCommand = 0;
260b57cec5SDimitry Andric  bit IsVerbatimLineCommand = 0;
270b57cec5SDimitry Andric  bit IsDeclarationCommand = 0;
280b57cec5SDimitry Andric  bit IsFunctionDeclarationCommand = 0;
290b57cec5SDimitry Andric  bit IsRecordLikeDetailCommand = 0;
300b57cec5SDimitry Andric  bit IsRecordLikeDeclarationCommand = 0;
310b57cec5SDimitry Andric}
320b57cec5SDimitry Andric
330b57cec5SDimitry Andricclass InlineCommand<string name> : Command<name> {
3481ad6265SDimitry Andric  let NumArgs = 1;
350b57cec5SDimitry Andric  let IsInlineCommand = 1;
360b57cec5SDimitry Andric}
370b57cec5SDimitry Andric
380b57cec5SDimitry Andricclass BlockCommand<string name> : Command<name> {
390b57cec5SDimitry Andric  let IsBlockCommand = 1;
400b57cec5SDimitry Andric}
410b57cec5SDimitry Andric
420b57cec5SDimitry Andricclass RecordLikeDetailCommand<string name> : BlockCommand<name> {
430b57cec5SDimitry Andric  let IsRecordLikeDetailCommand = 1;
440b57cec5SDimitry Andric}
450b57cec5SDimitry Andric
460b57cec5SDimitry Andricclass VerbatimBlockCommand<string name> : Command<name> {
470b57cec5SDimitry Andric  let EndCommandName = name;
480b57cec5SDimitry Andric  let IsVerbatimBlockCommand = 1;
490b57cec5SDimitry Andric}
500b57cec5SDimitry Andric
510b57cec5SDimitry Andricmulticlass VerbatimBlockCommand<string name, string endCommandName> {
520b57cec5SDimitry Andric  def Begin : Command<name> {
530b57cec5SDimitry Andric    let EndCommandName = endCommandName;
540b57cec5SDimitry Andric    let IsVerbatimBlockCommand = 1;
550b57cec5SDimitry Andric  }
560b57cec5SDimitry Andric
570b57cec5SDimitry Andric  def End : Command<endCommandName> {
580b57cec5SDimitry Andric    let IsVerbatimBlockEndCommand = 1;
590b57cec5SDimitry Andric  }
600b57cec5SDimitry Andric}
610b57cec5SDimitry Andric
620b57cec5SDimitry Andricclass VerbatimLineCommand<string name> : Command<name> {
630b57cec5SDimitry Andric  let IsVerbatimLineCommand = 1;
640b57cec5SDimitry Andric}
650b57cec5SDimitry Andric
6681ad6265SDimitry Andricclass PropertyCommand<string name> : Command<name> {
6781ad6265SDimitry Andric  let NumArgs = 0;
6881ad6265SDimitry Andric  let IsInlineCommand = 1;
6981ad6265SDimitry Andric}
7081ad6265SDimitry Andric
710b57cec5SDimitry Andricclass DeclarationVerbatimLineCommand<string name> :
720b57cec5SDimitry Andric      VerbatimLineCommand<name> {
730b57cec5SDimitry Andric  let IsDeclarationCommand = 1;
740b57cec5SDimitry Andric}
750b57cec5SDimitry Andric
760b57cec5SDimitry Andricclass FunctionDeclarationVerbatimLineCommand<string name> :
770b57cec5SDimitry Andric      DeclarationVerbatimLineCommand<name> {
780b57cec5SDimitry Andric  let IsFunctionDeclarationCommand = 1;
790b57cec5SDimitry Andric}
800b57cec5SDimitry Andric
810b57cec5SDimitry Andricclass RecordLikeDeclarationVerbatimLineCommand<string name> :
820b57cec5SDimitry Andric      DeclarationVerbatimLineCommand<name> {
830b57cec5SDimitry Andric  let IsRecordLikeDeclarationCommand = 1;
840b57cec5SDimitry Andric}
850b57cec5SDimitry Andric
860b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
870b57cec5SDimitry Andric// InlineCommand
880b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
890b57cec5SDimitry Andric
900b57cec5SDimitry Andricdef B      : InlineCommand<"b">;
910b57cec5SDimitry Andricdef C      : InlineCommand<"c">;
920b57cec5SDimitry Andricdef P      : InlineCommand<"p">;
930b57cec5SDimitry Andricdef A      : InlineCommand<"a">;
940b57cec5SDimitry Andricdef E      : InlineCommand<"e">;
9581ad6265SDimitry Andricdef N      : InlineCommand<"n"> { let NumArgs = 0; }
960b57cec5SDimitry Andricdef Em     : InlineCommand<"em">;
97349cc55cSDimitry Andricdef Emoji  : InlineCommand<"emoji">;
98349cc55cSDimitry Andric
99480093f4SDimitry Andricdef Anchor  : InlineCommand<"anchor">;
100349cc55cSDimitry Andricdef Ref     : InlineCommand<"ref">;
101349cc55cSDimitry Andricdef RefItem : InlineCommand<"refitem">;
102349cc55cSDimitry Andricdef Cite    : InlineCommand<"cite">;
103349cc55cSDimitry Andric
104349cc55cSDimitry Andricdef CopyBrief   : InlineCommand<"copybrief">;
105349cc55cSDimitry Andricdef CopyDetails : InlineCommand<"copydetails">;
106349cc55cSDimitry Andricdef CopyDoc     : InlineCommand<"copydoc">;
107349cc55cSDimitry Andric
108349cc55cSDimitry Andric// Typically not used inline, but they take a single word.
109349cc55cSDimitry Andricdef Extends    : InlineCommand<"extends">;
110349cc55cSDimitry Andricdef Implements : InlineCommand<"implements">;
111349cc55cSDimitry Andricdef MemberOf   : InlineCommand<"memberof">;
1120b57cec5SDimitry Andric
1130b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
1140b57cec5SDimitry Andric// BlockCommand
1150b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
1160b57cec5SDimitry Andric
1170b57cec5SDimitry Andricdef Brief : BlockCommand<"brief"> { let IsBriefCommand = 1; }
1180b57cec5SDimitry Andricdef Short : BlockCommand<"short"> { let IsBriefCommand = 1; }
1190b57cec5SDimitry Andric
1200b57cec5SDimitry Andric// Opposite of \brief, it is the default in our implementation.
1210b57cec5SDimitry Andricdef Details : BlockCommand<"details">;
1220b57cec5SDimitry Andric
1230b57cec5SDimitry Andricdef Returns : BlockCommand<"returns"> { let IsReturnsCommand = 1; }
1240b57cec5SDimitry Andricdef Return  : BlockCommand<"return"> { let IsReturnsCommand = 1; }
1250b57cec5SDimitry Andricdef Result  : BlockCommand<"result"> { let IsReturnsCommand = 1; }
1260b57cec5SDimitry Andric
1270b57cec5SDimitry Andricdef Param : BlockCommand<"param"> { let IsParamCommand = 1; }
1280b57cec5SDimitry Andric
1290b57cec5SDimitry Andric// Doxygen command for template parameter documentation.
1300b57cec5SDimitry Andricdef Tparam : BlockCommand<"tparam"> { let IsTParamCommand = 1; }
1310b57cec5SDimitry Andric
1320b57cec5SDimitry Andric// HeaderDoc command for template parameter documentation.
1330b57cec5SDimitry Andricdef Templatefield : BlockCommand<"templatefield"> { let IsTParamCommand = 1; }
1340b57cec5SDimitry Andric
1350b57cec5SDimitry Andricdef Throws    : BlockCommand<"throws"> { let IsThrowsCommand = 1; }
1360b57cec5SDimitry Andricdef Throw     : BlockCommand<"throw"> { let IsThrowsCommand = 1; }
1370b57cec5SDimitry Andricdef Exception : BlockCommand<"exception"> { let IsThrowsCommand = 1; }
1380b57cec5SDimitry Andric
1390b57cec5SDimitry Andricdef Deprecated : BlockCommand<"deprecated"> {
1400b57cec5SDimitry Andric  let IsEmptyParagraphAllowed = 1;
1410b57cec5SDimitry Andric  let IsDeprecatedCommand = 1;
1420b57cec5SDimitry Andric}
1430b57cec5SDimitry Andric
1440b57cec5SDimitry Andricdef Headerfile : BlockCommand<"headerfile"> { let IsHeaderfileCommand = 1; }
1450b57cec5SDimitry Andric
1460b57cec5SDimitry Andric// We don't do any additional semantic analysis for the following
1470b57cec5SDimitry Andric// BlockCommands.  It might be a good idea to do something extra for them, but
1480b57cec5SDimitry Andric// for now we model them as plain BlockCommands.
1490b57cec5SDimitry Andricdef Arg        : BlockCommand<"arg">;
1500b57cec5SDimitry Andricdef Attention  : BlockCommand<"attention">;
1510b57cec5SDimitry Andricdef Author     : BlockCommand<"author">;
1520b57cec5SDimitry Andricdef Authors    : BlockCommand<"authors">;
1530b57cec5SDimitry Andricdef Bug        : BlockCommand<"bug">;
1540b57cec5SDimitry Andricdef Copyright  : BlockCommand<"copyright">;
1550b57cec5SDimitry Andricdef Date       : BlockCommand<"date">;
1560b57cec5SDimitry Andricdef Invariant  : BlockCommand<"invariant">;
1570b57cec5SDimitry Andricdef Li         : BlockCommand<"li">;
1580b57cec5SDimitry Andricdef Note       : BlockCommand<"note">;
1590b57cec5SDimitry Andricdef Par        : BlockCommand<"par">;
1600b57cec5SDimitry Andricdef Post       : BlockCommand<"post">;
1610b57cec5SDimitry Andricdef Pre        : BlockCommand<"pre">;
1620b57cec5SDimitry Andricdef Remark     : BlockCommand<"remark">;
1630b57cec5SDimitry Andricdef Remarks    : BlockCommand<"remarks">;
16481ad6265SDimitry Andricdef Retval     : BlockCommand<"retval"> { let NumArgs = 1; }
1650b57cec5SDimitry Andricdef Sa         : BlockCommand<"sa">;
1660b57cec5SDimitry Andricdef See        : BlockCommand<"see">;
1670b57cec5SDimitry Andricdef Since      : BlockCommand<"since">;
168349cc55cSDimitry Andricdef Test       : BlockCommand<"test">;
1690b57cec5SDimitry Andricdef Todo       : BlockCommand<"todo">;
1700b57cec5SDimitry Andricdef Version    : BlockCommand<"version">;
1710b57cec5SDimitry Andricdef Warning    : BlockCommand<"warning">;
17281ad6265SDimitry Andricdef XRefItem   : BlockCommand<"xrefitem"> { let NumArgs = 3; }
1730b57cec5SDimitry Andric// HeaderDoc commands
1740b57cec5SDimitry Andricdef Abstract      : BlockCommand<"abstract"> { let IsBriefCommand = 1; }
1750b57cec5SDimitry Andricdef ClassDesign   : RecordLikeDetailCommand<"classdesign">;
1760b57cec5SDimitry Andricdef CoClass       : RecordLikeDetailCommand<"coclass">;
1770b57cec5SDimitry Andricdef Dependency    : RecordLikeDetailCommand<"dependency">;
1780b57cec5SDimitry Andricdef Discussion    : BlockCommand<"discussion">;
1790b57cec5SDimitry Andricdef Helper        : RecordLikeDetailCommand<"helper">;
1800b57cec5SDimitry Andricdef HelperClass   : RecordLikeDetailCommand<"helperclass">;
1810b57cec5SDimitry Andricdef Helps         : RecordLikeDetailCommand<"helps">;
1820b57cec5SDimitry Andricdef InstanceSize  : RecordLikeDetailCommand<"instancesize">;
1830b57cec5SDimitry Andricdef Ownership     : RecordLikeDetailCommand<"ownership">;
1840b57cec5SDimitry Andricdef Performance   : RecordLikeDetailCommand<"performance">;
1850b57cec5SDimitry Andricdef Security      : RecordLikeDetailCommand<"security">;
1860b57cec5SDimitry Andricdef SeeAlso       : BlockCommand<"seealso">;
1870b57cec5SDimitry Andricdef SuperClass    : RecordLikeDetailCommand<"superclass">;
1880b57cec5SDimitry Andric
1890b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
1900b57cec5SDimitry Andric// VerbatimBlockCommand
1910b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
1920b57cec5SDimitry Andric
1930b57cec5SDimitry Andricdefm Code      : VerbatimBlockCommand<"code", "endcode">;
1940b57cec5SDimitry Andricdefm Verbatim  : VerbatimBlockCommand<"verbatim", "endverbatim">;
195349cc55cSDimitry Andric
196349cc55cSDimitry Andricdefm DocbookOnly : VerbatimBlockCommand<"docbookonly", "enddocbookonly">;
1970b57cec5SDimitry Andricdefm Htmlonly  : VerbatimBlockCommand<"htmlonly", "endhtmlonly">;
1980b57cec5SDimitry Andricdefm Latexonly : VerbatimBlockCommand<"latexonly", "endlatexonly">;
1990b57cec5SDimitry Andricdefm Xmlonly   : VerbatimBlockCommand<"xmlonly", "endxmlonly">;
2000b57cec5SDimitry Andricdefm Manonly   : VerbatimBlockCommand<"manonly", "endmanonly">;
2010b57cec5SDimitry Andricdefm Rtfonly   : VerbatimBlockCommand<"rtfonly", "endrtfonly">;
2020b57cec5SDimitry Andric
2030b57cec5SDimitry Andricdefm Dot : VerbatimBlockCommand<"dot", "enddot">;
2040b57cec5SDimitry Andricdefm Msc : VerbatimBlockCommand<"msc", "endmsc">;
205349cc55cSDimitry Andricdefm Uml : VerbatimBlockCommand<"startuml", "enduml">;
206349cc55cSDimitry Andric
207349cc55cSDimitry Andric// Actually not verbatim blocks, we should also parse commands within them.
208349cc55cSDimitry Andricdefm Internal   : VerbatimBlockCommand<"internal", "endinternal">;
209349cc55cSDimitry Andric// TODO: conflicts with HeaderDoc link, /link.
210349cc55cSDimitry Andric//defm Link       : VerbatimBlockCommand<"link", "endlink">;
211349cc55cSDimitry Andricdefm ParBlock   : VerbatimBlockCommand<"parblock", "endparblock">;
212349cc55cSDimitry Andricdefm SecRefList : VerbatimBlockCommand<"secreflist", "endsecreflist">;
2130b57cec5SDimitry Andric
2140b57cec5SDimitry Andric// These three commands have special support in CommentLexer to recognize their
2150b57cec5SDimitry Andric// names.
2160b57cec5SDimitry Andricdef  FDollar  : VerbatimBlockCommand<"f$">; // Inline LaTeX formula
217349cc55cSDimitry Andricdefm FParen   : VerbatimBlockCommand<"f(", "f)">; // Inline LaTeX text
2180b57cec5SDimitry Andricdefm FBracket : VerbatimBlockCommand<"f[", "f]">; // Displayed LaTeX formula
2190b57cec5SDimitry Andricdefm FBrace   : VerbatimBlockCommand<"f{", "f}">; // LaTeX environment
2200b57cec5SDimitry Andric
2210b57cec5SDimitry Andric// HeaderDoc commands
2220b57cec5SDimitry Andricdefm Textblock    : VerbatimBlockCommand<"textblock", "/textblock">;
2230b57cec5SDimitry Andricdefm Link         : VerbatimBlockCommand<"link", "/link">;
2240b57cec5SDimitry Andric
2250b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
2260b57cec5SDimitry Andric// VerbatimLineCommand
2270b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
2280b57cec5SDimitry Andric
2290b57cec5SDimitry Andricdef Defgroup   : VerbatimLineCommand<"defgroup">;
2300b57cec5SDimitry Andricdef Ingroup    : VerbatimLineCommand<"ingroup">;
2310b57cec5SDimitry Andricdef Addtogroup : VerbatimLineCommand<"addtogroup">;
2320b57cec5SDimitry Andricdef Weakgroup  : VerbatimLineCommand<"weakgroup">;
2330b57cec5SDimitry Andricdef Name       : VerbatimLineCommand<"name">;
2340b57cec5SDimitry Andric
235349cc55cSDimitry Andric// These actually take a single word, but it's optional.
236349cc55cSDimitry Andric// And they're used on a separate line typically, not inline.
237349cc55cSDimitry Andricdef Dir  : VerbatimLineCommand<"dir">;
238349cc55cSDimitry Andricdef File : VerbatimLineCommand<"file">;
239349cc55cSDimitry Andric
2400b57cec5SDimitry Andricdef Section       : VerbatimLineCommand<"section">;
2410b57cec5SDimitry Andricdef Subsection    : VerbatimLineCommand<"subsection">;
2420b57cec5SDimitry Andricdef Subsubsection : VerbatimLineCommand<"subsubsection">;
2430b57cec5SDimitry Andricdef Paragraph     : VerbatimLineCommand<"paragraph">;
244349cc55cSDimitry Andricdef TableOfContents : VerbatimLineCommand<"tableofcontents">;
2450b57cec5SDimitry Andric
246349cc55cSDimitry Andricdef Page     : VerbatimLineCommand<"page">;
2470b57cec5SDimitry Andricdef Mainpage : VerbatimLineCommand<"mainpage">;
2480b57cec5SDimitry Andricdef Subpage  : VerbatimLineCommand<"subpage">;
2490b57cec5SDimitry Andric
2500b57cec5SDimitry Andricdef Relates     : VerbatimLineCommand<"relates">;
2510b57cec5SDimitry Andricdef Related     : VerbatimLineCommand<"related">;
2520b57cec5SDimitry Andricdef RelatesAlso : VerbatimLineCommand<"relatesalso">;
2530b57cec5SDimitry Andricdef RelatedAlso : VerbatimLineCommand<"relatedalso">;
2540b57cec5SDimitry Andric
255349cc55cSDimitry Andricdef AddIndex : VerbatimLineCommand<"addindex">;
256349cc55cSDimitry Andric
257349cc55cSDimitry Andric// These take a single argument mostly, but since they include a file they'll
258349cc55cSDimitry Andric// typically be on their own line.
259349cc55cSDimitry Andricdef DocbookInclude : VerbatimLineCommand<"docbookinclude">;
260349cc55cSDimitry Andricdef DontInclude    : VerbatimLineCommand<"dontinclude">;
261349cc55cSDimitry Andricdef Example        : VerbatimLineCommand<"example">;
262349cc55cSDimitry Andricdef HtmlInclude    : VerbatimLineCommand<"htmlinclude">;
263349cc55cSDimitry Andricdef Include        : VerbatimLineCommand<"include">;
264349cc55cSDimitry Andricdef ManInclude     : VerbatimLineCommand<"maninclude">;
265349cc55cSDimitry Andricdef LatexInclude   : VerbatimLineCommand<"latexinclude">;
266349cc55cSDimitry Andricdef RtfInclude     : VerbatimLineCommand<"rtfinclude">;
267349cc55cSDimitry Andricdef Snippet        : VerbatimLineCommand<"snippet">;
268349cc55cSDimitry Andricdef VerbInclude    : VerbatimLineCommand<"verbinclude">;
269349cc55cSDimitry Andricdef XmlInclude     : VerbatimLineCommand<"xmlinclude">;
270349cc55cSDimitry Andric
271349cc55cSDimitry Andricdef Image   : VerbatimLineCommand<"image">;
272349cc55cSDimitry Andricdef DotFile : VerbatimLineCommand<"dotfile">;
273349cc55cSDimitry Andricdef MscFile : VerbatimLineCommand<"mscfile">;
274349cc55cSDimitry Andricdef DiaFile : VerbatimLineCommand<"diafile">;
275349cc55cSDimitry Andric
276349cc55cSDimitry Andricdef Line     : VerbatimLineCommand<"line">;
277349cc55cSDimitry Andricdef Skip     : VerbatimLineCommand<"skip">;
278349cc55cSDimitry Andricdef SkipLine : VerbatimLineCommand<"skipline">;
279349cc55cSDimitry Andricdef Until    : VerbatimLineCommand<"until">;
280349cc55cSDimitry Andric
281349cc55cSDimitry Andricdef NoOp : VerbatimLineCommand<"noop">;
282349cc55cSDimitry Andric
283349cc55cSDimitry Andric// We might also build proper support for if/ifnot/else/elseif/endif.
284349cc55cSDimitry Andricdef If     : VerbatimLineCommand<"if">;
285349cc55cSDimitry Andricdef IfNot  : VerbatimLineCommand<"ifnot">;
286349cc55cSDimitry Andricdef Else   : VerbatimLineCommand<"else">;
287349cc55cSDimitry Andricdef ElseIf : VerbatimLineCommand<"elseif">;
288349cc55cSDimitry Andricdef Endif  : VerbatimLineCommand<"endif">;
289349cc55cSDimitry Andric
290349cc55cSDimitry Andric// Not treated as VerbatimBlockCommand because it spans multiple comments.
291349cc55cSDimitry Andricdef Cond    : VerbatimLineCommand<"cond">;
292349cc55cSDimitry Andricdef EndCond : VerbatimLineCommand<"endcond">;
293349cc55cSDimitry Andric
2940b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
29581ad6265SDimitry Andric// PropertyCommand
29681ad6265SDimitry Andric//===----------------------------------------------------------------------===//
29781ad6265SDimitry Andric
29881ad6265SDimitry Andricdef CallGraph       : PropertyCommand<"callgraph">;
29981ad6265SDimitry Andricdef HideCallGraph   : PropertyCommand<"hidecallgraph">;
30081ad6265SDimitry Andricdef CallerGraph     : PropertyCommand<"callergraph">;
30181ad6265SDimitry Andricdef HideCallerGraph : PropertyCommand<"hidecallergraph">;
30281ad6265SDimitry Andricdef ShowInitializer : PropertyCommand<"showinitializer">;
30381ad6265SDimitry Andricdef HideInitializer : PropertyCommand<"hideinitializer">;
30481ad6265SDimitry Andricdef ShowRefBy       : PropertyCommand<"showrefby">;
30581ad6265SDimitry Andricdef HideRefBy       : PropertyCommand<"hiderefby">;
30681ad6265SDimitry Andricdef ShowRefs        : PropertyCommand<"showrefs">;
30781ad6265SDimitry Andricdef HideRefs        : PropertyCommand<"hiderefs">;
30881ad6265SDimitry Andric
30981ad6265SDimitry Andricdef Private   : PropertyCommand<"private">;
31081ad6265SDimitry Andricdef Protected : PropertyCommand<"protected">;
31181ad6265SDimitry Andricdef Public    : PropertyCommand<"public">;
31281ad6265SDimitry Andricdef Pure      : PropertyCommand<"pure">;
31381ad6265SDimitry Andricdef Static    : PropertyCommand<"static">;
31481ad6265SDimitry Andric
31581ad6265SDimitry Andricdef NoSubgrouping    : PropertyCommand<"nosubgrouping">;
31681ad6265SDimitry Andricdef PrivateSection   : PropertyCommand<"privatesection">;
31781ad6265SDimitry Andricdef ProtectedSection : PropertyCommand<"protectedsection">;
31881ad6265SDimitry Andricdef PublicSection    : PropertyCommand<"publicsection">;
31981ad6265SDimitry Andric
32081ad6265SDimitry Andric//===----------------------------------------------------------------------===//
3210b57cec5SDimitry Andric// DeclarationVerbatimLineCommand
3220b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
3230b57cec5SDimitry Andric
3240b57cec5SDimitry Andric// Doxygen commands.
325349cc55cSDimitry Andricdef Concept   : DeclarationVerbatimLineCommand<"concept">;
3260b57cec5SDimitry Andricdef Def       : DeclarationVerbatimLineCommand<"def">;
3270b57cec5SDimitry Andricdef Fn        : DeclarationVerbatimLineCommand<"fn">;
328349cc55cSDimitry Andricdef IDLExcept : DeclarationVerbatimLineCommand<"idlexcept">;
3290b57cec5SDimitry Andricdef Namespace : DeclarationVerbatimLineCommand<"namespace">;
3300b57cec5SDimitry Andricdef Overload  : DeclarationVerbatimLineCommand<"overload">;
3310b57cec5SDimitry Andricdef Property  : DeclarationVerbatimLineCommand<"property">;
3320b57cec5SDimitry Andricdef Typedef   : DeclarationVerbatimLineCommand<"typedef">;
3330b57cec5SDimitry Andricdef Var       : DeclarationVerbatimLineCommand<"var">;
3340b57cec5SDimitry Andric
3350b57cec5SDimitry Andric// HeaderDoc commands.
3360b57cec5SDimitry Andricdef Class     : RecordLikeDeclarationVerbatimLineCommand<"class">;
3370b57cec5SDimitry Andricdef Interface : RecordLikeDeclarationVerbatimLineCommand<"interface">;
3380b57cec5SDimitry Andricdef Protocol  : RecordLikeDeclarationVerbatimLineCommand<"protocol">;
3390b57cec5SDimitry Andricdef Struct    : RecordLikeDeclarationVerbatimLineCommand<"struct">;
3400b57cec5SDimitry Andricdef Union     : RecordLikeDeclarationVerbatimLineCommand<"union">;
3410b57cec5SDimitry Andricdef Category  : DeclarationVerbatimLineCommand<"category">;
3420b57cec5SDimitry Andricdef Template  : DeclarationVerbatimLineCommand<"template">;
3430b57cec5SDimitry Andricdef Function  : FunctionDeclarationVerbatimLineCommand<"function">;
3440b57cec5SDimitry Andricdef FunctionGroup  : FunctionDeclarationVerbatimLineCommand<"functiongroup">;
3450b57cec5SDimitry Andricdef Method    : FunctionDeclarationVerbatimLineCommand<"method">;
3460b57cec5SDimitry Andricdef MethodGroup    : FunctionDeclarationVerbatimLineCommand<"methodgroup">;
3470b57cec5SDimitry Andricdef Callback  : FunctionDeclarationVerbatimLineCommand<"callback">;
3480b57cec5SDimitry Andricdef Const     : DeclarationVerbatimLineCommand<"const">;
3490b57cec5SDimitry Andricdef Constant  : DeclarationVerbatimLineCommand<"constant">;
3500b57cec5SDimitry Andricdef Enum      : DeclarationVerbatimLineCommand<"enum">;
351