rubyjedi-nokogiri_java 1.4.0.20100513161003-java

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 (285) hide show
  1. data/.autotest +26 -0
  2. data/CHANGELOG.ja.rdoc +330 -0
  3. data/CHANGELOG.rdoc +341 -0
  4. data/Manifest.txt +277 -0
  5. data/README.ja.rdoc +105 -0
  6. data/README.rdoc +125 -0
  7. data/Rakefile +307 -0
  8. data/bin/nokogiri +49 -0
  9. data/deps.rip +5 -0
  10. data/ext/nokogiri/extconf.rb +149 -0
  11. data/ext/nokogiri/html_document.c +145 -0
  12. data/ext/nokogiri/html_document.h +10 -0
  13. data/ext/nokogiri/html_element_description.c +272 -0
  14. data/ext/nokogiri/html_element_description.h +10 -0
  15. data/ext/nokogiri/html_entity_lookup.c +32 -0
  16. data/ext/nokogiri/html_entity_lookup.h +8 -0
  17. data/ext/nokogiri/html_sax_parser_context.c +92 -0
  18. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  19. data/ext/nokogiri/nokogiri.c +96 -0
  20. data/ext/nokogiri/nokogiri.h +148 -0
  21. data/ext/nokogiri/xml_attr.c +92 -0
  22. data/ext/nokogiri/xml_attr.h +9 -0
  23. data/ext/nokogiri/xml_attribute_decl.c +67 -0
  24. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  25. data/ext/nokogiri/xml_cdata.c +54 -0
  26. data/ext/nokogiri/xml_cdata.h +9 -0
  27. data/ext/nokogiri/xml_comment.c +52 -0
  28. data/ext/nokogiri/xml_comment.h +9 -0
  29. data/ext/nokogiri/xml_document.c +386 -0
  30. data/ext/nokogiri/xml_document.h +24 -0
  31. data/ext/nokogiri/xml_document_fragment.c +46 -0
  32. data/ext/nokogiri/xml_document_fragment.h +10 -0
  33. data/ext/nokogiri/xml_dtd.c +192 -0
  34. data/ext/nokogiri/xml_dtd.h +10 -0
  35. data/ext/nokogiri/xml_element_content.c +123 -0
  36. data/ext/nokogiri/xml_element_content.h +10 -0
  37. data/ext/nokogiri/xml_element_decl.c +69 -0
  38. data/ext/nokogiri/xml_element_decl.h +9 -0
  39. data/ext/nokogiri/xml_encoding_handler.c +79 -0
  40. data/ext/nokogiri/xml_encoding_handler.h +8 -0
  41. data/ext/nokogiri/xml_entity_decl.c +97 -0
  42. data/ext/nokogiri/xml_entity_decl.h +10 -0
  43. data/ext/nokogiri/xml_entity_reference.c +50 -0
  44. data/ext/nokogiri/xml_entity_reference.h +9 -0
  45. data/ext/nokogiri/xml_io.c +31 -0
  46. data/ext/nokogiri/xml_io.h +11 -0
  47. data/ext/nokogiri/xml_namespace.c +82 -0
  48. data/ext/nokogiri/xml_namespace.h +13 -0
  49. data/ext/nokogiri/xml_node.c +1080 -0
  50. data/ext/nokogiri/xml_node.h +13 -0
  51. data/ext/nokogiri/xml_node_set.c +405 -0
  52. data/ext/nokogiri/xml_node_set.h +9 -0
  53. data/ext/nokogiri/xml_processing_instruction.c +54 -0
  54. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  55. data/ext/nokogiri/xml_reader.c +593 -0
  56. data/ext/nokogiri/xml_reader.h +10 -0
  57. data/ext/nokogiri/xml_relax_ng.c +159 -0
  58. data/ext/nokogiri/xml_relax_ng.h +9 -0
  59. data/ext/nokogiri/xml_sax_parser.c +283 -0
  60. data/ext/nokogiri/xml_sax_parser.h +43 -0
  61. data/ext/nokogiri/xml_sax_parser_context.c +157 -0
  62. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  63. data/ext/nokogiri/xml_sax_push_parser.c +114 -0
  64. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  65. data/ext/nokogiri/xml_schema.c +156 -0
  66. data/ext/nokogiri/xml_schema.h +9 -0
  67. data/ext/nokogiri/xml_syntax_error.c +52 -0
  68. data/ext/nokogiri/xml_syntax_error.h +13 -0
  69. data/ext/nokogiri/xml_text.c +48 -0
  70. data/ext/nokogiri/xml_text.h +9 -0
  71. data/ext/nokogiri/xml_xpath.c +53 -0
  72. data/ext/nokogiri/xml_xpath.h +11 -0
  73. data/ext/nokogiri/xml_xpath_context.c +239 -0
  74. data/ext/nokogiri/xml_xpath_context.h +9 -0
  75. data/ext/nokogiri/xslt_stylesheet.c +131 -0
  76. data/ext/nokogiri/xslt_stylesheet.h +9 -0
  77. data/lib/isorelax.jar +0 -0
  78. data/lib/jing.jar +0 -0
  79. data/lib/nekodtd.jar +0 -0
  80. data/lib/nekohtml.jar +0 -0
  81. data/lib/nokogiri.rb +123 -0
  82. data/lib/nokogiri/css.rb +25 -0
  83. data/lib/nokogiri/css/generated_parser.rb +659 -0
  84. data/lib/nokogiri/css/generated_tokenizer.rb +145 -0
  85. data/lib/nokogiri/css/node.rb +99 -0
  86. data/lib/nokogiri/css/parser.rb +82 -0
  87. data/lib/nokogiri/css/parser.y +230 -0
  88. data/lib/nokogiri/css/syntax_error.rb +7 -0
  89. data/lib/nokogiri/css/tokenizer.rb +7 -0
  90. data/lib/nokogiri/css/tokenizer.rex +55 -0
  91. data/lib/nokogiri/css/xpath_visitor.rb +164 -0
  92. data/lib/nokogiri/decorators/slop.rb +33 -0
  93. data/lib/nokogiri/ffi/encoding_handler.rb +42 -0
  94. data/lib/nokogiri/ffi/html/document.rb +28 -0
  95. data/lib/nokogiri/ffi/html/element_description.rb +81 -0
  96. data/lib/nokogiri/ffi/html/entity_lookup.rb +16 -0
  97. data/lib/nokogiri/ffi/html/sax/parser_context.rb +38 -0
  98. data/lib/nokogiri/ffi/io_callbacks.rb +42 -0
  99. data/lib/nokogiri/ffi/libxml.rb +372 -0
  100. data/lib/nokogiri/ffi/structs/common_node.rb +26 -0
  101. data/lib/nokogiri/ffi/structs/html_elem_desc.rb +24 -0
  102. data/lib/nokogiri/ffi/structs/html_entity_desc.rb +13 -0
  103. data/lib/nokogiri/ffi/structs/xml_alloc.rb +16 -0
  104. data/lib/nokogiri/ffi/structs/xml_attr.rb +19 -0
  105. data/lib/nokogiri/ffi/structs/xml_attribute.rb +27 -0
  106. data/lib/nokogiri/ffi/structs/xml_buffer.rb +16 -0
  107. data/lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb +11 -0
  108. data/lib/nokogiri/ffi/structs/xml_document.rb +108 -0
  109. data/lib/nokogiri/ffi/structs/xml_dtd.rb +28 -0
  110. data/lib/nokogiri/ffi/structs/xml_element.rb +26 -0
  111. data/lib/nokogiri/ffi/structs/xml_element_content.rb +17 -0
  112. data/lib/nokogiri/ffi/structs/xml_entity.rb +32 -0
  113. data/lib/nokogiri/ffi/structs/xml_enumeration.rb +12 -0
  114. data/lib/nokogiri/ffi/structs/xml_node.rb +28 -0
  115. data/lib/nokogiri/ffi/structs/xml_node_set.rb +53 -0
  116. data/lib/nokogiri/ffi/structs/xml_notation.rb +11 -0
  117. data/lib/nokogiri/ffi/structs/xml_ns.rb +15 -0
  118. data/lib/nokogiri/ffi/structs/xml_parser_context.rb +19 -0
  119. data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +14 -0
  120. data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +51 -0
  121. data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +124 -0
  122. data/lib/nokogiri/ffi/structs/xml_schema.rb +13 -0
  123. data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +31 -0
  124. data/lib/nokogiri/ffi/structs/xml_text_reader.rb +12 -0
  125. data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +37 -0
  126. data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +35 -0
  127. data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +20 -0
  128. data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +13 -0
  129. data/lib/nokogiri/ffi/xml/attr.rb +41 -0
  130. data/lib/nokogiri/ffi/xml/attribute_decl.rb +27 -0
  131. data/lib/nokogiri/ffi/xml/cdata.rb +19 -0
  132. data/lib/nokogiri/ffi/xml/comment.rb +18 -0
  133. data/lib/nokogiri/ffi/xml/document.rb +135 -0
  134. data/lib/nokogiri/ffi/xml/document_fragment.rb +21 -0
  135. data/lib/nokogiri/ffi/xml/dtd.rb +67 -0
  136. data/lib/nokogiri/ffi/xml/element_content.rb +43 -0
  137. data/lib/nokogiri/ffi/xml/element_decl.rb +19 -0
  138. data/lib/nokogiri/ffi/xml/entity_decl.rb +27 -0
  139. data/lib/nokogiri/ffi/xml/entity_reference.rb +19 -0
  140. data/lib/nokogiri/ffi/xml/namespace.rb +44 -0
  141. data/lib/nokogiri/ffi/xml/node.rb +465 -0
  142. data/lib/nokogiri/ffi/xml/node_set.rb +146 -0
  143. data/lib/nokogiri/ffi/xml/processing_instruction.rb +20 -0
  144. data/lib/nokogiri/ffi/xml/reader.rb +227 -0
  145. data/lib/nokogiri/ffi/xml/relax_ng.rb +85 -0
  146. data/lib/nokogiri/ffi/xml/sax/parser.rb +135 -0
  147. data/lib/nokogiri/ffi/xml/sax/parser_context.rb +67 -0
  148. data/lib/nokogiri/ffi/xml/sax/push_parser.rb +55 -0
  149. data/lib/nokogiri/ffi/xml/schema.rb +92 -0
  150. data/lib/nokogiri/ffi/xml/syntax_error.rb +98 -0
  151. data/lib/nokogiri/ffi/xml/text.rb +18 -0
  152. data/lib/nokogiri/ffi/xml/xpath.rb +19 -0
  153. data/lib/nokogiri/ffi/xml/xpath_context.rb +135 -0
  154. data/lib/nokogiri/ffi/xslt/stylesheet.rb +50 -0
  155. data/lib/nokogiri/html.rb +36 -0
  156. data/lib/nokogiri/html/builder.rb +35 -0
  157. data/lib/nokogiri/html/document.rb +88 -0
  158. data/lib/nokogiri/html/document_fragment.rb +15 -0
  159. data/lib/nokogiri/html/element_description.rb +23 -0
  160. data/lib/nokogiri/html/element_description_defaults.rb +671 -0
  161. data/lib/nokogiri/html/entity_lookup.rb +13 -0
  162. data/lib/nokogiri/html/sax/parser.rb +48 -0
  163. data/lib/nokogiri/html/sax/parser_context.rb +16 -0
  164. data/lib/nokogiri/nokogiri.jar +0 -0
  165. data/lib/nokogiri/syntax_error.rb +4 -0
  166. data/lib/nokogiri/version.rb +33 -0
  167. data/lib/nokogiri/version_warning.rb +11 -0
  168. data/lib/nokogiri/xml.rb +67 -0
  169. data/lib/nokogiri/xml/attr.rb +14 -0
  170. data/lib/nokogiri/xml/attribute_decl.rb +18 -0
  171. data/lib/nokogiri/xml/builder.rb +405 -0
  172. data/lib/nokogiri/xml/cdata.rb +11 -0
  173. data/lib/nokogiri/xml/character_data.rb +7 -0
  174. data/lib/nokogiri/xml/document.rb +163 -0
  175. data/lib/nokogiri/xml/document_fragment.rb +73 -0
  176. data/lib/nokogiri/xml/dtd.rb +11 -0
  177. data/lib/nokogiri/xml/element_content.rb +36 -0
  178. data/lib/nokogiri/xml/element_decl.rb +13 -0
  179. data/lib/nokogiri/xml/entity_decl.rb +15 -0
  180. data/lib/nokogiri/xml/fragment_handler.rb +73 -0
  181. data/lib/nokogiri/xml/namespace.rb +13 -0
  182. data/lib/nokogiri/xml/node.rb +730 -0
  183. data/lib/nokogiri/xml/node/save_options.rb +42 -0
  184. data/lib/nokogiri/xml/node_set.rb +318 -0
  185. data/lib/nokogiri/xml/notation.rb +6 -0
  186. data/lib/nokogiri/xml/parse_options.rb +85 -0
  187. data/lib/nokogiri/xml/pp.rb +2 -0
  188. data/lib/nokogiri/xml/pp/character_data.rb +18 -0
  189. data/lib/nokogiri/xml/pp/node.rb +56 -0
  190. data/lib/nokogiri/xml/processing_instruction.rb +8 -0
  191. data/lib/nokogiri/xml/reader.rb +74 -0
  192. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  193. data/lib/nokogiri/xml/sax.rb +4 -0
  194. data/lib/nokogiri/xml/sax/document.rb +160 -0
  195. data/lib/nokogiri/xml/sax/parser.rb +115 -0
  196. data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
  197. data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
  198. data/lib/nokogiri/xml/schema.rb +61 -0
  199. data/lib/nokogiri/xml/syntax_error.rb +43 -0
  200. data/lib/nokogiri/xml/xpath.rb +10 -0
  201. data/lib/nokogiri/xml/xpath/syntax_error.rb +8 -0
  202. data/lib/nokogiri/xml/xpath_context.rb +16 -0
  203. data/lib/nokogiri/xslt.rb +48 -0
  204. data/lib/nokogiri/xslt/stylesheet.rb +25 -0
  205. data/lib/xercesImpl.jar +0 -0
  206. data/lib/xsd/xmlparser/nokogiri.rb +90 -0
  207. data/tasks/test.rb +100 -0
  208. data/test/css/test_nthiness.rb +159 -0
  209. data/test/css/test_parser.rb +282 -0
  210. data/test/css/test_tokenizer.rb +190 -0
  211. data/test/css/test_xpath_visitor.rb +76 -0
  212. data/test/ffi/test_document.rb +35 -0
  213. data/test/files/2ch.html +108 -0
  214. data/test/files/address_book.rlx +12 -0
  215. data/test/files/address_book.xml +10 -0
  216. data/test/files/bar/bar.xsd +4 -0
  217. data/test/files/dont_hurt_em_why.xml +422 -0
  218. data/test/files/exslt.xml +8 -0
  219. data/test/files/exslt.xslt +35 -0
  220. data/test/files/foo/foo.xsd +4 -0
  221. data/test/files/po.xml +32 -0
  222. data/test/files/po.xsd +66 -0
  223. data/test/files/shift_jis.html +10 -0
  224. data/test/files/shift_jis.xml +5 -0
  225. data/test/files/snuggles.xml +3 -0
  226. data/test/files/staff.dtd +10 -0
  227. data/test/files/staff.xml +59 -0
  228. data/test/files/staff.xslt +32 -0
  229. data/test/files/tlm.html +850 -0
  230. data/test/files/valid_bar.xml +2 -0
  231. data/test/helper.rb +137 -0
  232. data/test/html/sax/test_parser.rb +83 -0
  233. data/test/html/sax/test_parser_context.rb +48 -0
  234. data/test/html/test_builder.rb +164 -0
  235. data/test/html/test_document.rb +385 -0
  236. data/test/html/test_document_encoding.rb +77 -0
  237. data/test/html/test_document_fragment.rb +157 -0
  238. data/test/html/test_element_description.rb +98 -0
  239. data/test/html/test_named_characters.rb +14 -0
  240. data/test/html/test_node.rb +242 -0
  241. data/test/html/test_node_encoding.rb +27 -0
  242. data/test/test_convert_xpath.rb +135 -0
  243. data/test/test_css_cache.rb +45 -0
  244. data/test/test_encoding_handler.rb +46 -0
  245. data/test/test_jruby.rb +40 -0
  246. data/test/test_memory_leak.rb +87 -0
  247. data/test/test_nokogiri.rb +140 -0
  248. data/test/test_reader.rb +358 -0
  249. data/test/test_soap4r_sax.rb +52 -0
  250. data/test/test_xslt_transforms.rb +150 -0
  251. data/test/xml/node/test_save_options.rb +20 -0
  252. data/test/xml/node/test_subclass.rb +44 -0
  253. data/test/xml/sax/test_parser.rb +314 -0
  254. data/test/xml/sax/test_parser_context.rb +63 -0
  255. data/test/xml/sax/test_push_parser.rb +135 -0
  256. data/test/xml/test_attr.rb +38 -0
  257. data/test/xml/test_attribute_decl.rb +90 -0
  258. data/test/xml/test_builder.rb +167 -0
  259. data/test/xml/test_cdata.rb +38 -0
  260. data/test/xml/test_comment.rb +29 -0
  261. data/test/xml/test_document.rb +638 -0
  262. data/test/xml/test_document_encoding.rb +26 -0
  263. data/test/xml/test_document_fragment.rb +149 -0
  264. data/test/xml/test_dtd.rb +92 -0
  265. data/test/xml/test_dtd_encoding.rb +33 -0
  266. data/test/xml/test_element_content.rb +56 -0
  267. data/test/xml/test_element_decl.rb +73 -0
  268. data/test/xml/test_entity_decl.rb +83 -0
  269. data/test/xml/test_entity_reference.rb +21 -0
  270. data/test/xml/test_namespace.rb +70 -0
  271. data/test/xml/test_node.rb +740 -0
  272. data/test/xml/test_node_attributes.rb +34 -0
  273. data/test/xml/test_node_encoding.rb +107 -0
  274. data/test/xml/test_node_reparenting.rb +279 -0
  275. data/test/xml/test_node_set.rb +577 -0
  276. data/test/xml/test_parse_options.rb +52 -0
  277. data/test/xml/test_processing_instruction.rb +30 -0
  278. data/test/xml/test_reader_encoding.rb +126 -0
  279. data/test/xml/test_relax_ng.rb +60 -0
  280. data/test/xml/test_schema.rb +89 -0
  281. data/test/xml/test_syntax_error.rb +12 -0
  282. data/test/xml/test_text.rb +30 -0
  283. data/test/xml/test_unparented_node.rb +381 -0
  284. data/test/xml/test_xpath.rb +169 -0
  285. metadata +477 -0
@@ -0,0 +1,146 @@
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)
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)
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
+ new_set = NodeSet.wrap(new_set_ptr)
28
+ new_set.document = document
29
+ new_set
30
+ end
31
+
32
+ def -(node_set) # :nodoc:
33
+ raise(ArgumentError, "node_set must be a Nokogiri::XML::NodeSet") unless node_set.is_a?(XML::NodeSet)
34
+ new_set_ptr = LibXML.xmlXPathNodeSetMerge(nil, self.cstruct)
35
+
36
+ other_nodetab = node_set.cstruct.nodeTab
37
+ node_set.cstruct[:nodeNr].times do |j|
38
+ LibXML.xmlXPathNodeSetDel(new_set_ptr, other_nodetab[j])
39
+ end
40
+ NodeSet.wrap(new_set_ptr)
41
+ end
42
+
43
+ def delete(node) # :nodoc:
44
+ raise(ArgumentError, "node must be a Nokogiri::XML::Node") unless node.is_a?(XML::Node)
45
+ if LibXML.xmlXPathNodeSetContains(cstruct, node.cstruct) != 0
46
+ LibXML.xmlXPathNodeSetDel(cstruct, node.cstruct)
47
+ return node
48
+ end
49
+ return nil
50
+ end
51
+
52
+ def [](*args) # :nodoc:
53
+ raise(ArgumentError, "got #{args.length} arguments, expected 1 (or 2)") if args.length > 2
54
+
55
+ if args.length == 2
56
+ beg = args[0]
57
+ len = args[1]
58
+ beg += cstruct[:nodeNr] if beg < 0
59
+ return subseq(beg, len)
60
+ end
61
+ arg = args[0]
62
+
63
+ return subseq(arg.first, arg.last-arg.first+1) if arg.is_a?(Range)
64
+
65
+ index_at(arg)
66
+ end
67
+ alias_method :slice, :[]
68
+
69
+ def &(node_set) # :nodoc:
70
+ raise(ArgumentError, "node_set must be a Nokogiri::XML::NodeSet") unless node_set.is_a?(XML::NodeSet)
71
+ new_set_ptr = LibXML.xmlXPathIntersection(cstruct, node_set.cstruct)
72
+ NodeSet.wrap(new_set_ptr)
73
+ end
74
+
75
+ def include?(node) # :nodoc:
76
+ raise(ArgumentError, "node must be a Nokogiri::XML::Node") unless node.is_a?(XML::Node)
77
+ (LibXML.xmlXPathNodeSetContains(cstruct, node.cstruct) != 0) ? true : false
78
+ end
79
+
80
+ def to_a # :nodoc:
81
+ cstruct.nodeTab.collect do |node|
82
+ node_cstruct = LibXML::XmlNode.new(node)
83
+ if node_cstruct[:type] == XML::Node::NAMESPACE_DECL
84
+ Namespace.wrap(document.cstruct, node)
85
+ else
86
+ Node.wrap(node_cstruct)
87
+ end
88
+ end
89
+ end
90
+
91
+ def unlink # :nodoc:
92
+ nodetab = cstruct.nodeTab
93
+ cstruct[:nodeNr].times do |j|
94
+ node_cstruct = LibXML::XmlNode.new(nodetab[j])
95
+ if node_cstruct[:type] != XML::Node::NAMESPACE_DECL
96
+ node = Node.wrap(node_cstruct)
97
+ node.unlink
98
+ nodetab[j] = node.cstruct.pointer
99
+ end
100
+ end
101
+ cstruct.nodeTab = nodetab
102
+ self
103
+ end
104
+
105
+ def self.new document, list = [] # :nodoc:
106
+ set = NodeSet.wrap(LibXML.xmlXPathNodeSetCreate(nil))
107
+ set.document = document
108
+ list.each { |x| set << x }
109
+ yield set if block_given?
110
+ set
111
+ end
112
+
113
+ private
114
+
115
+ def self.wrap(ptr) # :nodoc:
116
+ set = allocate
117
+ set.cstruct = LibXML::XmlNodeSet.new(ptr)
118
+ set
119
+ end
120
+
121
+ def index_at(number) # :nodoc:
122
+ return nil if (number >= cstruct[:nodeNr] || number.abs > cstruct[:nodeNr])
123
+ number = number + cstruct[:nodeNr] if number < 0
124
+ node_ptr = cstruct.nodeAt(number)
125
+ node_cstruct = LibXML::XmlNode.new(node_ptr)
126
+ if node_cstruct[:type] == XML::Node::NAMESPACE_DECL
127
+ Namespace.wrap(document.cstruct, node_ptr)
128
+ else
129
+ Node.wrap(node_cstruct)
130
+ end
131
+ end
132
+
133
+ def subseq(beg, len) # :nodoc:
134
+ return nil if beg > cstruct[:nodeNr]
135
+ return nil if beg < 0 || len < 0
136
+
137
+ set = NodeSet.wrap(LibXML.xmlXPathNodeSetCreate(nil))
138
+ beg.upto(beg+len-1) do |j|
139
+ LibXML.xmlXPathNodeSetAdd(set.cstruct, cstruct.nodeAt(j));
140
+ end
141
+ set
142
+ end
143
+
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,20 @@
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
@@ -0,0 +1,227 @@
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 state
131
+ LibXML.xmlTextReaderReadState(cstruct)
132
+ end
133
+
134
+ def read
135
+ error_list = self.errors
136
+
137
+ LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(error_list))
138
+ ret = LibXML.xmlTextReaderRead(cstruct)
139
+ LibXML.xmlSetStructuredErrorFunc(nil, nil)
140
+
141
+ return self if ret == 1
142
+ return nil if ret == 0
143
+
144
+ error = LibXML.xmlGetLastError()
145
+ if error
146
+ raise SyntaxError.wrap(error)
147
+ else
148
+ raise RuntimeError, "Error pulling: #{ret}"
149
+ end
150
+
151
+ nil
152
+ end
153
+
154
+ def inner_xml
155
+ string_ptr = LibXML.xmlTextReaderReadInnerXml(cstruct)
156
+ return nil if string_ptr.null?
157
+ string = string_ptr.read_string
158
+ LibXML.xmlFree(string_ptr)
159
+ string
160
+ end
161
+
162
+ def outer_xml
163
+ string_ptr = LibXML.xmlTextReaderReadOuterXml(cstruct)
164
+ return nil if string_ptr.null?
165
+ string = string_ptr.read_string
166
+ LibXML.xmlFree(string_ptr)
167
+ string
168
+ end
169
+
170
+ def node_type
171
+ LibXML.xmlTextReaderNodeType(cstruct)
172
+ end
173
+
174
+ def self.from_memory(buffer, url=nil, encoding=nil, options=0)
175
+ raise(ArgumentError, "string cannot be nil") if buffer.nil?
176
+
177
+ memory = FFI::MemoryPointer.new(buffer.length) # we need to manage native memory lifecycle
178
+ memory.put_bytes(0, buffer)
179
+ reader_ptr = LibXML.xmlReaderForMemory(memory, memory.total, url, encoding, options)
180
+ raise(RuntimeError, "couldn't create a reader") if reader_ptr.null?
181
+
182
+ reader = allocate
183
+ reader.cstruct = LibXML::XmlTextReader.new(reader_ptr)
184
+ reader.send(:initialize, memory, url, encoding)
185
+ reader
186
+ end
187
+
188
+ def self.from_io(io, url=nil, encoding=nil, options=0)
189
+ raise(ArgumentError, "io cannot be nil") if io.nil?
190
+
191
+ cb = IoCallbacks.reader(io) # we will keep a reference to prevent it from being GC'd
192
+ reader_ptr = LibXML.xmlReaderForIO(cb, nil, nil, url, encoding, options)
193
+ raise "couldn't create a parser" if reader_ptr.null?
194
+
195
+ reader = allocate
196
+ reader.cstruct = LibXML::XmlTextReader.new(reader_ptr)
197
+ reader.send(:initialize, io, url, encoding)
198
+ reader.reader_callback = cb
199
+ reader
200
+ end
201
+
202
+ private
203
+
204
+ class << self
205
+ def node_namespaces(ptr)
206
+ cstruct = LibXML::XmlNode.new(ptr)
207
+ ahash = {}
208
+ return ahash unless cstruct[:type] == Node::ELEMENT_NODE
209
+ ns = cstruct[:nsDef]
210
+ while ! ns.null?
211
+ ns_cstruct = LibXML::XmlNs.new(ns)
212
+ prefix = ns_cstruct[:prefix]
213
+ key = if prefix.nil? || prefix.empty?
214
+ "xmlns"
215
+ else
216
+ "xmlns:#{prefix}"
217
+ end
218
+ ahash[key] = ns_cstruct[:href] # TODO: encoding?
219
+ ns = ns_cstruct[:next] # TODO: encoding?
220
+ end
221
+ ahash
222
+ end
223
+ end
224
+ end
225
+ end
226
+ end
227
+ # :startdoc:
@@ -0,0 +1,85 @@
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