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