rubyjedi-nokogiri_java 1.4.0.20100513161003-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.autotest +26 -0
- data/CHANGELOG.ja.rdoc +330 -0
- data/CHANGELOG.rdoc +341 -0
- data/Manifest.txt +277 -0
- data/README.ja.rdoc +105 -0
- data/README.rdoc +125 -0
- data/Rakefile +307 -0
- data/bin/nokogiri +49 -0
- data/deps.rip +5 -0
- data/ext/nokogiri/extconf.rb +149 -0
- data/ext/nokogiri/html_document.c +145 -0
- data/ext/nokogiri/html_document.h +10 -0
- data/ext/nokogiri/html_element_description.c +272 -0
- data/ext/nokogiri/html_element_description.h +10 -0
- data/ext/nokogiri/html_entity_lookup.c +32 -0
- data/ext/nokogiri/html_entity_lookup.h +8 -0
- data/ext/nokogiri/html_sax_parser_context.c +92 -0
- data/ext/nokogiri/html_sax_parser_context.h +11 -0
- data/ext/nokogiri/nokogiri.c +96 -0
- data/ext/nokogiri/nokogiri.h +148 -0
- data/ext/nokogiri/xml_attr.c +92 -0
- data/ext/nokogiri/xml_attr.h +9 -0
- data/ext/nokogiri/xml_attribute_decl.c +67 -0
- data/ext/nokogiri/xml_attribute_decl.h +9 -0
- data/ext/nokogiri/xml_cdata.c +54 -0
- data/ext/nokogiri/xml_cdata.h +9 -0
- data/ext/nokogiri/xml_comment.c +52 -0
- data/ext/nokogiri/xml_comment.h +9 -0
- data/ext/nokogiri/xml_document.c +386 -0
- data/ext/nokogiri/xml_document.h +24 -0
- data/ext/nokogiri/xml_document_fragment.c +46 -0
- data/ext/nokogiri/xml_document_fragment.h +10 -0
- data/ext/nokogiri/xml_dtd.c +192 -0
- data/ext/nokogiri/xml_dtd.h +10 -0
- data/ext/nokogiri/xml_element_content.c +123 -0
- data/ext/nokogiri/xml_element_content.h +10 -0
- data/ext/nokogiri/xml_element_decl.c +69 -0
- data/ext/nokogiri/xml_element_decl.h +9 -0
- data/ext/nokogiri/xml_encoding_handler.c +79 -0
- data/ext/nokogiri/xml_encoding_handler.h +8 -0
- data/ext/nokogiri/xml_entity_decl.c +97 -0
- data/ext/nokogiri/xml_entity_decl.h +10 -0
- data/ext/nokogiri/xml_entity_reference.c +50 -0
- data/ext/nokogiri/xml_entity_reference.h +9 -0
- data/ext/nokogiri/xml_io.c +31 -0
- data/ext/nokogiri/xml_io.h +11 -0
- data/ext/nokogiri/xml_namespace.c +82 -0
- data/ext/nokogiri/xml_namespace.h +13 -0
- data/ext/nokogiri/xml_node.c +1080 -0
- data/ext/nokogiri/xml_node.h +13 -0
- data/ext/nokogiri/xml_node_set.c +405 -0
- data/ext/nokogiri/xml_node_set.h +9 -0
- data/ext/nokogiri/xml_processing_instruction.c +54 -0
- data/ext/nokogiri/xml_processing_instruction.h +9 -0
- data/ext/nokogiri/xml_reader.c +593 -0
- data/ext/nokogiri/xml_reader.h +10 -0
- data/ext/nokogiri/xml_relax_ng.c +159 -0
- data/ext/nokogiri/xml_relax_ng.h +9 -0
- data/ext/nokogiri/xml_sax_parser.c +283 -0
- data/ext/nokogiri/xml_sax_parser.h +43 -0
- data/ext/nokogiri/xml_sax_parser_context.c +157 -0
- data/ext/nokogiri/xml_sax_parser_context.h +10 -0
- data/ext/nokogiri/xml_sax_push_parser.c +114 -0
- data/ext/nokogiri/xml_sax_push_parser.h +9 -0
- data/ext/nokogiri/xml_schema.c +156 -0
- data/ext/nokogiri/xml_schema.h +9 -0
- data/ext/nokogiri/xml_syntax_error.c +52 -0
- data/ext/nokogiri/xml_syntax_error.h +13 -0
- data/ext/nokogiri/xml_text.c +48 -0
- data/ext/nokogiri/xml_text.h +9 -0
- data/ext/nokogiri/xml_xpath.c +53 -0
- data/ext/nokogiri/xml_xpath.h +11 -0
- data/ext/nokogiri/xml_xpath_context.c +239 -0
- data/ext/nokogiri/xml_xpath_context.h +9 -0
- data/ext/nokogiri/xslt_stylesheet.c +131 -0
- data/ext/nokogiri/xslt_stylesheet.h +9 -0
- data/lib/isorelax.jar +0 -0
- data/lib/jing.jar +0 -0
- data/lib/nekodtd.jar +0 -0
- data/lib/nekohtml.jar +0 -0
- data/lib/nokogiri.rb +123 -0
- data/lib/nokogiri/css.rb +25 -0
- data/lib/nokogiri/css/generated_parser.rb +659 -0
- data/lib/nokogiri/css/generated_tokenizer.rb +145 -0
- data/lib/nokogiri/css/node.rb +99 -0
- data/lib/nokogiri/css/parser.rb +82 -0
- data/lib/nokogiri/css/parser.y +230 -0
- data/lib/nokogiri/css/syntax_error.rb +7 -0
- data/lib/nokogiri/css/tokenizer.rb +7 -0
- data/lib/nokogiri/css/tokenizer.rex +55 -0
- data/lib/nokogiri/css/xpath_visitor.rb +164 -0
- data/lib/nokogiri/decorators/slop.rb +33 -0
- data/lib/nokogiri/ffi/encoding_handler.rb +42 -0
- data/lib/nokogiri/ffi/html/document.rb +28 -0
- data/lib/nokogiri/ffi/html/element_description.rb +81 -0
- data/lib/nokogiri/ffi/html/entity_lookup.rb +16 -0
- data/lib/nokogiri/ffi/html/sax/parser_context.rb +38 -0
- data/lib/nokogiri/ffi/io_callbacks.rb +42 -0
- data/lib/nokogiri/ffi/libxml.rb +372 -0
- data/lib/nokogiri/ffi/structs/common_node.rb +26 -0
- data/lib/nokogiri/ffi/structs/html_elem_desc.rb +24 -0
- data/lib/nokogiri/ffi/structs/html_entity_desc.rb +13 -0
- data/lib/nokogiri/ffi/structs/xml_alloc.rb +16 -0
- data/lib/nokogiri/ffi/structs/xml_attr.rb +19 -0
- data/lib/nokogiri/ffi/structs/xml_attribute.rb +27 -0
- data/lib/nokogiri/ffi/structs/xml_buffer.rb +16 -0
- data/lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb +11 -0
- data/lib/nokogiri/ffi/structs/xml_document.rb +108 -0
- data/lib/nokogiri/ffi/structs/xml_dtd.rb +28 -0
- data/lib/nokogiri/ffi/structs/xml_element.rb +26 -0
- data/lib/nokogiri/ffi/structs/xml_element_content.rb +17 -0
- data/lib/nokogiri/ffi/structs/xml_entity.rb +32 -0
- data/lib/nokogiri/ffi/structs/xml_enumeration.rb +12 -0
- data/lib/nokogiri/ffi/structs/xml_node.rb +28 -0
- data/lib/nokogiri/ffi/structs/xml_node_set.rb +53 -0
- data/lib/nokogiri/ffi/structs/xml_notation.rb +11 -0
- data/lib/nokogiri/ffi/structs/xml_ns.rb +15 -0
- data/lib/nokogiri/ffi/structs/xml_parser_context.rb +19 -0
- data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +14 -0
- data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +51 -0
- data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +124 -0
- data/lib/nokogiri/ffi/structs/xml_schema.rb +13 -0
- data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +31 -0
- data/lib/nokogiri/ffi/structs/xml_text_reader.rb +12 -0
- data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +37 -0
- data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +35 -0
- data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +20 -0
- data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +13 -0
- data/lib/nokogiri/ffi/xml/attr.rb +41 -0
- data/lib/nokogiri/ffi/xml/attribute_decl.rb +27 -0
- data/lib/nokogiri/ffi/xml/cdata.rb +19 -0
- data/lib/nokogiri/ffi/xml/comment.rb +18 -0
- data/lib/nokogiri/ffi/xml/document.rb +135 -0
- data/lib/nokogiri/ffi/xml/document_fragment.rb +21 -0
- data/lib/nokogiri/ffi/xml/dtd.rb +67 -0
- data/lib/nokogiri/ffi/xml/element_content.rb +43 -0
- data/lib/nokogiri/ffi/xml/element_decl.rb +19 -0
- data/lib/nokogiri/ffi/xml/entity_decl.rb +27 -0
- data/lib/nokogiri/ffi/xml/entity_reference.rb +19 -0
- data/lib/nokogiri/ffi/xml/namespace.rb +44 -0
- data/lib/nokogiri/ffi/xml/node.rb +465 -0
- data/lib/nokogiri/ffi/xml/node_set.rb +146 -0
- data/lib/nokogiri/ffi/xml/processing_instruction.rb +20 -0
- data/lib/nokogiri/ffi/xml/reader.rb +227 -0
- data/lib/nokogiri/ffi/xml/relax_ng.rb +85 -0
- data/lib/nokogiri/ffi/xml/sax/parser.rb +135 -0
- data/lib/nokogiri/ffi/xml/sax/parser_context.rb +67 -0
- data/lib/nokogiri/ffi/xml/sax/push_parser.rb +55 -0
- data/lib/nokogiri/ffi/xml/schema.rb +92 -0
- data/lib/nokogiri/ffi/xml/syntax_error.rb +98 -0
- data/lib/nokogiri/ffi/xml/text.rb +18 -0
- data/lib/nokogiri/ffi/xml/xpath.rb +19 -0
- data/lib/nokogiri/ffi/xml/xpath_context.rb +135 -0
- data/lib/nokogiri/ffi/xslt/stylesheet.rb +50 -0
- data/lib/nokogiri/html.rb +36 -0
- data/lib/nokogiri/html/builder.rb +35 -0
- data/lib/nokogiri/html/document.rb +88 -0
- data/lib/nokogiri/html/document_fragment.rb +15 -0
- data/lib/nokogiri/html/element_description.rb +23 -0
- data/lib/nokogiri/html/element_description_defaults.rb +671 -0
- data/lib/nokogiri/html/entity_lookup.rb +13 -0
- data/lib/nokogiri/html/sax/parser.rb +48 -0
- data/lib/nokogiri/html/sax/parser_context.rb +16 -0
- data/lib/nokogiri/nokogiri.jar +0 -0
- data/lib/nokogiri/syntax_error.rb +4 -0
- data/lib/nokogiri/version.rb +33 -0
- data/lib/nokogiri/version_warning.rb +11 -0
- data/lib/nokogiri/xml.rb +67 -0
- data/lib/nokogiri/xml/attr.rb +14 -0
- data/lib/nokogiri/xml/attribute_decl.rb +18 -0
- data/lib/nokogiri/xml/builder.rb +405 -0
- data/lib/nokogiri/xml/cdata.rb +11 -0
- data/lib/nokogiri/xml/character_data.rb +7 -0
- data/lib/nokogiri/xml/document.rb +163 -0
- data/lib/nokogiri/xml/document_fragment.rb +73 -0
- data/lib/nokogiri/xml/dtd.rb +11 -0
- data/lib/nokogiri/xml/element_content.rb +36 -0
- data/lib/nokogiri/xml/element_decl.rb +13 -0
- data/lib/nokogiri/xml/entity_decl.rb +15 -0
- data/lib/nokogiri/xml/fragment_handler.rb +73 -0
- data/lib/nokogiri/xml/namespace.rb +13 -0
- data/lib/nokogiri/xml/node.rb +730 -0
- data/lib/nokogiri/xml/node/save_options.rb +42 -0
- data/lib/nokogiri/xml/node_set.rb +318 -0
- data/lib/nokogiri/xml/notation.rb +6 -0
- data/lib/nokogiri/xml/parse_options.rb +85 -0
- data/lib/nokogiri/xml/pp.rb +2 -0
- data/lib/nokogiri/xml/pp/character_data.rb +18 -0
- data/lib/nokogiri/xml/pp/node.rb +56 -0
- data/lib/nokogiri/xml/processing_instruction.rb +8 -0
- data/lib/nokogiri/xml/reader.rb +74 -0
- data/lib/nokogiri/xml/relax_ng.rb +32 -0
- data/lib/nokogiri/xml/sax.rb +4 -0
- data/lib/nokogiri/xml/sax/document.rb +160 -0
- data/lib/nokogiri/xml/sax/parser.rb +115 -0
- data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
- data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
- data/lib/nokogiri/xml/schema.rb +61 -0
- data/lib/nokogiri/xml/syntax_error.rb +43 -0
- data/lib/nokogiri/xml/xpath.rb +10 -0
- data/lib/nokogiri/xml/xpath/syntax_error.rb +8 -0
- data/lib/nokogiri/xml/xpath_context.rb +16 -0
- data/lib/nokogiri/xslt.rb +48 -0
- data/lib/nokogiri/xslt/stylesheet.rb +25 -0
- data/lib/xercesImpl.jar +0 -0
- data/lib/xsd/xmlparser/nokogiri.rb +90 -0
- data/tasks/test.rb +100 -0
- data/test/css/test_nthiness.rb +159 -0
- data/test/css/test_parser.rb +282 -0
- data/test/css/test_tokenizer.rb +190 -0
- data/test/css/test_xpath_visitor.rb +76 -0
- data/test/ffi/test_document.rb +35 -0
- data/test/files/2ch.html +108 -0
- data/test/files/address_book.rlx +12 -0
- data/test/files/address_book.xml +10 -0
- data/test/files/bar/bar.xsd +4 -0
- data/test/files/dont_hurt_em_why.xml +422 -0
- data/test/files/exslt.xml +8 -0
- data/test/files/exslt.xslt +35 -0
- data/test/files/foo/foo.xsd +4 -0
- data/test/files/po.xml +32 -0
- data/test/files/po.xsd +66 -0
- data/test/files/shift_jis.html +10 -0
- data/test/files/shift_jis.xml +5 -0
- data/test/files/snuggles.xml +3 -0
- data/test/files/staff.dtd +10 -0
- data/test/files/staff.xml +59 -0
- data/test/files/staff.xslt +32 -0
- data/test/files/tlm.html +850 -0
- data/test/files/valid_bar.xml +2 -0
- data/test/helper.rb +137 -0
- data/test/html/sax/test_parser.rb +83 -0
- data/test/html/sax/test_parser_context.rb +48 -0
- data/test/html/test_builder.rb +164 -0
- data/test/html/test_document.rb +385 -0
- data/test/html/test_document_encoding.rb +77 -0
- data/test/html/test_document_fragment.rb +157 -0
- data/test/html/test_element_description.rb +98 -0
- data/test/html/test_named_characters.rb +14 -0
- data/test/html/test_node.rb +242 -0
- data/test/html/test_node_encoding.rb +27 -0
- data/test/test_convert_xpath.rb +135 -0
- data/test/test_css_cache.rb +45 -0
- data/test/test_encoding_handler.rb +46 -0
- data/test/test_jruby.rb +40 -0
- data/test/test_memory_leak.rb +87 -0
- data/test/test_nokogiri.rb +140 -0
- data/test/test_reader.rb +358 -0
- data/test/test_soap4r_sax.rb +52 -0
- data/test/test_xslt_transforms.rb +150 -0
- data/test/xml/node/test_save_options.rb +20 -0
- data/test/xml/node/test_subclass.rb +44 -0
- data/test/xml/sax/test_parser.rb +314 -0
- data/test/xml/sax/test_parser_context.rb +63 -0
- data/test/xml/sax/test_push_parser.rb +135 -0
- data/test/xml/test_attr.rb +38 -0
- data/test/xml/test_attribute_decl.rb +90 -0
- data/test/xml/test_builder.rb +167 -0
- data/test/xml/test_cdata.rb +38 -0
- data/test/xml/test_comment.rb +29 -0
- data/test/xml/test_document.rb +638 -0
- data/test/xml/test_document_encoding.rb +26 -0
- data/test/xml/test_document_fragment.rb +149 -0
- data/test/xml/test_dtd.rb +92 -0
- data/test/xml/test_dtd_encoding.rb +33 -0
- data/test/xml/test_element_content.rb +56 -0
- data/test/xml/test_element_decl.rb +73 -0
- data/test/xml/test_entity_decl.rb +83 -0
- data/test/xml/test_entity_reference.rb +21 -0
- data/test/xml/test_namespace.rb +70 -0
- data/test/xml/test_node.rb +740 -0
- data/test/xml/test_node_attributes.rb +34 -0
- data/test/xml/test_node_encoding.rb +107 -0
- data/test/xml/test_node_reparenting.rb +279 -0
- data/test/xml/test_node_set.rb +577 -0
- data/test/xml/test_parse_options.rb +52 -0
- data/test/xml/test_processing_instruction.rb +30 -0
- data/test/xml/test_reader_encoding.rb +126 -0
- data/test/xml/test_relax_ng.rb +60 -0
- data/test/xml/test_schema.rb +89 -0
- data/test/xml/test_syntax_error.rb +12 -0
- data/test/xml/test_text.rb +30 -0
- data/test/xml/test_unparented_node.rb +381 -0
- data/test/xml/test_xpath.rb +169 -0
- metadata +477 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
module Nokogiri
|
2
|
+
module XML
|
3
|
+
class Text < CharacterData
|
4
|
+
|
5
|
+
def self.new(string, document, *rest) # :nodoc:
|
6
|
+
node_ptr = LibXML.xmlNewText(string)
|
7
|
+
node_cstruct = LibXML::XmlNode.new(node_ptr)
|
8
|
+
node_cstruct[:doc] = document.cstruct[:doc]
|
9
|
+
|
10
|
+
node = Node.wrap(node_cstruct, self)
|
11
|
+
node.send :initialize, string, document, *rest
|
12
|
+
yield node if block_given?
|
13
|
+
node
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Nokogiri
|
2
|
+
module XML
|
3
|
+
class XPath
|
4
|
+
|
5
|
+
attr_accessor :cstruct # :nodoc:
|
6
|
+
|
7
|
+
def node_set # :nodoc:
|
8
|
+
ptr = cstruct[:nodesetval] if cstruct[:nodesetval]
|
9
|
+
ptr = LibXML.xmlXPathNodeSetCreate(nil) if ptr.null?
|
10
|
+
|
11
|
+
set = XML::NodeSet.new(@document)
|
12
|
+
set.cstruct = LibXML::XmlNodeSet.new(ptr)
|
13
|
+
set.document = @document
|
14
|
+
set
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
module Nokogiri
|
2
|
+
module XML
|
3
|
+
class XPathContext
|
4
|
+
|
5
|
+
attr_accessor :cstruct # :nodoc:
|
6
|
+
|
7
|
+
def register_ns(prefix, uri) # :nodoc:
|
8
|
+
LibXML.xmlXPathRegisterNs(cstruct, prefix, uri)
|
9
|
+
end
|
10
|
+
|
11
|
+
def evaluate(search_path, xpath_handler=nil) # :nodoc:
|
12
|
+
lookup = nil # to keep lambda in scope long enough to avoid a possible GC tragedy
|
13
|
+
query = search_path.to_s
|
14
|
+
|
15
|
+
if xpath_handler
|
16
|
+
lookup = lambda do |ctx, name, uri|
|
17
|
+
return nil unless xpath_handler.respond_to?(name)
|
18
|
+
ruby_funcall name, xpath_handler
|
19
|
+
end
|
20
|
+
LibXML.xmlXPathRegisterFuncLookup(cstruct, lookup, nil);
|
21
|
+
end
|
22
|
+
|
23
|
+
exception_handler = lambda do |ctx, error|
|
24
|
+
raise XPath::SyntaxError.wrap(error)
|
25
|
+
end
|
26
|
+
LibXML.xmlResetLastError()
|
27
|
+
LibXML.xmlSetStructuredErrorFunc(nil, exception_handler)
|
28
|
+
|
29
|
+
generic_exception_handler = lambda do |ctx, msg|
|
30
|
+
raise RuntimeError.new(msg) # TODO: varargs
|
31
|
+
end
|
32
|
+
LibXML.xmlSetGenericErrorFunc(nil, generic_exception_handler)
|
33
|
+
|
34
|
+
xpath_ptr = LibXML.xmlXPathEvalExpression(query, cstruct)
|
35
|
+
|
36
|
+
LibXML.xmlSetStructuredErrorFunc(nil, nil)
|
37
|
+
LibXML.xmlSetGenericErrorFunc(nil, nil)
|
38
|
+
|
39
|
+
if xpath_ptr.null?
|
40
|
+
error = LibXML.xmlGetLastError()
|
41
|
+
raise XPath::SyntaxError.wrap(error)
|
42
|
+
end
|
43
|
+
|
44
|
+
xpath = XML::XPath.new
|
45
|
+
xpath.cstruct = LibXML::XmlXpathObject.new(xpath_ptr)
|
46
|
+
xpath.document = cstruct[:doc]
|
47
|
+
xpath
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.new(node) # :nodoc:
|
51
|
+
LibXML.xmlXPathInit()
|
52
|
+
|
53
|
+
ptr = LibXML.xmlXPathNewContext(node.cstruct[:doc])
|
54
|
+
|
55
|
+
ctx = allocate
|
56
|
+
ctx.cstruct = LibXML::XmlXpathContext.new(ptr)
|
57
|
+
ctx.cstruct[:node] = node.cstruct
|
58
|
+
ctx
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
#
|
64
|
+
# returns a lambda that will call the handler function with marshalled parameters
|
65
|
+
#
|
66
|
+
def ruby_funcall(name, xpath_handler) # :nodoc:
|
67
|
+
lambda do |ctx, nargs|
|
68
|
+
parser_context = LibXML::XmlXpathParserContext.new(ctx)
|
69
|
+
context = parser_context.context
|
70
|
+
doc = context.doc.ruby_doc
|
71
|
+
|
72
|
+
params = []
|
73
|
+
|
74
|
+
nargs.times do |j|
|
75
|
+
obj = LibXML::XmlXpathObject.new(LibXML.valuePop(ctx))
|
76
|
+
case obj[:type]
|
77
|
+
when LibXML::XmlXpathObject::XPATH_STRING
|
78
|
+
params.unshift obj[:stringval]
|
79
|
+
when LibXML::XmlXpathObject::XPATH_BOOLEAN
|
80
|
+
params.unshift obj[:boolval] == 1
|
81
|
+
when LibXML::XmlXpathObject::XPATH_NUMBER
|
82
|
+
params.unshift obj[:floatval]
|
83
|
+
when LibXML::XmlXpathObject::XPATH_NODESET
|
84
|
+
ns_ptr = LibXML::XmlNodeSet.new(obj[:nodesetval])
|
85
|
+
set = NodeSet.allocate
|
86
|
+
set.cstruct = ns_ptr
|
87
|
+
params.unshift set
|
88
|
+
else
|
89
|
+
char_ptr = params.unshift LibXML.xmlXPathCastToString(obj)
|
90
|
+
string = char_ptr.read_string
|
91
|
+
LibXML.xmlFree(char_ptr)
|
92
|
+
string
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
result = xpath_handler.send(name, *params)
|
97
|
+
|
98
|
+
case result.class.to_s
|
99
|
+
when Fixnum.to_s, Float.to_s, Bignum.to_s
|
100
|
+
LibXML.xmlXPathReturnNumber(ctx, result)
|
101
|
+
when String.to_s
|
102
|
+
LibXML.xmlXPathReturnString(
|
103
|
+
ctx,
|
104
|
+
LibXML.xmlXPathWrapCString(result)
|
105
|
+
)
|
106
|
+
when TrueClass.to_s
|
107
|
+
LibXML.xmlXPathReturnTrue(ctx)
|
108
|
+
when FalseClass.to_s
|
109
|
+
LibXML.xmlXPathReturnFalse(ctx)
|
110
|
+
when NilClass.to_s
|
111
|
+
;
|
112
|
+
when Array.to_s
|
113
|
+
node_set = XML::NodeSet.new(doc, result)
|
114
|
+
LibXML.xmlXPathReturnNodeSet(
|
115
|
+
ctx,
|
116
|
+
LibXML.xmlXPathNodeSetMerge(nil, node_set.cstruct)
|
117
|
+
)
|
118
|
+
else
|
119
|
+
if result.is_a?(XML::NodeSet)
|
120
|
+
LibXML.xmlXPathReturnNodeSet(
|
121
|
+
ctx,
|
122
|
+
LibXML.xmlXPathNodeSetMerge(nil, result.cstruct)
|
123
|
+
)
|
124
|
+
else
|
125
|
+
raise RuntimeError.new("Invalid return type #{result.class.inspect}")
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
nil
|
130
|
+
end # lambda
|
131
|
+
end # ruby_funcall
|
132
|
+
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Nokogiri
|
2
|
+
module XSLT
|
3
|
+
class Stylesheet
|
4
|
+
|
5
|
+
attr_accessor :cstruct # :nodoc:
|
6
|
+
|
7
|
+
def self.parse_stylesheet_doc(document) # :nodoc:
|
8
|
+
LibXML.exsltRegisterAll
|
9
|
+
|
10
|
+
generic_exception_handler = lambda do |ctx, msg|
|
11
|
+
raise RuntimeError.new(msg) # TODO: varargs
|
12
|
+
end
|
13
|
+
LibXML.xsltSetGenericErrorFunc(nil, generic_exception_handler)
|
14
|
+
|
15
|
+
ss = LibXML.xsltParseStylesheetDoc(LibXML.xmlCopyDoc(document.cstruct, 1)) # 1 => recursive
|
16
|
+
|
17
|
+
LibXML.xsltSetGenericErrorFunc(nil, nil)
|
18
|
+
|
19
|
+
obj = allocate
|
20
|
+
obj.cstruct = LibXML::XsltStylesheet.new(ss)
|
21
|
+
obj
|
22
|
+
end
|
23
|
+
|
24
|
+
def serialize(document) # :nodoc:
|
25
|
+
buf_ptr = FFI::Buffer.new :pointer
|
26
|
+
buf_len = FFI::Buffer.new :int
|
27
|
+
LibXML.xsltSaveResultToString(buf_ptr, buf_len, document.cstruct, cstruct)
|
28
|
+
buf = Nokogiri::LibXML::XmlAlloc.new(buf_ptr.get_pointer(0))
|
29
|
+
buf.pointer.read_string(buf_len.get_int(0))
|
30
|
+
end
|
31
|
+
|
32
|
+
def transform(document, params=[]) # :nodoc:
|
33
|
+
param_arr = FFI::MemoryPointer.new(:pointer, params.length + 1, false)
|
34
|
+
|
35
|
+
# Keep the MemoryPointer instances alive until after the call
|
36
|
+
ptrs = params.map { |param | FFI::MemoryPointer.from_string(param.to_s) }
|
37
|
+
param_arr.put_array_of_pointer(0, ptrs)
|
38
|
+
|
39
|
+
# Terminate the list with a NULL pointer
|
40
|
+
param_arr.put_pointer(LibXML.pointer_offset(params.length), nil)
|
41
|
+
|
42
|
+
ptr = LibXML.xsltApplyStylesheet(cstruct, document.cstruct, param_arr)
|
43
|
+
raise(RuntimeError, "could not perform xslt transform on document") if ptr.null?
|
44
|
+
|
45
|
+
XML::Document.wrap(ptr)
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'nokogiri/html/entity_lookup'
|
2
|
+
require 'nokogiri/html/document'
|
3
|
+
require 'nokogiri/html/document_fragment'
|
4
|
+
require 'nokogiri/html/sax/parser_context'
|
5
|
+
require 'nokogiri/html/sax/parser'
|
6
|
+
require 'nokogiri/html/element_description'
|
7
|
+
require 'nokogiri/html/element_description_defaults'
|
8
|
+
|
9
|
+
module Nokogiri
|
10
|
+
class << self
|
11
|
+
###
|
12
|
+
# Parse HTML. Convenience method for Nokogiri::HTML::Document.parse
|
13
|
+
def HTML thing, url = nil, encoding = nil, options = XML::ParseOptions::DEFAULT_HTML, &block
|
14
|
+
Nokogiri::HTML::Document.parse(thing, url, encoding, options, &block)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module HTML
|
19
|
+
class << self
|
20
|
+
###
|
21
|
+
# Parse HTML. Convenience method for Nokogiri::HTML::Document.parse
|
22
|
+
def parse thing, url = nil, encoding = nil, options = XML::ParseOptions::DEFAULT_HTML, &block
|
23
|
+
Document.parse(thing, url, encoding, options, &block)
|
24
|
+
end
|
25
|
+
|
26
|
+
####
|
27
|
+
# Parse a fragment from +string+ in to a NodeSet.
|
28
|
+
def fragment string
|
29
|
+
HTML::DocumentFragment.parse(string)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Instance of Nokogiri::HTML::EntityLookup
|
34
|
+
NamedCharacters = EntityLookup.new
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Nokogiri
|
2
|
+
module HTML
|
3
|
+
###
|
4
|
+
# Nokogiri HTML builder is used for building HTML documents. It is very
|
5
|
+
# similar to the Nokogiri::XML::Builder. In fact, you should go read the
|
6
|
+
# documentation for Nokogiri::XML::Builder before reading this
|
7
|
+
# documentation.
|
8
|
+
#
|
9
|
+
# == Synopsis:
|
10
|
+
#
|
11
|
+
# Create an HTML document with a body that has an onload attribute, and a
|
12
|
+
# span tag with a class of "bold" that has content of "Hello world".
|
13
|
+
#
|
14
|
+
# builder = Nokogiri::HTML::Builder.new do |doc|
|
15
|
+
# doc.html {
|
16
|
+
# doc.body(:onload => 'some_func();') {
|
17
|
+
# doc.span.bold {
|
18
|
+
# doc.text "Hello world"
|
19
|
+
# }
|
20
|
+
# }
|
21
|
+
# }
|
22
|
+
# end
|
23
|
+
# puts builder.to_html
|
24
|
+
#
|
25
|
+
# The HTML builder inherits from the XML builder, so make sure to read the
|
26
|
+
# Nokogiri::XML::Builder documentation.
|
27
|
+
class Builder < Nokogiri::XML::Builder
|
28
|
+
###
|
29
|
+
# Convert the builder to HTML
|
30
|
+
def to_html
|
31
|
+
@doc.to_html
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module Nokogiri
|
2
|
+
module HTML
|
3
|
+
class Document < Nokogiri::XML::Document
|
4
|
+
###
|
5
|
+
# Get the meta tag encoding for this document. If there is no meta tag,
|
6
|
+
# then nil is returned
|
7
|
+
def meta_encoding
|
8
|
+
return nil unless meta = css('meta').find { |node|
|
9
|
+
node['http-equiv'] =~ /Content-Type/i
|
10
|
+
}
|
11
|
+
|
12
|
+
/charset\s*=\s*([\w\d-]+)/i.match(meta['content'])[1]
|
13
|
+
end
|
14
|
+
|
15
|
+
###
|
16
|
+
# Set the meta tag encoding for this document. If there is no meta
|
17
|
+
# content tag, nil is returned and the encoding is not set.
|
18
|
+
def meta_encoding= encoding
|
19
|
+
return nil unless meta = css('meta').find { |node|
|
20
|
+
node['http-equiv'] =~ /Content-Type/i
|
21
|
+
}
|
22
|
+
|
23
|
+
meta['content'] = "text/html; charset=%s" % encoding
|
24
|
+
encoding
|
25
|
+
end
|
26
|
+
|
27
|
+
####
|
28
|
+
# Serialize Node using +options+. Save options can also be set using a
|
29
|
+
# block. See SaveOptions.
|
30
|
+
#
|
31
|
+
# These two statements are equivalent:
|
32
|
+
#
|
33
|
+
# node.serialize(:encoding => 'UTF-8', :save_with => FORMAT | AS_XML)
|
34
|
+
#
|
35
|
+
# or
|
36
|
+
#
|
37
|
+
# node.serialize(:encoding => 'UTF-8') do |config|
|
38
|
+
# config.format.as_xml
|
39
|
+
# end
|
40
|
+
#
|
41
|
+
def serialize options = {}, &block
|
42
|
+
options[:save_with] ||= XML::Node::SaveOptions::FORMAT |
|
43
|
+
XML::Node::SaveOptions::AS_HTML |
|
44
|
+
XML::Node::SaveOptions::NO_DECLARATION |
|
45
|
+
XML::Node::SaveOptions::NO_EMPTY_TAGS
|
46
|
+
super
|
47
|
+
end
|
48
|
+
|
49
|
+
####
|
50
|
+
# Create a Nokogiri::XML::DocumentFragment from +tags+
|
51
|
+
def fragment tags = nil
|
52
|
+
DocumentFragment.new(self, tags)
|
53
|
+
end
|
54
|
+
|
55
|
+
class << self
|
56
|
+
###
|
57
|
+
# Parse HTML. +thing+ may be a String, or any object that
|
58
|
+
# responds to _read_ and _close_ such as an IO, or StringIO.
|
59
|
+
# +url+ is resource where this document is located. +encoding+ is the
|
60
|
+
# encoding that should be used when processing the document. +options+
|
61
|
+
# is a number that sets options in the parser, such as
|
62
|
+
# Nokogiri::XML::ParseOptions::RECOVER. See the constants in
|
63
|
+
# Nokogiri::XML::ParseOptions.
|
64
|
+
def parse string_or_io, url = nil, encoding = nil, options = XML::ParseOptions::DEFAULT_HTML, &block
|
65
|
+
|
66
|
+
options = Nokogiri::XML::ParseOptions.new(options) if Fixnum === options
|
67
|
+
# Give the options to the user
|
68
|
+
yield options if block_given?
|
69
|
+
|
70
|
+
if string_or_io.respond_to?(:encoding)
|
71
|
+
encoding ||= string_or_io.encoding.name
|
72
|
+
end
|
73
|
+
|
74
|
+
if string_or_io.respond_to?(:read)
|
75
|
+
url ||= string_or_io.respond_to?(:path) ? string_or_io.path : nil
|
76
|
+
return read_io(string_or_io, url, encoding, options.to_i)
|
77
|
+
end
|
78
|
+
|
79
|
+
# read_memory pukes on empty docs
|
80
|
+
return new if string_or_io.nil? or string_or_io.empty?
|
81
|
+
|
82
|
+
read_memory(string_or_io, url, encoding, options.to_i)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Nokogiri
|
2
|
+
module HTML
|
3
|
+
class DocumentFragment < Nokogiri::XML::DocumentFragment
|
4
|
+
|
5
|
+
class << self
|
6
|
+
####
|
7
|
+
# Create a Nokogiri::XML::DocumentFragment from +tags+
|
8
|
+
def parse tags
|
9
|
+
self.new(HTML::Document.new, tags)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Nokogiri
|
2
|
+
module HTML
|
3
|
+
class ElementDescription
|
4
|
+
###
|
5
|
+
# Is this element a block element?
|
6
|
+
def block?
|
7
|
+
!inline?
|
8
|
+
end
|
9
|
+
|
10
|
+
###
|
11
|
+
# Convert this description to a string
|
12
|
+
def to_s
|
13
|
+
"#{name}: #{description}"
|
14
|
+
end
|
15
|
+
|
16
|
+
###
|
17
|
+
# Inspection information
|
18
|
+
def inspect
|
19
|
+
"#<#{self.class.name}: #{name} #{description}>"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,671 @@
|
|
1
|
+
module Nokogiri
|
2
|
+
module HTML
|
3
|
+
class ElementDescription
|
4
|
+
|
5
|
+
# Methods are defined protected by method_defined? because at
|
6
|
+
# this point the C-library or Java library is alraedy loaded,
|
7
|
+
# and we don't want to clobber any methods that have been
|
8
|
+
# defined there.
|
9
|
+
|
10
|
+
Desc = Struct.new("HTMLElementDescription", :name,
|
11
|
+
:startTag, :endTag, :saveEndTag,
|
12
|
+
:empty, :depr, :dtd, :isinline,
|
13
|
+
:desc,
|
14
|
+
:subelts, :defaultsubelt,
|
15
|
+
:attrs_opt, :attrs_depr, :attrs_req)
|
16
|
+
|
17
|
+
# This is filled in down below.
|
18
|
+
DefaultDescriptions = Hash.new()
|
19
|
+
|
20
|
+
def default_desc
|
21
|
+
DefaultDescriptions[name.downcase]
|
22
|
+
end
|
23
|
+
private :default_desc
|
24
|
+
|
25
|
+
unless method_defined? :implied_start_tag?
|
26
|
+
def implied_start_tag?
|
27
|
+
d = default_desc
|
28
|
+
d ? d.startTag : nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
unless method_defined? :implied_end_tag?
|
33
|
+
def implied_end_tag?
|
34
|
+
d = default_desc
|
35
|
+
d ? d.endTag : nil
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
unless method_defined? :save_end_tag?
|
40
|
+
def save_end_tag?
|
41
|
+
d = default_desc
|
42
|
+
d ? d.saveEndTag : nil
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
unless method_defined? :deprecated?
|
47
|
+
def deprecated?
|
48
|
+
d = default_desc
|
49
|
+
d ? d.depr : nil
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
unless method_defined? :description
|
54
|
+
def description
|
55
|
+
d = default_desc
|
56
|
+
d ? d.desc : nil
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
unless method_defined? :default_sub_element
|
61
|
+
def default_sub_element
|
62
|
+
d = default_desc
|
63
|
+
d ? d.defaultsubelt : nil
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
unless method_defined? :optional_attributes
|
68
|
+
def optional_attributes
|
69
|
+
d = default_desc
|
70
|
+
d ? d.attrs_opt : []
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
unless method_defined? :deprecated_attributes
|
75
|
+
def deprecated_attributes
|
76
|
+
d = default_desc
|
77
|
+
d ? d.attrs_depr : []
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
unless method_defined? :required_attributes
|
82
|
+
def required_attributes
|
83
|
+
d = default_desc
|
84
|
+
d ? d.attrs_req : []
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
###
|
89
|
+
# Default Element Descriptions (HTML 4.0) copied from
|
90
|
+
# libxml2/HTMLparser.c and libxml2/include/libxml/HTMLparser.h
|
91
|
+
#
|
92
|
+
# The copyright notice for those files and the following list of
|
93
|
+
# element and attribute descriptions is reproduced here:
|
94
|
+
#
|
95
|
+
# Except where otherwise noted in the source code (e.g. the
|
96
|
+
# files hash.c, list.c and the trio files, which are covered by
|
97
|
+
# a similar licence but with different Copyright notices) all
|
98
|
+
# the files are:
|
99
|
+
#
|
100
|
+
# Copyright (C) 1998-2003 Daniel Veillard. All Rights Reserved.
|
101
|
+
#
|
102
|
+
# Permission is hereby granted, free of charge, to any person
|
103
|
+
# obtaining a copy of this software and associated documentation
|
104
|
+
# files (the "Software"), to deal in the Software without
|
105
|
+
# restriction, including without limitation the rights to use,
|
106
|
+
# copy, modify, merge, publish, distribute, sublicense, and/or
|
107
|
+
# sell copies of the Software, and to permit persons to whom the
|
108
|
+
# Software is fur- nished to do so, subject to the following
|
109
|
+
# conditions:
|
110
|
+
|
111
|
+
# The above copyright notice and this permission notice shall be
|
112
|
+
# included in all copies or substantial portions of the
|
113
|
+
# Software.
|
114
|
+
|
115
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
|
116
|
+
# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
117
|
+
# WARRANTIES OF MERCHANTABILITY, FIT- NESS FOR A PARTICULAR
|
118
|
+
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE DANIEL
|
119
|
+
# VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
120
|
+
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
121
|
+
# FROM, OUT OF OR IN CON- NECTION WITH THE SOFTWARE OR THE USE
|
122
|
+
# OR OTHER DEALINGS IN THE SOFTWARE.
|
123
|
+
|
124
|
+
# Except as contained in this notice, the name of Daniel
|
125
|
+
# Veillard shall not be used in advertising or otherwise to
|
126
|
+
# promote the sale, use or other deal- ings in this Software
|
127
|
+
# without prior written authorization from him.
|
128
|
+
|
129
|
+
# Attributes defined and categorized
|
130
|
+
FONTSTYLE = ["tt", "i", "b", "u", "s", "strike", "big", "small"]
|
131
|
+
PHRASE = ['em', 'strong', 'dfn', 'code', 'samp',
|
132
|
+
'kbd', 'var', 'cite', 'abbr', 'acronym']
|
133
|
+
SPECIAL = ['a', 'img', 'applet', 'embed', 'object', 'font','basefont',
|
134
|
+
'br', 'script', 'map', 'q', 'sub', 'sup', 'span', 'bdo',
|
135
|
+
'iframe']
|
136
|
+
PCDATA = []
|
137
|
+
HEADING = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']
|
138
|
+
LIST = ['ul', 'ol', 'dir', 'menu']
|
139
|
+
FORMCTRL = ['input', 'select', 'textarea', 'label', 'button']
|
140
|
+
BLOCK = [HEADING, LIST, 'pre', 'p', 'dl', 'div', 'center', 'noscript',
|
141
|
+
'noframes', 'blockquote', 'form', 'isindex', 'hr', 'table',
|
142
|
+
'fieldset', 'address']
|
143
|
+
INLINE = [PCDATA, FONTSTYLE, PHRASE, SPECIAL, FORMCTRL]
|
144
|
+
FLOW = [BLOCK, INLINE]
|
145
|
+
MODIFIER = []
|
146
|
+
EMPTY = []
|
147
|
+
|
148
|
+
HTML_FLOW = FLOW
|
149
|
+
HTML_INLINE = INLINE
|
150
|
+
HTML_PCDATA = PCDATA
|
151
|
+
HTML_CDATA = HTML_PCDATA
|
152
|
+
|
153
|
+
COREATTRS = ['id', 'class', 'style', 'title']
|
154
|
+
I18N = ['lang', 'dir']
|
155
|
+
EVENTS = ['onclick', 'ondblclick', 'onmousedown', 'onmouseup',
|
156
|
+
'onmouseover', 'onmouseout', 'onkeypress', 'onkeydown',
|
157
|
+
'onkeyup']
|
158
|
+
ATTRS = [COREATTRS, I18N,EVENTS]
|
159
|
+
CELLHALIGN = ['align', 'char', 'charoff']
|
160
|
+
CELLVALIGN = ['valign']
|
161
|
+
|
162
|
+
HTML_ATTRS = ATTRS
|
163
|
+
CORE_I18N_ATTRS = [COREATTRS, I18N]
|
164
|
+
CORE_ATTRS = COREATTRS
|
165
|
+
I18N_ATTRS = I18N
|
166
|
+
|
167
|
+
|
168
|
+
A_ATTRS = [ATTRS, 'charset', 'type', 'name',
|
169
|
+
'href', 'hreflang', 'rel', 'rev', 'accesskey', 'shape',
|
170
|
+
'coords', 'tabindex', 'onfocus', 'onblur']
|
171
|
+
TARGET_ATTR = ['target']
|
172
|
+
ROWS_COLS_ATTR = ['rows', 'cols']
|
173
|
+
ALT_ATTR = ['alt']
|
174
|
+
SRC_ALT_ATTRS = ['src', 'alt']
|
175
|
+
HREF_ATTRS = ['href']
|
176
|
+
CLEAR_ATTRS = ['clear']
|
177
|
+
INLINE_P = [INLINE, 'p']
|
178
|
+
|
179
|
+
FLOW_PARAM = [FLOW, 'param']
|
180
|
+
APPLET_ATTRS = [COREATTRS , 'codebase',
|
181
|
+
'archive', 'alt', 'name', 'height', 'width', 'align',
|
182
|
+
'hspace', 'vspace']
|
183
|
+
AREA_ATTRS = ['shape', 'coords', 'href', 'nohref',
|
184
|
+
'tabindex', 'accesskey', 'onfocus', 'onblur']
|
185
|
+
BASEFONT_ATTRS = ['id', 'size', 'color', 'face']
|
186
|
+
QUOTE_ATTRS = [ATTRS, 'cite']
|
187
|
+
BODY_CONTENTS = [FLOW, 'ins', 'del']
|
188
|
+
BODY_ATTRS = [ATTRS, 'onload', 'onunload']
|
189
|
+
BODY_DEPR = ['background', 'bgcolor', 'text',
|
190
|
+
'link', 'vlink', 'alink']
|
191
|
+
BUTTON_ATTRS = [ATTRS, 'name', 'value', 'type',
|
192
|
+
'disabled', 'tabindex', 'accesskey', 'onfocus', 'onblur']
|
193
|
+
|
194
|
+
|
195
|
+
COL_ATTRS = [ATTRS, 'span', 'width', CELLHALIGN, CELLVALIGN]
|
196
|
+
COL_ELT = ['col']
|
197
|
+
EDIT_ATTRS = [ATTRS, 'datetime', 'cite']
|
198
|
+
COMPACT_ATTRS = [ATTRS, 'compact']
|
199
|
+
DL_CONTENTS = ['dt', 'dd']
|
200
|
+
COMPACT_ATTR = ['compact']
|
201
|
+
LABEL_ATTR = ['label']
|
202
|
+
FIELDSET_CONTENTS = [FLOW, 'legend' ]
|
203
|
+
FONT_ATTRS = [COREATTRS, I18N, 'size', 'color', 'face' ]
|
204
|
+
FORM_CONTENTS = [HEADING, LIST, INLINE, 'pre', 'p', 'div', 'center',
|
205
|
+
'noscript', 'noframes', 'blockquote', 'isindex', 'hr',
|
206
|
+
'table', 'fieldset', 'address']
|
207
|
+
FORM_ATTRS = [ATTRS, 'method', 'enctype', 'accept', 'name', 'onsubmit',
|
208
|
+
'onreset', 'accept-charset']
|
209
|
+
FRAME_ATTRS = [COREATTRS, 'longdesc', 'name', 'src', 'frameborder',
|
210
|
+
'marginwidth', 'marginheight', 'noresize', 'scrolling' ]
|
211
|
+
FRAMESET_ATTRS = [COREATTRS, 'rows', 'cols', 'onload', 'onunload']
|
212
|
+
FRAMESET_CONTENTS = ['frameset', 'frame', 'noframes']
|
213
|
+
HEAD_ATTRS = [I18N, 'profile']
|
214
|
+
HEAD_CONTENTS = ['title', 'isindex', 'base', 'script', 'style', 'meta',
|
215
|
+
'link', 'object']
|
216
|
+
HR_DEPR = ['align', 'noshade', 'size', 'width']
|
217
|
+
VERSION_ATTR = ['version']
|
218
|
+
HTML_CONTENT = ['head', 'body', 'frameset']
|
219
|
+
IFRAME_ATTRS = [COREATTRS, 'longdesc', 'name', 'src', 'frameborder',
|
220
|
+
'marginwidth', 'marginheight', 'scrolling', 'align',
|
221
|
+
'height', 'width']
|
222
|
+
IMG_ATTRS = [ATTRS, 'longdesc', 'name', 'height', 'width', 'usemap',
|
223
|
+
'ismap']
|
224
|
+
EMBED_ATTRS = [COREATTRS, 'align', 'alt', 'border', 'code', 'codebase',
|
225
|
+
'frameborder', 'height', 'hidden', 'hspace', 'name',
|
226
|
+
'palette', 'pluginspace', 'pluginurl', 'src', 'type',
|
227
|
+
'units', 'vspace', 'width']
|
228
|
+
INPUT_ATTRS = [ATTRS, 'type', 'name', 'value', 'checked', 'disabled',
|
229
|
+
'readonly', 'size', 'maxlength', 'src', 'alt', 'usemap',
|
230
|
+
'ismap', 'tabindex', 'accesskey', 'onfocus', 'onblur',
|
231
|
+
'onselect', 'onchange', 'accept']
|
232
|
+
PROMPT_ATTRS = [COREATTRS, I18N, 'prompt']
|
233
|
+
LABEL_ATTRS = [ATTRS, 'for', 'accesskey', 'onfocus', 'onblur']
|
234
|
+
LEGEND_ATTRS = [ATTRS, 'accesskey']
|
235
|
+
ALIGN_ATTR = ['align']
|
236
|
+
LINK_ATTRS = [ATTRS, 'charset', 'href', 'hreflang', 'type', 'rel', 'rev',
|
237
|
+
'media']
|
238
|
+
MAP_CONTENTS = [BLOCK, 'area']
|
239
|
+
NAME_ATTR = ['name']
|
240
|
+
ACTION_ATTR = ['action']
|
241
|
+
BLOCKLI_ELT = [BLOCK, 'li']
|
242
|
+
META_ATTRS = [I18N, 'http-equiv', 'name', 'scheme']
|
243
|
+
CONTENT_ATTR = ['content']
|
244
|
+
TYPE_ATTR = ['type']
|
245
|
+
NOFRAMES_CONTENT = ['body', FLOW, MODIFIER]
|
246
|
+
OBJECT_CONTENTS = [FLOW, 'param']
|
247
|
+
OBJECT_ATTRS = [ATTRS, 'declare', 'classid', 'codebase', 'data', 'type',
|
248
|
+
'codetype', 'archive', 'standby', 'height', 'width',
|
249
|
+
'usemap', 'name', 'tabindex']
|
250
|
+
OBJECT_DEPR = ['align', 'border', 'hspace', 'vspace']
|
251
|
+
OL_ATTRS = ['type', 'compact', 'start']
|
252
|
+
OPTION_ELT = ['option']
|
253
|
+
OPTGROUP_ATTRS = [ATTRS, 'disabled']
|
254
|
+
OPTION_ATTRS = [ATTRS, 'disabled', 'label', 'selected', 'value']
|
255
|
+
PARAM_ATTRS = ['id', 'value', 'valuetype', 'type']
|
256
|
+
WIDTH_ATTR = ['width']
|
257
|
+
PRE_CONTENT = [PHRASE, 'tt', 'i', 'b', 'u', 's', 'strike', 'a', 'br',
|
258
|
+
'script', 'map', 'q', 'span', 'bdo', 'iframe']
|
259
|
+
SCRIPT_ATTRS = ['charset', 'src', 'defer', 'event', 'for']
|
260
|
+
LANGUAGE_ATTR = ['language']
|
261
|
+
SELECT_CONTENT = ['optgroup', 'option']
|
262
|
+
SELECT_ATTRS = [ATTRS, 'name', 'size', 'multiple', 'disabled', 'tabindex',
|
263
|
+
'onfocus', 'onblur', 'onchange']
|
264
|
+
STYLE_ATTRS = [I18N, 'media', 'title']
|
265
|
+
TABLE_ATTRS = [ATTRS, 'summary', 'width', 'border', 'frame', 'rules',
|
266
|
+
'cellspacing', 'cellpadding', 'datapagesize']
|
267
|
+
TABLE_DEPR = ['align', 'bgcolor']
|
268
|
+
TABLE_CONTENTS = ['caption', 'col', 'colgroup', 'thead', 'tfoot', 'tbody',
|
269
|
+
'tr']
|
270
|
+
TR_ELT = ['tr']
|
271
|
+
TALIGN_ATTRS = [ATTRS, CELLHALIGN, CELLVALIGN]
|
272
|
+
TH_TD_DEPR = ['nowrap', 'bgcolor', 'width', 'height']
|
273
|
+
TH_TD_ATTR = [ATTRS, 'abbr', 'axis', 'headers', 'scope', 'rowspan',
|
274
|
+
'colspan', CELLHALIGN, CELLVALIGN]
|
275
|
+
TEXTAREA_ATTRS = [ATTRS, 'name', 'disabled', 'readonly', 'tabindex',
|
276
|
+
'accesskey', 'onfocus', 'onblur', 'onselect',
|
277
|
+
'onchange']
|
278
|
+
TR_CONTENTS = ['th', 'td']
|
279
|
+
BGCOLOR_ATTR = ['bgcolor']
|
280
|
+
LI_ELT = ['li']
|
281
|
+
UL_DEPR = ['type', 'compact']
|
282
|
+
DIR_ATTR = ['dir']
|
283
|
+
|
284
|
+
[
|
285
|
+
['a', false, false, false, false, false, :any, true,
|
286
|
+
'anchor ',
|
287
|
+
HTML_INLINE, nil, A_ATTRS, TARGET_ATTR, []
|
288
|
+
],
|
289
|
+
['abbr', false, false, false, false, false, :any, true,
|
290
|
+
'abbreviated form',
|
291
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
292
|
+
],
|
293
|
+
['acronym', false, false, false, false, false, :any, true, '',
|
294
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
295
|
+
],
|
296
|
+
['address', false, false, false, false, false, :any, false,
|
297
|
+
'information on author',
|
298
|
+
INLINE_P , nil, HTML_ATTRS, [], []
|
299
|
+
],
|
300
|
+
['applet', false, false, false, false, true, :loose, true,
|
301
|
+
'java applet ',
|
302
|
+
FLOW_PARAM, nil, [], APPLET_ATTRS, []
|
303
|
+
],
|
304
|
+
['area', false, true, true, true, false, :any, false,
|
305
|
+
'client-side image map area ',
|
306
|
+
EMPTY, nil, AREA_ATTRS, TARGET_ATTR, ALT_ATTR
|
307
|
+
],
|
308
|
+
['b', false, true, false, false, false, :any, true,
|
309
|
+
'bold text style',
|
310
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
311
|
+
],
|
312
|
+
['base', false, true, true, true, false, :any, false,
|
313
|
+
'document base uri ',
|
314
|
+
EMPTY, nil, [], TARGET_ATTR, HREF_ATTRS
|
315
|
+
],
|
316
|
+
['basefont', false, true, true, true, true, :loose, true,
|
317
|
+
'base font size ',
|
318
|
+
EMPTY, nil, [], BASEFONT_ATTRS, []
|
319
|
+
],
|
320
|
+
['bdo', false, false, false, false, false, :any, true,
|
321
|
+
'i18n bidi over-ride ',
|
322
|
+
HTML_INLINE, nil, CORE_I18N_ATTRS, [], DIR_ATTR
|
323
|
+
],
|
324
|
+
['big', false, true, false, false, false, :any, true,
|
325
|
+
'large text style',
|
326
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
327
|
+
],
|
328
|
+
['blockquote', false, false, false, false, false, :any, false,
|
329
|
+
'long quotation ',
|
330
|
+
HTML_FLOW, nil, QUOTE_ATTRS, [], []
|
331
|
+
],
|
332
|
+
['body', true, true, false, false, false, :any, false,
|
333
|
+
'document body ',
|
334
|
+
BODY_CONTENTS, 'div', BODY_ATTRS, BODY_DEPR, []
|
335
|
+
],
|
336
|
+
['br', false, true, true, true, false, :any, true,
|
337
|
+
'forced line break ',
|
338
|
+
EMPTY, nil, CORE_ATTRS, CLEAR_ATTRS, []
|
339
|
+
],
|
340
|
+
['button', false, false, false, false, false, :any, true,
|
341
|
+
'push button ',
|
342
|
+
[HTML_FLOW, MODIFIER], nil, BUTTON_ATTRS, [], []
|
343
|
+
],
|
344
|
+
['caption', false, false, false, false, false, :any, false,
|
345
|
+
'table caption ',
|
346
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
347
|
+
],
|
348
|
+
['center', false, true, false, false, true, :loose, false,
|
349
|
+
'shorthand for div align=center ',
|
350
|
+
HTML_FLOW, nil, [], HTML_ATTRS, []
|
351
|
+
],
|
352
|
+
['cite', false, false, false, false, false, :any, true, 'citation',
|
353
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
354
|
+
],
|
355
|
+
['code', false, false, false, false, false, :any, true,
|
356
|
+
'computer code fragment',
|
357
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
358
|
+
],
|
359
|
+
['col', false, true, true, true, false, :any, false, 'table column ',
|
360
|
+
EMPTY, nil, COL_ATTRS, [], []
|
361
|
+
],
|
362
|
+
['colgroup', false, true, false, false, false, :any, false,
|
363
|
+
'table column group ',
|
364
|
+
COL_ELT, 'col', COL_ATTRS, [], []
|
365
|
+
],
|
366
|
+
['dd', false, true, false, false, false, :any, false,
|
367
|
+
'definition description ',
|
368
|
+
HTML_FLOW, nil, HTML_ATTRS, [], []
|
369
|
+
],
|
370
|
+
['del', false, false, false, false, false, :any, true,
|
371
|
+
'deleted text ',
|
372
|
+
HTML_FLOW, nil, EDIT_ATTRS, [], []
|
373
|
+
],
|
374
|
+
['dfn', false, false, false, false, false, :any, true,
|
375
|
+
'instance definition',
|
376
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
377
|
+
],
|
378
|
+
['dir', false, false, false, false, true, :loose, false,
|
379
|
+
'directory list',
|
380
|
+
BLOCKLI_ELT, 'li', [], COMPACT_ATTRS, []
|
381
|
+
],
|
382
|
+
['div', false, false, false, false, false, :any, false,
|
383
|
+
'generic language/style container',
|
384
|
+
HTML_FLOW, nil, HTML_ATTRS, ALIGN_ATTR, []
|
385
|
+
],
|
386
|
+
['dl', false, false, false, false, false, :any, false,
|
387
|
+
'definition list ',
|
388
|
+
DL_CONTENTS, 'dd', HTML_ATTRS, COMPACT_ATTR, []
|
389
|
+
],
|
390
|
+
['dt', false, true, false, false, false, :any, false,
|
391
|
+
'definition term ',
|
392
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
393
|
+
],
|
394
|
+
['em', false, true, false, false, false, :any, true,
|
395
|
+
'emphasis',
|
396
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
397
|
+
],
|
398
|
+
['embed', false, true, false, false, true, :loose, true,
|
399
|
+
'generic embedded object ',
|
400
|
+
EMPTY, nil, EMBED_ATTRS, [], []
|
401
|
+
],
|
402
|
+
['fieldset', false, false, false, false, false, :any, false,
|
403
|
+
'form control group ',
|
404
|
+
FIELDSET_CONTENTS, nil, HTML_ATTRS, [], []
|
405
|
+
],
|
406
|
+
['font', false, true, false, false, true, :loose, true,
|
407
|
+
'local change to font ',
|
408
|
+
HTML_INLINE, nil, [], FONT_ATTRS, []
|
409
|
+
],
|
410
|
+
['form', false, false, false, false, false, :any, false,
|
411
|
+
'interactive form ',
|
412
|
+
FORM_CONTENTS, 'fieldset', FORM_ATTRS, TARGET_ATTR, ACTION_ATTR
|
413
|
+
],
|
414
|
+
['frame', false, true, true, true, false, :frameset, false,
|
415
|
+
'subwindow ',
|
416
|
+
EMPTY, nil, [], FRAME_ATTRS, []
|
417
|
+
],
|
418
|
+
['frameset', false, false, false, false, false, :frameset, false,
|
419
|
+
'window subdivision',
|
420
|
+
FRAMESET_CONTENTS, 'noframes', [], FRAMESET_ATTRS, []
|
421
|
+
],
|
422
|
+
['htrue', false, false, false, false, false, :any, false,
|
423
|
+
'heading ',
|
424
|
+
HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, []
|
425
|
+
],
|
426
|
+
['htrue', false, false, false, false, false, :any, false,
|
427
|
+
'heading ',
|
428
|
+
HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, []
|
429
|
+
],
|
430
|
+
['htrue', false, false, false, false, false, :any, false,
|
431
|
+
'heading ',
|
432
|
+
HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, []
|
433
|
+
],
|
434
|
+
['h4', false, false, false, false, false, :any, false,
|
435
|
+
'heading ',
|
436
|
+
HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, []
|
437
|
+
],
|
438
|
+
['h5', false, false, false, false, false, :any, false,
|
439
|
+
'heading ',
|
440
|
+
HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, []
|
441
|
+
],
|
442
|
+
['h6', false, false, false, false, false, :any, false,
|
443
|
+
'heading ',
|
444
|
+
HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, []
|
445
|
+
],
|
446
|
+
['head', true, true, false, false, false, :any, false,
|
447
|
+
'document head ',
|
448
|
+
HEAD_CONTENTS, nil, HEAD_ATTRS, [], []
|
449
|
+
],
|
450
|
+
['hr', false, true, true, true, false, :any, false,
|
451
|
+
'horizontal rule ',
|
452
|
+
EMPTY, nil, HTML_ATTRS, HR_DEPR, []
|
453
|
+
],
|
454
|
+
['html', true, true, false, false, false, :any, false,
|
455
|
+
'document root element ',
|
456
|
+
HTML_CONTENT, nil, I18N_ATTRS, VERSION_ATTR, []
|
457
|
+
],
|
458
|
+
['i', false, true, false, false, false, :any, true,
|
459
|
+
'italic text style',
|
460
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
461
|
+
],
|
462
|
+
['iframe', false, false, false, false, false, :any, true,
|
463
|
+
'inline subwindow ',
|
464
|
+
HTML_FLOW, nil, [], IFRAME_ATTRS, []
|
465
|
+
],
|
466
|
+
['img', false, true, true, true, false, :any, true,
|
467
|
+
'embedded image ',
|
468
|
+
EMPTY, nil, IMG_ATTRS, ALIGN_ATTR, SRC_ALT_ATTRS
|
469
|
+
],
|
470
|
+
['input', false, true, true, true, false, :any, true,
|
471
|
+
'form control ',
|
472
|
+
EMPTY, nil, INPUT_ATTRS, ALIGN_ATTR, []
|
473
|
+
],
|
474
|
+
['ins', false, false, false, false, false, :any, true,
|
475
|
+
'inserted text',
|
476
|
+
HTML_FLOW, nil, EDIT_ATTRS, [], []
|
477
|
+
],
|
478
|
+
['isindex', false, true, true, true, true, :loose, false,
|
479
|
+
'single line prompt ',
|
480
|
+
EMPTY, nil, [], PROMPT_ATTRS, []
|
481
|
+
],
|
482
|
+
['kbd', false, false, false, false, false, :any, true,
|
483
|
+
'text to be entered by the user',
|
484
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
485
|
+
],
|
486
|
+
['label', false, false, false, false, false, :any, true,
|
487
|
+
'form field label text ',
|
488
|
+
[HTML_INLINE, MODIFIER], nil, LABEL_ATTRS, [], []
|
489
|
+
],
|
490
|
+
['legend', false, false, false, false, false, :any, false,
|
491
|
+
'fieldset legend ',
|
492
|
+
HTML_INLINE, nil, LEGEND_ATTRS, ALIGN_ATTR, []
|
493
|
+
],
|
494
|
+
['li', false, true, true, false, false, :any, false,
|
495
|
+
'list item ',
|
496
|
+
HTML_FLOW, nil, HTML_ATTRS, [], []
|
497
|
+
],
|
498
|
+
['link', false, true, true, true, false, :any, false,
|
499
|
+
'a media-independent link ',
|
500
|
+
EMPTY, nil, LINK_ATTRS, TARGET_ATTR, []
|
501
|
+
],
|
502
|
+
['map', false, false, false, false, false, :any, true,
|
503
|
+
'client-side image map ',
|
504
|
+
MAP_CONTENTS, nil, HTML_ATTRS, [], NAME_ATTR
|
505
|
+
],
|
506
|
+
['menu', false, false, false, false, true, :loose, false,
|
507
|
+
'menu list ',
|
508
|
+
BLOCKLI_ELT, nil, [], COMPACT_ATTRS, []
|
509
|
+
],
|
510
|
+
['meta', false, true, true, true, false, :any, false,
|
511
|
+
'generic metainformation ',
|
512
|
+
EMPTY, nil, META_ATTRS, [], CONTENT_ATTR
|
513
|
+
],
|
514
|
+
['noframes', false, false, false, false, false, :frameset, false,
|
515
|
+
'alternate content container for non frame-based rendering ',
|
516
|
+
NOFRAMES_CONTENT, 'body', HTML_ATTRS, [], []
|
517
|
+
],
|
518
|
+
['noscript', false, false, false, false, false, :any, false,
|
519
|
+
'alternate content container for non script-based rendering ',
|
520
|
+
HTML_FLOW, 'div', HTML_ATTRS, [], []
|
521
|
+
],
|
522
|
+
['object', false, false, false, false, false, :any, true,
|
523
|
+
'generic embedded object ',
|
524
|
+
OBJECT_CONTENTS, 'div', OBJECT_ATTRS, OBJECT_DEPR, []
|
525
|
+
],
|
526
|
+
['ol', false, false, false, false, false, :any, false,
|
527
|
+
'ordered list ',
|
528
|
+
LI_ELT, 'li', HTML_ATTRS, OL_ATTRS, []
|
529
|
+
],
|
530
|
+
['optgroup', false, false, false, false, false, :any, false,
|
531
|
+
'option group ',
|
532
|
+
OPTION_ELT, 'option', OPTGROUP_ATTRS, [], LABEL_ATTR
|
533
|
+
],
|
534
|
+
['option', false, true, false, false, false, :any, false,
|
535
|
+
'selectable choice ',
|
536
|
+
HTML_PCDATA, nil, OPTION_ATTRS, [], []
|
537
|
+
],
|
538
|
+
['p', false, true, false, false, false, :any, false,
|
539
|
+
'paragraph ',
|
540
|
+
HTML_INLINE, nil, HTML_ATTRS, ALIGN_ATTR, []
|
541
|
+
],
|
542
|
+
['param', false, true, true, true, false, :any, false,
|
543
|
+
'named property value ',
|
544
|
+
EMPTY, nil, PARAM_ATTRS, [], NAME_ATTR
|
545
|
+
],
|
546
|
+
['pre', false, false, false, false, false, :any, false,
|
547
|
+
'preformatted text ',
|
548
|
+
PRE_CONTENT, nil, HTML_ATTRS, WIDTH_ATTR, []
|
549
|
+
],
|
550
|
+
['q', false, false, false, false, false, :any, true,
|
551
|
+
'short inline quotation ',
|
552
|
+
HTML_INLINE, nil, QUOTE_ATTRS, [], []
|
553
|
+
],
|
554
|
+
['s', false, true, false, false, true, :loose, true,
|
555
|
+
'strike-through text style',
|
556
|
+
HTML_INLINE, nil, [], HTML_ATTRS, []
|
557
|
+
],
|
558
|
+
['samp', false, false, false, false, false, :any, true,
|
559
|
+
'sample program output, scripts, etc.',
|
560
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
561
|
+
],
|
562
|
+
['script', false, false, false, false, false, :any, true,
|
563
|
+
'script statements ',
|
564
|
+
HTML_CDATA, nil, SCRIPT_ATTRS, LANGUAGE_ATTR, TYPE_ATTR
|
565
|
+
],
|
566
|
+
['select', false, false, false, false, false, :any, true,
|
567
|
+
'option selector ',
|
568
|
+
SELECT_CONTENT, nil, SELECT_ATTRS, [], []
|
569
|
+
],
|
570
|
+
['small', false, true, false, false, false, :any, true,
|
571
|
+
'small text style',
|
572
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
573
|
+
],
|
574
|
+
['span', false, false, false, false, false, :any, true,
|
575
|
+
'generic language/style container ',
|
576
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
577
|
+
],
|
578
|
+
['strike', false, true, false, false, true, :loose, true,
|
579
|
+
'strike-through text',
|
580
|
+
HTML_INLINE, nil, [], HTML_ATTRS, []
|
581
|
+
],
|
582
|
+
['strong', false, true, false, false, false, :any, true,
|
583
|
+
'strong emphasis',
|
584
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
585
|
+
],
|
586
|
+
['style', false, false, false, false, false, :any, false,
|
587
|
+
'style info ',
|
588
|
+
HTML_CDATA, nil, STYLE_ATTRS, [], TYPE_ATTR
|
589
|
+
],
|
590
|
+
['sub', false, true, false, false, false, :any, true,
|
591
|
+
'subscript',
|
592
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
593
|
+
],
|
594
|
+
['sup', false, true, false, false, false, :any, true,
|
595
|
+
'superscript ',
|
596
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
597
|
+
],
|
598
|
+
['table', false, false, false, false, false, :any, false,
|
599
|
+
'',
|
600
|
+
TABLE_CONTENTS, 'tr', TABLE_ATTRS, TABLE_DEPR, []
|
601
|
+
],
|
602
|
+
['tbody', true, false, false, false, false, :any, false,
|
603
|
+
'table body ',
|
604
|
+
TR_ELT, 'tr', TALIGN_ATTRS, [], []
|
605
|
+
],
|
606
|
+
['td', false, false, false, false, false, :any, false,
|
607
|
+
'table data cell',
|
608
|
+
HTML_FLOW, nil, TH_TD_ATTR, TH_TD_DEPR, []
|
609
|
+
],
|
610
|
+
['textarea', false, false, false, false, false, :any, true,
|
611
|
+
'multi-line text field ',
|
612
|
+
HTML_PCDATA, nil, TEXTAREA_ATTRS, [], ROWS_COLS_ATTR
|
613
|
+
],
|
614
|
+
['tfoot', false, true, false, false, false, :any, false,
|
615
|
+
'table footer ',
|
616
|
+
TR_ELT, 'tr', TALIGN_ATTRS, [], []
|
617
|
+
],
|
618
|
+
['th', false, true, false, false, false, :any, false,
|
619
|
+
'table header cell',
|
620
|
+
HTML_FLOW, nil, TH_TD_ATTR, TH_TD_DEPR, []
|
621
|
+
],
|
622
|
+
['thead', false, true, false, false, false, :any, false,
|
623
|
+
'table header ',
|
624
|
+
TR_ELT, 'tr', TALIGN_ATTRS, [], []
|
625
|
+
],
|
626
|
+
['title', false, false, false, false, false, :any, false,
|
627
|
+
'document title ',
|
628
|
+
HTML_PCDATA, nil, I18N_ATTRS, [], []
|
629
|
+
],
|
630
|
+
['tr', false, false, false, false, false, :any, false,
|
631
|
+
'table row ',
|
632
|
+
TR_CONTENTS, 'td', TALIGN_ATTRS, BGCOLOR_ATTR, []
|
633
|
+
],
|
634
|
+
['tt', false, true, false, false, false, :any, true,
|
635
|
+
'teletype or monospaced text style',
|
636
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
637
|
+
],
|
638
|
+
['u', false, true, false, false, true, :loose, true,
|
639
|
+
'underlined text style',
|
640
|
+
HTML_INLINE, nil, [], HTML_ATTRS, []
|
641
|
+
],
|
642
|
+
['ul', false, false, false, false, false, :any, false,
|
643
|
+
'unordered list ',
|
644
|
+
LI_ELT, 'li', HTML_ATTRS, UL_DEPR, []
|
645
|
+
],
|
646
|
+
['var', false, false, false, false, false, :any, true,
|
647
|
+
'instance of a variable or program argument',
|
648
|
+
HTML_INLINE, nil, HTML_ATTRS, [], []
|
649
|
+
]
|
650
|
+
].each do |descriptor|
|
651
|
+
name = descriptor[0]
|
652
|
+
|
653
|
+
begin
|
654
|
+
d = Desc.new(*descriptor)
|
655
|
+
|
656
|
+
# flatten all the attribute lists (Ruby1.9, *[a,b,c] can be
|
657
|
+
# used to flatten a literal list, but not in Ruby1.8).
|
658
|
+
d[:subelts] = d[:subelts].flatten
|
659
|
+
d[:attrs_opt] = d[:attrs_opt].flatten
|
660
|
+
d[:attrs_depr] = d[:attrs_depr].flatten
|
661
|
+
d[:attrs_req] = d[:attrs_req].flatten
|
662
|
+
rescue => e
|
663
|
+
p name
|
664
|
+
raise e
|
665
|
+
end
|
666
|
+
|
667
|
+
DefaultDescriptions[name] = d
|
668
|
+
end
|
669
|
+
end
|
670
|
+
end
|
671
|
+
end
|