libxml-ruby 5.0.4 → 5.0.5

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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/HISTORY +10 -6
  3. data/README.rdoc +1 -1
  4. data/ext/libxml/extconf.rb +5 -0
  5. data/ext/libxml/ruby_xml.c +556 -556
  6. data/ext/libxml/ruby_xml_attributes.h +17 -17
  7. data/ext/libxml/ruby_xml_document.c +1129 -1129
  8. data/ext/libxml/ruby_xml_dtd.c +257 -257
  9. data/ext/libxml/ruby_xml_encoding.c +250 -250
  10. data/ext/libxml/ruby_xml_error.c +1003 -1003
  11. data/ext/libxml/ruby_xml_error.h +14 -14
  12. data/ext/libxml/ruby_xml_html_parser_context.c +351 -351
  13. data/ext/libxml/ruby_xml_input_cbg.c +188 -188
  14. data/ext/libxml/ruby_xml_namespace.c +151 -151
  15. data/ext/libxml/ruby_xml_parser.h +10 -10
  16. data/ext/libxml/ruby_xml_parser_context.c +1009 -1009
  17. data/ext/libxml/ruby_xml_parser_options.c +74 -74
  18. data/ext/libxml/ruby_xml_parser_options.h +10 -10
  19. data/ext/libxml/ruby_xml_sax2_handler.c +326 -326
  20. data/ext/libxml/ruby_xml_sax_parser.c +108 -108
  21. data/ext/libxml/ruby_xml_version.h +9 -9
  22. data/lib/libxml/attr.rb +122 -122
  23. data/lib/libxml/attr_decl.rb +80 -80
  24. data/lib/libxml/attributes.rb +13 -13
  25. data/lib/libxml/document.rb +194 -194
  26. data/lib/libxml/error.rb +95 -95
  27. data/lib/libxml/hpricot.rb +77 -77
  28. data/lib/libxml/html_parser.rb +96 -96
  29. data/lib/libxml/namespace.rb +61 -61
  30. data/lib/libxml/namespaces.rb +37 -37
  31. data/lib/libxml/node.rb +323 -323
  32. data/lib/libxml/parser.rb +102 -102
  33. data/lib/libxml/sax_callbacks.rb +179 -179
  34. data/lib/libxml/sax_parser.rb +40 -40
  35. data/lib/libxml/tree.rb +28 -28
  36. data/lib/libxml.rb +4 -4
  37. data/lib/xml/libxml.rb +10 -10
  38. data/lib/xml.rb +13 -13
  39. data/libxml-ruby.gemspec +50 -49
  40. data/test/test_document.rb +140 -140
  41. data/test/test_document_write.rb +142 -142
  42. data/test/test_dtd.rb +126 -126
  43. data/test/test_encoding.rb +126 -126
  44. data/test/test_error.rb +194 -194
  45. data/test/test_helper.rb +20 -20
  46. data/test/test_namespace.rb +58 -58
  47. data/test/test_node.rb +235 -235
  48. data/test/test_node_write.rb +93 -93
  49. data/test/test_parser.rb +333 -333
  50. data/test/test_reader.rb +364 -364
  51. data/test/test_xml.rb +168 -168
  52. metadata +5 -4
@@ -1,194 +1,194 @@
1
- # encoding: UTF-8
2
-
3
- module LibXML
4
- module XML
5
- class Document
6
- # call-seq:
7
- # XML::Document.document(document) -> XML::Document
8
- #
9
- # Creates a new document based on the specified document.
10
- #
11
- # Parameters:
12
- #
13
- # document - A preparsed document.
14
- def self.document(value)
15
- Parser.document(value).parse
16
- end
17
-
18
- # call-seq:
19
- # XML::Document.file(path) -> XML::Document
20
- # XML::Document.file(path, encoding: XML::Encoding::UTF_8,
21
- # options: XML::Parser::Options::NOENT) -> XML::Document
22
- #
23
- # Creates a new document from the specified file or uri.
24
- #
25
- # Parameters:
26
- #
27
- # path - Path to file
28
- # encoding - The document encoding, defaults to nil. Valid values
29
- # are the encoding constants defined on XML::Encoding.
30
- # options - Parser options. Valid values are the constants defined on
31
- # XML::Parser::Options. Mutliple options can be combined
32
- # by using Bitwise OR (|).
33
- def self.file(path, encoding: nil, options: nil)
34
- Parser.file(path, encoding: encoding, options: options).parse
35
- end
36
-
37
- # call-seq:
38
- # XML::Document.io(io) -> XML::Document
39
- # XML::Document.io(io, :encoding => XML::Encoding::UTF_8,
40
- # :options => XML::Parser::Options::NOENT
41
- # :base_uri="http://libxml.org") -> XML::Document
42
- #
43
- # Creates a new document from the specified io object.
44
- #
45
- # Parameters:
46
- #
47
- # io - io object that contains the xml to parser
48
- # base_uri - The base url for the parsed document.
49
- # encoding - The document encoding, defaults to nil. Valid values
50
- # are the encoding constants defined on XML::Encoding.
51
- # options - Parser options. Valid values are the constants defined on
52
- # XML::Parser::Options. Mutliple options can be combined
53
- # by using Bitwise OR (|).
54
- def self.io(io, base_uri: nil, encoding: nil, options: nil)
55
- Parser.io(io, base_uri: base_uri, encoding: encoding, options: options).parse
56
- end
57
-
58
- # call-seq:
59
- # XML::Document.string(string) -> XML::Document
60
- # XML::Document.string(string, encoding: XML::Encoding::UTF_8,
61
- # options: XML::Parser::Options::NOENT
62
- # base_uri: "http://libxml.org") -> XML::Document
63
- #
64
- # Creates a new document from the specified string.
65
- #
66
- # Parameters:
67
- #
68
- # string - String to parse
69
- # base_uri - The base url for the parsed document.
70
- # encoding - The document encoding, defaults to nil. Valid values
71
- # are the encoding constants defined on XML::Encoding.
72
- # options - Parser options. Valid values are the constants defined on
73
- # XML::Parser::Options. Mutliple options can be combined
74
- # by using Bitwise OR (|).
75
- def self.string(value, base_uri: nil, encoding: nil, options: nil)
76
- Parser.string(value, base_uri: base_uri, encoding: encoding, options: options).parse
77
- end
78
-
79
- # Returns a new XML::XPathContext for the document.
80
- #
81
- # call-seq:
82
- # document.context(namespaces=nil) -> XPath::Context
83
- #
84
- # Namespaces is an optional array of XML::NS objects
85
- def context(nslist = nil)
86
- context = XPath::Context.new(self)
87
- context.node = self.root
88
- context.register_namespaces_from_node(self.root)
89
- context.register_namespaces(nslist) if nslist
90
- context
91
- end
92
-
93
- # Return the nodes matching the specified xpath expression,
94
- # optionally using the specified namespace. For more
95
- # information about working with namespaces, please refer
96
- # to the XML::XPath documentation.
97
- #
98
- # call-seq:
99
- # document.find(xpath, nslist=nil) -> XML::XPath::Object
100
- #
101
- # Parameters:
102
- # * xpath - The xpath expression as a string
103
- # * namespaces - An optional list of namespaces (see XML::XPath for information).
104
- #
105
- # document.find('/foo', 'xlink:http://www.w3.org/1999/xlink')
106
- #
107
- # IMPORTANT - The returned XML::Node::Set must be freed before
108
- # its associated document. In a running Ruby program this will
109
- # happen automatically via Ruby's mark and sweep garbage collector.
110
- # However, if the program exits, Ruby does not guarantee the order
111
- # in which objects are freed
112
- # (see http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/17700).
113
- # As a result, the associated document may be freed before the node
114
- # list, which will cause a segmentation fault.
115
- # To avoid this, use the following (non-ruby like) coding style:
116
- #
117
- # nodes = doc.find('/header')
118
- # nodes.each do |node|
119
- # ... do stuff ...
120
- # end
121
- # # nodes = nil # GC.start
122
- def find(xpath, nslist = nil)
123
- self.context(nslist).find(xpath)
124
- end
125
-
126
- # Return the first node matching the specified xpath expression.
127
- # For more information, please refer to the documentation
128
- # for XML::Document#find.
129
- def find_first(xpath, nslist = nil)
130
- find(xpath, nslist).first
131
- end
132
-
133
- # Returns this node's type name
134
- def node_type_name
135
- case node_type
136
- when XML::Node::DOCUMENT_NODE
137
- 'document_xml'
138
- when XML::Node::DOCB_DOCUMENT_NODE
139
- 'document_docbook'
140
- when XML::Node::HTML_DOCUMENT_NODE
141
- 'document_html'
142
- else
143
- raise(UnknownType, "Unknown node type: %n", node.node_type);
144
- end
145
- end
146
- # :enddoc:
147
-
148
- # Specifies if this is an document node
149
- def document?
150
- node_type == XML::Node::DOCUMENT_NODE
151
- end
152
-
153
- # Specifies if this is an docbook node
154
- def docbook_doc?
155
- node_type == XML::Node::DOCB_DOCUMENT_NODE
156
- end
157
-
158
- # Specifies if this is an html node
159
- def html_doc?
160
- node_type == XML::Node::HTML_DOCUMENT_NODE
161
- end
162
-
163
- def dump
164
- warn('Document#dump is deprecated. Use Document#to_s instead.')
165
- self.to_s
166
- end
167
-
168
- def format_dump
169
- warn('Document#format_dump is deprecated. Use Document#to_s instead.')
170
- self.to_s
171
- end
172
-
173
- def debug_dump
174
- warn('Document#debug_dump is deprecated. Use Document#debug instead.')
175
- self.debug
176
- end
177
-
178
- def debug_dump_head
179
- warn('Document#debug_dump_head is deprecated. Use Document#debug instead.')
180
- self.debug
181
- end
182
-
183
- def debug_format_dump
184
- warn('Document#debug_format_dump is deprecated. Use Document#to_s instead.')
185
- self.to_s
186
- end
187
-
188
- def reader
189
- warn('Document#reader is deprecated. Use XML::Reader.document(self) instead.')
190
- XML::Reader.document(self)
191
- end
192
- end
193
- end
194
- end
1
+ # encoding: UTF-8
2
+
3
+ module LibXML
4
+ module XML
5
+ class Document
6
+ # call-seq:
7
+ # XML::Document.document(document) -> XML::Document
8
+ #
9
+ # Creates a new document based on the specified document.
10
+ #
11
+ # Parameters:
12
+ #
13
+ # document - A preparsed document.
14
+ def self.document(value)
15
+ Parser.document(value).parse
16
+ end
17
+
18
+ # call-seq:
19
+ # XML::Document.file(path) -> XML::Document
20
+ # XML::Document.file(path, encoding: XML::Encoding::UTF_8,
21
+ # options: XML::Parser::Options::NOENT) -> XML::Document
22
+ #
23
+ # Creates a new document from the specified file or uri.
24
+ #
25
+ # Parameters:
26
+ #
27
+ # path - Path to file
28
+ # encoding - The document encoding, defaults to nil. Valid values
29
+ # are the encoding constants defined on XML::Encoding.
30
+ # options - Parser options. Valid values are the constants defined on
31
+ # XML::Parser::Options. Mutliple options can be combined
32
+ # by using Bitwise OR (|).
33
+ def self.file(path, encoding: nil, options: nil)
34
+ Parser.file(path, encoding: encoding, options: options).parse
35
+ end
36
+
37
+ # call-seq:
38
+ # XML::Document.io(io) -> XML::Document
39
+ # XML::Document.io(io, :encoding => XML::Encoding::UTF_8,
40
+ # :options => XML::Parser::Options::NOENT
41
+ # :base_uri="http://libxml.org") -> XML::Document
42
+ #
43
+ # Creates a new document from the specified io object.
44
+ #
45
+ # Parameters:
46
+ #
47
+ # io - io object that contains the xml to parser
48
+ # base_uri - The base url for the parsed document.
49
+ # encoding - The document encoding, defaults to nil. Valid values
50
+ # are the encoding constants defined on XML::Encoding.
51
+ # options - Parser options. Valid values are the constants defined on
52
+ # XML::Parser::Options. Mutliple options can be combined
53
+ # by using Bitwise OR (|).
54
+ def self.io(io, base_uri: nil, encoding: nil, options: nil)
55
+ Parser.io(io, base_uri: base_uri, encoding: encoding, options: options).parse
56
+ end
57
+
58
+ # call-seq:
59
+ # XML::Document.string(string) -> XML::Document
60
+ # XML::Document.string(string, encoding: XML::Encoding::UTF_8,
61
+ # options: XML::Parser::Options::NOENT
62
+ # base_uri: "http://libxml.org") -> XML::Document
63
+ #
64
+ # Creates a new document from the specified string.
65
+ #
66
+ # Parameters:
67
+ #
68
+ # string - String to parse
69
+ # base_uri - The base url for the parsed document.
70
+ # encoding - The document encoding, defaults to nil. Valid values
71
+ # are the encoding constants defined on XML::Encoding.
72
+ # options - Parser options. Valid values are the constants defined on
73
+ # XML::Parser::Options. Mutliple options can be combined
74
+ # by using Bitwise OR (|).
75
+ def self.string(value, base_uri: nil, encoding: nil, options: nil)
76
+ Parser.string(value, base_uri: base_uri, encoding: encoding, options: options).parse
77
+ end
78
+
79
+ # Returns a new XML::XPathContext for the document.
80
+ #
81
+ # call-seq:
82
+ # document.context(namespaces=nil) -> XPath::Context
83
+ #
84
+ # Namespaces is an optional array of XML::NS objects
85
+ def context(nslist = nil)
86
+ context = XPath::Context.new(self)
87
+ context.node = self.root
88
+ context.register_namespaces_from_node(self.root)
89
+ context.register_namespaces(nslist) if nslist
90
+ context
91
+ end
92
+
93
+ # Return the nodes matching the specified xpath expression,
94
+ # optionally using the specified namespace. For more
95
+ # information about working with namespaces, please refer
96
+ # to the XML::XPath documentation.
97
+ #
98
+ # call-seq:
99
+ # document.find(xpath, nslist=nil) -> XML::XPath::Object
100
+ #
101
+ # Parameters:
102
+ # * xpath - The xpath expression as a string
103
+ # * namespaces - An optional list of namespaces (see XML::XPath for information).
104
+ #
105
+ # document.find('/foo', 'xlink:http://www.w3.org/1999/xlink')
106
+ #
107
+ # IMPORTANT - The returned XML::Node::Set must be freed before
108
+ # its associated document. In a running Ruby program this will
109
+ # happen automatically via Ruby's mark and sweep garbage collector.
110
+ # However, if the program exits, Ruby does not guarantee the order
111
+ # in which objects are freed
112
+ # (see http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/17700).
113
+ # As a result, the associated document may be freed before the node
114
+ # list, which will cause a segmentation fault.
115
+ # To avoid this, use the following (non-ruby like) coding style:
116
+ #
117
+ # nodes = doc.find('/header')
118
+ # nodes.each do |node|
119
+ # ... do stuff ...
120
+ # end
121
+ # # nodes = nil # GC.start
122
+ def find(xpath, nslist = nil)
123
+ self.context(nslist).find(xpath)
124
+ end
125
+
126
+ # Return the first node matching the specified xpath expression.
127
+ # For more information, please refer to the documentation
128
+ # for XML::Document#find.
129
+ def find_first(xpath, nslist = nil)
130
+ find(xpath, nslist).first
131
+ end
132
+
133
+ # Returns this node's type name
134
+ def node_type_name
135
+ case node_type
136
+ when XML::Node::DOCUMENT_NODE
137
+ 'document_xml'
138
+ when XML::Node::DOCB_DOCUMENT_NODE
139
+ 'document_docbook'
140
+ when XML::Node::HTML_DOCUMENT_NODE
141
+ 'document_html'
142
+ else
143
+ raise(UnknownType, "Unknown node type: %n", node.node_type);
144
+ end
145
+ end
146
+ # :enddoc:
147
+
148
+ # Specifies if this is an document node
149
+ def document?
150
+ node_type == XML::Node::DOCUMENT_NODE
151
+ end
152
+
153
+ # Specifies if this is an docbook node
154
+ def docbook_doc?
155
+ node_type == XML::Node::DOCB_DOCUMENT_NODE
156
+ end
157
+
158
+ # Specifies if this is an html node
159
+ def html_doc?
160
+ node_type == XML::Node::HTML_DOCUMENT_NODE
161
+ end
162
+
163
+ def dump
164
+ warn('Document#dump is deprecated. Use Document#to_s instead.')
165
+ self.to_s
166
+ end
167
+
168
+ def format_dump
169
+ warn('Document#format_dump is deprecated. Use Document#to_s instead.')
170
+ self.to_s
171
+ end
172
+
173
+ def debug_dump
174
+ warn('Document#debug_dump is deprecated. Use Document#debug instead.')
175
+ self.debug
176
+ end
177
+
178
+ def debug_dump_head
179
+ warn('Document#debug_dump_head is deprecated. Use Document#debug instead.')
180
+ self.debug
181
+ end
182
+
183
+ def debug_format_dump
184
+ warn('Document#debug_format_dump is deprecated. Use Document#to_s instead.')
185
+ self.to_s
186
+ end
187
+
188
+ def reader
189
+ warn('Document#reader is deprecated. Use XML::Reader.document(self) instead.')
190
+ XML::Reader.document(self)
191
+ end
192
+ end
193
+ end
194
+ end
data/lib/libxml/error.rb CHANGED
@@ -1,95 +1,95 @@
1
- # encoding: UTF-8
2
-
3
- module LibXML
4
- module XML
5
- class Error
6
- # Create mapping from domain constant values to keys
7
- DOMAIN_CODE_MAP = [:NO_ERROR, :PARSER, :TREE, :NAMESPACE, :DTD, :HTML, :MEMORY,
8
- :OUTPUT, :IO, :FTP, :HTTP, :XINCLUDE, :XPATH, :XPOINTER, :REGEXP,
9
- :DATATYPE, :SCHEMASP, :SCHEMASV, :RELAXNGP, :RELAXNGV, :CATALOG,
10
- :C14N, :XSLT, :VALID, :CHECK, :WRITER, :MODULE, :I18N, :SCHEMATRONV].inject(Hash.new) do |hash, code|
11
- if const_defined?(code)
12
- hash[const_get(code)] = code
13
- end
14
- hash
15
- end
16
-
17
- # Create mapping from error constant values (so need to remove domain_codes) to keys
18
- ERROR_CODE_MAP = Hash.new.tap do |map|
19
- (constants -
20
- DOMAIN_CODE_MAP.values - #Domains
21
- [:NONE, :WARNING, :ERROR, :FATAL] # Levels
22
- ).each do |code|
23
- map[const_get(code)] = code
24
- end
25
- end
26
-
27
- # Verbose error handler
28
- VERBOSE_HANDLER = lambda do |error|
29
- STDERR << error.to_s << "\n"
30
- STDERR.flush
31
- end
32
-
33
- # Quiet error handler
34
- QUIET_HANDLER = lambda do |error|
35
- end
36
-
37
- def ==(other)
38
- eql?(other)
39
- end
40
-
41
- def eql?(other)
42
- self.code == other.code and
43
- self.domain == other.domain and
44
- self.message == other.message and
45
- self.level == other.level and
46
- self.file == other.file and
47
- self.line == other.line and
48
- self.str1 == other.str1 and
49
- self.str2 == other.str2 and
50
- self.str3 == other.str3 and
51
- self.int1 == other.int1 and
52
- self.int2 == other.int2 and
53
- self.ctxt == other.ctxt and
54
- self.node == other.node
55
- rescue
56
- false
57
- end
58
-
59
- def level_to_s
60
- case self.level
61
- when NONE
62
- ''
63
- when WARNING
64
- 'Warning:'
65
- when ERROR
66
- 'Error:'
67
- when FATAL
68
- 'Fatal error:'
69
- end
70
- end
71
-
72
- def domain_to_s
73
- DOMAIN_CODE_MAP[self.domain].to_s
74
- end
75
-
76
- def code_to_s
77
- ERROR_CODE_MAP[self.code].to_s
78
- end
79
-
80
- def to_s
81
- msg = super
82
- msg = msg ? msg.strip: ''
83
-
84
- if self.line
85
- sprintf("%s %s at %s:%d.", self.level_to_s, msg,
86
- self.file, self.line)
87
- else
88
- sprintf("%s %s.", self.level_to_s, msg)
89
- end
90
- end
91
- end
92
- end
93
- end
94
-
95
- LibXML::XML::Error.set_handler(&LibXML::XML::Error::VERBOSE_HANDLER)
1
+ # encoding: UTF-8
2
+
3
+ module LibXML
4
+ module XML
5
+ class Error
6
+ # Create mapping from domain constant values to keys
7
+ DOMAIN_CODE_MAP = [:NO_ERROR, :PARSER, :TREE, :NAMESPACE, :DTD, :HTML, :MEMORY,
8
+ :OUTPUT, :IO, :FTP, :HTTP, :XINCLUDE, :XPATH, :XPOINTER, :REGEXP,
9
+ :DATATYPE, :SCHEMASP, :SCHEMASV, :RELAXNGP, :RELAXNGV, :CATALOG,
10
+ :C14N, :XSLT, :VALID, :CHECK, :WRITER, :MODULE, :I18N, :SCHEMATRONV].inject(Hash.new) do |hash, code|
11
+ if const_defined?(code)
12
+ hash[const_get(code)] = code
13
+ end
14
+ hash
15
+ end
16
+
17
+ # Create mapping from error constant values (so need to remove domain_codes) to keys
18
+ ERROR_CODE_MAP = Hash.new.tap do |map|
19
+ (constants -
20
+ DOMAIN_CODE_MAP.values - #Domains
21
+ [:NONE, :WARNING, :ERROR, :FATAL] # Levels
22
+ ).each do |code|
23
+ map[const_get(code)] = code
24
+ end
25
+ end
26
+
27
+ # Verbose error handler
28
+ VERBOSE_HANDLER = lambda do |error|
29
+ STDERR << error.to_s << "\n"
30
+ STDERR.flush
31
+ end
32
+
33
+ # Quiet error handler
34
+ QUIET_HANDLER = lambda do |error|
35
+ end
36
+
37
+ def ==(other)
38
+ eql?(other)
39
+ end
40
+
41
+ def eql?(other)
42
+ self.code == other.code and
43
+ self.domain == other.domain and
44
+ self.message == other.message and
45
+ self.level == other.level and
46
+ self.file == other.file and
47
+ self.line == other.line and
48
+ self.str1 == other.str1 and
49
+ self.str2 == other.str2 and
50
+ self.str3 == other.str3 and
51
+ self.int1 == other.int1 and
52
+ self.int2 == other.int2 and
53
+ self.ctxt == other.ctxt and
54
+ self.node == other.node
55
+ rescue
56
+ false
57
+ end
58
+
59
+ def level_to_s
60
+ case self.level
61
+ when NONE
62
+ ''
63
+ when WARNING
64
+ 'Warning:'
65
+ when ERROR
66
+ 'Error:'
67
+ when FATAL
68
+ 'Fatal error:'
69
+ end
70
+ end
71
+
72
+ def domain_to_s
73
+ DOMAIN_CODE_MAP[self.domain].to_s
74
+ end
75
+
76
+ def code_to_s
77
+ ERROR_CODE_MAP[self.code].to_s
78
+ end
79
+
80
+ def to_s
81
+ msg = super
82
+ msg = msg ? msg.strip: ''
83
+
84
+ if self.line
85
+ sprintf("%s %s at %s:%d.", self.level_to_s, msg,
86
+ self.file, self.line)
87
+ else
88
+ sprintf("%s %s.", self.level_to_s, msg)
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+
95
+ LibXML::XML::Error.set_handler(&LibXML::XML::Error::VERBOSE_HANDLER)