htree 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. data.tar.gz.sig +4 -0
  2. data/Makefile +20 -0
  3. data/Manifest +58 -0
  4. data/README +61 -0
  5. data/Rakefile +37 -0
  6. data/htree.gemspec +32 -0
  7. data/init.rb +1 -0
  8. data/install.rb +112 -0
  9. data/lib/htree.rb +97 -0
  10. data/lib/htree/container.rb +8 -0
  11. data/lib/htree/context.rb +69 -0
  12. data/lib/htree/display.rb +46 -0
  13. data/lib/htree/doc.rb +149 -0
  14. data/lib/htree/elem.rb +262 -0
  15. data/lib/htree/encoder.rb +217 -0
  16. data/lib/htree/equality.rb +219 -0
  17. data/lib/htree/extract_text.rb +37 -0
  18. data/lib/htree/fstr.rb +32 -0
  19. data/lib/htree/gencode.rb +193 -0
  20. data/lib/htree/htmlinfo.rb +672 -0
  21. data/lib/htree/inspect.rb +108 -0
  22. data/lib/htree/leaf.rb +92 -0
  23. data/lib/htree/loc.rb +369 -0
  24. data/lib/htree/modules.rb +49 -0
  25. data/lib/htree/name.rb +122 -0
  26. data/lib/htree/output.rb +212 -0
  27. data/lib/htree/parse.rb +410 -0
  28. data/lib/htree/raw_string.rb +127 -0
  29. data/lib/htree/regexp-util.rb +19 -0
  30. data/lib/htree/rexml.rb +131 -0
  31. data/lib/htree/scan.rb +176 -0
  32. data/lib/htree/tag.rb +113 -0
  33. data/lib/htree/template.rb +961 -0
  34. data/lib/htree/text.rb +115 -0
  35. data/lib/htree/traverse.rb +497 -0
  36. data/test-all.rb +5 -0
  37. data/test/assign.html +1 -0
  38. data/test/template.html +4 -0
  39. data/test/test-attr.rb +67 -0
  40. data/test/test-charset.rb +79 -0
  41. data/test/test-context.rb +29 -0
  42. data/test/test-display_xml.rb +45 -0
  43. data/test/test-elem-new.rb +101 -0
  44. data/test/test-encoder.rb +53 -0
  45. data/test/test-equality.rb +55 -0
  46. data/test/test-extract_text.rb +18 -0
  47. data/test/test-gencode.rb +27 -0
  48. data/test/test-leaf.rb +25 -0
  49. data/test/test-loc.rb +60 -0
  50. data/test/test-namespace.rb +147 -0
  51. data/test/test-output.rb +133 -0
  52. data/test/test-parse.rb +115 -0
  53. data/test/test-raw_string.rb +17 -0
  54. data/test/test-rexml.rb +70 -0
  55. data/test/test-scan.rb +153 -0
  56. data/test/test-security.rb +37 -0
  57. data/test/test-subnode.rb +142 -0
  58. data/test/test-template.rb +313 -0
  59. data/test/test-text.rb +43 -0
  60. data/test/test-traverse.rb +69 -0
  61. metadata +166 -0
  62. metadata.gz.sig +1 -0
@@ -0,0 +1,32 @@
1
+ require 'htree/modules'
2
+
3
+ module HTree
4
+ # :stopdoc:
5
+ def HTree.with_frozen_string_hash
6
+ if Thread.current[:htree_frozen_string_hash]
7
+ yield
8
+ else
9
+ begin
10
+ Thread.current[:htree_frozen_string_hash] = {}
11
+ yield
12
+ ensure
13
+ Thread.current[:htree_frozen_string_hash] = nil
14
+ end
15
+ end
16
+ end
17
+
18
+ def HTree.frozen_string(str)
19
+ if h = Thread.current[:htree_frozen_string_hash]
20
+ if s = h[str]
21
+ s
22
+ else
23
+ str = str.dup.freeze unless str.frozen?
24
+ h[str] = str
25
+ end
26
+ else
27
+ str = str.dup.freeze unless str.frozen?
28
+ str
29
+ end
30
+ end
31
+ # :startdoc:
32
+ end
@@ -0,0 +1,193 @@
1
+ require 'htree/encoder'
2
+ require 'htree/output'
3
+
4
+ # :stopdoc:
5
+
6
+ module HTree
7
+ module Node
8
+ def generate_xml_output_code(outvar='out', contextvar='top_context')
9
+ namespaces = HTree::Context::DefaultNamespaces.dup
10
+ namespaces.default = nil
11
+ context = Context.new(namespaces)
12
+ gen = HTree::GenCode.new(outvar, contextvar)
13
+ output(gen, context)
14
+ gen.finish
15
+ end
16
+ end
17
+
18
+ class GenCode
19
+ def initialize(outvar, contextvar, internal_encoding=Encoder.internal_charset)
20
+ @outvar = outvar
21
+ @contextvar = contextvar
22
+ @state = :none
23
+ @buffer = ''
24
+ @internal_encoding = internal_encoding
25
+ @code = ''
26
+ @html_output = nil
27
+ end
28
+ attr_reader :outvar, :contextvar
29
+
30
+ def html_output?
31
+ @html_output
32
+ end
33
+
34
+ def html_output=(flag)
35
+ @html_output = flag
36
+ end
37
+
38
+ class CDATABuffer
39
+ def initialize
40
+ @buf = ''
41
+ end
42
+
43
+ def html_output?
44
+ true
45
+ end
46
+
47
+ def not_valid_for_html_cdata(*args)
48
+ raise ArgumentError, "CDATA content only accept texts."
49
+ end
50
+ alias output_slash_if_xml not_valid_for_html_cdata
51
+ alias output_cdata_content not_valid_for_html_cdata
52
+ alias output_dynamic_attvalue not_valid_for_html_cdata
53
+
54
+ def output_string(string)
55
+ @buf << string
56
+ end
57
+
58
+ def output_text(string)
59
+ @buf << string
60
+ end
61
+
62
+ ChRef = {
63
+ '&' => '&amp;',
64
+ '<' => '&lt;',
65
+ '>' => '&gt;',
66
+ '"' => '&quot;',
67
+ }
68
+
69
+ def output_dynamic_text(string)
70
+ if string.respond_to? :rcdata
71
+ @buf << string.rcdata.gsub(/[<>]/) { ChRef[$&] }
72
+ else
73
+ @buf << string.to_s.gsub(/[&<>]/) { ChRef[$&] }
74
+ end
75
+ end
76
+
77
+ def result
78
+ if %r{[<>]} =~ @buf
79
+ raise ArgumentError, "cdata contains non-text : #{@buf.inspect}"
80
+ end
81
+ str = HTree::Text.parse_pcdata(@buf).to_s
82
+ if %r{</} =~ str
83
+ raise ArgumentError, "cdata contains '</' : #{str.inspect}"
84
+ end
85
+ str
86
+ end
87
+ end
88
+
89
+ def output_cdata_content(content, context)
90
+ tmp_outvar = @outvar + '_tmp'
91
+ output_logic_line "#{@outvar} = #{@outvar}.output_cdata_content_do(#{@outvar},"
92
+ output_logic_line "lambda { #{@outvar} = HTree::GenCode::CDATABuffer.new },"
93
+ output_logic_line "lambda {"
94
+ content.each {|n| n.output(self, context) }
95
+ output_logic_line "},"
96
+ output_logic_line "lambda {|#{tmp_outvar}| #{tmp_outvar}.output_string(#{@outvar}.result) })"
97
+ end
98
+
99
+ def output_slash_if_xml
100
+ output_logic_line "#{@outvar}.output_slash_if_xml"
101
+ end
102
+
103
+ def output_dynamic_text(expr)
104
+ flush_buffer
105
+ @code << "#{@outvar}.output_dynamic_text((#{expr}))\n"
106
+ end
107
+
108
+ def output_dynamic_tree(expr, context_expr)
109
+ flush_buffer
110
+ @code << "(#{expr}).output(#{@outvar}, #{context_expr})\n"
111
+ end
112
+
113
+ def output_dynamic_attvalue(expr)
114
+ flush_buffer
115
+ @code << "#{@outvar}.output_dynamic_attvalue((#{expr}))\n"
116
+ end
117
+
118
+ def output_logic_line(line)
119
+ flush_buffer
120
+ @code << line << "\n"
121
+ end
122
+
123
+ def output_string(str)
124
+ return if str.empty?
125
+ if @state != :string
126
+ flush_buffer
127
+ @state = :string
128
+ end
129
+ @buffer << str
130
+ end
131
+
132
+ def output_text(str)
133
+ return if str.empty?
134
+ if /\A[\s\x21-\x7e]+\z/ =~ str && @state == :string
135
+ # Assumption: external charset can represent white spaces and
136
+ # ASCII printable.
137
+ output_string(str)
138
+ return
139
+ end
140
+ if @state != :text
141
+ flush_buffer
142
+ @state = :text
143
+ end
144
+ @buffer << str
145
+ end
146
+
147
+ ChRef = {
148
+ '&' => '&amp;',
149
+ '>' => '&gt;',
150
+ '<' => '&lt;',
151
+ '"' => '&quot;',
152
+ }
153
+ def output_xmlns(namespaces)
154
+ unless namespaces.empty?
155
+ flush_buffer
156
+ namespaces.each {|k, v|
157
+ if k
158
+ ks = k.dump
159
+ aname = "xmlns:#{k}"
160
+ else
161
+ ks = "nil"
162
+ aname = "xmlns"
163
+ end
164
+ @code << "if #{@contextvar}.namespace_uri(#{ks}) != #{v.dump}\n"
165
+ output_string " #{aname}=\""
166
+ output_text v.gsub(/[&<>"]/) {|s| ChRef[s] }
167
+ output_string '"'
168
+ flush_buffer
169
+ @code << "end\n"
170
+ }
171
+ end
172
+ end
173
+
174
+ def flush_buffer
175
+ return if @buffer.empty?
176
+ case @state
177
+ when :string
178
+ @code << "#{@outvar}.output_string #{@buffer.dump}\n"
179
+ @buffer = ''
180
+ when :text
181
+ @code << "#{@outvar}.output_text #{@buffer.dump}\n"
182
+ @buffer = ''
183
+ end
184
+ end
185
+
186
+ def finish
187
+ flush_buffer
188
+ @code
189
+ end
190
+ end
191
+ end
192
+
193
+ # :startdoc:
@@ -0,0 +1,672 @@
1
+ module HTree
2
+ # The code below is auto-generated. Don't edit manually.
3
+ # :stopdoc:
4
+ NamedCharacters =
5
+ {"AElig"=>198, "Aacute"=>193, "Acirc"=>194, "Agrave"=>192, "Alpha"=>913,
6
+ "Aring"=>197, "Atilde"=>195, "Auml"=>196, "Beta"=>914, "Ccedil"=>199,
7
+ "Chi"=>935, "Dagger"=>8225, "Delta"=>916, "ETH"=>208, "Eacute"=>201,
8
+ "Ecirc"=>202, "Egrave"=>200, "Epsilon"=>917, "Eta"=>919, "Euml"=>203,
9
+ "Gamma"=>915, "Iacute"=>205, "Icirc"=>206, "Igrave"=>204, "Iota"=>921,
10
+ "Iuml"=>207, "Kappa"=>922, "Lambda"=>923, "Mu"=>924, "Ntilde"=>209, "Nu"=>925,
11
+ "OElig"=>338, "Oacute"=>211, "Ocirc"=>212, "Ograve"=>210, "Omega"=>937,
12
+ "Omicron"=>927, "Oslash"=>216, "Otilde"=>213, "Ouml"=>214, "Phi"=>934,
13
+ "Pi"=>928, "Prime"=>8243, "Psi"=>936, "Rho"=>929, "Scaron"=>352, "Sigma"=>931,
14
+ "THORN"=>222, "Tau"=>932, "Theta"=>920, "Uacute"=>218, "Ucirc"=>219,
15
+ "Ugrave"=>217, "Upsilon"=>933, "Uuml"=>220, "Xi"=>926, "Yacute"=>221,
16
+ "Yuml"=>376, "Zeta"=>918, "aacute"=>225, "acirc"=>226, "acute"=>180,
17
+ "aelig"=>230, "agrave"=>224, "alefsym"=>8501, "alpha"=>945, "amp"=>38,
18
+ "and"=>8743, "ang"=>8736, "apos"=>39, "aring"=>229, "asymp"=>8776,
19
+ "atilde"=>227, "auml"=>228, "bdquo"=>8222, "beta"=>946, "brvbar"=>166,
20
+ "bull"=>8226, "cap"=>8745, "ccedil"=>231, "cedil"=>184, "cent"=>162,
21
+ "chi"=>967, "circ"=>710, "clubs"=>9827, "cong"=>8773, "copy"=>169,
22
+ "crarr"=>8629, "cup"=>8746, "curren"=>164, "dArr"=>8659, "dagger"=>8224,
23
+ "darr"=>8595, "deg"=>176, "delta"=>948, "diams"=>9830, "divide"=>247,
24
+ "eacute"=>233, "ecirc"=>234, "egrave"=>232, "empty"=>8709, "emsp"=>8195,
25
+ "ensp"=>8194, "epsilon"=>949, "equiv"=>8801, "eta"=>951, "eth"=>240,
26
+ "euml"=>235, "euro"=>8364, "exist"=>8707, "fnof"=>402, "forall"=>8704,
27
+ "frac12"=>189, "frac14"=>188, "frac34"=>190, "frasl"=>8260, "gamma"=>947,
28
+ "ge"=>8805, "gt"=>62, "hArr"=>8660, "harr"=>8596, "hearts"=>9829,
29
+ "hellip"=>8230, "iacute"=>237, "icirc"=>238, "iexcl"=>161, "igrave"=>236,
30
+ "image"=>8465, "infin"=>8734, "int"=>8747, "iota"=>953, "iquest"=>191,
31
+ "isin"=>8712, "iuml"=>239, "kappa"=>954, "lArr"=>8656, "lambda"=>955,
32
+ "lang"=>9001, "laquo"=>171, "larr"=>8592, "lceil"=>8968, "ldquo"=>8220,
33
+ "le"=>8804, "lfloor"=>8970, "lowast"=>8727, "loz"=>9674, "lrm"=>8206,
34
+ "lsaquo"=>8249, "lsquo"=>8216, "lt"=>60, "macr"=>175, "mdash"=>8212,
35
+ "micro"=>181, "middot"=>183, "minus"=>8722, "mu"=>956, "nabla"=>8711,
36
+ "nbsp"=>160, "ndash"=>8211, "ne"=>8800, "ni"=>8715, "not"=>172, "notin"=>8713,
37
+ "nsub"=>8836, "ntilde"=>241, "nu"=>957, "oacute"=>243, "ocirc"=>244,
38
+ "oelig"=>339, "ograve"=>242, "oline"=>8254, "omega"=>969, "omicron"=>959,
39
+ "oplus"=>8853, "or"=>8744, "ordf"=>170, "ordm"=>186, "oslash"=>248,
40
+ "otilde"=>245, "otimes"=>8855, "ouml"=>246, "para"=>182, "part"=>8706,
41
+ "permil"=>8240, "perp"=>8869, "phi"=>966, "pi"=>960, "piv"=>982,
42
+ "plusmn"=>177, "pound"=>163, "prime"=>8242, "prod"=>8719, "prop"=>8733,
43
+ "psi"=>968, "quot"=>34, "rArr"=>8658, "radic"=>8730, "rang"=>9002,
44
+ "raquo"=>187, "rarr"=>8594, "rceil"=>8969, "rdquo"=>8221, "real"=>8476,
45
+ "reg"=>174, "rfloor"=>8971, "rho"=>961, "rlm"=>8207, "rsaquo"=>8250,
46
+ "rsquo"=>8217, "sbquo"=>8218, "scaron"=>353, "sdot"=>8901, "sect"=>167,
47
+ "shy"=>173, "sigma"=>963, "sigmaf"=>962, "sim"=>8764, "spades"=>9824,
48
+ "sub"=>8834, "sube"=>8838, "sum"=>8721, "sup"=>8835, "sup1"=>185, "sup2"=>178,
49
+ "sup3"=>179, "supe"=>8839, "szlig"=>223, "tau"=>964, "there4"=>8756,
50
+ "theta"=>952, "thetasym"=>977, "thinsp"=>8201, "thorn"=>254, "tilde"=>732,
51
+ "times"=>215, "trade"=>8482, "uArr"=>8657, "uacute"=>250, "uarr"=>8593,
52
+ "ucirc"=>251, "ugrave"=>249, "uml"=>168, "upsih"=>978, "upsilon"=>965,
53
+ "uuml"=>252, "weierp"=>8472, "xi"=>958, "yacute"=>253, "yen"=>165,
54
+ "yuml"=>255, "zeta"=>950, "zwj"=>8205, "zwnj"=>8204}
55
+
56
+
57
+ NamedCharactersPattern = /\A(?-mix:AElig|Aacute|Acirc|Agrave|Alpha|Aring|Atilde|Auml|Beta|Ccedil|Chi|Dagger|Delta|ETH|Eacute|Ecirc|Egrave|Epsilon|Eta|Euml|Gamma|Iacute|Icirc|Igrave|Iota|Iuml|Kappa|Lambda|Mu|Ntilde|Nu|OElig|Oacute|Ocirc|Ograve|Omega|Omicron|Oslash|Otilde|Ouml|Phi|Pi|Prime|Psi|Rho|Scaron|Sigma|THORN|Tau|Theta|Uacute|Ucirc|Ugrave|Upsilon|Uuml|Xi|Yacute|Yuml|Zeta|aacute|acirc|acute|aelig|agrave|alefsym|alpha|amp|and|ang|apos|aring|asymp|atilde|auml|bdquo|beta|brvbar|bull|cap|ccedil|cedil|cent|chi|circ|clubs|cong|copy|crarr|cup|curren|dArr|dagger|darr|deg|delta|diams|divide|eacute|ecirc|egrave|empty|emsp|ensp|epsilon|equiv|eta|eth|euml|euro|exist|fnof|forall|frac12|frac14|frac34|frasl|gamma|ge|gt|hArr|harr|hearts|hellip|iacute|icirc|iexcl|igrave|image|infin|int|iota|iquest|isin|iuml|kappa|lArr|lambda|lang|laquo|larr|lceil|ldquo|le|lfloor|lowast|loz|lrm|lsaquo|lsquo|lt|macr|mdash|micro|middot|minus|mu|nabla|nbsp|ndash|ne|ni|not|notin|nsub|ntilde|nu|oacute|ocirc|oelig|ograve|oline|omega|omicron|oplus|or|ordf|ordm|oslash|otilde|otimes|ouml|para|part|permil|perp|phi|pi|piv|plusmn|pound|prime|prod|prop|psi|quot|rArr|radic|rang|raquo|rarr|rceil|rdquo|real|reg|rfloor|rho|rlm|rsaquo|rsquo|sbquo|scaron|sdot|sect|shy|sigma|sigmaf|sim|spades|sub|sube|sum|sup|sup1|sup2|sup3|supe|szlig|tau|there4|theta|thetasym|thinsp|thorn|tilde|times|trade|uArr|uacute|uarr|ucirc|ugrave|uml|upsih|upsilon|uuml|weierp|xi|yacute|yen|yuml|zeta|zwj|zwnj)\z/
58
+
59
+ ElementContent =
60
+ {"h6"=>
61
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
62
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
63
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
64
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
65
+ "tt", "u", "var"],
66
+ "object"=>
67
+ ["a", "abbr", "acronym", "address", "applet", "b", "basefont", "bdo", "big",
68
+ "blockquote", "br", "button", "center", "cite", "code", "dfn", "dir", "div",
69
+ "dl", "em", "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6",
70
+ "hr", "i", "iframe", "img", "input", "isindex", "kbd", "label", "map",
71
+ "menu", "noframes", "noscript", "object", "ol", "p", "param", "pre", "q",
72
+ "s", "samp", "script", "select", "small", "span", "strike", "strong", "sub",
73
+ "sup", "table", "textarea", "tt", "u", "ul", "var"],
74
+ "dl"=>["dd", "dt"],
75
+ "p"=>
76
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
77
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
78
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
79
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
80
+ "tt", "u", "var"],
81
+ "acronym"=>
82
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
83
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
84
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
85
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
86
+ "tt", "u", "var"],
87
+ "code"=>
88
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
89
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
90
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
91
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
92
+ "tt", "u", "var"],
93
+ "ul"=>["li"],
94
+ "tt"=>
95
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
96
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
97
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
98
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
99
+ "tt", "u", "var"],
100
+ "label"=>
101
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
102
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
103
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
104
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
105
+ "tt", "u", "var"],
106
+ "form"=>
107
+ ["a", "abbr", "acronym", "address", "applet", "b", "basefont", "bdo", "big",
108
+ "blockquote", "br", "button", "center", "cite", "code", "dfn", "dir", "div",
109
+ "dl", "em", "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6",
110
+ "hr", "i", "iframe", "img", "input", "isindex", "kbd", "label", "map",
111
+ "menu", "noframes", "noscript", "object", "ol", "p", "pre", "q", "s",
112
+ "samp", "script", "select", "small", "span", "strike", "strong", "sub",
113
+ "sup", "table", "textarea", "tt", "u", "ul", "var"],
114
+ "q"=>
115
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
116
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
117
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
118
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
119
+ "tt", "u", "var"],
120
+ "thead"=>["tr"],
121
+ "area"=>:EMPTY,
122
+ "td"=>
123
+ ["a", "abbr", "acronym", "address", "applet", "b", "basefont", "bdo", "big",
124
+ "blockquote", "br", "button", "center", "cite", "code", "dfn", "dir", "div",
125
+ "dl", "em", "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6",
126
+ "hr", "i", "iframe", "img", "input", "isindex", "kbd", "label", "map",
127
+ "menu", "noframes", "noscript", "object", "ol", "p", "pre", "q", "s",
128
+ "samp", "script", "select", "small", "span", "strike", "strong", "sub",
129
+ "sup", "table", "textarea", "tt", "u", "ul", "var"],
130
+ "title"=>[],
131
+ "dir"=>["li"],
132
+ "s"=>
133
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
134
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
135
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
136
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
137
+ "tt", "u", "var"],
138
+ "ol"=>["li"],
139
+ "hr"=>:EMPTY,
140
+ "applet"=>
141
+ ["a", "abbr", "acronym", "address", "applet", "b", "basefont", "bdo", "big",
142
+ "blockquote", "br", "button", "center", "cite", "code", "dfn", "dir", "div",
143
+ "dl", "em", "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6",
144
+ "hr", "i", "iframe", "img", "input", "isindex", "kbd", "label", "map",
145
+ "menu", "noframes", "noscript", "object", "ol", "p", "param", "pre", "q",
146
+ "s", "samp", "script", "select", "small", "span", "strike", "strong", "sub",
147
+ "sup", "table", "textarea", "tt", "u", "ul", "var"],
148
+ "table"=>["caption", "col", "colgroup", "tbody", "tfoot", "thead", "tr"],
149
+ "legend"=>
150
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
151
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
152
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
153
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
154
+ "tt", "u", "var"],
155
+ "cite"=>
156
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
157
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
158
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
159
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
160
+ "tt", "u", "var"],
161
+ "a"=>
162
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
163
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
164
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
165
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
166
+ "tt", "u", "var"],
167
+ "html"=>
168
+ ["a", "abbr", "acronym", "address", "applet", "b", "base", "basefont", "bdo",
169
+ "big", "blockquote", "body", "br", "button", "center", "cite", "code",
170
+ "dfn", "dir", "div", "dl", "em", "fieldset", "font", "form", "h1", "h2",
171
+ "h3", "h4", "h5", "h6", "head", "hr", "i", "iframe", "img", "input",
172
+ "isindex", "kbd", "label", "map", "menu", "noframes", "noscript", "object",
173
+ "ol", "p", "pre", "q", "s", "samp", "script", "select", "small", "span",
174
+ "strike", "strong", "sub", "sup", "table", "textarea", "title", "tt", "u",
175
+ "ul", "var"],
176
+ "u"=>
177
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
178
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
179
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
180
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
181
+ "tt", "u", "var"],
182
+ "blockquote"=>
183
+ ["a", "abbr", "acronym", "address", "applet", "b", "basefont", "bdo", "big",
184
+ "blockquote", "br", "button", "center", "cite", "code", "dfn", "dir", "div",
185
+ "dl", "em", "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6",
186
+ "hr", "i", "iframe", "img", "input", "isindex", "kbd", "label", "map",
187
+ "menu", "noframes", "noscript", "object", "ol", "p", "pre", "q", "s",
188
+ "samp", "script", "select", "small", "span", "strike", "strong", "sub",
189
+ "sup", "table", "textarea", "tt", "u", "ul", "var"],
190
+ "center"=>
191
+ ["a", "abbr", "acronym", "address", "applet", "b", "basefont", "bdo", "big",
192
+ "blockquote", "br", "button", "center", "cite", "code", "dfn", "dir", "div",
193
+ "dl", "em", "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6",
194
+ "hr", "i", "iframe", "img", "input", "isindex", "kbd", "label", "map",
195
+ "menu", "noframes", "noscript", "object", "ol", "p", "pre", "q", "s",
196
+ "samp", "script", "select", "small", "span", "strike", "strong", "sub",
197
+ "sup", "table", "textarea", "tt", "u", "ul", "var"],
198
+ "b"=>
199
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
200
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
201
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
202
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
203
+ "tt", "u", "var"],
204
+ "base"=>:EMPTY,
205
+ "th"=>
206
+ ["a", "abbr", "acronym", "address", "applet", "b", "basefont", "bdo", "big",
207
+ "blockquote", "br", "button", "center", "cite", "code", "dfn", "dir", "div",
208
+ "dl", "em", "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6",
209
+ "hr", "i", "iframe", "img", "input", "isindex", "kbd", "label", "map",
210
+ "menu", "noframes", "noscript", "object", "ol", "p", "pre", "q", "s",
211
+ "samp", "script", "select", "small", "span", "strike", "strong", "sub",
212
+ "sup", "table", "textarea", "tt", "u", "ul", "var"],
213
+ "link"=>:EMPTY,
214
+ "var"=>
215
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
216
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
217
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
218
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
219
+ "tt", "u", "var"],
220
+ "samp"=>
221
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
222
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
223
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
224
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
225
+ "tt", "u", "var"],
226
+ "div"=>
227
+ ["a", "abbr", "acronym", "address", "applet", "b", "basefont", "bdo", "big",
228
+ "blockquote", "br", "button", "center", "cite", "code", "dfn", "dir", "div",
229
+ "dl", "em", "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6",
230
+ "hr", "i", "iframe", "img", "input", "isindex", "kbd", "label", "map",
231
+ "menu", "noframes", "noscript", "object", "ol", "p", "pre", "q", "s",
232
+ "samp", "script", "select", "small", "span", "strike", "strong", "sub",
233
+ "sup", "table", "textarea", "tt", "u", "ul", "var"],
234
+ "textarea"=>[],
235
+ "pre"=>
236
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
237
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
238
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
239
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
240
+ "tt", "u", "var"],
241
+ "head"=>["base", "isindex", "title"],
242
+ "span"=>
243
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
244
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
245
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
246
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
247
+ "tt", "u", "var"],
248
+ "br"=>:EMPTY,
249
+ "script"=>:CDATA,
250
+ "noframes"=>
251
+ ["a", "abbr", "acronym", "address", "applet", "b", "basefont", "bdo", "big",
252
+ "blockquote", "br", "button", "center", "cite", "code", "dfn", "dir", "div",
253
+ "dl", "em", "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6",
254
+ "hr", "i", "iframe", "img", "input", "isindex", "kbd", "label", "map",
255
+ "menu", "noframes", "noscript", "object", "ol", "p", "pre", "q", "s",
256
+ "samp", "script", "select", "small", "span", "strike", "strong", "sub",
257
+ "sup", "table", "textarea", "tt", "u", "ul", "var"],
258
+ "style"=>:CDATA,
259
+ "meta"=>:EMPTY,
260
+ "dt"=>
261
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
262
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
263
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
264
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
265
+ "tt", "u", "var"],
266
+ "option"=>[],
267
+ "kbd"=>
268
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
269
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
270
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
271
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
272
+ "tt", "u", "var"],
273
+ "big"=>
274
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
275
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
276
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
277
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
278
+ "tt", "u", "var"],
279
+ "tfoot"=>["tr"],
280
+ "sup"=>
281
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
282
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
283
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
284
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
285
+ "tt", "u", "var"],
286
+ "bdo"=>
287
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
288
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
289
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
290
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
291
+ "tt", "u", "var"],
292
+ "isindex"=>:EMPTY,
293
+ "dfn"=>
294
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
295
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
296
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
297
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
298
+ "tt", "u", "var"],
299
+ "fieldset"=>
300
+ ["a", "abbr", "acronym", "address", "applet", "b", "basefont", "bdo", "big",
301
+ "blockquote", "br", "button", "center", "cite", "code", "dfn", "dir", "div",
302
+ "dl", "em", "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6",
303
+ "hr", "i", "iframe", "img", "input", "isindex", "kbd", "label", "legend",
304
+ "map", "menu", "noframes", "noscript", "object", "ol", "p", "pre", "q", "s",
305
+ "samp", "script", "select", "small", "span", "strike", "strong", "sub",
306
+ "sup", "table", "textarea", "tt", "u", "ul", "var"],
307
+ "em"=>
308
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
309
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
310
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
311
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
312
+ "tt", "u", "var"],
313
+ "font"=>
314
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
315
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
316
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
317
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
318
+ "tt", "u", "var"],
319
+ "tbody"=>["tr"],
320
+ "noscript"=>
321
+ ["a", "abbr", "acronym", "address", "applet", "b", "basefont", "bdo", "big",
322
+ "blockquote", "br", "button", "center", "cite", "code", "dfn", "dir", "div",
323
+ "dl", "em", "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6",
324
+ "hr", "i", "iframe", "img", "input", "isindex", "kbd", "label", "map",
325
+ "menu", "noframes", "noscript", "object", "ol", "p", "pre", "q", "s",
326
+ "samp", "script", "select", "small", "span", "strike", "strong", "sub",
327
+ "sup", "table", "textarea", "tt", "u", "ul", "var"],
328
+ "li"=>
329
+ ["a", "abbr", "acronym", "address", "applet", "b", "basefont", "bdo", "big",
330
+ "blockquote", "br", "button", "center", "cite", "code", "dfn", "dir", "div",
331
+ "dl", "em", "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6",
332
+ "hr", "i", "iframe", "img", "input", "isindex", "kbd", "label", "map",
333
+ "menu", "noframes", "noscript", "object", "ol", "p", "pre", "q", "s",
334
+ "samp", "script", "select", "small", "span", "strike", "strong", "sub",
335
+ "sup", "table", "textarea", "tt", "u", "ul", "var"],
336
+ "col"=>:EMPTY,
337
+ "small"=>
338
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
339
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
340
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
341
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
342
+ "tt", "u", "var"],
343
+ "dd"=>
344
+ ["a", "abbr", "acronym", "address", "applet", "b", "basefont", "bdo", "big",
345
+ "blockquote", "br", "button", "center", "cite", "code", "dfn", "dir", "div",
346
+ "dl", "em", "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6",
347
+ "hr", "i", "iframe", "img", "input", "isindex", "kbd", "label", "map",
348
+ "menu", "noframes", "noscript", "object", "ol", "p", "pre", "q", "s",
349
+ "samp", "script", "select", "small", "span", "strike", "strong", "sub",
350
+ "sup", "table", "textarea", "tt", "u", "ul", "var"],
351
+ "i"=>
352
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
353
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
354
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
355
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
356
+ "tt", "u", "var"],
357
+ "menu"=>["li"],
358
+ "strong"=>
359
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
360
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
361
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
362
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
363
+ "tt", "u", "var"],
364
+ "basefont"=>:EMPTY,
365
+ "img"=>:EMPTY,
366
+ "optgroup"=>["option"],
367
+ "map"=>
368
+ ["address", "area", "blockquote", "center", "dir", "div", "dl", "fieldset",
369
+ "form", "h1", "h2", "h3", "h4", "h5", "h6", "hr", "isindex", "menu",
370
+ "noframes", "noscript", "ol", "p", "pre", "table", "ul"],
371
+ "h1"=>
372
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
373
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
374
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
375
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
376
+ "tt", "u", "var"],
377
+ "address"=>
378
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
379
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
380
+ "input", "kbd", "label", "map", "object", "p", "q", "s", "samp", "script",
381
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
382
+ "tt", "u", "var"],
383
+ "sub"=>
384
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
385
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
386
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
387
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
388
+ "tt", "u", "var"],
389
+ "param"=>:EMPTY,
390
+ "input"=>:EMPTY,
391
+ "h2"=>
392
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
393
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
394
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
395
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
396
+ "tt", "u", "var"],
397
+ "abbr"=>
398
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
399
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
400
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
401
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
402
+ "tt", "u", "var"],
403
+ "h3"=>
404
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
405
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
406
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
407
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
408
+ "tt", "u", "var"],
409
+ "strike"=>
410
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
411
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
412
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
413
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
414
+ "tt", "u", "var"],
415
+ "body"=>
416
+ ["a", "abbr", "acronym", "address", "applet", "b", "basefont", "bdo", "big",
417
+ "blockquote", "br", "button", "center", "cite", "code", "dfn", "dir", "div",
418
+ "dl", "em", "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6",
419
+ "hr", "i", "iframe", "img", "input", "isindex", "kbd", "label", "map",
420
+ "menu", "noframes", "noscript", "object", "ol", "p", "pre", "q", "s",
421
+ "samp", "script", "select", "small", "span", "strike", "strong", "sub",
422
+ "sup", "table", "textarea", "tt", "u", "ul", "var"],
423
+ "ins"=>
424
+ ["a", "abbr", "acronym", "address", "applet", "b", "basefont", "bdo", "big",
425
+ "blockquote", "br", "button", "center", "cite", "code", "dfn", "dir", "div",
426
+ "dl", "em", "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6",
427
+ "hr", "i", "iframe", "img", "input", "isindex", "kbd", "label", "map",
428
+ "menu", "noframes", "noscript", "object", "ol", "p", "pre", "q", "s",
429
+ "samp", "script", "select", "small", "span", "strike", "strong", "sub",
430
+ "sup", "table", "textarea", "tt", "u", "ul", "var"],
431
+ "button"=>
432
+ ["a", "abbr", "acronym", "address", "applet", "b", "basefont", "bdo", "big",
433
+ "blockquote", "br", "button", "center", "cite", "code", "dfn", "dir", "div",
434
+ "dl", "em", "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6",
435
+ "hr", "i", "iframe", "img", "input", "isindex", "kbd", "label", "map",
436
+ "menu", "noframes", "noscript", "object", "ol", "p", "pre", "q", "s",
437
+ "samp", "script", "select", "small", "span", "strike", "strong", "sub",
438
+ "sup", "table", "textarea", "tt", "u", "ul", "var"],
439
+ "h4"=>
440
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
441
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
442
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
443
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
444
+ "tt", "u", "var"],
445
+ "select"=>["optgroup", "option"],
446
+ "caption"=>
447
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
448
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
449
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
450
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
451
+ "tt", "u", "var"],
452
+ "colgroup"=>["col"],
453
+ "tr"=>["td", "th"],
454
+ "del"=>
455
+ ["a", "abbr", "acronym", "address", "applet", "b", "basefont", "bdo", "big",
456
+ "blockquote", "br", "button", "center", "cite", "code", "dfn", "dir", "div",
457
+ "dl", "em", "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6",
458
+ "hr", "i", "iframe", "img", "input", "isindex", "kbd", "label", "map",
459
+ "menu", "noframes", "noscript", "object", "ol", "p", "pre", "q", "s",
460
+ "samp", "script", "select", "small", "span", "strike", "strong", "sub",
461
+ "sup", "table", "textarea", "tt", "u", "ul", "var"],
462
+ "h5"=>
463
+ ["a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br",
464
+ "button", "cite", "code", "dfn", "em", "font", "i", "iframe", "img",
465
+ "input", "kbd", "label", "map", "object", "q", "s", "samp", "script",
466
+ "select", "small", "span", "strike", "strong", "sub", "sup", "textarea",
467
+ "tt", "u", "var"],
468
+ "iframe"=>
469
+ ["a", "abbr", "acronym", "address", "applet", "b", "basefont", "bdo", "big",
470
+ "blockquote", "br", "button", "center", "cite", "code", "dfn", "dir", "div",
471
+ "dl", "em", "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6",
472
+ "hr", "i", "iframe", "img", "input", "isindex", "kbd", "label", "map",
473
+ "menu", "noframes", "noscript", "object", "ol", "p", "pre", "q", "s",
474
+ "samp", "script", "select", "small", "span", "strike", "strong", "sub",
475
+ "sup", "table", "textarea", "tt", "u", "ul", "var"]}
476
+
477
+ ElementInclusions =
478
+ {"head"=>["link", "meta", "object", "script", "style"], "body"=>["del", "ins"]}
479
+
480
+ ElementExclusions =
481
+ {"button"=>
482
+ ["a", "button", "fieldset", "form", "iframe", "input", "isindex", "label",
483
+ "select", "textarea"],
484
+ "a"=>["a"],
485
+ "dir"=>
486
+ ["address", "blockquote", "center", "dir", "div", "dl", "fieldset", "form",
487
+ "h1", "h2", "h3", "h4", "h5", "h6", "hr", "isindex", "menu", "noframes",
488
+ "noscript", "ol", "p", "pre", "table", "ul"],
489
+ "title"=>["link", "meta", "object", "script", "style"],
490
+ "pre"=>
491
+ ["applet", "basefont", "big", "font", "img", "object", "small", "sub",
492
+ "sup"],
493
+ "form"=>["form"],
494
+ "menu"=>
495
+ ["address", "blockquote", "center", "dir", "div", "dl", "fieldset", "form",
496
+ "h1", "h2", "h3", "h4", "h5", "h6", "hr", "isindex", "menu", "noframes",
497
+ "noscript", "ol", "p", "pre", "table", "ul"],
498
+ "label"=>["label"]}
499
+
500
+ OmittedAttrName =
501
+ {"h6"=>
502
+ {"center"=>"align", "justify"=>"align", "left"=>"align", "ltr"=>"dir",
503
+ "right"=>"align", "rtl"=>"dir"},
504
+ "object"=>
505
+ {"bottom"=>"align", "declare"=>"declare", "left"=>"align", "ltr"=>"dir",
506
+ "middle"=>"align", "right"=>"align", "rtl"=>"dir", "top"=>"align"},
507
+ "dl"=>{"compact"=>"compact", "ltr"=>"dir", "rtl"=>"dir"},
508
+ "p"=>
509
+ {"center"=>"align", "justify"=>"align", "left"=>"align", "ltr"=>"dir",
510
+ "right"=>"align", "rtl"=>"dir"},
511
+ "acronym"=>{"ltr"=>"dir", "rtl"=>"dir"},
512
+ "code"=>{"ltr"=>"dir", "rtl"=>"dir"},
513
+ "ul"=>
514
+ {"circle"=>"type", "compact"=>"compact", "disc"=>"type", "ltr"=>"dir",
515
+ "rtl"=>"dir", "square"=>"type"},
516
+ "tt"=>{"ltr"=>"dir", "rtl"=>"dir"},
517
+ "label"=>{"ltr"=>"dir", "rtl"=>"dir"},
518
+ "form"=>{"get"=>"method", "ltr"=>"dir", "post"=>"method", "rtl"=>"dir"},
519
+ "q"=>{"ltr"=>"dir", "rtl"=>"dir"},
520
+ "thead"=>
521
+ {"baseline"=>"valign", "bottom"=>"valign", "center"=>"align",
522
+ "char"=>"align", "justify"=>"align", "left"=>"align", "ltr"=>"dir",
523
+ "middle"=>"valign", "right"=>"align", "rtl"=>"dir", "top"=>"valign"},
524
+ "area"=>
525
+ {"circle"=>"shape", "default"=>"shape", "ltr"=>"dir", "nohref"=>"nohref",
526
+ "poly"=>"shape", "rect"=>"shape", "rtl"=>"dir"},
527
+ "td"=>
528
+ {"baseline"=>"valign", "bottom"=>"valign", "center"=>"align",
529
+ "char"=>"align", "col"=>"scope", "colgroup"=>"scope", "justify"=>"align",
530
+ "left"=>"align", "ltr"=>"dir", "middle"=>"valign", "nowrap"=>"nowrap",
531
+ "right"=>"align", "row"=>"scope", "rowgroup"=>"scope", "rtl"=>"dir",
532
+ "top"=>"valign"},
533
+ "title"=>{"ltr"=>"dir", "rtl"=>"dir"},
534
+ "dir"=>{"compact"=>"compact", "ltr"=>"dir", "rtl"=>"dir"},
535
+ "s"=>{"ltr"=>"dir", "rtl"=>"dir"},
536
+ "ol"=>{"compact"=>"compact", "ltr"=>"dir", "rtl"=>"dir"},
537
+ "hr"=>
538
+ {"center"=>"align", "left"=>"align", "ltr"=>"dir", "noshade"=>"noshade",
539
+ "right"=>"align", "rtl"=>"dir"},
540
+ "applet"=>
541
+ {"bottom"=>"align", "left"=>"align", "middle"=>"align", "right"=>"align",
542
+ "top"=>"align"},
543
+ "table"=>
544
+ {"above"=>"frame", "all"=>"rules", "below"=>"frame", "border"=>"frame",
545
+ "box"=>"frame", "center"=>"align", "cols"=>"rules", "groups"=>"rules",
546
+ "hsides"=>"frame", "left"=>"align", "lhs"=>"frame", "ltr"=>"dir",
547
+ "none"=>"rules", "rhs"=>"frame", "right"=>"align", "rows"=>"rules",
548
+ "rtl"=>"dir", "void"=>"frame", "vsides"=>"frame"},
549
+ "legend"=>
550
+ {"bottom"=>"align", "left"=>"align", "ltr"=>"dir", "right"=>"align",
551
+ "rtl"=>"dir", "top"=>"align"},
552
+ "cite"=>{"ltr"=>"dir", "rtl"=>"dir"},
553
+ "a"=>
554
+ {"circle"=>"shape", "default"=>"shape", "ltr"=>"dir", "poly"=>"shape",
555
+ "rect"=>"shape", "rtl"=>"dir"},
556
+ "html"=>{"ltr"=>"dir", "rtl"=>"dir"},
557
+ "u"=>{"ltr"=>"dir", "rtl"=>"dir"},
558
+ "blockquote"=>{"ltr"=>"dir", "rtl"=>"dir"},
559
+ "center"=>{"ltr"=>"dir", "rtl"=>"dir"},
560
+ "b"=>{"ltr"=>"dir", "rtl"=>"dir"},
561
+ "th"=>
562
+ {"baseline"=>"valign", "bottom"=>"valign", "center"=>"align",
563
+ "char"=>"align", "col"=>"scope", "colgroup"=>"scope", "justify"=>"align",
564
+ "left"=>"align", "ltr"=>"dir", "middle"=>"valign", "nowrap"=>"nowrap",
565
+ "right"=>"align", "row"=>"scope", "rowgroup"=>"scope", "rtl"=>"dir",
566
+ "top"=>"valign"},
567
+ "link"=>{"ltr"=>"dir", "rtl"=>"dir"},
568
+ "var"=>{"ltr"=>"dir", "rtl"=>"dir"},
569
+ "samp"=>{"ltr"=>"dir", "rtl"=>"dir"},
570
+ "div"=>
571
+ {"center"=>"align", "justify"=>"align", "left"=>"align", "ltr"=>"dir",
572
+ "right"=>"align", "rtl"=>"dir"},
573
+ "textarea"=>
574
+ {"disabled"=>"disabled", "ltr"=>"dir", "readonly"=>"readonly", "rtl"=>"dir"},
575
+ "pre"=>{"ltr"=>"dir", "rtl"=>"dir"},
576
+ "head"=>{"ltr"=>"dir", "rtl"=>"dir"},
577
+ "span"=>{"ltr"=>"dir", "rtl"=>"dir"},
578
+ "br"=>{"all"=>"clear", "left"=>"clear", "none"=>"clear", "right"=>"clear"},
579
+ "script"=>{"defer"=>"defer"},
580
+ "noframes"=>{"ltr"=>"dir", "rtl"=>"dir"},
581
+ "style"=>{"ltr"=>"dir", "rtl"=>"dir"},
582
+ "meta"=>{"ltr"=>"dir", "rtl"=>"dir"},
583
+ "dt"=>{"ltr"=>"dir", "rtl"=>"dir"},
584
+ "option"=>
585
+ {"disabled"=>"disabled", "ltr"=>"dir", "rtl"=>"dir", "selected"=>"selected"},
586
+ "kbd"=>{"ltr"=>"dir", "rtl"=>"dir"},
587
+ "big"=>{"ltr"=>"dir", "rtl"=>"dir"},
588
+ "tfoot"=>
589
+ {"baseline"=>"valign", "bottom"=>"valign", "center"=>"align",
590
+ "char"=>"align", "justify"=>"align", "left"=>"align", "ltr"=>"dir",
591
+ "middle"=>"valign", "right"=>"align", "rtl"=>"dir", "top"=>"valign"},
592
+ "sup"=>{"ltr"=>"dir", "rtl"=>"dir"},
593
+ "bdo"=>{"ltr"=>"dir", "rtl"=>"dir"},
594
+ "isindex"=>{"ltr"=>"dir", "rtl"=>"dir"},
595
+ "dfn"=>{"ltr"=>"dir", "rtl"=>"dir"},
596
+ "fieldset"=>{"ltr"=>"dir", "rtl"=>"dir"},
597
+ "em"=>{"ltr"=>"dir", "rtl"=>"dir"},
598
+ "font"=>{"ltr"=>"dir", "rtl"=>"dir"},
599
+ "tbody"=>
600
+ {"baseline"=>"valign", "bottom"=>"valign", "center"=>"align",
601
+ "char"=>"align", "justify"=>"align", "left"=>"align", "ltr"=>"dir",
602
+ "middle"=>"valign", "right"=>"align", "rtl"=>"dir", "top"=>"valign"},
603
+ "noscript"=>{"ltr"=>"dir", "rtl"=>"dir"},
604
+ "li"=>{"ltr"=>"dir", "rtl"=>"dir"},
605
+ "col"=>
606
+ {"baseline"=>"valign", "bottom"=>"valign", "center"=>"align",
607
+ "char"=>"align", "justify"=>"align", "left"=>"align", "ltr"=>"dir",
608
+ "middle"=>"valign", "right"=>"align", "rtl"=>"dir", "top"=>"valign"},
609
+ "small"=>{"ltr"=>"dir", "rtl"=>"dir"},
610
+ "dd"=>{"ltr"=>"dir", "rtl"=>"dir"},
611
+ "i"=>{"ltr"=>"dir", "rtl"=>"dir"},
612
+ "menu"=>{"compact"=>"compact", "ltr"=>"dir", "rtl"=>"dir"},
613
+ "strong"=>{"ltr"=>"dir", "rtl"=>"dir"},
614
+ "img"=>
615
+ {"bottom"=>"align", "ismap"=>"ismap", "left"=>"align", "ltr"=>"dir",
616
+ "middle"=>"align", "right"=>"align", "rtl"=>"dir", "top"=>"align"},
617
+ "optgroup"=>{"disabled"=>"disabled", "ltr"=>"dir", "rtl"=>"dir"},
618
+ "map"=>{"ltr"=>"dir", "rtl"=>"dir"},
619
+ "address"=>{"ltr"=>"dir", "rtl"=>"dir"},
620
+ "h1"=>
621
+ {"center"=>"align", "justify"=>"align", "left"=>"align", "ltr"=>"dir",
622
+ "right"=>"align", "rtl"=>"dir"},
623
+ "sub"=>{"ltr"=>"dir", "rtl"=>"dir"},
624
+ "param"=>{"data"=>"valuetype", "object"=>"valuetype", "ref"=>"valuetype"},
625
+ "input"=>
626
+ {"bottom"=>"align", "button"=>"type", "checkbox"=>"type",
627
+ "checked"=>"checked", "disabled"=>"disabled", "file"=>"type",
628
+ "hidden"=>"type", "image"=>"type", "ismap"=>"ismap", "left"=>"align",
629
+ "ltr"=>"dir", "middle"=>"align", "password"=>"type", "radio"=>"type",
630
+ "readonly"=>"readonly", "reset"=>"type", "right"=>"align", "rtl"=>"dir",
631
+ "submit"=>"type", "text"=>"type", "top"=>"align"},
632
+ "h2"=>
633
+ {"center"=>"align", "justify"=>"align", "left"=>"align", "ltr"=>"dir",
634
+ "right"=>"align", "rtl"=>"dir"},
635
+ "abbr"=>{"ltr"=>"dir", "rtl"=>"dir"},
636
+ "h3"=>
637
+ {"center"=>"align", "justify"=>"align", "left"=>"align", "ltr"=>"dir",
638
+ "right"=>"align", "rtl"=>"dir"},
639
+ "strike"=>{"ltr"=>"dir", "rtl"=>"dir"},
640
+ "body"=>{"ltr"=>"dir", "rtl"=>"dir"},
641
+ "ins"=>{"ltr"=>"dir", "rtl"=>"dir"},
642
+ "button"=>
643
+ {"button"=>"type", "disabled"=>"disabled", "ltr"=>"dir", "reset"=>"type",
644
+ "rtl"=>"dir", "submit"=>"type"},
645
+ "h4"=>
646
+ {"center"=>"align", "justify"=>"align", "left"=>"align", "ltr"=>"dir",
647
+ "right"=>"align", "rtl"=>"dir"},
648
+ "select"=>
649
+ {"disabled"=>"disabled", "ltr"=>"dir", "multiple"=>"multiple", "rtl"=>"dir"},
650
+ "caption"=>
651
+ {"bottom"=>"align", "left"=>"align", "ltr"=>"dir", "right"=>"align",
652
+ "rtl"=>"dir", "top"=>"align"},
653
+ "colgroup"=>
654
+ {"baseline"=>"valign", "bottom"=>"valign", "center"=>"align",
655
+ "char"=>"align", "justify"=>"align", "left"=>"align", "ltr"=>"dir",
656
+ "middle"=>"valign", "right"=>"align", "rtl"=>"dir", "top"=>"valign"},
657
+ "tr"=>
658
+ {"baseline"=>"valign", "bottom"=>"valign", "center"=>"align",
659
+ "char"=>"align", "justify"=>"align", "left"=>"align", "ltr"=>"dir",
660
+ "middle"=>"valign", "right"=>"align", "rtl"=>"dir", "top"=>"valign"},
661
+ "del"=>{"ltr"=>"dir", "rtl"=>"dir"},
662
+ "h5"=>
663
+ {"center"=>"align", "justify"=>"align", "left"=>"align", "ltr"=>"dir",
664
+ "right"=>"align", "rtl"=>"dir"},
665
+ "iframe"=>
666
+ {"0"=>"frameborder", "1"=>"frameborder", "auto"=>"scrolling",
667
+ "bottom"=>"align", "left"=>"align", "middle"=>"align", "no"=>"scrolling",
668
+ "right"=>"align", "top"=>"align", "yes"=>"scrolling"}}
669
+
670
+ # :startdoc:
671
+ # The code above is auto-generated. Don't edit manually.
672
+ end