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,135 @@
1
+ module Nokogiri
2
+ module XML
3
+ module SAX
4
+ class Parser
5
+ # :stopdoc:
6
+
7
+ attr_accessor :cstruct
8
+
9
+ def self.new(doc = XML::SAX::Document.new, encoding = 'UTF-8')
10
+ parser = allocate
11
+ parser.document = doc
12
+ parser.encoding = encoding
13
+ parser.cstruct = LibXML::XmlSaxHandler.allocate
14
+ parser.send(:setup_lambdas)
15
+ parser.instance_variable_set(:@ctxt, nil)
16
+ parser
17
+ end
18
+
19
+ private
20
+
21
+ def setup_lambdas
22
+ @closures = {} # we need to keep references to the closures to avoid GC
23
+
24
+ [ :startDocument, :endDocument, :startElement, :endElement, :characters,
25
+ :comment, :warning, :error, :cdataBlock, :startElementNs, :endElementNs ].each do |sym|
26
+ @closures[sym] = lambda { |*args| send("__internal__#{sym}", *args) } # "i'm your private dancer", etc.
27
+ end
28
+
29
+ @closures.each { |k,v| cstruct[k] = v }
30
+
31
+ cstruct[:initialized] = Nokogiri::LibXML::XmlSaxHandler::XML_SAX2_MAGIC
32
+ end
33
+
34
+ def __internal__startDocument(_)
35
+ if @ctxt && @ctxt[:html] == 0 && @ctxt[:standalone] != -1
36
+ standalone = {
37
+ 0 => 'no',
38
+ 1 => 'yes',
39
+ }[@ctxt[:standalone]]
40
+
41
+ @document.xmldecl @ctxt[:version], @ctxt[:encoding], standalone
42
+ end
43
+ @document.start_document
44
+ end
45
+
46
+ def __internal__endDocument(_)
47
+ @document.end_document
48
+ end
49
+
50
+ def __internal__startElement(_, name, attributes)
51
+ attrs = attributes.null? ? [] : attributes.get_array_of_string(0)
52
+ @document.start_element name, attrs
53
+ end
54
+
55
+ def __internal__endElement(_, name)
56
+ @document.end_element name
57
+ end
58
+
59
+ def __internal__characters(_, data, data_length)
60
+ @document.characters data.slice(0, data_length)
61
+ end
62
+
63
+ def __internal__comment(_, data)
64
+ @document.comment data
65
+ end
66
+
67
+ def __internal__warning(_, msg)
68
+ # TODO: vasprintf here
69
+ @document.warning(msg)
70
+ end
71
+
72
+ def __internal__error(_, msg)
73
+ # TODO: vasprintf here
74
+ @document.error(msg)
75
+ end
76
+
77
+ def __internal__cdataBlock(_, data, data_length)
78
+ @document.cdata_block data.slice(0, data_length)
79
+ end
80
+
81
+ def __internal__startElementNs(_, localname, prefix, uri, nb_namespaces, namespaces, nb_attributes, nb_defaulted, attributes)
82
+ localname = localname.null? ? nil : localname.read_string
83
+ prefix = prefix .null? ? nil : prefix .read_string
84
+ uri = uri .null? ? nil : uri .read_string
85
+
86
+ attr_list = []
87
+ ns_list = []
88
+
89
+ if ! attributes.null?
90
+ # Each attribute is an array of [localname, prefix, URI, value, end]
91
+ (0..(nb_attributes-1)*5).step(5) do |j|
92
+ key = attributes.get_pointer(LibXML.pointer_offset(j)).read_string
93
+ attr_prefix = attributes.get_pointer(LibXML.pointer_offset(j + 1))
94
+ attr_prefix = attr_prefix.null? ? nil : attr_prefix.read_string
95
+ attr_uri = attributes.get_pointer(LibXML.pointer_offset(j + 2))
96
+ attr_uri = attr_uri.null? ? nil : attr_uri.read_string
97
+ value_length = attributes.get_pointer(LibXML.pointer_offset(j+4)).address \
98
+ - attributes.get_pointer(LibXML.pointer_offset(j+3)).address
99
+ value = attributes.get_pointer(LibXML.pointer_offset(j+3)).get_string(0, value_length)
100
+ attr_list << Attribute.new(key, attr_prefix, attr_uri, value)
101
+ end
102
+ end
103
+
104
+ if ! namespaces.null?
105
+ (0..(nb_namespaces-1)*2).step(2) do |j|
106
+ key = namespaces.get_pointer(LibXML.pointer_offset(j))
107
+ key = key.null? ? nil : key.read_string
108
+ value = namespaces.get_pointer(LibXML.pointer_offset(j+1))
109
+ value = value.null? ? nil : value.read_string
110
+ ns_list << [key, value]
111
+ end
112
+ end
113
+
114
+ @document.start_element_namespace(
115
+ localname,
116
+ attr_list,
117
+ prefix,
118
+ uri,
119
+ ns_list
120
+ )
121
+ end
122
+
123
+ def __internal__endElementNs(_, localname, prefix, uri)
124
+ localname = localname.null? ? nil : localname.read_string
125
+ prefix = prefix .null? ? nil : prefix .read_string
126
+ uri = uri .null? ? nil : uri .read_string
127
+
128
+ @document.end_element_namespace(localname, prefix, uri)
129
+ end
130
+
131
+ # :startdoc:
132
+ end
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,67 @@
1
+ # :stopdoc:
2
+ module Nokogiri
3
+ module XML
4
+ module SAX
5
+ class ParserContext
6
+ attr_accessor :cstruct
7
+ attr_accessor :reader_callback
8
+
9
+ def self.memory data
10
+ raise(ArgumentError, 'data cannot be nil') if data.nil?
11
+ raise('data cannot be empty') if data.length == 0
12
+ ctx = LibXML::XmlParserContext.new(
13
+ LibXML.xmlCreateMemoryParserCtxt data, data.length
14
+ )
15
+ pc = allocate
16
+ pc.cstruct = ctx
17
+ pc
18
+ end
19
+
20
+ def self.io io, encoding
21
+ reader_callback = IoCallbacks.reader(io) # keep a reference to prevent it from being GC'd
22
+ sax_ctx = LibXML.xmlCreateIOParserCtxt(
23
+ nil,
24
+ nil,
25
+ reader_callback,
26
+ nil,
27
+ nil,
28
+ encoding
29
+ )
30
+ pc = allocate
31
+ pc.cstruct = LibXML::XmlParserContext.new sax_ctx
32
+ pc.reader_callback = reader_callback
33
+ pc
34
+ end
35
+
36
+ def self.file filename
37
+ ctx = LibXML.xmlCreateFileParserCtxt filename
38
+ pc = allocate
39
+ pc.cstruct = LibXML::XmlParserContext.new ctx
40
+ pc
41
+ end
42
+
43
+ def parse_with sax_handler, type = :xml
44
+ raise ArgumentError unless XML::SAX::Parser === sax_handler
45
+ sax = sax_handler.cstruct
46
+ cstruct[:sax] = sax
47
+
48
+ sax_handler.instance_variable_set(:@ctxt, cstruct)
49
+
50
+ LibXML.send(:"#{type}ParseDocument", cstruct)
51
+
52
+ cstruct[:sax] = nil
53
+ LibXML.xmlFreeDoc cstruct[:myDoc] unless cstruct[:myDoc].null?
54
+ end
55
+
56
+ def replace_entities=(value)
57
+ self.cstruct[:replaceEntities] = value ? 1 : 0
58
+ end
59
+
60
+ def replace_entities
61
+ self.cstruct[:replaceEntities] == 0 ? false : true
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ # :startdoc:
@@ -0,0 +1,55 @@
1
+ module Nokogiri
2
+ module XML
3
+ module SAX
4
+ class PushParser
5
+
6
+ attr_accessor :cstruct # :nodoc:
7
+
8
+ def options
9
+ cstruct[:options]
10
+ end
11
+
12
+ def options=(user_options)
13
+ if LibXML.xmlCtxtUseOptions(cstruct, user_options) != 0
14
+ raise RuntimeError, "Cannot set XML parser context options"
15
+ end
16
+ nil
17
+ end
18
+
19
+ protected
20
+
21
+ # Move this out of private block because it's used in Nokogiri::XML::SAX::PushParser
22
+ def initialize_native(sax, filename) # :nodoc:
23
+ filename = filename.to_s unless filename.nil?
24
+ ctx_ptr = LibXML.xmlCreatePushParserCtxt(
25
+ sax.cstruct, nil, nil, 0, filename
26
+ )
27
+ raise(RuntimeError, "Could not create a parser context") if ctx_ptr.null?
28
+ self.cstruct = LibXML::XmlSaxPushParserContext.new(ctx_ptr) ;
29
+ self
30
+ end
31
+
32
+ private
33
+
34
+ def native_write(chunk, last_chunk) # :nodoc:
35
+ size = 0
36
+ unless chunk.nil?
37
+ chunk = chunk.to_s
38
+ size = chunk.length
39
+ end
40
+
41
+ if LibXML.xmlParseChunk(cstruct, chunk, size, last_chunk ? 1 : 0) != 0
42
+ if (cstruct[:options] & XML::ParseOptions::RECOVER) == 0
43
+ error = LibXML.xmlCtxtGetLastError(cstruct)
44
+ raise Nokogiri::XML::SyntaxError.wrap(error)
45
+ end
46
+ end
47
+
48
+ self
49
+ end
50
+
51
+
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,92 @@
1
+ module Nokogiri
2
+ module XML
3
+ class Schema
4
+ # :stopdoc:
5
+
6
+ attr_accessor :cstruct
7
+
8
+ def validate_document document
9
+ errors = []
10
+
11
+ ctx = LibXML.xmlSchemaNewValidCtxt(cstruct)
12
+ raise RuntimeError.new("Could not create a validation context") if ctx.null?
13
+
14
+ LibXML.xmlSchemaSetValidStructuredErrors(ctx,
15
+ SyntaxError.error_array_pusher(errors), nil) unless Nokogiri.is_2_6_16?
16
+
17
+ LibXML.xmlSchemaValidateDoc(ctx, document.cstruct)
18
+
19
+ LibXML.xmlSchemaFreeValidCtxt(ctx)
20
+
21
+ errors
22
+ end
23
+ private :validate_document
24
+
25
+ def self.read_memory content
26
+ content_copy = FFI::MemoryPointer.from_string(content)
27
+ ctx = LibXML.xmlSchemaNewMemParserCtxt(content_copy, content.length)
28
+
29
+ errors = []
30
+
31
+ LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(errors))
32
+ LibXML.xmlSchemaSetParserStructuredErrors(ctx, SyntaxError.error_array_pusher(errors), nil) unless Nokogiri.is_2_6_16?
33
+
34
+ schema_ptr = LibXML.xmlSchemaParse(ctx)
35
+
36
+ LibXML.xmlSetStructuredErrorFunc(nil, nil)
37
+ LibXML.xmlSchemaFreeParserCtxt(ctx)
38
+
39
+ if schema_ptr.null?
40
+ error = LibXML.xmlGetLastError
41
+ if error
42
+ raise SyntaxError.wrap(error)
43
+ else
44
+ raise RuntimeError, "Could not parse document"
45
+ end
46
+ end
47
+
48
+ schema = allocate
49
+ schema.cstruct = LibXML::XmlSchema.new schema_ptr
50
+ schema.errors = errors
51
+ schema
52
+ end
53
+
54
+ def self.from_document document
55
+ ctx = LibXML.xmlSchemaNewDocParserCtxt(document.document.cstruct)
56
+
57
+ errors = []
58
+
59
+ LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(errors))
60
+ unless Nokogiri.is_2_6_16?
61
+ LibXML.xmlSchemaSetParserStructuredErrors(
62
+ ctx,
63
+ SyntaxError.error_array_pusher(errors),
64
+ nil
65
+ )
66
+ end
67
+
68
+ schema_ptr = LibXML.xmlSchemaParse(ctx)
69
+
70
+ LibXML.xmlSetStructuredErrorFunc(nil, nil)
71
+ LibXML.xmlSchemaFreeParserCtxt(ctx)
72
+
73
+ if schema_ptr.null?
74
+ error = LibXML.xmlGetLastError
75
+ if error
76
+ raise SyntaxError.wrap(error)
77
+ else
78
+ raise RuntimeError, "Could not parse document"
79
+ end
80
+ end
81
+
82
+ schema = allocate
83
+ schema.cstruct = LibXML::XmlSchema.new schema_ptr
84
+ schema.errors = errors
85
+ schema
86
+ end
87
+
88
+ # :startdoc:
89
+ end
90
+ end
91
+ end
92
+
@@ -0,0 +1,98 @@
1
+ # :stopdoc:
2
+ module Nokogiri
3
+ module XML
4
+ class SyntaxError < ::Nokogiri::SyntaxError
5
+
6
+ attr_accessor :cstruct
7
+
8
+ def initialize(message)
9
+ self.cstruct = LibXML::XmlSyntaxError.new(LibXML::XmlSyntaxError.allocate())
10
+ self.cstruct[:message] = LibXML.xmlStrdup(message)
11
+ end
12
+
13
+ def domain
14
+ cstruct[:domain]
15
+ end
16
+
17
+ def code
18
+ cstruct[:code]
19
+ end
20
+
21
+ def message
22
+ val = cstruct[:message]
23
+ val.null? ? nil : val.read_string
24
+ end
25
+ undef_method :inspect
26
+ alias_method :inspect, :message
27
+ undef_method :to_s
28
+ alias_method :to_s, :message
29
+
30
+ def message=(string)
31
+ unless cstruct[:message].null?
32
+ LibXML.xmlFree(cstruct[:message])
33
+ end
34
+ cstruct[:message] = LibXML.xmlStrdup(string)
35
+ string
36
+ end
37
+
38
+ def initialize_copy(other)
39
+ raise ArgumentError, "node must be a Nokogiri::XML::SyntaxError" unless other.is_a?(Nokogiri::XML::SyntaxError)
40
+ LibXML.xmlCopyError(other.cstruct, cstruct)
41
+ self
42
+ end
43
+
44
+ def level
45
+ cstruct[:level]
46
+ end
47
+
48
+ def file
49
+ cstruct[:file].null? ? nil : cstruct[:file]
50
+ end
51
+
52
+ def line
53
+ cstruct[:line]
54
+ end
55
+
56
+ def str1
57
+ cstruct[:str1].null? ? nil : cstruct[:str1]
58
+ end
59
+
60
+ def str2
61
+ cstruct[:str].null? ? nil : cstruct[:str]
62
+ end
63
+
64
+ def str3
65
+ cstruct[:str3].null? ? nil : cstruct[:str3]
66
+ end
67
+
68
+ def int1
69
+ cstruct[:int1]
70
+ end
71
+
72
+ def column
73
+ cstruct[:int2]
74
+ end
75
+ alias_method :int2, :column
76
+
77
+ class << self
78
+ def error_array_pusher(array)
79
+ Proc.new do |_ignored_, error|
80
+ array << wrap(error) if array
81
+ end
82
+ end
83
+
84
+ def wrap(error_ptr)
85
+ error_struct = LibXML::XmlSyntaxError.allocate
86
+ LibXML.xmlCopyError(error_ptr, error_struct)
87
+ error_cstruct = LibXML::XmlSyntaxError.new(error_struct)
88
+ error = self.allocate # will generate XML::XPath::SyntaxError or XML::SyntaxError
89
+ error.cstruct = error_cstruct
90
+ error
91
+ end
92
+ end
93
+
94
+ end
95
+ end
96
+
97
+ end
98
+ # :startdoc: