libxml-ruby 4.1.2 → 6.0.0

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 (172) hide show
  1. checksums.yaml +4 -4
  2. data/{HISTORY → CHANGELOG.md} +875 -887
  3. data/LICENSE +20 -20
  4. data/README.md +67 -0
  5. data/Rakefile +77 -98
  6. data/ext/libxml/extconf.rb +39 -20
  7. data/ext/libxml/libxml.c +67 -79
  8. data/ext/libxml/ruby_libxml.h +43 -44
  9. data/ext/libxml/ruby_xml.c +556 -899
  10. data/ext/libxml/ruby_xml.h +9 -10
  11. data/ext/libxml/ruby_xml_attr.c +338 -333
  12. data/ext/libxml/ruby_xml_attr.h +13 -12
  13. data/ext/libxml/ruby_xml_attr_decl.c +19 -12
  14. data/ext/libxml/ruby_xml_attr_decl.h +11 -11
  15. data/ext/libxml/ruby_xml_attributes.c +18 -9
  16. data/ext/libxml/ruby_xml_attributes.h +17 -15
  17. data/ext/libxml/ruby_xml_document.c +1142 -1129
  18. data/ext/libxml/ruby_xml_document.h +12 -11
  19. data/ext/libxml/ruby_xml_dtd.c +287 -248
  20. data/ext/libxml/ruby_xml_dtd.h +10 -9
  21. data/ext/libxml/ruby_xml_encoding.c +250 -250
  22. data/ext/libxml/ruby_xml_encoding.h +20 -18
  23. data/ext/libxml/ruby_xml_error.c +1003 -996
  24. data/ext/libxml/ruby_xml_error.h +14 -14
  25. data/ext/libxml/ruby_xml_html_parser.c +91 -91
  26. data/ext/libxml/ruby_xml_html_parser.h +10 -10
  27. data/ext/libxml/ruby_xml_html_parser_context.c +364 -337
  28. data/ext/libxml/ruby_xml_html_parser_context.h +11 -10
  29. data/ext/libxml/ruby_xml_html_parser_options.c +48 -48
  30. data/ext/libxml/ruby_xml_html_parser_options.h +10 -10
  31. data/ext/libxml/ruby_xml_input_cbg.c +216 -188
  32. data/ext/libxml/ruby_xml_input_cbg.h +20 -20
  33. data/ext/libxml/ruby_xml_io.c +49 -47
  34. data/ext/libxml/ruby_xml_io.h +10 -10
  35. data/ext/libxml/ruby_xml_namespace.c +159 -154
  36. data/ext/libxml/ruby_xml_namespace.h +11 -10
  37. data/ext/libxml/ruby_xml_namespaces.c +313 -293
  38. data/ext/libxml/ruby_xml_namespaces.h +9 -9
  39. data/ext/libxml/ruby_xml_node.c +1433 -1398
  40. data/ext/libxml/ruby_xml_node.h +15 -13
  41. data/ext/libxml/ruby_xml_parser.c +91 -91
  42. data/ext/libxml/ruby_xml_parser.h +10 -10
  43. data/ext/libxml/ruby_xml_parser_context.c +1016 -1001
  44. data/ext/libxml/ruby_xml_parser_context.h +11 -10
  45. data/ext/libxml/ruby_xml_parser_options.c +74 -66
  46. data/ext/libxml/ruby_xml_parser_options.h +10 -10
  47. data/ext/libxml/ruby_xml_reader.c +40 -31
  48. data/ext/libxml/ruby_xml_reader.h +14 -14
  49. data/ext/libxml/ruby_xml_registry.c +31 -0
  50. data/ext/libxml/ruby_xml_registry.h +22 -0
  51. data/ext/libxml/ruby_xml_relaxng.c +21 -5
  52. data/ext/libxml/ruby_xml_relaxng.h +9 -8
  53. data/ext/libxml/ruby_xml_sax2_handler.c +326 -326
  54. data/ext/libxml/ruby_xml_sax2_handler.h +10 -10
  55. data/ext/libxml/ruby_xml_sax_parser.c +108 -116
  56. data/ext/libxml/ruby_xml_sax_parser.h +10 -10
  57. data/ext/libxml/ruby_xml_schema.c +22 -15
  58. data/ext/libxml/ruby_xml_schema.h +26 -25
  59. data/ext/libxml/ruby_xml_schema_attribute.c +7 -7
  60. data/ext/libxml/ruby_xml_schema_attribute.h +37 -37
  61. data/ext/libxml/ruby_xml_schema_element.c +8 -8
  62. data/ext/libxml/ruby_xml_schema_element.h +11 -11
  63. data/ext/libxml/ruby_xml_schema_facet.c +50 -50
  64. data/ext/libxml/ruby_xml_schema_facet.h +9 -9
  65. data/ext/libxml/ruby_xml_schema_type.c +12 -19
  66. data/ext/libxml/ruby_xml_schema_type.h +9 -9
  67. data/ext/libxml/ruby_xml_version.h +9 -9
  68. data/ext/libxml/ruby_xml_writer.c +183 -185
  69. data/ext/libxml/ruby_xml_writer.h +6 -6
  70. data/ext/libxml/ruby_xml_xinclude.c +20 -20
  71. data/ext/libxml/ruby_xml_xinclude.h +11 -11
  72. data/ext/libxml/ruby_xml_xpath.c +195 -195
  73. data/ext/libxml/ruby_xml_xpath.h +15 -15
  74. data/ext/libxml/ruby_xml_xpath_context.c +408 -362
  75. data/ext/libxml/ruby_xml_xpath_context.h +9 -9
  76. data/ext/libxml/ruby_xml_xpath_expression.c +12 -6
  77. data/ext/libxml/ruby_xml_xpath_expression.h +11 -10
  78. data/ext/libxml/ruby_xml_xpath_object.c +69 -54
  79. data/ext/libxml/ruby_xml_xpath_object.h +19 -17
  80. data/ext/vc/libxml_ruby/libxml_ruby.vcxproj +271 -0
  81. data/ext/xcode/libxml-ruby.xcodeproj/project.pbxproj +633 -0
  82. data/ext/xcode/libxml-ruby.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  83. data/ext/xcode/libxml-ruby.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  84. data/ext/xcode/libxml-ruby.xcodeproj/xcshareddata/xcschemes/libxml-ruby.xcscheme +80 -0
  85. data/lib/libxml/attr.rb +122 -122
  86. data/lib/libxml/attr_decl.rb +80 -80
  87. data/lib/libxml/attributes.rb +13 -13
  88. data/lib/libxml/document.rb +165 -194
  89. data/lib/libxml/error.rb +122 -95
  90. data/lib/libxml/html_parser.rb +80 -96
  91. data/lib/libxml/namespace.rb +61 -61
  92. data/lib/libxml/namespaces.rb +37 -37
  93. data/lib/libxml/node.rb +321 -323
  94. data/lib/libxml/parser.rb +94 -100
  95. data/lib/libxml/sax_callbacks.rb +179 -179
  96. data/lib/libxml/sax_parser.rb +40 -40
  97. data/lib/libxml/schema/attribute.rb +27 -19
  98. data/lib/libxml/schema/element.rb +20 -0
  99. data/lib/libxml/schema/type.rb +44 -21
  100. data/lib/libxml/schema.rb +47 -47
  101. data/lib/libxml/tree.rb +28 -28
  102. data/lib/libxml-ruby.rb +30 -30
  103. data/libxml-ruby.gemspec +46 -48
  104. data/test/c14n/result/1-1-without-comments/example-1 +3 -3
  105. data/test/c14n/result/1-1-without-comments/example-2 +10 -10
  106. data/test/c14n/result/1-1-without-comments/example-3 +13 -13
  107. data/test/c14n/result/1-1-without-comments/example-4 +8 -8
  108. data/test/c14n/result/1-1-without-comments/example-5 +2 -2
  109. data/test/c14n/result/with-comments/example-1 +5 -5
  110. data/test/c14n/result/with-comments/example-2 +10 -10
  111. data/test/c14n/result/with-comments/example-3 +13 -13
  112. data/test/c14n/result/with-comments/example-4 +8 -8
  113. data/test/c14n/result/with-comments/example-5 +3 -3
  114. data/test/c14n/result/without-comments/example-1 +3 -3
  115. data/test/c14n/result/without-comments/example-2 +10 -10
  116. data/test/c14n/result/without-comments/example-3 +13 -13
  117. data/test/c14n/result/without-comments/example-4 +8 -8
  118. data/test/c14n/result/without-comments/example-5 +2 -2
  119. data/test/test_attr.rb +179 -180
  120. data/test/test_attr_decl.rb +131 -131
  121. data/test/test_attributes.rb +135 -135
  122. data/test/test_canonicalize.rb +122 -120
  123. data/test/test_document.rb +138 -132
  124. data/test/test_document_write.rb +142 -145
  125. data/test/test_dtd.rb +134 -129
  126. data/test/test_encoding.rb +126 -129
  127. data/test/test_encoding_sax.rb +114 -114
  128. data/test/test_error.rb +197 -194
  129. data/test/test_helper.rb +21 -13
  130. data/test/test_html_parser.rb +166 -162
  131. data/test/test_html_parser_context.rb +22 -22
  132. data/test/test_input_callbacks.rb +36 -0
  133. data/test/test_namespace.rb +58 -60
  134. data/test/test_namespaces.rb +200 -200
  135. data/test/test_node.rb +251 -237
  136. data/test/test_node_cdata.rb +50 -50
  137. data/test/test_node_comment.rb +32 -32
  138. data/test/test_node_copy.rb +40 -40
  139. data/test/test_node_edit.rb +176 -158
  140. data/test/test_node_pi.rb +37 -37
  141. data/test/test_node_text.rb +69 -69
  142. data/test/test_node_write.rb +93 -96
  143. data/test/test_node_xlink.rb +28 -28
  144. data/test/test_parser.rb +297 -324
  145. data/test/test_parser_context.rb +198 -198
  146. data/test/test_properties.rb +38 -38
  147. data/test/test_reader.rb +413 -364
  148. data/test/test_relaxng.rb +59 -53
  149. data/test/test_sax_parser.rb +345 -326
  150. data/test/test_schema.rb +28 -0
  151. data/test/test_traversal.rb +152 -152
  152. data/test/test_writer.rb +469 -468
  153. data/test/test_xinclude.rb +20 -20
  154. data/test/test_xml.rb +164 -267
  155. data/test/test_xpath.rb +244 -244
  156. data/test/test_xpath_context.rb +87 -87
  157. data/test/test_xpath_expression.rb +37 -37
  158. metadata +49 -31
  159. data/README.rdoc +0 -217
  160. data/ext/libxml/extconf.h +0 -3
  161. data/ext/libxml/ruby_xml_cbg.c +0 -85
  162. data/lib/libxml/hpricot.rb +0 -78
  163. data/lib/libxml.rb +0 -5
  164. data/lib/xml/libxml.rb +0 -10
  165. data/lib/xml.rb +0 -14
  166. data/script/benchmark/depixelate +0 -634
  167. data/script/benchmark/hamlet.xml +0 -9055
  168. data/script/benchmark/parsecount +0 -170
  169. data/script/benchmark/sock_entries.xml +0 -507
  170. data/script/benchmark/throughput +0 -41
  171. data/script/test +0 -6
  172. data/test/test_deprecated_require.rb +0 -12
@@ -1,194 +1,165 @@
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
- # You may provide an optional hash table to control how the
26
- # parsing is performed. Valid options are:
27
- #
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(value, options = {})
34
- Parser.file(value, 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(value, options = {})
55
- Parser.io(value, 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
- # You may provide an optional hash table to control how the
67
- # parsing is performed. Valid options are:
68
- #
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, options = {})
76
- Parser.string(value, 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
+ end
164
+ end
165
+ end
data/lib/libxml/error.rb CHANGED
@@ -1,95 +1,122 @@
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
+ # call-seq:
38
+ # error == other -> true or false
39
+ #
40
+ # Returns whether two errors have the same attributes.
41
+ def ==(other)
42
+ eql?(other)
43
+ end
44
+
45
+ # call-seq:
46
+ # error.eql?(other) -> true or false
47
+ #
48
+ # Returns whether two errors have identical code, domain, message,
49
+ # level, file, line, and all other attributes.
50
+ def eql?(other)
51
+ self.code == other.code and
52
+ self.domain == other.domain and
53
+ self.message == other.message and
54
+ self.level == other.level and
55
+ self.file == other.file and
56
+ self.line == other.line and
57
+ self.str1 == other.str1 and
58
+ self.str2 == other.str2 and
59
+ self.str3 == other.str3 and
60
+ self.int1 == other.int1 and
61
+ self.int2 == other.int2 and
62
+ self.ctxt == other.ctxt and
63
+ self.node == other.node
64
+ rescue
65
+ false
66
+ end
67
+
68
+ # call-seq:
69
+ # error.level_to_s -> String
70
+ #
71
+ # Returns a human-readable string for the error level:
72
+ # "Warning:", "Error:", "Fatal error:", or "".
73
+ def level_to_s
74
+ case self.level
75
+ when NONE
76
+ ''
77
+ when WARNING
78
+ 'Warning:'
79
+ when ERROR
80
+ 'Error:'
81
+ when FATAL
82
+ 'Fatal error:'
83
+ end
84
+ end
85
+
86
+ # call-seq:
87
+ # error.domain_to_s -> String
88
+ #
89
+ # Returns the name of the error domain (e.g. "PARSER", "XPATH").
90
+ def domain_to_s
91
+ DOMAIN_CODE_MAP[self.domain].to_s
92
+ end
93
+
94
+ # call-seq:
95
+ # error.code_to_s -> String
96
+ #
97
+ # Returns the name of the error code constant.
98
+ def code_to_s
99
+ ERROR_CODE_MAP[self.code].to_s
100
+ end
101
+
102
+ # call-seq:
103
+ # error.to_s -> String
104
+ #
105
+ # Returns a formatted error string including the level, message,
106
+ # and file/line when available.
107
+ def to_s
108
+ msg = super
109
+ msg = msg ? msg.strip: ''
110
+
111
+ if self.line
112
+ sprintf("%s %s at %s:%d.", self.level_to_s, msg,
113
+ self.file, self.line)
114
+ else
115
+ sprintf("%s %s.", self.level_to_s, msg)
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
121
+
122
+ LibXML::XML::Error.set_handler(&LibXML::XML::Error::VERBOSE_HANDLER)