1 class Tag<string spelling> { 2 string Spelling = spelling; 3 bit EndTagOptional = 0; 4 bit EndTagForbidden = 0; 5 } 6 7 def Em : Tag<"em">; 8 def Strong : Tag<"strong">; 9 def Tt : Tag<"tt">; 10 def I : Tag<"i">; 11 def B : Tag<"b">; 12 def Big : Tag<"big">; 13 def Small : Tag<"small">; 14 def Strike : Tag<"strike">; 15 def S : Tag<"s">; 16 def U : Tag<"u">; 17 def Font : Tag<"font">; 18 def A : Tag<"a">; 19 def Hr : Tag<"hr"> { let EndTagForbidden = 1; } 20 def Div : Tag<"div">; 21 def Span : Tag<"span">; 22 def H1 : Tag<"h1">; 23 def H2 : Tag<"h2">; 24 def H3 : Tag<"h3">; 25 def H4 : Tag<"h4">; 26 def H5 : Tag<"h5">; 27 def H6 : Tag<"h6">; 28 def Code : Tag<"code">; 29 def Blockquote : Tag<"blockquote">; 30 def Sub : Tag<"sub">; 31 def Sup : Tag<"sup">; 32 def Img : Tag<"img"> { let EndTagForbidden = 1; } 33 def P : Tag<"p"> { let EndTagOptional = 1; } 34 def Br : Tag<"br"> { let EndTagForbidden = 1; } 35 def Pre : Tag<"pre">; 36 def Ins : Tag<"ins">; 37 def Del : Tag<"del">; 38 def Ul : Tag<"ul">; 39 def Ol : Tag<"ol">; 40 def Li : Tag<"li"> { let EndTagOptional = 1; } 41 def Dl : Tag<"dl">; 42 def Dt : Tag<"dt"> { let EndTagOptional = 1; } 43 def Dd : Tag<"dd"> { let EndTagOptional = 1; } 44 def Table : Tag<"table">; 45 def Caption : Tag<"caption">; 46 def Thead : Tag<"thead"> { let EndTagOptional = 1; } 47 def Tfoot : Tag<"tfoot"> { let EndTagOptional = 1; } 48 def Tbody : Tag<"tbody"> { let EndTagOptional = 1; } 49 def Colgroup : Tag<"colgroup"> { let EndTagOptional = 1; } 50 def Col : Tag<"col"> { let EndTagForbidden = 1; } 51 def Tr : Tag<"tr"> { let EndTagOptional = 1; } 52 def Th : Tag<"th"> { let EndTagOptional = 1; } 53 def Td : Tag<"td"> { let EndTagOptional = 1; } 54 55 // Define a blacklist of attributes that are not safe to pass through to HTML 56 // output if the input is untrusted. 57 // 58 // FIXME: this should be a whitelist. When changing this to a whitelist, don't 59 // forget to change the default in the TableGen backend. 60 class Attribute<string spelling> { 61 string Spelling = spelling; 62 bit IsSafeToPassThrough = 1; 63 } 64 class EventHandlerContentAttribute<string spelling> : Attribute<spelling> { 65 let IsSafeToPassThrough = 0; 66 } 67 68