nokogiri 1.4.7-java → 1.5.0.beta.1-java
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.tar.gz.sig +0 -0
- 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/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 +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/nokogiri.jar +0 -0
- 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/lib/xercesImpl.jar +0 -0
- 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 +442 -473
- metadata.gz.sig +0 -0
- data/.gemtest +0 -0
- data/ext/nokogiri/depend +0 -358
- 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/xml_libxml2_hacks.c +0 -112
- data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
- data/ext/nokogiri/zlib1.dll +0 -0
- 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
|