nokogiri 1.4.7 → 1.5.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of nokogiri might be problematic. Click here for more details.
- data/CHANGELOG.ja.rdoc +8 -83
- data/CHANGELOG.rdoc +6 -80
- data/Manifest.txt +4 -74
- data/README.ja.rdoc +5 -1
- data/README.rdoc +8 -22
- data/Rakefile +79 -60
- data/bin/nokogiri +1 -6
- data/deps.rip +5 -0
- data/ext/nokogiri/extconf.rb +32 -53
- data/ext/nokogiri/nokogiri.c +0 -2
- data/ext/nokogiri/nokogiri.h +0 -9
- data/ext/nokogiri/xml_document.c +0 -14
- data/ext/nokogiri/xml_dtd.c +2 -2
- data/ext/nokogiri/xml_io.c +7 -32
- data/ext/nokogiri/xml_node.c +31 -103
- data/ext/nokogiri/xml_node_set.c +8 -8
- data/ext/nokogiri/xml_reader.c +1 -20
- data/ext/nokogiri/xml_sax_parser.c +3 -5
- data/ext/nokogiri/xml_sax_parser_context.c +0 -40
- data/ext/nokogiri/xml_xpath_context.c +2 -35
- data/ext/nokogiri/xslt_stylesheet.c +6 -124
- data/lib/nokogiri.rb +7 -3
- data/lib/nokogiri/css.rb +3 -6
- data/lib/nokogiri/css/generated_parser.rb +669 -0
- data/lib/nokogiri/css/generated_tokenizer.rb +145 -0
- data/lib/nokogiri/css/parser.rb +70 -665
- data/lib/nokogiri/css/parser.y +1 -6
- data/lib/nokogiri/css/tokenizer.rb +3 -148
- data/lib/nokogiri/css/tokenizer.rex +1 -1
- data/lib/nokogiri/css/xpath_visitor.rb +14 -16
- data/lib/nokogiri/decorators/slop.rb +3 -5
- data/lib/nokogiri/html.rb +3 -2
- data/lib/nokogiri/html/document.rb +18 -134
- data/lib/nokogiri/html/document_fragment.rb +21 -26
- data/lib/nokogiri/html/element_description_defaults.rb +671 -0
- data/lib/nokogiri/html/sax/parser.rb +2 -6
- data/lib/nokogiri/version.rb +4 -9
- data/lib/nokogiri/xml/attribute_decl.rb +1 -1
- data/lib/nokogiri/xml/builder.rb +1 -1
- data/lib/nokogiri/xml/document.rb +3 -27
- data/lib/nokogiri/xml/document_fragment.rb +2 -9
- data/lib/nokogiri/xml/dtd.rb +1 -12
- data/lib/nokogiri/xml/element_decl.rb +1 -1
- data/lib/nokogiri/xml/entity_decl.rb +1 -1
- data/lib/nokogiri/xml/node.rb +75 -172
- data/lib/nokogiri/xml/node/save_options.rb +0 -10
- data/lib/nokogiri/xml/node_set.rb +3 -28
- data/lib/nokogiri/xml/parse_options.rb +0 -8
- data/lib/nokogiri/xml/reader.rb +6 -44
- data/lib/nokogiri/xml/sax/document.rb +5 -9
- data/lib/nokogiri/xml/schema.rb +1 -7
- data/lib/nokogiri/xslt.rb +5 -9
- data/tasks/cross_compile.rb +12 -27
- data/tasks/test.rb +0 -0
- data/test/css/test_parser.rb +19 -40
- data/test/css/test_tokenizer.rb +0 -8
- data/test/helper.rb +1 -4
- data/test/html/sax/test_parser.rb +21 -47
- data/test/html/sax/test_parser_context.rb +2 -2
- data/test/html/test_document.rb +3 -58
- data/test/html/test_document_encoding.rb +0 -53
- data/test/html/test_document_fragment.rb +13 -82
- data/test/html/test_element_description.rb +4 -2
- data/test/html/test_node.rb +0 -9
- data/test/test_memory_leak.rb +2 -57
- data/test/test_nokogiri.rb +14 -20
- data/test/test_reader.rb +7 -47
- data/test/test_xslt_transforms.rb +5 -8
- data/test/xml/sax/test_parser.rb +17 -34
- data/test/xml/sax/test_parser_context.rb +0 -50
- data/test/xml/sax/test_push_parser.rb +1 -18
- data/test/xml/test_attr.rb +4 -31
- data/test/xml/test_attribute_decl.rb +7 -3
- data/test/xml/test_builder.rb +5 -5
- data/test/xml/test_cdata.rb +3 -3
- data/test/xml/test_document.rb +18 -15
- data/test/xml/test_document_fragment.rb +20 -19
- data/test/xml/test_dtd.rb +13 -18
- 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 +15 -54
- data/test/xml/test_node_reparenting.rb +42 -85
- data/test/xml/test_node_set.rb +2 -61
- data/test/xml/test_schema.rb +0 -5
- data/test/xml/test_text.rb +2 -11
- data/test/xml/test_unparented_node.rb +1 -1
- data/test/xml/test_xpath.rb +7 -43
- metadata +131 -155
- data/.gemtest +0 -0
- data/ext/nokogiri/depend +0 -358
- data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
- data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
- data/lib/nokogiri/css/parser_extras.rb +0 -91
- 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 -420
- 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 -20
- 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 -20
- data/lib/nokogiri/ffi/structs/xml_parser_input.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 -174
- 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 -559
- data/lib/nokogiri/ffi/xml/node_set.rb +0 -150
- 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 -143
- data/lib/nokogiri/ffi/xml/sax/parser_context.rb +0 -79
- 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 -153
- data/lib/nokogiri/ffi/xslt/stylesheet.rb +0 -77
- data/test/decorators/test_slop.rb +0 -16
- data/test/ffi/test_document.rb +0 -35
- data/test/files/encoding.html +0 -82
- data/test/files/encoding.xhtml +0 -84
- data/test/xslt/test_custom_functions.rb +0 -94
@@ -1,150 +0,0 @@
|
|
1
|
-
module Nokogiri
|
2
|
-
module XML
|
3
|
-
class NodeSet
|
4
|
-
|
5
|
-
attr_accessor :cstruct # :nodoc:
|
6
|
-
|
7
|
-
def dup # :nodoc:
|
8
|
-
dup = LibXML.xmlXPathNodeSetMerge(nil, self.cstruct)
|
9
|
-
NodeSet.wrap(dup, self.document)
|
10
|
-
end
|
11
|
-
|
12
|
-
def length # :nodoc:
|
13
|
-
cstruct.pointer.null? ? 0 : cstruct[:nodeNr]
|
14
|
-
end
|
15
|
-
|
16
|
-
def push(node) # :nodoc:
|
17
|
-
raise(ArgumentError, "node must be a Nokogiri::XML::Node") unless node.is_a?(XML::Node) || node.is_a?(XML::Namespace)
|
18
|
-
LibXML.xmlXPathNodeSetAdd(cstruct, node.cstruct)
|
19
|
-
self
|
20
|
-
end
|
21
|
-
|
22
|
-
def |(node_set) # :nodoc:
|
23
|
-
raise(ArgumentError, "node_set must be a Nokogiri::XML::NodeSet") unless node_set.is_a?(XML::NodeSet)
|
24
|
-
new_set_ptr = LibXML::xmlXPathNodeSetMerge(nil, self.cstruct)
|
25
|
-
new_set_ptr = LibXML::xmlXPathNodeSetMerge(new_set_ptr, node_set.cstruct)
|
26
|
-
|
27
|
-
NodeSet.wrap(new_set_ptr, self.document)
|
28
|
-
end
|
29
|
-
|
30
|
-
def -(node_set) # :nodoc:
|
31
|
-
raise(ArgumentError, "node_set must be a Nokogiri::XML::NodeSet") unless node_set.is_a?(XML::NodeSet)
|
32
|
-
new_set_ptr = LibXML.xmlXPathNodeSetMerge(nil, self.cstruct)
|
33
|
-
|
34
|
-
other_nodetab = node_set.cstruct.nodeTab
|
35
|
-
node_set.cstruct[:nodeNr].times do |j|
|
36
|
-
LibXML.xmlXPathNodeSetDel(new_set_ptr, other_nodetab[j])
|
37
|
-
end
|
38
|
-
NodeSet.wrap(new_set_ptr, self.document)
|
39
|
-
end
|
40
|
-
|
41
|
-
def delete(node) # :nodoc:
|
42
|
-
raise(ArgumentError, "node must be a Nokogiri::XML::Node") unless node.is_a?(XML::Node) || node.is_a?(XML::Namespace)
|
43
|
-
if LibXML.xmlXPathNodeSetContains(cstruct, node.cstruct) != 0
|
44
|
-
LibXML.xmlXPathNodeSetDel(cstruct, node.cstruct)
|
45
|
-
return node
|
46
|
-
end
|
47
|
-
return nil
|
48
|
-
end
|
49
|
-
|
50
|
-
def [](*args) # :nodoc:
|
51
|
-
raise(ArgumentError, "got #{args.length} arguments, expected 1 (or 2)") if args.length > 2
|
52
|
-
|
53
|
-
if args.length == 2
|
54
|
-
beg = args[0]
|
55
|
-
len = args[1]
|
56
|
-
beg += cstruct[:nodeNr] if beg < 0
|
57
|
-
return subseq(beg, len)
|
58
|
-
end
|
59
|
-
arg = args[0]
|
60
|
-
|
61
|
-
return subseq(arg.first, arg.last-arg.first+1) if arg.is_a?(Range)
|
62
|
-
|
63
|
-
index_at(arg)
|
64
|
-
end
|
65
|
-
alias_method :slice, :[]
|
66
|
-
|
67
|
-
def &(node_set) # :nodoc:
|
68
|
-
raise(ArgumentError, "node_set must be a Nokogiri::XML::NodeSet") unless node_set.is_a?(XML::NodeSet)
|
69
|
-
new_set_ptr = LibXML.xmlXPathIntersection(cstruct, node_set.cstruct)
|
70
|
-
NodeSet.wrap(new_set_ptr, self.document)
|
71
|
-
end
|
72
|
-
|
73
|
-
def include?(node) # :nodoc:
|
74
|
-
raise(ArgumentError, "node must be a Nokogiri::XML::Node") unless node.is_a?(XML::Node) || node.is_a?(XML::Namespace)
|
75
|
-
(LibXML.xmlXPathNodeSetContains(cstruct, node.cstruct) != 0) ? true : false
|
76
|
-
end
|
77
|
-
|
78
|
-
def to_a # :nodoc:
|
79
|
-
cstruct.nodeTab.collect do |node|
|
80
|
-
node_cstruct = LibXML::XmlNode.new(node)
|
81
|
-
if node_cstruct[:type] == XML::Node::NAMESPACE_DECL
|
82
|
-
Namespace.wrap(document.cstruct, node)
|
83
|
-
else
|
84
|
-
Node.wrap(node_cstruct)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def unlink # :nodoc:
|
90
|
-
return if cstruct[:nodeNr] == 0
|
91
|
-
nodetab = cstruct.nodeTab
|
92
|
-
cstruct[:nodeNr].times do |j|
|
93
|
-
node_cstruct = LibXML::XmlNode.new(nodetab[j])
|
94
|
-
if node_cstruct[:type] != XML::Node::NAMESPACE_DECL
|
95
|
-
node = Node.wrap(node_cstruct)
|
96
|
-
node.unlink
|
97
|
-
nodetab[j] = node.cstruct.pointer
|
98
|
-
end
|
99
|
-
end
|
100
|
-
cstruct.nodeTab = nodetab
|
101
|
-
self
|
102
|
-
end
|
103
|
-
|
104
|
-
def self.new document, list = [] # :nodoc:
|
105
|
-
set = NodeSet.wrap(LibXML.xmlXPathNodeSetCreate(nil), document)
|
106
|
-
set.document = document
|
107
|
-
list.each { |x| set << x }
|
108
|
-
yield set if block_given?
|
109
|
-
set
|
110
|
-
end
|
111
|
-
|
112
|
-
def self.wrap(ptr, document) # :nodoc:
|
113
|
-
set = allocate
|
114
|
-
set.cstruct = LibXML::XmlNodeSet.new(ptr)
|
115
|
-
if document
|
116
|
-
set.document = document
|
117
|
-
document.decorate(set)
|
118
|
-
end
|
119
|
-
set
|
120
|
-
end
|
121
|
-
|
122
|
-
private
|
123
|
-
|
124
|
-
def index_at(number) # :nodoc:
|
125
|
-
return nil if (number >= cstruct[:nodeNr] || number.abs > cstruct[:nodeNr])
|
126
|
-
number = number + cstruct[:nodeNr] if number < 0
|
127
|
-
node_ptr = cstruct.nodeAt(number)
|
128
|
-
node_cstruct = LibXML::XmlNode.new(node_ptr)
|
129
|
-
if node_cstruct[:type] == XML::Node::NAMESPACE_DECL
|
130
|
-
Namespace.wrap(document.cstruct, node_ptr)
|
131
|
-
else
|
132
|
-
Node.wrap(node_cstruct)
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
def subseq(beg, len) # :nodoc:
|
137
|
-
return nil if beg > cstruct[:nodeNr]
|
138
|
-
return nil if beg < 0 || len < 0
|
139
|
-
len = cstruct[:nodeNr] - beg if beg + len > cstruct[:nodeNr]
|
140
|
-
|
141
|
-
set = NodeSet.wrap(LibXML.xmlXPathNodeSetCreate(nil), self.document)
|
142
|
-
beg.upto(beg+len-1) do |j|
|
143
|
-
LibXML.xmlXPathNodeSetAddUnique(set.cstruct, cstruct.nodeAt(j));
|
144
|
-
end
|
145
|
-
set
|
146
|
-
end
|
147
|
-
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
@@ -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
|