1class Comment<bit abstract = 0> { 2 bit Abstract = abstract; 3} 4 5class DComment<Comment base, bit abstract = 0> : Comment<abstract> { 6 Comment Base = base; 7} 8 9def InlineContentComment : Comment<1>; 10 def TextComment : DComment<InlineContentComment>; 11 def InlineCommandComment : DComment<InlineContentComment>; 12 def HTMLTagComment : DComment<InlineContentComment, 1>; 13 def HTMLStartTagComment : DComment<HTMLTagComment>; 14 def HTMLEndTagComment : DComment<HTMLTagComment>; 15 16def BlockContentComment : Comment<1>; 17 def ParagraphComment : DComment<BlockContentComment>; 18 def BlockCommandComment : DComment<BlockContentComment>; 19 def ParamCommandComment : DComment<BlockCommandComment>; 20 def TParamCommandComment : DComment<BlockCommandComment>; 21 def VerbatimBlockComment : DComment<BlockCommandComment>; 22 def VerbatimLineComment : DComment<BlockCommandComment>; 23 24def VerbatimBlockLineComment : Comment; 25 26def FullComment : Comment; 27 28