1 class Comment<bit abstract = 0> { 2 bit Abstract = abstract; 3 } 4 5 class DComment<Comment base, bit abstract = 0> : Comment<abstract> { 6 Comment Base = base; 7 } 8 9 def 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 16 def 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 24 def VerbatimBlockLineComment : Comment; 25 26 def FullComment : Comment; 27 28