libxml-ruby 0.8.3-x86-mswin32-60 → 0.9.0-x86-mswin32-60

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 (175) hide show
  1. data/CHANGES +18 -0
  2. data/RAKEFILE +15 -39
  3. data/README +48 -47
  4. data/ext/libxml/libxml.c +847 -22
  5. data/ext/libxml/ruby_libxml.h +71 -95
  6. data/ext/libxml/ruby_xml_attr.c +500 -500
  7. data/ext/libxml/ruby_xml_attributes.c +1 -1
  8. data/ext/libxml/ruby_xml_document.c +1144 -1135
  9. data/ext/libxml/ruby_xml_document.h +4 -11
  10. data/ext/libxml/ruby_xml_dtd.c +27 -0
  11. data/ext/libxml/ruby_xml_encoding.c +164 -0
  12. data/ext/libxml/ruby_xml_encoding.h +13 -0
  13. data/ext/libxml/ruby_xml_error.c +941 -0
  14. data/ext/libxml/ruby_xml_error.h +13 -0
  15. data/ext/libxml/ruby_xml_html_parser.c +71 -387
  16. data/ext/libxml/ruby_xml_html_parser.h +1 -17
  17. data/ext/libxml/ruby_xml_input.c +179 -0
  18. data/ext/libxml/ruby_xml_input.h +18 -0
  19. data/ext/libxml/ruby_xml_input_cbg.c +17 -3
  20. data/ext/libxml/ruby_xml_node.c +1566 -1582
  21. data/ext/libxml/ruby_xml_node.h +1 -4
  22. data/ext/libxml/ruby_xml_ns.c +14 -3
  23. data/ext/libxml/ruby_xml_parser.c +164 -1398
  24. data/ext/libxml/ruby_xml_parser.h +5 -17
  25. data/ext/libxml/ruby_xml_parser_context.c +131 -169
  26. data/ext/libxml/ruby_xml_parser_context.h +2 -9
  27. data/ext/libxml/ruby_xml_reader.c +910 -945
  28. data/ext/libxml/ruby_xml_relaxng.c +32 -3
  29. data/ext/libxml/ruby_xml_sax_parser.c +106 -364
  30. data/ext/libxml/ruby_xml_sax_parser.h +1 -37
  31. data/ext/libxml/ruby_xml_schema.c +174 -145
  32. data/ext/libxml/ruby_xml_xinclude.c +9 -5
  33. data/ext/libxml/ruby_xml_xpath.c +25 -6
  34. data/ext/libxml/ruby_xml_xpath.h +1 -2
  35. data/ext/libxml/ruby_xml_xpath_context.c +17 -19
  36. data/ext/libxml/ruby_xml_xpath_object.c +60 -56
  37. data/ext/libxml/ruby_xml_xpointer.c +11 -5
  38. data/ext/libxml/sax_parser_callbacks.inc +42 -37
  39. data/ext/libxml/version.h +3 -3
  40. data/ext/mingw/Rakefile +20 -27
  41. data/ext/mingw/build.rake +41 -0
  42. data/{lib → ext/mingw}/libiconv-2.dll +0 -0
  43. data/ext/mingw/libxml2-2.dll +0 -0
  44. data/ext/mingw/libxml_ruby.dll.a +0 -0
  45. data/ext/mingw/libxml_ruby.so +0 -0
  46. data/ext/vc/libxml_ruby.vcproj +23 -15
  47. data/lib/libxml.rb +8 -2
  48. data/lib/libxml/document.rb +16 -4
  49. data/lib/libxml/error.rb +84 -0
  50. data/lib/libxml/hpricot.rb +76 -0
  51. data/lib/libxml/html_parser.rb +61 -0
  52. data/lib/libxml/node.rb +36 -25
  53. data/lib/libxml/parser.rb +312 -33
  54. data/lib/libxml/parser_context.rb +17 -0
  55. data/lib/libxml/properties.rb +15 -2
  56. data/lib/libxml/reader.rb +15 -0
  57. data/lib/libxml/sax_callbacks.rb +179 -0
  58. data/lib/libxml/sax_parser.rb +42 -0
  59. data/lib/libxml/tree.rb +1 -2
  60. data/lib/libxml/xpath_object.rb +12 -0
  61. data/test/model/atom.xml +4 -0
  62. data/test/tc_attributes.rb +43 -19
  63. data/test/tc_document.rb +1 -1
  64. data/test/tc_document_write.rb +15 -8
  65. data/test/tc_dtd.rb +36 -20
  66. data/test/tc_encoding.rb +13 -0
  67. data/test/tc_error.rb +136 -0
  68. data/test/tc_node.rb +2 -3
  69. data/test/tc_node_copy.rb +1 -1
  70. data/test/tc_node_edit.rb +6 -0
  71. data/test/tc_ns.rb +18 -0
  72. data/test/tc_parser.rb +113 -228
  73. data/test/tc_parser_context.rb +1 -2
  74. data/test/tc_reader.rb +24 -14
  75. data/test/tc_relaxng.rb +18 -6
  76. data/test/tc_sax_parser.rb +48 -13
  77. data/test/tc_schema.rb +20 -8
  78. data/test/tc_well_formed.rb +2 -1
  79. data/test/tc_xml.rb +212 -0
  80. data/test/tc_xpath.rb +60 -46
  81. data/test/tc_xpointer.rb +7 -11
  82. data/test/test_suite.rb +4 -3
  83. metadata +32 -115
  84. data/doc/rdoc/classes/LibXML.html +0 -241
  85. data/doc/rdoc/classes/LibXML/XML.html +0 -185
  86. data/doc/rdoc/classes/LibXML/XML/Attr.html +0 -1010
  87. data/doc/rdoc/classes/LibXML/XML/Attributes.html +0 -526
  88. data/doc/rdoc/classes/LibXML/XML/Document.html +0 -1489
  89. data/doc/rdoc/classes/LibXML/XML/Dtd.html +0 -213
  90. data/doc/rdoc/classes/LibXML/XML/Error.html +0 -117
  91. data/doc/rdoc/classes/LibXML/XML/HTMLParser.html +0 -348
  92. data/doc/rdoc/classes/LibXML/XML/InputCallbacks.html +0 -160
  93. data/doc/rdoc/classes/LibXML/XML/NS.html +0 -381
  94. data/doc/rdoc/classes/LibXML/XML/Node.html +0 -3396
  95. data/doc/rdoc/classes/LibXML/XML/Node/FailedModify.html +0 -123
  96. data/doc/rdoc/classes/LibXML/XML/Node/Set.html +0 -440
  97. data/doc/rdoc/classes/LibXML/XML/Node/SetNamespace.html +0 -123
  98. data/doc/rdoc/classes/LibXML/XML/Node/UnknownType.html +0 -123
  99. data/doc/rdoc/classes/LibXML/XML/Parser.html +0 -2239
  100. data/doc/rdoc/classes/LibXML/XML/Parser/Context.html +0 -1255
  101. data/doc/rdoc/classes/LibXML/XML/Parser/ParseError.html +0 -123
  102. data/doc/rdoc/classes/LibXML/XML/Reader.html +0 -2264
  103. data/doc/rdoc/classes/LibXML/XML/RelaxNG.html +0 -237
  104. data/doc/rdoc/classes/LibXML/XML/SaxParser.html +0 -415
  105. data/doc/rdoc/classes/LibXML/XML/Schema.html +0 -308
  106. data/doc/rdoc/classes/LibXML/XML/State.html +0 -124
  107. data/doc/rdoc/classes/LibXML/XML/Tree.html +0 -111
  108. data/doc/rdoc/classes/LibXML/XML/XInclude.html +0 -123
  109. data/doc/rdoc/classes/LibXML/XML/XInclude/Error.html +0 -117
  110. data/doc/rdoc/classes/LibXML/XML/XMLParserOptions.html +0 -198
  111. data/doc/rdoc/classes/LibXML/XML/XPath.html +0 -184
  112. data/doc/rdoc/classes/LibXML/XML/XPath/Context.html +0 -404
  113. data/doc/rdoc/classes/LibXML/XML/XPath/InvalidPath.html +0 -172
  114. data/doc/rdoc/classes/LibXML/XML/XPath/Object.html +0 -627
  115. data/doc/rdoc/classes/LibXML/XML/XPointer.html +0 -170
  116. data/doc/rdoc/classes/LibXML/XML/XPointer/Context.html +0 -123
  117. data/doc/rdoc/classes/LibXML/XML/XPointer/Context/InvalidPath.html +0 -117
  118. data/doc/rdoc/classes/LibXML/XML/XPointer/InvalidExpression.html +0 -124
  119. data/doc/rdoc/classes/singleton.html +0 -114
  120. data/doc/rdoc/created.rid +0 -1
  121. data/doc/rdoc/files/CHANGES.html +0 -442
  122. data/doc/rdoc/files/LICENSE.html +0 -133
  123. data/doc/rdoc/files/README.html +0 -388
  124. data/doc/rdoc/files/VERSION.html +0 -107
  125. data/doc/rdoc/files/ext/libxml/cbg_c.html +0 -101
  126. data/doc/rdoc/files/ext/libxml/libxml_c.html +0 -101
  127. data/doc/rdoc/files/ext/libxml/ruby_xml_attr_c.html +0 -101
  128. data/doc/rdoc/files/ext/libxml/ruby_xml_attributes_c.html +0 -101
  129. data/doc/rdoc/files/ext/libxml/ruby_xml_document_c.html +0 -101
  130. data/doc/rdoc/files/ext/libxml/ruby_xml_dtd_c.html +0 -101
  131. data/doc/rdoc/files/ext/libxml/ruby_xml_html_parser_c.html +0 -101
  132. data/doc/rdoc/files/ext/libxml/ruby_xml_input_cbg_c.html +0 -101
  133. data/doc/rdoc/files/ext/libxml/ruby_xml_node_c.html +0 -101
  134. data/doc/rdoc/files/ext/libxml/ruby_xml_node_set_c.html +0 -101
  135. data/doc/rdoc/files/ext/libxml/ruby_xml_ns_c.html +0 -101
  136. data/doc/rdoc/files/ext/libxml/ruby_xml_parser_c.html +0 -101
  137. data/doc/rdoc/files/ext/libxml/ruby_xml_parser_context_c.html +0 -101
  138. data/doc/rdoc/files/ext/libxml/ruby_xml_reader_c.html +0 -101
  139. data/doc/rdoc/files/ext/libxml/ruby_xml_relaxng_c.html +0 -101
  140. data/doc/rdoc/files/ext/libxml/ruby_xml_sax_parser_c.html +0 -101
  141. data/doc/rdoc/files/ext/libxml/ruby_xml_schema_c.html +0 -101
  142. data/doc/rdoc/files/ext/libxml/ruby_xml_state_c.html +0 -101
  143. data/doc/rdoc/files/ext/libxml/ruby_xml_xinclude_c.html +0 -101
  144. data/doc/rdoc/files/ext/libxml/ruby_xml_xpath_c.html +0 -101
  145. data/doc/rdoc/files/ext/libxml/ruby_xml_xpath_context_c.html +0 -101
  146. data/doc/rdoc/files/ext/libxml/ruby_xml_xpath_object_c.html +0 -101
  147. data/doc/rdoc/files/ext/libxml/ruby_xml_xpointer_c.html +0 -101
  148. data/doc/rdoc/files/ext/libxml/ruby_xml_xpointer_context_c.html +0 -101
  149. data/doc/rdoc/files/lib/libxml/attr_rb.html +0 -108
  150. data/doc/rdoc/files/lib/libxml/attributes_rb.html +0 -108
  151. data/doc/rdoc/files/lib/libxml/document_rb.html +0 -108
  152. data/doc/rdoc/files/lib/libxml/node_rb.html +0 -108
  153. data/doc/rdoc/files/lib/libxml/node_set_rb.html +0 -108
  154. data/doc/rdoc/files/lib/libxml/parser_options_rb.html +0 -107
  155. data/doc/rdoc/files/lib/libxml/parser_rb.html +0 -101
  156. data/doc/rdoc/files/lib/libxml/properties_rb.html +0 -108
  157. data/doc/rdoc/files/lib/libxml/tree_rb.html +0 -107
  158. data/doc/rdoc/files/lib/libxml_rb.html +0 -124
  159. data/doc/rdoc/files/lib/xml/libxml_rb.html +0 -124
  160. data/doc/rdoc/files/lib/xml_rb.html +0 -134
  161. data/doc/rdoc/fr_class_index.html +0 -62
  162. data/doc/rdoc/fr_file_index.html +0 -66
  163. data/doc/rdoc/fr_method_index.html +0 -392
  164. data/doc/rdoc/index.html +0 -24
  165. data/doc/rdoc/rdoc-style.css +0 -208
  166. data/ext/libxml/ruby_xml_node_set.c +0 -172
  167. data/ext/libxml/ruby_xml_node_set.h +0 -20
  168. data/ext/libxml/ruby_xml_xpointer_context.c +0 -22
  169. data/ext/libxml/ruby_xml_xpointer_context.h +0 -18
  170. data/lib/libxml/node_set.rb +0 -27
  171. data/lib/libxml2-2.dll +0 -0
  172. data/lib/libxml_ruby.dll.a +0 -0
  173. data/lib/libxml_ruby.so +0 -0
  174. data/test/tc_node_set.rb +0 -24
  175. data/test/tc_node_set2.rb +0 -37
@@ -1,9 +1,9 @@
1
1
  /* Don't nuke this block! It is used for automatically updating the
2
2
  * versions below. VERSION = string formatting, VERNUM = numbered
3
3
  * version for inline testing: increment both or none at all.*/
4
- #define RUBY_LIBXML_VERSION "0.8.3"
4
+ #define RUBY_LIBXML_VERSION "0.9.0"
5
5
  #define RUBY_LIBXML_VERNUM 0
6
6
  #define RUBY_LIBXML_VER_MAJ 0
7
- #define RUBY_LIBXML_VER_MIN 8
8
- #define RUBY_LIBXML_VER_MIC 3
7
+ #define RUBY_LIBXML_VER_MIN 9
8
+ #define RUBY_LIBXML_VER_MIC 0
9
9
  #define RUBY_LIBXML_VER_PATCH 0
@@ -3,39 +3,32 @@
3
3
  # built with VC++ while here we want to build
4
4
  # with MingW. So just roll our own...
5
5
 
6
- require 'rake/clean'
6
+ require 'fileutils'
7
7
  require 'rbconfig'
8
8
 
9
- RUBY_INCLUDE_DIR = Config::CONFIG["archdir"]
10
- RUBY_BIN_DIR = Config::CONFIG["bindir"]
11
- RUBY_LIB_DIR = Config::CONFIG["libdir"]
12
- RUBY_SHARED_LIB = Config::CONFIG["LIBRUBY"]
13
- RUBY_SHARED_DLL = RUBY_SHARED_LIB.gsub(/lib$/, 'dll')
14
-
15
9
  EXTENSION_NAME = "libxml_ruby.#{Config::CONFIG["DLEXT"]}"
10
+
16
11
  # MingW insists the import library is .dll.a
17
12
  EXTENSION_LIB_NAME = "libxml_ruby.dll.a"
18
13
 
19
- CLEAN.include('*.o')
20
- CLOBBER.include(EXTENSION_NAME)
21
- CLOBBER.include(EXTENSION_LIB_NAME)
22
-
23
- task :default => "libxml"
24
-
25
- SRC = FileList['../libxml/*.c']
26
- OBJ = SRC.collect do |file_name|
27
- File.basename(file_name).ext('o')
28
- end
29
-
30
- SRC.each do |srcfile|
31
- objfile = File.basename(srcfile).ext('o')
32
- file objfile => srcfile do
33
- command = "gcc -c -fPIC -O2 -Wall -o #{objfile} -I/usr/local/include #{srcfile} -I#{RUBY_INCLUDE_DIR}"
34
- sh "sh -c '#{command}'"
14
+ # This is called when the Windows GEM is installed!
15
+ task :install do
16
+ # Gems will pass these two environment variables:
17
+ # RUBYARCHDIR=#{dest_path}
18
+ # RUBYLIBDIR=#{dest_path}
19
+
20
+ dest_path = ENV['RUBYLIBDIR']
21
+
22
+ # Copy the extension
23
+ cp(EXTENSION_NAME, dest_path)
24
+
25
+ # Copy the import library (used by libxslt)
26
+ cp(EXTENSION_LIB_NAME, dest_path)
27
+
28
+ # Copy dllss
29
+ Dir.glob('*.dll').each do |dll|
30
+ cp(dll, dest_path)
35
31
  end
36
32
  end
37
33
 
38
- file "libxml" => OBJ do
39
- command = "gcc -shared -o #{EXTENSION_NAME} -Wl,--out-implib,#{EXTENSION_LIB_NAME} -L/usr/local/lib #{OBJ} -lxml2 #{RUBY_BIN_DIR}/#{RUBY_SHARED_DLL}"
40
- sh "sh -c '#{command}'"
41
- end
34
+ task :default => :install
@@ -0,0 +1,41 @@
1
+ # We can't use Ruby's standard build procedures
2
+ # on Windows because the Ruby executable is
3
+ # built with VC++ while here we want to build
4
+ # with MingW. So just roll our own...
5
+
6
+ require 'rake/clean'
7
+ require 'rbconfig'
8
+
9
+ RUBY_INCLUDE_DIR = Config::CONFIG["archdir"]
10
+ RUBY_BIN_DIR = Config::CONFIG["bindir"]
11
+ RUBY_LIB_DIR = Config::CONFIG["libdir"]
12
+ RUBY_SHARED_LIB = Config::CONFIG["LIBRUBY"]
13
+ RUBY_SHARED_DLL = RUBY_SHARED_LIB.gsub(/lib$/, 'dll')
14
+
15
+ EXTENSION_NAME = "libxml_ruby.#{Config::CONFIG["DLEXT"]}"
16
+ # MingW insists the import library is .dll.a
17
+ EXTENSION_LIB_NAME = "libxml_ruby.dll.a"
18
+
19
+ CLEAN.include('*.o')
20
+ CLOBBER.include(EXTENSION_NAME)
21
+ CLOBBER.include(EXTENSION_LIB_NAME)
22
+
23
+ task :default => "libxml"
24
+
25
+ SRC = FileList['../libxml/*.c']
26
+ OBJ = SRC.collect do |file_name|
27
+ File.basename(file_name).ext('o')
28
+ end
29
+
30
+ SRC.each do |srcfile|
31
+ objfile = File.basename(srcfile).ext('o')
32
+ file objfile => srcfile do
33
+ command = "gcc -c -O2 -Wall -o #{objfile} -I/usr/local/include #{srcfile} -I#{RUBY_INCLUDE_DIR}"
34
+ sh "sh -c '#{command}'"
35
+ end
36
+ end
37
+
38
+ file "libxml" => OBJ do
39
+ command = "gcc -shared -o #{EXTENSION_NAME} -Wl,--out-implib,#{EXTENSION_LIB_NAME} -L/usr/local/lib #{OBJ} -lxml2 #{RUBY_BIN_DIR}/#{RUBY_SHARED_DLL}"
40
+ sh "sh -c '#{command}'"
41
+ end
Binary file
Binary file
@@ -63,7 +63,7 @@
63
63
  <Tool
64
64
  Name="VCLinkerTool"
65
65
  AdditionalDependencies="msvcrt-ruby18.lib libxml2.lib"
66
- OutputFile="C:\Development\ruby\lib\ruby\gems\1.8\gems\libxml-ruby-0.8.2-x86-mswin32-60\lib\$(ProjectName).so"
66
+ OutputFile="C:\Development\ruby\lib\ruby\gems\1.8\gems\libxml-ruby-0.9.0-x86-mswin32-60\lib\$(ProjectName).so"
67
67
  LinkIncremental="2"
68
68
  AdditionalLibraryDirectories="C:\Development\ruby\lib;C:\Development\msys\local\lib"
69
69
  GenerateDebugInformation="true"
@@ -205,20 +205,28 @@
205
205
  RelativePath="..\libxml\ruby_xml_dtd.c"
206
206
  >
207
207
  </File>
208
+ <File
209
+ RelativePath="..\libxml\ruby_xml_encoding.c"
210
+ >
211
+ </File>
212
+ <File
213
+ RelativePath="..\libxml\ruby_xml_error.c"
214
+ >
215
+ </File>
208
216
  <File
209
217
  RelativePath="..\libxml\ruby_xml_html_parser.c"
210
218
  >
211
219
  </File>
212
220
  <File
213
- RelativePath="..\libxml\ruby_xml_input_cbg.c"
221
+ RelativePath="..\libxml\ruby_xml_input.c"
214
222
  >
215
223
  </File>
216
224
  <File
217
- RelativePath="..\libxml\ruby_xml_node.c"
225
+ RelativePath="..\libxml\ruby_xml_input_cbg.c"
218
226
  >
219
227
  </File>
220
228
  <File
221
- RelativePath="..\libxml\ruby_xml_node_set.c"
229
+ RelativePath="..\libxml\ruby_xml_node.c"
222
230
  >
223
231
  </File>
224
232
  <File
@@ -273,10 +281,6 @@
273
281
  RelativePath="..\libxml\ruby_xml_xpointer.c"
274
282
  >
275
283
  </File>
276
- <File
277
- RelativePath="..\libxml\ruby_xml_xpointer_context.c"
278
- >
279
- </File>
280
284
  </Filter>
281
285
  <Filter
282
286
  Name="Header Files"
@@ -303,20 +307,28 @@
303
307
  RelativePath="..\libxml\ruby_xml_dtd.h"
304
308
  >
305
309
  </File>
310
+ <File
311
+ RelativePath="..\libxml\ruby_xml_encoding.h"
312
+ >
313
+ </File>
314
+ <File
315
+ RelativePath="..\libxml\ruby_xml_error.h"
316
+ >
317
+ </File>
306
318
  <File
307
319
  RelativePath="..\libxml\ruby_xml_html_parser.h"
308
320
  >
309
321
  </File>
310
322
  <File
311
- RelativePath="..\libxml\ruby_xml_input_cbg.h"
323
+ RelativePath="..\libxml\ruby_xml_input.h"
312
324
  >
313
325
  </File>
314
326
  <File
315
- RelativePath="..\libxml\ruby_xml_node.h"
327
+ RelativePath="..\libxml\ruby_xml_input_cbg.h"
316
328
  >
317
329
  </File>
318
330
  <File
319
- RelativePath="..\libxml\ruby_xml_node_set.h"
331
+ RelativePath="..\libxml\ruby_xml_node.h"
320
332
  >
321
333
  </File>
322
334
  <File
@@ -371,10 +383,6 @@
371
383
  RelativePath="..\libxml\ruby_xml_xpointer.h"
372
384
  >
373
385
  </File>
374
- <File
375
- RelativePath="..\libxml\ruby_xml_xpointer_context.h"
376
- >
377
- </File>
378
386
  <File
379
387
  RelativePath="..\libxml\version.h"
380
388
  >
@@ -1,4 +1,4 @@
1
- # $Id: libxml.rb 509 2008-07-22 02:11:00Z cfis $
1
+ # $Id: libxml.rb 561 2008-11-18 04:17:29Z cfis $
2
2
  # Please see the LICENSE file for copyright and distribution information
3
3
 
4
4
  # If running on Windows, then add the current directory to the PATH
@@ -12,14 +12,20 @@ end
12
12
  require 'libxml_ruby'
13
13
 
14
14
  # Load Ruby supporting code.
15
+ require 'libxml/error'
15
16
  require 'libxml/parser'
16
17
  require 'libxml/parser_options'
18
+ require 'libxml/parser_context'
17
19
  require 'libxml/document'
18
20
  require 'libxml/node'
19
- require 'libxml/node_set'
20
21
  require 'libxml/attributes'
21
22
  require 'libxml/attr'
22
23
  require 'libxml/tree'
24
+ require 'libxml/reader'
25
+ require 'libxml/html_parser'
26
+ require 'libxml/sax_parser'
27
+ require 'libxml/sax_callbacks'
28
+ require 'libxml/xpath_object'
23
29
 
24
30
  # Deprecated
25
31
  require 'libxml/properties'
@@ -1,9 +1,22 @@
1
- # $Id: libxml.rb 374 2008-07-11 04:51:41Z cfis $
2
- # Please see the LICENSE file for copyright and distribution information
3
-
4
1
  module LibXML
5
2
  module XML
6
3
  class Document
4
+ def self.file(value)
5
+ Parser.file(value).parse
6
+ end
7
+
8
+ def self.string(value)
9
+ Parser.string(value).parse
10
+ end
11
+
12
+ def self.document(value)
13
+ Parser.document(value).parse
14
+ end
15
+
16
+ def self.io(value)
17
+ Parser.io(value).parse
18
+ end
19
+
7
20
  # Return the nodes matching the specified xpath expression,
8
21
  # optionally using the specified namespace. For more
9
22
  # information about working with namespaces, please refer
@@ -33,7 +46,6 @@ module LibXML
33
46
  #
34
47
  # nodes = nil
35
48
  # GC.start
36
- #
37
49
  def find(xpath, nslist = nil)
38
50
  context = XPath::Context.new(self)
39
51
  context.node = self.root
@@ -0,0 +1,84 @@
1
+ module LibXML
2
+ module XML
3
+ class Error
4
+ # Verbose error handler
5
+ VERBOSE_HANDLER = lambda do |error|
6
+ STDERR << error.to_s << "\n"
7
+ STDERR.flush
8
+ end
9
+
10
+ # Quiet error handler
11
+ QUIET_HANDLER = lambda do |error|
12
+ end
13
+
14
+ def ==(other)
15
+ eql?(other)
16
+ end
17
+
18
+ def eql?(other)
19
+ self.code == other.code and
20
+ self.domain == other.domain and
21
+ self.message == other.message and
22
+ self.level == other.level and
23
+ self.file == other.file and
24
+ self.line == other.line and
25
+ self.str1 == other.str1 and
26
+ self.str2 == other.str2 and
27
+ self.str3 == other.str3 and
28
+ self.int1 == other.int1 and
29
+ self.int2 == other.int2 and
30
+ self.ctxt == other.ctxt and
31
+ self.node == other.node
32
+ end
33
+
34
+ def level_to_s
35
+ case self.level
36
+ when NONE:
37
+ ''
38
+ when WARNING:
39
+ 'Warning:'
40
+ when ERROR:
41
+ 'Error:'
42
+ when FATAL:
43
+ 'Fatal error:'
44
+ end
45
+ end
46
+
47
+ def domain_to_s
48
+ const_map = Hash.new
49
+ domains = self.class.constants.grep(/XML_FROM/)
50
+ domains.each do |domain|
51
+ human_name = domain.gsub(/XML_FROM_/, '')
52
+ const_map[self.class.const_get(domain)] = human_name
53
+ end
54
+
55
+ const_map[self.domain]
56
+ end
57
+
58
+ def code_to_s
59
+ const_map = Hash.new
60
+ codes = self.class.constants -
61
+ self.class.constants.grep(/XML_FROM/) -
62
+ ["XML_ERR_NONE", "XML_ERR_WARNING", "XML_ERR_ERROR", "XML_ERR_FATAL"]
63
+
64
+
65
+ codes.each do |code|
66
+ human_name = code.gsub(/XML_ERR_/, '')
67
+ const_map[self.class.const_get(code)] = human_name
68
+ end
69
+
70
+ const_map[self.code]
71
+ end
72
+
73
+ def to_s
74
+ msg = super
75
+ msg = msg ? msg.strip: ''
76
+
77
+ sprintf("%s %s at %s:%d.", self.level_to_s, msg,
78
+ self.file, self.line)
79
+ end
80
+ end
81
+ end
82
+ end
83
+
84
+ LibXML::XML::Error.set_handler(&LibXML::XML::Error::VERBOSE_HANDLER)
@@ -0,0 +1,76 @@
1
+ # Provide hpricot API for libxml. Provided by Michael Guterl,
2
+ # inspired by http://thebogles.com/blog/an-hpricot-style-interface-to-libxml
3
+
4
+ class String
5
+ def to_libxml_doc
6
+ xp = XML::Parser.new
7
+ xp.string = self
8
+ xp.parse
9
+ end
10
+ end
11
+
12
+ module LibXML
13
+ module XML
14
+ class Document
15
+ alias :search :find
16
+ end
17
+
18
+ class Node
19
+ # find the child node with the given xpath
20
+ def at(xpath)
21
+ self.find_first(xpath)
22
+ end
23
+
24
+ # find the array of child nodes matching the given xpath
25
+ def search(xpath)
26
+ results = self.find(xpath).to_a
27
+ if block_given?
28
+ results.each do |result|
29
+ yield result
30
+ end
31
+ end
32
+ return results
33
+ end
34
+
35
+ def /(xpath)
36
+ search(xpath)
37
+ end
38
+
39
+ # return the inner contents of this node as a string
40
+ def inner_xml
41
+ child.to_s
42
+ end
43
+
44
+ # alias for inner_xml
45
+ def inner_html
46
+ inner_xml
47
+ end
48
+
49
+ # return this node and its contents as an xml string
50
+ def to_xml
51
+ self.to_s
52
+ end
53
+
54
+ # alias for path
55
+ def xpath
56
+ self.path
57
+ end
58
+
59
+ def find_with_default_ns(xpath_expr, namespace=nil)
60
+ find_base(xpath_expr, namespace || default_namespaces)
61
+ end
62
+
63
+ def find_first_with_default_ns(xpath_expr, namespace=nil)
64
+ find_first_base(xpath_expr, namespace || default_namespaces)
65
+ end
66
+
67
+ # alias_method :find_base, :find unless method_defined?(:find_base)
68
+ # alias_method :find, :find_with_default_ns
69
+ # alias_method :find_first_base, :find_first unless method_defined?(:find_first_base)
70
+ # alias_method :find_first, :find_first_with_default_ns
71
+ # alias :child? :first?
72
+ # alias :children? :first?
73
+ # alias :child :first
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,61 @@
1
+ module LibXML
2
+ module XML
3
+ class HTMLParser
4
+ def self.file(value)
5
+ parser = Parser.new
6
+ parser.input.file = value
7
+ parser
8
+ end
9
+
10
+ def self.string(value)
11
+ parser = Parser.new
12
+ parser.input.string = value
13
+ parser
14
+ end
15
+
16
+ def self.document(value)
17
+ parser = Parser.new
18
+ parser.input.document = value
19
+ parser
20
+ end
21
+
22
+ def self.io(value)
23
+ parser = Parser.new
24
+ parser.input.io = value
25
+ parser
26
+ end
27
+
28
+ def file
29
+ input.filename
30
+ end
31
+
32
+ def file=(value)
33
+ input.file = value
34
+ end
35
+
36
+ def string
37
+ input.string
38
+ end
39
+
40
+ def string=(value)
41
+ input.string = value
42
+ end
43
+
44
+ def document
45
+ input.document
46
+ end
47
+
48
+ def document=(value)
49
+ input.document = value
50
+ end
51
+
52
+ def io
53
+ input.io
54
+ end
55
+
56
+ def io=(value)
57
+ input.io = value
58
+ end
59
+ end
60
+ end
61
+ end