class Tag<string spelling> { string Spelling = spelling; bit EndTagOptional = 0; bit EndTagForbidden = 0; } def Em : Tag<"em">; def Strong : Tag<"strong">; def Tt : Tag<"tt">; def I : Tag<"i">; def B : Tag<"b">; def Big : Tag<"big">; def Small : Tag<"small">; def Strike : Tag<"strike">; def S : Tag<"s">; def U : Tag<"u">; def Font : Tag<"font">; def A : Tag<"a">; def Hr : Tag<"hr"> { let EndTagForbidden = 1; } def Div : Tag<"div">; def Span : Tag<"span">; def H1 : Tag<"h1">; def H2 : Tag<"h2">; def H3 : Tag<"h3">; def H4 : Tag<"h4">; def H5 : Tag<"h5">; def H6 : Tag<"h6">; def Code : Tag<"code">; def Blockquote : Tag<"blockquote">; def Sub : Tag<"sub">; def Sup : Tag<"sup">; def Img : Tag<"img"> { let EndTagForbidden = 1; } def P : Tag<"p"> { let EndTagOptional = 1; } def Br : Tag<"br"> { let EndTagForbidden = 1; } def Pre : Tag<"pre">; def Ins : Tag<"ins">; def Del : Tag<"del">; def Ul : Tag<"ul">; def Ol : Tag<"ol">; def Li : Tag<"li"> { let EndTagOptional = 1; } def Dl : Tag<"dl">; def Dt : Tag<"dt"> { let EndTagOptional = 1; } def Dd : Tag<"dd"> { let EndTagOptional = 1; } def Table : Tag<"table">; def Caption : Tag<"caption">; def Thead : Tag<"thead"> { let EndTagOptional = 1; } def Tfoot : Tag<"tfoot"> { let EndTagOptional = 1; } def Tbody : Tag<"tbody"> { let EndTagOptional = 1; } def Colgroup : Tag<"colgroup"> { let EndTagOptional = 1; } def Col : Tag<"col"> { let EndTagForbidden = 1; } def Tr : Tag<"tr"> { let EndTagOptional = 1; } def Th : Tag<"th"> { let EndTagOptional = 1; } def Td : Tag<"td"> { let EndTagOptional = 1; } // Define a list of attributes that are not safe to pass through to HTML // output if the input is untrusted. // // FIXME: This should be a list of attributes that _are_ safe. When changing // this change, don't forget to change the default in the TableGen backend. class Attribute<string spelling> { string Spelling = spelling; bit IsSafeToPassThrough = 1; } class EventHandlerContentAttribute<string spelling> : Attribute<spelling> { let IsSafeToPassThrough = 0; }