nokogiri 1.4.3.1-java → 1.5.0-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/.gemtest +0 -0
- data/CHANGELOG.ja.rdoc +113 -0
- data/CHANGELOG.rdoc +113 -1
- data/Manifest.txt +72 -68
- data/README.ja.rdoc +4 -4
- data/README.rdoc +31 -7
- data/Rakefile +110 -132
- data/bin/nokogiri +7 -3
- data/ext/java/nokogiri/EncodingHandler.java +124 -0
- data/ext/java/nokogiri/HtmlDocument.java +119 -0
- data/ext/java/nokogiri/HtmlElementDescription.java +145 -0
- data/ext/java/nokogiri/HtmlEntityLookup.java +79 -0
- data/ext/java/nokogiri/HtmlSaxParserContext.java +259 -0
- data/ext/java/nokogiri/NokogiriService.java +590 -0
- data/ext/java/nokogiri/XmlAttr.java +180 -0
- data/ext/java/nokogiri/XmlAttributeDecl.java +130 -0
- data/ext/java/nokogiri/XmlCdata.java +84 -0
- data/ext/java/nokogiri/XmlComment.java +86 -0
- data/ext/java/nokogiri/XmlDocument.java +519 -0
- data/ext/java/nokogiri/XmlDocumentFragment.java +223 -0
- data/ext/java/nokogiri/XmlDtd.java +469 -0
- data/ext/java/nokogiri/XmlElement.java +195 -0
- data/ext/java/nokogiri/XmlElementContent.java +382 -0
- data/ext/java/nokogiri/XmlElementDecl.java +152 -0
- data/ext/java/nokogiri/XmlEntityDecl.java +162 -0
- data/ext/java/nokogiri/XmlEntityReference.java +97 -0
- data/ext/java/nokogiri/XmlNamespace.java +183 -0
- data/ext/java/nokogiri/XmlNode.java +1378 -0
- data/ext/java/nokogiri/XmlNodeSet.java +267 -0
- data/ext/java/nokogiri/XmlProcessingInstruction.java +99 -0
- data/ext/java/nokogiri/XmlReader.java +408 -0
- data/ext/java/nokogiri/XmlRelaxng.java +144 -0
- data/ext/java/nokogiri/XmlSaxParserContext.java +367 -0
- data/ext/java/nokogiri/XmlSaxPushParser.java +184 -0
- data/ext/java/nokogiri/XmlSchema.java +324 -0
- data/ext/java/nokogiri/XmlSyntaxError.java +119 -0
- data/ext/java/nokogiri/XmlText.java +119 -0
- data/ext/java/nokogiri/XmlXpathContext.java +199 -0
- data/ext/java/nokogiri/XsltStylesheet.java +197 -0
- data/ext/java/nokogiri/internals/HtmlDomParserContext.java +204 -0
- data/ext/java/nokogiri/internals/NokogiriDocumentCache.java +73 -0
- data/ext/java/nokogiri/internals/NokogiriErrorHandler.java +86 -0
- data/ext/java/nokogiri/internals/NokogiriHandler.java +327 -0
- data/ext/java/nokogiri/internals/NokogiriHelpers.java +639 -0
- data/ext/java/nokogiri/internals/NokogiriNamespaceCache.java +167 -0
- data/ext/java/nokogiri/internals/NokogiriNamespaceContext.java +130 -0
- data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler.java +74 -0
- data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler4NekoHtml.java +121 -0
- data/ext/java/nokogiri/internals/NokogiriStrictErrorHandler.java +79 -0
- data/ext/java/nokogiri/internals/NokogiriXPathFunction.java +141 -0
- data/ext/java/nokogiri/internals/NokogiriXPathFunctionResolver.java +73 -0
- data/ext/java/nokogiri/internals/NokogiriXPathVariableResolver.java +67 -0
- data/ext/java/nokogiri/internals/NokogiriXsltErrorListener.java +86 -0
- data/ext/java/nokogiri/internals/ParserContext.java +276 -0
- data/ext/java/nokogiri/internals/PushInputStream.java +411 -0
- data/ext/java/nokogiri/internals/ReaderNode.java +531 -0
- data/ext/java/nokogiri/internals/SaveContextVisitor.java +567 -0
- data/ext/java/nokogiri/internals/SchemaErrorHandler.java +76 -0
- data/ext/java/nokogiri/internals/XmlDeclHandler.java +42 -0
- data/ext/java/nokogiri/internals/XmlDomParser.java +76 -0
- data/ext/java/nokogiri/internals/XmlDomParserContext.java +244 -0
- data/ext/java/nokogiri/internals/XmlSaxParser.java +65 -0
- data/ext/java/nokogiri/internals/XsltExtensionFunction.java +72 -0
- data/ext/nokogiri/depend +358 -32
- data/ext/nokogiri/extconf.rb +10 -6
- data/ext/nokogiri/nokogiri.c +23 -3
- data/ext/nokogiri/nokogiri.h +7 -2
- data/ext/nokogiri/xml_document.c +9 -0
- data/ext/nokogiri/xml_dtd.c +2 -2
- data/ext/nokogiri/xml_io.c +32 -7
- data/ext/nokogiri/xml_node.c +45 -25
- data/ext/nokogiri/xml_node_set.c +1 -1
- data/ext/nokogiri/xml_relax_ng.c +0 -7
- data/ext/nokogiri/xml_sax_parser.c +14 -7
- data/ext/nokogiri/xml_sax_parser_context.c +40 -0
- data/ext/nokogiri/xml_xpath_context.c +33 -2
- data/ext/nokogiri/xslt_stylesheet.c +128 -6
- 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/css/parser.rb +665 -70
- data/lib/nokogiri/css/parser.y +3 -1
- data/lib/nokogiri/css/parser_extras.rb +91 -0
- data/lib/nokogiri/css/tokenizer.rb +148 -3
- data/lib/nokogiri/css/tokenizer.rex +1 -1
- data/lib/nokogiri/css/xpath_visitor.rb +15 -7
- data/lib/nokogiri/css.rb +5 -3
- data/lib/nokogiri/decorators/slop.rb +5 -3
- data/lib/nokogiri/html/document.rb +142 -19
- data/lib/nokogiri/html/document_fragment.rb +19 -17
- data/lib/nokogiri/html/element_description_defaults.rb +671 -0
- data/lib/nokogiri/html/sax/parser.rb +6 -2
- data/lib/nokogiri/html.rb +1 -0
- data/lib/nokogiri/nokogiri.jar +0 -0
- data/lib/nokogiri/version.rb +76 -26
- data/lib/nokogiri/xml/attribute_decl.rb +1 -1
- data/lib/nokogiri/xml/builder.rb +7 -0
- data/lib/nokogiri/xml/document.rb +43 -2
- data/lib/nokogiri/xml/document_fragment.rb +16 -2
- data/lib/nokogiri/xml/dtd.rb +12 -1
- data/lib/nokogiri/xml/element_decl.rb +1 -1
- data/lib/nokogiri/xml/entity_decl.rb +1 -1
- data/lib/nokogiri/xml/node/save_options.rb +20 -1
- data/lib/nokogiri/xml/node.rb +198 -78
- data/lib/nokogiri/xml/node_set.rb +10 -3
- data/lib/nokogiri/xml/parse_options.rb +8 -0
- data/lib/nokogiri/xml/reader.rb +42 -6
- data/lib/nokogiri/xml/sax/document.rb +4 -2
- data/lib/nokogiri/xml/schema.rb +7 -1
- data/lib/nokogiri/xslt/stylesheet.rb +1 -1
- data/lib/nokogiri/xslt.rb +9 -5
- data/lib/nokogiri.rb +19 -25
- data/lib/xercesImpl.jar +0 -0
- data/nokogiri_help_responses.md +40 -0
- data/tasks/cross_compile.rb +130 -136
- data/tasks/nokogiri.org.rb +18 -0
- data/tasks/test.rb +2 -2
- data/test/css/test_parser.rb +29 -18
- data/test/css/test_tokenizer.rb +8 -0
- data/test/decorators/test_slop.rb +16 -0
- data/test/files/encoding.html +82 -0
- data/test/files/encoding.xhtml +84 -0
- data/test/files/metacharset.html +10 -0
- data/test/files/noencoding.html +47 -0
- data/test/helper.rb +5 -1
- data/test/html/sax/test_parser.rb +65 -3
- data/test/html/test_document.rb +75 -1
- data/test/html/test_document_encoding.rb +61 -0
- data/test/html/test_document_fragment.rb +50 -5
- data/test/html/test_element_description.rb +4 -2
- data/test/html/test_node.rb +9 -0
- data/test/test_memory_leak.rb +20 -35
- data/test/test_nokogiri.rb +14 -20
- data/test/test_reader.rb +23 -6
- data/test/test_xslt_transforms.rb +6 -2
- data/test/xml/node/test_save_options.rb +10 -2
- data/test/xml/sax/test_parser.rb +39 -8
- data/test/xml/sax/test_parser_context.rb +50 -0
- data/test/xml/sax/test_push_parser.rb +18 -1
- data/test/xml/test_attribute_decl.rb +7 -3
- data/test/xml/test_builder.rb +17 -0
- data/test/xml/test_document.rb +34 -5
- data/test/xml/test_document_fragment.rb +14 -2
- data/test/xml/test_dtd.rb +28 -3
- data/test/xml/test_element_content.rb +1 -1
- data/test/xml/test_element_decl.rb +1 -1
- data/test/xml/test_entity_decl.rb +12 -10
- data/test/xml/test_namespace.rb +7 -5
- data/test/xml/test_node.rb +65 -13
- data/test/xml/test_node_reparenting.rb +72 -31
- data/test/xml/test_node_set.rb +57 -0
- data/test/xml/test_schema.rb +5 -0
- data/test/xml/test_xpath.rb +32 -0
- data/test/xslt/test_custom_functions.rb +94 -0
- data/test/xslt/test_exception_handling.rb +37 -0
- metadata +512 -517
- data/deps.rip +0 -5
- data/ext/nokogiri/libcharset-1.dll +0 -0
- data/ext/nokogiri/libexslt.dll +0 -0
- data/ext/nokogiri/libiconv-2.dll +0 -0
- data/ext/nokogiri/libxml2.dll +0 -0
- data/ext/nokogiri/libxslt.dll +0 -0
- data/ext/nokogiri/zlib1.dll +0 -0
- data/lib/nokogiri/css/generated_parser.rb +0 -676
- data/lib/nokogiri/css/generated_tokenizer.rb +0 -146
- data/lib/nokogiri/ffi/encoding_handler.rb +0 -42
- data/lib/nokogiri/ffi/html/document.rb +0 -28
- data/lib/nokogiri/ffi/html/element_description.rb +0 -81
- data/lib/nokogiri/ffi/html/entity_lookup.rb +0 -16
- data/lib/nokogiri/ffi/html/sax/parser_context.rb +0 -38
- data/lib/nokogiri/ffi/io_callbacks.rb +0 -42
- data/lib/nokogiri/ffi/libxml.rb +0 -411
- data/lib/nokogiri/ffi/structs/common_node.rb +0 -38
- data/lib/nokogiri/ffi/structs/html_elem_desc.rb +0 -24
- data/lib/nokogiri/ffi/structs/html_entity_desc.rb +0 -13
- data/lib/nokogiri/ffi/structs/xml_alloc.rb +0 -16
- data/lib/nokogiri/ffi/structs/xml_attr.rb +0 -19
- data/lib/nokogiri/ffi/structs/xml_attribute.rb +0 -27
- data/lib/nokogiri/ffi/structs/xml_buffer.rb +0 -16
- data/lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb +0 -11
- data/lib/nokogiri/ffi/structs/xml_document.rb +0 -117
- data/lib/nokogiri/ffi/structs/xml_dtd.rb +0 -28
- data/lib/nokogiri/ffi/structs/xml_element.rb +0 -26
- data/lib/nokogiri/ffi/structs/xml_element_content.rb +0 -17
- data/lib/nokogiri/ffi/structs/xml_entity.rb +0 -32
- data/lib/nokogiri/ffi/structs/xml_enumeration.rb +0 -12
- data/lib/nokogiri/ffi/structs/xml_node.rb +0 -28
- data/lib/nokogiri/ffi/structs/xml_node_set.rb +0 -53
- data/lib/nokogiri/ffi/structs/xml_notation.rb +0 -11
- data/lib/nokogiri/ffi/structs/xml_ns.rb +0 -15
- data/lib/nokogiri/ffi/structs/xml_parser_context.rb +0 -19
- data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +0 -14
- data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +0 -51
- data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +0 -124
- data/lib/nokogiri/ffi/structs/xml_schema.rb +0 -13
- data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +0 -31
- data/lib/nokogiri/ffi/structs/xml_text_reader.rb +0 -12
- data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +0 -38
- data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +0 -35
- data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +0 -20
- data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +0 -13
- data/lib/nokogiri/ffi/weak_bucket.rb +0 -40
- data/lib/nokogiri/ffi/xml/attr.rb +0 -41
- data/lib/nokogiri/ffi/xml/attribute_decl.rb +0 -27
- data/lib/nokogiri/ffi/xml/cdata.rb +0 -19
- data/lib/nokogiri/ffi/xml/comment.rb +0 -18
- data/lib/nokogiri/ffi/xml/document.rb +0 -166
- data/lib/nokogiri/ffi/xml/document_fragment.rb +0 -21
- data/lib/nokogiri/ffi/xml/dtd.rb +0 -67
- data/lib/nokogiri/ffi/xml/element_content.rb +0 -43
- data/lib/nokogiri/ffi/xml/element_decl.rb +0 -19
- data/lib/nokogiri/ffi/xml/entity_decl.rb +0 -36
- data/lib/nokogiri/ffi/xml/entity_reference.rb +0 -19
- data/lib/nokogiri/ffi/xml/namespace.rb +0 -44
- data/lib/nokogiri/ffi/xml/node.rb +0 -554
- data/lib/nokogiri/ffi/xml/node_set.rb +0 -149
- data/lib/nokogiri/ffi/xml/processing_instruction.rb +0 -20
- data/lib/nokogiri/ffi/xml/reader.rb +0 -236
- data/lib/nokogiri/ffi/xml/relax_ng.rb +0 -85
- data/lib/nokogiri/ffi/xml/sax/parser.rb +0 -135
- data/lib/nokogiri/ffi/xml/sax/parser_context.rb +0 -67
- data/lib/nokogiri/ffi/xml/sax/push_parser.rb +0 -51
- data/lib/nokogiri/ffi/xml/schema.rb +0 -109
- data/lib/nokogiri/ffi/xml/syntax_error.rb +0 -98
- data/lib/nokogiri/ffi/xml/text.rb +0 -18
- data/lib/nokogiri/ffi/xml/xpath.rb +0 -9
- data/lib/nokogiri/ffi/xml/xpath_context.rb +0 -148
- data/lib/nokogiri/ffi/xslt/stylesheet.rb +0 -53
- data/lib/nokogiri/version_warning.rb +0 -14
- data/test/ffi/test_document.rb +0 -35
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
module Nokogiri
|
|
2
|
-
module XML
|
|
3
|
-
class ProcessingInstruction < Node
|
|
4
|
-
|
|
5
|
-
attr_accessor :cstruct # :nodoc:
|
|
6
|
-
|
|
7
|
-
def self.new(document, name, content, *rest) # :nodoc:
|
|
8
|
-
node_ptr = LibXML.xmlNewDocPI(document.cstruct, name.to_s, content.to_s)
|
|
9
|
-
node_cstruct = LibXML::XmlNode.new(node_ptr)
|
|
10
|
-
node_cstruct.keep_reference_from_document!
|
|
11
|
-
|
|
12
|
-
node = Node.wrap(node_cstruct, self)
|
|
13
|
-
node.send :initialize, document, name, content, *rest
|
|
14
|
-
yield node if block_given?
|
|
15
|
-
node
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
# :stopdoc:
|
|
2
|
-
module Nokogiri
|
|
3
|
-
module XML
|
|
4
|
-
class Reader
|
|
5
|
-
|
|
6
|
-
attr_accessor :cstruct
|
|
7
|
-
attr_accessor :reader_callback
|
|
8
|
-
|
|
9
|
-
def default?
|
|
10
|
-
LibXML.xmlTextReaderIsDefault(cstruct) == 1
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def value?
|
|
14
|
-
LibXML.xmlTextReaderHasValue(cstruct) == 1
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def attributes?
|
|
18
|
-
# this implementation of xmlTextReaderHasAttributes explicitly includes
|
|
19
|
-
# namespaces and properties, because some earlier versions ignore
|
|
20
|
-
# namespaces.
|
|
21
|
-
node_ptr = LibXML.xmlTextReaderCurrentNode(cstruct)
|
|
22
|
-
return false if node_ptr.null?
|
|
23
|
-
node = LibXML::XmlNode.new node_ptr
|
|
24
|
-
node[:type] == Node::ELEMENT_NODE && (!node[:properties].null? || !node[:nsDef].null?)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def namespaces
|
|
28
|
-
return {} unless attributes?
|
|
29
|
-
|
|
30
|
-
ptr = LibXML.xmlTextReaderExpand(cstruct)
|
|
31
|
-
return nil if ptr.null?
|
|
32
|
-
|
|
33
|
-
Reader.node_namespaces(ptr)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def attr_nodes
|
|
37
|
-
return {} unless attributes?
|
|
38
|
-
|
|
39
|
-
ptr = LibXML.xmlTextReaderExpand(cstruct)
|
|
40
|
-
return nil if ptr.null?
|
|
41
|
-
node_struct = LibXML::XmlNode.new(ptr)
|
|
42
|
-
|
|
43
|
-
Node.node_properties node_struct
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def attribute_at(index)
|
|
47
|
-
return nil if index.nil?
|
|
48
|
-
index = index.to_i
|
|
49
|
-
attr_ptr = LibXML.xmlTextReaderGetAttributeNo(cstruct, index)
|
|
50
|
-
return nil if attr_ptr.null?
|
|
51
|
-
|
|
52
|
-
attr = attr_ptr.read_string
|
|
53
|
-
LibXML.xmlFree attr_ptr
|
|
54
|
-
attr
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def attribute(name)
|
|
58
|
-
return nil if name.nil?
|
|
59
|
-
attr_ptr = LibXML.xmlTextReaderGetAttribute(cstruct, name.to_s)
|
|
60
|
-
if attr_ptr.null?
|
|
61
|
-
# this section is an attempt to workaround older versions of libxml that
|
|
62
|
-
# don't handle namespaces properly in all attribute-and-friends functions
|
|
63
|
-
prefix_ptr = FFI::Buffer.new :pointer
|
|
64
|
-
localname = LibXML.xmlSplitQName2(name, prefix_ptr)
|
|
65
|
-
prefix = prefix_ptr.get_pointer(0)
|
|
66
|
-
if ! localname.null?
|
|
67
|
-
attr_ptr = LibXML.xmlTextReaderLookupNamespace(cstruct, localname.read_string)
|
|
68
|
-
LibXML.xmlFree(localname)
|
|
69
|
-
else
|
|
70
|
-
if prefix.null? || prefix.read_string.length == 0
|
|
71
|
-
attr_ptr = LibXML.xmlTextReaderLookupNamespace(cstruct, nil)
|
|
72
|
-
else
|
|
73
|
-
attr_ptr = LibXML.xmlTextReaderLookupNamespace(cstruct, prefix.read_string)
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
LibXML.xmlFree(prefix)
|
|
77
|
-
end
|
|
78
|
-
return nil if attr_ptr.null?
|
|
79
|
-
|
|
80
|
-
attr = attr_ptr.read_string
|
|
81
|
-
LibXML.xmlFree(attr_ptr)
|
|
82
|
-
attr
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def attribute_count
|
|
86
|
-
count = LibXML.xmlTextReaderAttributeCount(cstruct)
|
|
87
|
-
count == -1 ? nil : count
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def depth
|
|
91
|
-
val = LibXML.xmlTextReaderDepth(cstruct)
|
|
92
|
-
val == -1 ? nil : val
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
def xml_version
|
|
96
|
-
val = LibXML.xmlTextReaderConstXmlVersion(cstruct)
|
|
97
|
-
val.null? ? nil : val.read_string
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
def lang
|
|
101
|
-
val = LibXML.xmlTextReaderConstXmlLang(cstruct)
|
|
102
|
-
val.null? ? nil : val.read_string
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
def value
|
|
106
|
-
val = LibXML.xmlTextReaderConstValue(cstruct)
|
|
107
|
-
val.null? ? nil : val.read_string
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
def prefix
|
|
111
|
-
val = LibXML.xmlTextReaderConstPrefix(cstruct)
|
|
112
|
-
val.null? ? nil : val.read_string
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
def namespace_uri
|
|
116
|
-
val = LibXML.xmlTextReaderConstNamespaceUri(cstruct)
|
|
117
|
-
val.null? ? nil : val.read_string
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
def local_name
|
|
121
|
-
val = LibXML.xmlTextReaderConstLocalName(cstruct)
|
|
122
|
-
val.null? ? nil : val.read_string
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
def name
|
|
126
|
-
val = LibXML.xmlTextReaderConstName(cstruct)
|
|
127
|
-
val.null? ? nil : val.read_string
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
def base_uri
|
|
131
|
-
val = LibXML.xmlTextReaderConstBaseUri(cstruct)
|
|
132
|
-
val.null? ? nil : val.read_string
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
def state
|
|
136
|
-
LibXML.xmlTextReaderReadState(cstruct)
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
def read
|
|
140
|
-
error_list = self.errors
|
|
141
|
-
|
|
142
|
-
LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(error_list))
|
|
143
|
-
ret = LibXML.xmlTextReaderRead(cstruct)
|
|
144
|
-
LibXML.xmlSetStructuredErrorFunc(nil, nil)
|
|
145
|
-
|
|
146
|
-
return self if ret == 1
|
|
147
|
-
return nil if ret == 0
|
|
148
|
-
|
|
149
|
-
error = LibXML.xmlGetLastError()
|
|
150
|
-
if error
|
|
151
|
-
raise SyntaxError.wrap(error)
|
|
152
|
-
else
|
|
153
|
-
raise RuntimeError, "Error pulling: #{ret}"
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
nil
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
def inner_xml
|
|
160
|
-
string_ptr = LibXML.xmlTextReaderReadInnerXml(cstruct)
|
|
161
|
-
return nil if string_ptr.null?
|
|
162
|
-
string = string_ptr.read_string
|
|
163
|
-
LibXML.xmlFree(string_ptr)
|
|
164
|
-
string
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
def outer_xml
|
|
168
|
-
string_ptr = LibXML.xmlTextReaderReadOuterXml(cstruct)
|
|
169
|
-
return nil if string_ptr.null?
|
|
170
|
-
string = string_ptr.read_string
|
|
171
|
-
LibXML.xmlFree(string_ptr)
|
|
172
|
-
string
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
def node_type
|
|
176
|
-
LibXML.xmlTextReaderNodeType(cstruct)
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
def empty_element?
|
|
180
|
-
LibXML.xmlTextReaderIsEmptyElement(cstruct) != 0
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
def self.from_memory(buffer, url=nil, encoding=nil, options=0)
|
|
184
|
-
raise(ArgumentError, "string cannot be nil") if buffer.nil?
|
|
185
|
-
|
|
186
|
-
memory = FFI::MemoryPointer.new(buffer.length) # we need to manage native memory lifecycle
|
|
187
|
-
memory.put_bytes(0, buffer)
|
|
188
|
-
reader_ptr = LibXML.xmlReaderForMemory(memory, memory.total, url, encoding, options)
|
|
189
|
-
raise(RuntimeError, "couldn't create a reader") if reader_ptr.null?
|
|
190
|
-
|
|
191
|
-
reader = allocate
|
|
192
|
-
reader.cstruct = LibXML::XmlTextReader.new(reader_ptr)
|
|
193
|
-
reader.send(:initialize, memory, url, encoding)
|
|
194
|
-
reader
|
|
195
|
-
end
|
|
196
|
-
|
|
197
|
-
def self.from_io(io, url=nil, encoding=nil, options=0)
|
|
198
|
-
raise(ArgumentError, "io cannot be nil") if io.nil?
|
|
199
|
-
|
|
200
|
-
cb = IoCallbacks.reader(io) # we will keep a reference to prevent it from being GC'd
|
|
201
|
-
reader_ptr = LibXML.xmlReaderForIO(cb, nil, nil, url, encoding, options)
|
|
202
|
-
raise "couldn't create a parser" if reader_ptr.null?
|
|
203
|
-
|
|
204
|
-
reader = allocate
|
|
205
|
-
reader.cstruct = LibXML::XmlTextReader.new(reader_ptr)
|
|
206
|
-
reader.send(:initialize, io, url, encoding)
|
|
207
|
-
reader.reader_callback = cb
|
|
208
|
-
reader
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
private
|
|
212
|
-
|
|
213
|
-
class << self
|
|
214
|
-
def node_namespaces(ptr)
|
|
215
|
-
cstruct = LibXML::XmlNode.new(ptr)
|
|
216
|
-
ahash = {}
|
|
217
|
-
return ahash unless cstruct[:type] == Node::ELEMENT_NODE
|
|
218
|
-
ns = cstruct[:nsDef]
|
|
219
|
-
while ! ns.null?
|
|
220
|
-
ns_cstruct = LibXML::XmlNs.new(ns)
|
|
221
|
-
prefix = ns_cstruct[:prefix]
|
|
222
|
-
key = if prefix.nil? || prefix.empty?
|
|
223
|
-
"xmlns"
|
|
224
|
-
else
|
|
225
|
-
"xmlns:#{prefix}"
|
|
226
|
-
end
|
|
227
|
-
ahash[key] = ns_cstruct[:href] # TODO: encoding?
|
|
228
|
-
ns = ns_cstruct[:next] # TODO: encoding?
|
|
229
|
-
end
|
|
230
|
-
ahash
|
|
231
|
-
end
|
|
232
|
-
end
|
|
233
|
-
end
|
|
234
|
-
end
|
|
235
|
-
end
|
|
236
|
-
# :startdoc:
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
module Nokogiri
|
|
2
|
-
module XML
|
|
3
|
-
class RelaxNG < Schema
|
|
4
|
-
# :stopdoc:
|
|
5
|
-
def validate_document document
|
|
6
|
-
errors = []
|
|
7
|
-
|
|
8
|
-
ctx = LibXML.xmlRelaxNGNewValidCtxt(cstruct)
|
|
9
|
-
raise RuntimeError.new("Could not create a validation context") if ctx.null?
|
|
10
|
-
|
|
11
|
-
LibXML.xmlRelaxNGSetValidStructuredErrors(ctx,
|
|
12
|
-
SyntaxError.error_array_pusher(errors), nil) unless Nokogiri.is_2_6_16?
|
|
13
|
-
|
|
14
|
-
LibXML.xmlRelaxNGValidateDoc(ctx, document.cstruct)
|
|
15
|
-
|
|
16
|
-
LibXML.xmlRelaxNGFreeValidCtxt(ctx)
|
|
17
|
-
|
|
18
|
-
errors
|
|
19
|
-
end
|
|
20
|
-
private :validate_document
|
|
21
|
-
|
|
22
|
-
def self.read_memory content
|
|
23
|
-
content_copy = FFI::MemoryPointer.from_string(content)
|
|
24
|
-
ctx = LibXML.xmlRelaxNGNewMemParserCtxt(content_copy, content.length)
|
|
25
|
-
|
|
26
|
-
errors = []
|
|
27
|
-
|
|
28
|
-
LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(errors))
|
|
29
|
-
LibXML.xmlRelaxNGSetParserStructuredErrors(
|
|
30
|
-
ctx, SyntaxError.error_array_pusher(errors), nil) unless Nokogiri.is_2_6_16?
|
|
31
|
-
|
|
32
|
-
schema_ptr = LibXML.xmlRelaxNGParse(ctx)
|
|
33
|
-
|
|
34
|
-
LibXML.xmlSetStructuredErrorFunc(nil, nil)
|
|
35
|
-
LibXML.xmlRelaxNGFreeParserCtxt(ctx)
|
|
36
|
-
|
|
37
|
-
if schema_ptr.null?
|
|
38
|
-
error = LibXML.xmlGetLastError
|
|
39
|
-
if error
|
|
40
|
-
raise SyntaxError.wrap(error)
|
|
41
|
-
else
|
|
42
|
-
raise RuntimeError, "Could not parse document"
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
schema = allocate
|
|
47
|
-
schema.cstruct = LibXML::XmlRelaxNG.new schema_ptr
|
|
48
|
-
schema.errors = errors
|
|
49
|
-
schema
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def self.from_document document
|
|
53
|
-
ctx = LibXML.xmlRelaxNGNewDocParserCtxt document.document.cstruct
|
|
54
|
-
|
|
55
|
-
errors = []
|
|
56
|
-
|
|
57
|
-
LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(errors))
|
|
58
|
-
LibXML.xmlRelaxNGSetParserStructuredErrors(
|
|
59
|
-
ctx, SyntaxError.error_array_pusher(errors), nil) unless Nokogiri.is_2_6_16?
|
|
60
|
-
|
|
61
|
-
schema_ptr = LibXML.xmlRelaxNGParse(ctx)
|
|
62
|
-
|
|
63
|
-
LibXML.xmlSetStructuredErrorFunc(nil, nil)
|
|
64
|
-
LibXML.xmlRelaxNGFreeParserCtxt(ctx) unless Nokogiri.is_2_6_16?
|
|
65
|
-
|
|
66
|
-
if schema_ptr.null?
|
|
67
|
-
error = LibXML.xmlGetLastError
|
|
68
|
-
if error
|
|
69
|
-
raise SyntaxError.wrap(error)
|
|
70
|
-
else
|
|
71
|
-
raise RuntimeError, "Could not parse document"
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
LibXML.xmlRelaxNGFreeParserCtxt(ctx) if Nokogiri.is_2_6_16?
|
|
76
|
-
|
|
77
|
-
schema = allocate
|
|
78
|
-
schema.cstruct = LibXML::XmlRelaxNG.new schema_ptr
|
|
79
|
-
schema.errors = errors
|
|
80
|
-
schema
|
|
81
|
-
end
|
|
82
|
-
# :startdoc:
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
module Nokogiri
|
|
2
|
-
module XML
|
|
3
|
-
module SAX
|
|
4
|
-
class Parser
|
|
5
|
-
# :stopdoc:
|
|
6
|
-
|
|
7
|
-
attr_accessor :cstruct
|
|
8
|
-
|
|
9
|
-
def self.new(doc = XML::SAX::Document.new, encoding = 'UTF-8')
|
|
10
|
-
parser = allocate
|
|
11
|
-
parser.document = doc
|
|
12
|
-
parser.encoding = encoding
|
|
13
|
-
parser.cstruct = LibXML::XmlSaxHandler.allocate
|
|
14
|
-
parser.send(:setup_lambdas)
|
|
15
|
-
parser.instance_variable_set(:@ctxt, nil)
|
|
16
|
-
parser
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
private
|
|
20
|
-
|
|
21
|
-
def setup_lambdas
|
|
22
|
-
@closures = {} # we need to keep references to the closures to avoid GC
|
|
23
|
-
|
|
24
|
-
[ :startDocument, :endDocument, :startElement, :endElement, :characters,
|
|
25
|
-
:comment, :warning, :error, :cdataBlock, :startElementNs, :endElementNs ].each do |sym|
|
|
26
|
-
@closures[sym] = lambda { |*args| send("__internal__#{sym}", *args) } # "i'm your private dancer", etc.
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
@closures.each { |k,v| cstruct[k] = v }
|
|
30
|
-
|
|
31
|
-
cstruct[:initialized] = Nokogiri::LibXML::XmlSaxHandler::XML_SAX2_MAGIC
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def __internal__startDocument(_)
|
|
35
|
-
if @ctxt && @ctxt[:html] == 0 && @ctxt[:standalone] != -1
|
|
36
|
-
standalone = {
|
|
37
|
-
0 => 'no',
|
|
38
|
-
1 => 'yes',
|
|
39
|
-
}[@ctxt[:standalone]]
|
|
40
|
-
|
|
41
|
-
@document.xmldecl @ctxt[:version], @ctxt[:encoding], standalone
|
|
42
|
-
end
|
|
43
|
-
@document.start_document
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def __internal__endDocument(_)
|
|
47
|
-
@document.end_document
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def __internal__startElement(_, name, attributes)
|
|
51
|
-
attrs = attributes.null? ? [] : attributes.get_array_of_string(0)
|
|
52
|
-
@document.start_element name, attrs
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def __internal__endElement(_, name)
|
|
56
|
-
@document.end_element name
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def __internal__characters(_, data, data_length)
|
|
60
|
-
@document.characters data.slice(0, data_length)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def __internal__comment(_, data)
|
|
64
|
-
@document.comment data
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def __internal__warning(_, msg)
|
|
68
|
-
# TODO: vasprintf here
|
|
69
|
-
@document.warning(msg)
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def __internal__error(_, msg)
|
|
73
|
-
# TODO: vasprintf here
|
|
74
|
-
@document.error(msg)
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def __internal__cdataBlock(_, data, data_length)
|
|
78
|
-
@document.cdata_block data.slice(0, data_length)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def __internal__startElementNs(_, localname, prefix, uri, nb_namespaces, namespaces, nb_attributes, nb_defaulted, attributes)
|
|
82
|
-
localname = localname.null? ? nil : localname.read_string
|
|
83
|
-
prefix = prefix .null? ? nil : prefix .read_string
|
|
84
|
-
uri = uri .null? ? nil : uri .read_string
|
|
85
|
-
|
|
86
|
-
attr_list = []
|
|
87
|
-
ns_list = []
|
|
88
|
-
|
|
89
|
-
if ! attributes.null?
|
|
90
|
-
# Each attribute is an array of [localname, prefix, URI, value, end]
|
|
91
|
-
(0..(nb_attributes-1)*5).step(5) do |j|
|
|
92
|
-
key = attributes.get_pointer(LibXML.pointer_offset(j)).read_string
|
|
93
|
-
attr_prefix = attributes.get_pointer(LibXML.pointer_offset(j + 1))
|
|
94
|
-
attr_prefix = attr_prefix.null? ? nil : attr_prefix.read_string
|
|
95
|
-
attr_uri = attributes.get_pointer(LibXML.pointer_offset(j + 2))
|
|
96
|
-
attr_uri = attr_uri.null? ? nil : attr_uri.read_string
|
|
97
|
-
value_length = attributes.get_pointer(LibXML.pointer_offset(j+4)).address \
|
|
98
|
-
- attributes.get_pointer(LibXML.pointer_offset(j+3)).address
|
|
99
|
-
value = attributes.get_pointer(LibXML.pointer_offset(j+3)).get_string(0, value_length)
|
|
100
|
-
attr_list << Attribute.new(key, attr_prefix, attr_uri, value)
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
if ! namespaces.null?
|
|
105
|
-
(0..(nb_namespaces-1)*2).step(2) do |j|
|
|
106
|
-
key = namespaces.get_pointer(LibXML.pointer_offset(j))
|
|
107
|
-
key = key.null? ? nil : key.read_string
|
|
108
|
-
value = namespaces.get_pointer(LibXML.pointer_offset(j+1))
|
|
109
|
-
value = value.null? ? nil : value.read_string
|
|
110
|
-
ns_list << [key, value]
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
@document.start_element_namespace(
|
|
115
|
-
localname,
|
|
116
|
-
attr_list,
|
|
117
|
-
prefix,
|
|
118
|
-
uri,
|
|
119
|
-
ns_list
|
|
120
|
-
)
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
def __internal__endElementNs(_, localname, prefix, uri)
|
|
124
|
-
localname = localname.null? ? nil : localname.read_string
|
|
125
|
-
prefix = prefix .null? ? nil : prefix .read_string
|
|
126
|
-
uri = uri .null? ? nil : uri .read_string
|
|
127
|
-
|
|
128
|
-
@document.end_element_namespace(localname, prefix, uri)
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
# :startdoc:
|
|
132
|
-
end
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
end
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
# :stopdoc:
|
|
2
|
-
module Nokogiri
|
|
3
|
-
module XML
|
|
4
|
-
module SAX
|
|
5
|
-
class ParserContext
|
|
6
|
-
attr_accessor :cstruct
|
|
7
|
-
attr_accessor :reader_callback
|
|
8
|
-
|
|
9
|
-
def self.memory data
|
|
10
|
-
raise(ArgumentError, 'data cannot be nil') if data.nil?
|
|
11
|
-
raise('data cannot be empty') if data.length == 0
|
|
12
|
-
ctx = LibXML::XmlParserContext.new(
|
|
13
|
-
LibXML.xmlCreateMemoryParserCtxt data, data.length
|
|
14
|
-
)
|
|
15
|
-
pc = allocate
|
|
16
|
-
pc.cstruct = ctx
|
|
17
|
-
pc
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def self.io io, encoding
|
|
21
|
-
reader_callback = IoCallbacks.reader(io) # keep a reference to prevent it from being GC'd
|
|
22
|
-
sax_ctx = LibXML.xmlCreateIOParserCtxt(
|
|
23
|
-
nil,
|
|
24
|
-
nil,
|
|
25
|
-
reader_callback,
|
|
26
|
-
nil,
|
|
27
|
-
nil,
|
|
28
|
-
encoding
|
|
29
|
-
)
|
|
30
|
-
pc = allocate
|
|
31
|
-
pc.cstruct = LibXML::XmlParserContext.new sax_ctx
|
|
32
|
-
pc.reader_callback = reader_callback
|
|
33
|
-
pc
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def self.file filename
|
|
37
|
-
ctx = LibXML.xmlCreateFileParserCtxt filename
|
|
38
|
-
pc = allocate
|
|
39
|
-
pc.cstruct = LibXML::XmlParserContext.new ctx
|
|
40
|
-
pc
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def parse_with sax_handler, type = :xml
|
|
44
|
-
raise ArgumentError unless XML::SAX::Parser === sax_handler
|
|
45
|
-
sax = sax_handler.cstruct
|
|
46
|
-
cstruct[:sax] = sax
|
|
47
|
-
|
|
48
|
-
sax_handler.instance_variable_set(:@ctxt, cstruct)
|
|
49
|
-
|
|
50
|
-
LibXML.send(:"#{type}ParseDocument", cstruct)
|
|
51
|
-
|
|
52
|
-
cstruct[:sax] = nil
|
|
53
|
-
LibXML.xmlFreeDoc cstruct[:myDoc] unless cstruct[:myDoc].null?
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def replace_entities=(value)
|
|
57
|
-
self.cstruct[:replaceEntities] = value ? 1 : 0
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def replace_entities
|
|
61
|
-
self.cstruct[:replaceEntities] == 0 ? false : true
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
# :startdoc:
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
module Nokogiri
|
|
2
|
-
module XML
|
|
3
|
-
module SAX
|
|
4
|
-
class PushParser
|
|
5
|
-
|
|
6
|
-
attr_accessor :cstruct # :nodoc:
|
|
7
|
-
|
|
8
|
-
def options
|
|
9
|
-
cstruct[:options]
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def options=(user_options)
|
|
13
|
-
if LibXML.xmlCtxtUseOptions(cstruct, user_options) != 0
|
|
14
|
-
raise RuntimeError, "Cannot set XML parser context options"
|
|
15
|
-
end
|
|
16
|
-
nil
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
private
|
|
20
|
-
|
|
21
|
-
def native_write(chunk, last_chunk) # :nodoc:
|
|
22
|
-
size = 0
|
|
23
|
-
unless chunk.nil?
|
|
24
|
-
chunk = chunk.to_s
|
|
25
|
-
size = chunk.length
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
if LibXML.xmlParseChunk(cstruct, chunk, size, last_chunk ? 1 : 0) != 0
|
|
29
|
-
if (cstruct[:options] & XML::ParseOptions::RECOVER) == 0
|
|
30
|
-
error = LibXML.xmlCtxtGetLastError(cstruct)
|
|
31
|
-
raise Nokogiri::XML::SyntaxError.wrap(error)
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
self
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def initialize_native(sax, filename) # :nodoc:
|
|
39
|
-
filename = filename.to_s unless filename.nil?
|
|
40
|
-
ctx_ptr = LibXML.xmlCreatePushParserCtxt(
|
|
41
|
-
sax.cstruct, nil, nil, 0, filename
|
|
42
|
-
)
|
|
43
|
-
raise(RuntimeError, "Could not create a parser context") if ctx_ptr.null?
|
|
44
|
-
self.cstruct = LibXML::XmlSaxPushParserContext.new(ctx_ptr) ;
|
|
45
|
-
self
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
module Nokogiri
|
|
2
|
-
module XML
|
|
3
|
-
class Schema
|
|
4
|
-
# :stopdoc:
|
|
5
|
-
|
|
6
|
-
attr_accessor :cstruct
|
|
7
|
-
|
|
8
|
-
def validate_document document
|
|
9
|
-
errors = []
|
|
10
|
-
|
|
11
|
-
ctx = LibXML.xmlSchemaNewValidCtxt(cstruct)
|
|
12
|
-
raise RuntimeError.new("Could not create a validation context") if ctx.null?
|
|
13
|
-
|
|
14
|
-
LibXML.xmlSchemaSetValidStructuredErrors(ctx,
|
|
15
|
-
SyntaxError.error_array_pusher(errors), nil) unless Nokogiri.is_2_6_16?
|
|
16
|
-
|
|
17
|
-
LibXML.xmlSchemaValidateDoc(ctx, document.cstruct)
|
|
18
|
-
|
|
19
|
-
LibXML.xmlSchemaFreeValidCtxt(ctx)
|
|
20
|
-
|
|
21
|
-
errors
|
|
22
|
-
end
|
|
23
|
-
private :validate_document
|
|
24
|
-
|
|
25
|
-
def validate_file filename
|
|
26
|
-
errors = []
|
|
27
|
-
|
|
28
|
-
ctx = LibXML.xmlSchemaNewValidCtxt(cstruct)
|
|
29
|
-
raise RuntimeError.new("Could not create a validation context") if ctx.null?
|
|
30
|
-
|
|
31
|
-
LibXML.xmlSchemaSetValidStructuredErrors(ctx,
|
|
32
|
-
SyntaxError.error_array_pusher(errors), nil) unless Nokogiri.is_2_6_16?
|
|
33
|
-
|
|
34
|
-
LibXML.xmlSchemaValidateFile(ctx, filename, 0)
|
|
35
|
-
|
|
36
|
-
LibXML.xmlSchemaFreeValidCtxt(ctx)
|
|
37
|
-
|
|
38
|
-
errors
|
|
39
|
-
end
|
|
40
|
-
private :validate_document
|
|
41
|
-
|
|
42
|
-
def self.read_memory content
|
|
43
|
-
content_copy = FFI::MemoryPointer.from_string(content)
|
|
44
|
-
ctx = LibXML.xmlSchemaNewMemParserCtxt(content_copy, content.length)
|
|
45
|
-
|
|
46
|
-
errors = []
|
|
47
|
-
|
|
48
|
-
LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(errors))
|
|
49
|
-
LibXML.xmlSchemaSetParserStructuredErrors(ctx, SyntaxError.error_array_pusher(errors), nil) unless Nokogiri.is_2_6_16?
|
|
50
|
-
|
|
51
|
-
schema_ptr = LibXML.xmlSchemaParse(ctx)
|
|
52
|
-
|
|
53
|
-
LibXML.xmlSetStructuredErrorFunc(nil, nil)
|
|
54
|
-
LibXML.xmlSchemaFreeParserCtxt(ctx)
|
|
55
|
-
|
|
56
|
-
if schema_ptr.null?
|
|
57
|
-
error = LibXML.xmlGetLastError
|
|
58
|
-
if error
|
|
59
|
-
raise SyntaxError.wrap(error)
|
|
60
|
-
else
|
|
61
|
-
raise RuntimeError, "Could not parse document"
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
schema = allocate
|
|
66
|
-
schema.cstruct = LibXML::XmlSchema.new schema_ptr
|
|
67
|
-
schema.errors = errors
|
|
68
|
-
schema
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def self.from_document document
|
|
72
|
-
ctx = LibXML.xmlSchemaNewDocParserCtxt(document.document.cstruct)
|
|
73
|
-
|
|
74
|
-
errors = []
|
|
75
|
-
|
|
76
|
-
LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(errors))
|
|
77
|
-
unless Nokogiri.is_2_6_16?
|
|
78
|
-
LibXML.xmlSchemaSetParserStructuredErrors(
|
|
79
|
-
ctx,
|
|
80
|
-
SyntaxError.error_array_pusher(errors),
|
|
81
|
-
nil
|
|
82
|
-
)
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
schema_ptr = LibXML.xmlSchemaParse(ctx)
|
|
86
|
-
|
|
87
|
-
LibXML.xmlSetStructuredErrorFunc(nil, nil)
|
|
88
|
-
LibXML.xmlSchemaFreeParserCtxt(ctx)
|
|
89
|
-
|
|
90
|
-
if schema_ptr.null?
|
|
91
|
-
error = LibXML.xmlGetLastError
|
|
92
|
-
if error
|
|
93
|
-
raise SyntaxError.wrap(error)
|
|
94
|
-
else
|
|
95
|
-
raise RuntimeError, "Could not parse document"
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
schema = allocate
|
|
100
|
-
schema.cstruct = LibXML::XmlSchema.new schema_ptr
|
|
101
|
-
schema.errors = errors
|
|
102
|
-
schema
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
# :startdoc:
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
|