nokogiri 1.2.3-x86-mswin32-60 → 1.4.5-x86-mswin32-60

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of nokogiri might be problematic. Click here for more details.

Files changed (319) hide show
  1. data/.autotest +18 -7
  2. data/.gemtest +0 -0
  3. data/CHANGELOG.ja.rdoc +297 -3
  4. data/CHANGELOG.rdoc +289 -0
  5. data/Manifest.txt +148 -37
  6. data/README.ja.rdoc +20 -20
  7. data/README.rdoc +53 -22
  8. data/Rakefile +127 -211
  9. data/bin/nokogiri +54 -0
  10. data/ext/nokogiri/depend +358 -0
  11. data/ext/nokogiri/extconf.rb +89 -54
  12. data/ext/nokogiri/html_document.c +34 -27
  13. data/ext/nokogiri/html_document.h +1 -1
  14. data/ext/nokogiri/html_element_description.c +276 -0
  15. data/ext/nokogiri/html_element_description.h +10 -0
  16. data/ext/nokogiri/html_entity_lookup.c +7 -5
  17. data/ext/nokogiri/html_entity_lookup.h +1 -1
  18. data/ext/nokogiri/html_sax_parser_context.c +94 -0
  19. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  20. data/ext/nokogiri/{native.c → nokogiri.c} +31 -7
  21. data/ext/nokogiri/{native.h → nokogiri.h} +68 -41
  22. data/ext/nokogiri/xml_attr.c +20 -9
  23. data/ext/nokogiri/xml_attr.h +1 -1
  24. data/ext/nokogiri/xml_attribute_decl.c +70 -0
  25. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  26. data/ext/nokogiri/xml_cdata.c +21 -9
  27. data/ext/nokogiri/xml_cdata.h +1 -1
  28. data/ext/nokogiri/xml_comment.c +18 -6
  29. data/ext/nokogiri/xml_comment.h +1 -1
  30. data/ext/nokogiri/xml_document.c +247 -68
  31. data/ext/nokogiri/xml_document.h +5 -3
  32. data/ext/nokogiri/xml_document_fragment.c +15 -7
  33. data/ext/nokogiri/xml_document_fragment.h +1 -1
  34. data/ext/nokogiri/xml_dtd.c +110 -10
  35. data/ext/nokogiri/xml_dtd.h +3 -1
  36. data/ext/nokogiri/xml_element_content.c +123 -0
  37. data/ext/nokogiri/xml_element_content.h +10 -0
  38. data/ext/nokogiri/xml_element_decl.c +69 -0
  39. data/ext/nokogiri/xml_element_decl.h +9 -0
  40. data/ext/nokogiri/xml_encoding_handler.c +79 -0
  41. data/ext/nokogiri/xml_encoding_handler.h +8 -0
  42. data/ext/nokogiri/xml_entity_decl.c +110 -0
  43. data/ext/nokogiri/xml_entity_decl.h +10 -0
  44. data/ext/nokogiri/xml_entity_reference.c +16 -5
  45. data/ext/nokogiri/xml_entity_reference.h +1 -1
  46. data/ext/nokogiri/xml_io.c +40 -8
  47. data/ext/nokogiri/xml_io.h +2 -1
  48. data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
  49. data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
  50. data/ext/nokogiri/xml_namespace.c +84 -0
  51. data/ext/nokogiri/xml_namespace.h +13 -0
  52. data/ext/nokogiri/xml_node.c +782 -225
  53. data/ext/nokogiri/xml_node.h +2 -4
  54. data/ext/nokogiri/xml_node_set.c +253 -34
  55. data/ext/nokogiri/xml_node_set.h +2 -2
  56. data/ext/nokogiri/xml_processing_instruction.c +17 -5
  57. data/ext/nokogiri/xml_processing_instruction.h +1 -1
  58. data/ext/nokogiri/xml_reader.c +277 -85
  59. data/ext/nokogiri/xml_reader.h +1 -1
  60. data/ext/nokogiri/xml_relax_ng.c +168 -0
  61. data/ext/nokogiri/xml_relax_ng.h +9 -0
  62. data/ext/nokogiri/xml_sax_parser.c +183 -111
  63. data/ext/nokogiri/xml_sax_parser.h +30 -1
  64. data/ext/nokogiri/xml_sax_parser_context.c +199 -0
  65. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  66. data/ext/nokogiri/xml_sax_push_parser.c +42 -12
  67. data/ext/nokogiri/xml_sax_push_parser.h +1 -1
  68. data/ext/nokogiri/xml_schema.c +205 -0
  69. data/ext/nokogiri/xml_schema.h +9 -0
  70. data/ext/nokogiri/xml_syntax_error.c +28 -173
  71. data/ext/nokogiri/xml_syntax_error.h +2 -1
  72. data/ext/nokogiri/xml_text.c +16 -6
  73. data/ext/nokogiri/xml_text.h +1 -1
  74. data/ext/nokogiri/xml_xpath_context.c +104 -47
  75. data/ext/nokogiri/xml_xpath_context.h +1 -1
  76. data/ext/nokogiri/xslt_stylesheet.c +161 -19
  77. data/ext/nokogiri/xslt_stylesheet.h +1 -1
  78. data/lib/nokogiri.rb +47 -8
  79. data/lib/nokogiri/1.8/nokogiri.so +0 -0
  80. data/lib/nokogiri/1.9/nokogiri.so +0 -0
  81. data/lib/nokogiri/css.rb +6 -3
  82. data/lib/nokogiri/css/node.rb +14 -12
  83. data/lib/nokogiri/css/parser.rb +665 -62
  84. data/lib/nokogiri/css/parser.y +20 -10
  85. data/lib/nokogiri/css/parser_extras.rb +91 -0
  86. data/lib/nokogiri/css/tokenizer.rb +148 -5
  87. data/lib/nokogiri/css/tokenizer.rex +10 -9
  88. data/lib/nokogiri/css/xpath_visitor.rb +47 -44
  89. data/lib/nokogiri/decorators/slop.rb +8 -4
  90. data/lib/nokogiri/ffi/encoding_handler.rb +42 -0
  91. data/lib/nokogiri/ffi/html/document.rb +28 -0
  92. data/lib/nokogiri/ffi/html/element_description.rb +81 -0
  93. data/lib/nokogiri/ffi/html/entity_lookup.rb +16 -0
  94. data/lib/nokogiri/ffi/html/sax/parser_context.rb +38 -0
  95. data/lib/nokogiri/ffi/io_callbacks.rb +42 -0
  96. data/lib/nokogiri/ffi/libxml.rb +420 -0
  97. data/lib/nokogiri/ffi/structs/common_node.rb +38 -0
  98. data/lib/nokogiri/ffi/structs/html_elem_desc.rb +24 -0
  99. data/lib/nokogiri/ffi/structs/html_entity_desc.rb +13 -0
  100. data/lib/nokogiri/ffi/structs/xml_alloc.rb +16 -0
  101. data/lib/nokogiri/ffi/structs/xml_attr.rb +20 -0
  102. data/lib/nokogiri/ffi/structs/xml_attribute.rb +27 -0
  103. data/lib/nokogiri/ffi/structs/xml_buffer.rb +16 -0
  104. data/lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb +11 -0
  105. data/lib/nokogiri/ffi/structs/xml_document.rb +117 -0
  106. data/lib/nokogiri/ffi/structs/xml_dtd.rb +28 -0
  107. data/lib/nokogiri/ffi/structs/xml_element.rb +26 -0
  108. data/lib/nokogiri/ffi/structs/xml_element_content.rb +17 -0
  109. data/lib/nokogiri/ffi/structs/xml_entity.rb +32 -0
  110. data/lib/nokogiri/ffi/structs/xml_enumeration.rb +12 -0
  111. data/lib/nokogiri/ffi/structs/xml_node.rb +28 -0
  112. data/lib/nokogiri/ffi/structs/xml_node_set.rb +53 -0
  113. data/lib/nokogiri/ffi/structs/xml_notation.rb +11 -0
  114. data/lib/nokogiri/ffi/structs/xml_ns.rb +15 -0
  115. data/lib/nokogiri/ffi/structs/xml_parser_context.rb +20 -0
  116. data/lib/nokogiri/ffi/structs/xml_parser_input.rb +19 -0
  117. data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +14 -0
  118. data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +51 -0
  119. data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +124 -0
  120. data/lib/nokogiri/ffi/structs/xml_schema.rb +13 -0
  121. data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +31 -0
  122. data/lib/nokogiri/ffi/structs/xml_text_reader.rb +12 -0
  123. data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +38 -0
  124. data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +35 -0
  125. data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +20 -0
  126. data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +13 -0
  127. data/lib/nokogiri/ffi/weak_bucket.rb +40 -0
  128. data/lib/nokogiri/ffi/xml/attr.rb +41 -0
  129. data/lib/nokogiri/ffi/xml/attribute_decl.rb +27 -0
  130. data/lib/nokogiri/ffi/xml/cdata.rb +19 -0
  131. data/lib/nokogiri/ffi/xml/comment.rb +18 -0
  132. data/lib/nokogiri/ffi/xml/document.rb +174 -0
  133. data/lib/nokogiri/ffi/xml/document_fragment.rb +21 -0
  134. data/lib/nokogiri/ffi/xml/dtd.rb +67 -0
  135. data/lib/nokogiri/ffi/xml/element_content.rb +43 -0
  136. data/lib/nokogiri/ffi/xml/element_decl.rb +19 -0
  137. data/lib/nokogiri/ffi/xml/entity_decl.rb +36 -0
  138. data/lib/nokogiri/ffi/xml/entity_reference.rb +19 -0
  139. data/lib/nokogiri/ffi/xml/namespace.rb +44 -0
  140. data/lib/nokogiri/ffi/xml/node.rb +559 -0
  141. data/lib/nokogiri/ffi/xml/node_set.rb +150 -0
  142. data/lib/nokogiri/ffi/xml/processing_instruction.rb +20 -0
  143. data/lib/nokogiri/ffi/xml/reader.rb +236 -0
  144. data/lib/nokogiri/ffi/xml/relax_ng.rb +85 -0
  145. data/lib/nokogiri/ffi/xml/sax/parser.rb +143 -0
  146. data/lib/nokogiri/ffi/xml/sax/parser_context.rb +79 -0
  147. data/lib/nokogiri/ffi/xml/sax/push_parser.rb +51 -0
  148. data/lib/nokogiri/ffi/xml/schema.rb +109 -0
  149. data/lib/nokogiri/ffi/xml/syntax_error.rb +98 -0
  150. data/lib/nokogiri/ffi/xml/text.rb +18 -0
  151. data/lib/nokogiri/ffi/xml/xpath.rb +9 -0
  152. data/lib/nokogiri/ffi/xml/xpath_context.rb +153 -0
  153. data/lib/nokogiri/ffi/xslt/stylesheet.rb +77 -0
  154. data/lib/nokogiri/html.rb +13 -47
  155. data/lib/nokogiri/html/builder.rb +27 -1
  156. data/lib/nokogiri/html/document.rb +201 -7
  157. data/lib/nokogiri/html/document_fragment.rb +41 -0
  158. data/lib/nokogiri/html/element_description.rb +23 -0
  159. data/lib/nokogiri/html/entity_lookup.rb +2 -0
  160. data/lib/nokogiri/html/sax/parser.rb +34 -3
  161. data/lib/nokogiri/html/sax/parser_context.rb +16 -0
  162. data/lib/nokogiri/nokogiri.rb +1 -0
  163. data/lib/nokogiri/version.rb +40 -1
  164. data/lib/nokogiri/version_warning.rb +14 -0
  165. data/lib/nokogiri/xml.rb +32 -53
  166. data/lib/nokogiri/xml/attr.rb +5 -0
  167. data/lib/nokogiri/xml/attribute_decl.rb +18 -0
  168. data/lib/nokogiri/xml/builder.rb +349 -29
  169. data/lib/nokogiri/xml/cdata.rb +3 -1
  170. data/lib/nokogiri/xml/character_data.rb +7 -0
  171. data/lib/nokogiri/xml/document.rb +166 -14
  172. data/lib/nokogiri/xml/document_fragment.rb +76 -1
  173. data/lib/nokogiri/xml/dtd.rb +16 -3
  174. data/lib/nokogiri/xml/element_content.rb +36 -0
  175. data/lib/nokogiri/xml/element_decl.rb +13 -0
  176. data/lib/nokogiri/xml/entity_decl.rb +19 -0
  177. data/lib/nokogiri/xml/namespace.rb +13 -0
  178. data/lib/nokogiri/xml/node.rb +561 -166
  179. data/lib/nokogiri/xml/node/save_options.rb +22 -2
  180. data/lib/nokogiri/xml/node_set.rb +202 -40
  181. data/lib/nokogiri/xml/parse_options.rb +93 -0
  182. data/lib/nokogiri/xml/pp.rb +2 -0
  183. data/lib/nokogiri/xml/pp/character_data.rb +18 -0
  184. data/lib/nokogiri/xml/pp/node.rb +56 -0
  185. data/lib/nokogiri/xml/processing_instruction.rb +2 -0
  186. data/lib/nokogiri/xml/reader.rb +93 -8
  187. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  188. data/lib/nokogiri/xml/sax.rb +1 -7
  189. data/lib/nokogiri/xml/sax/document.rb +107 -2
  190. data/lib/nokogiri/xml/sax/parser.rb +57 -7
  191. data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
  192. data/lib/nokogiri/xml/sax/push_parser.rb +13 -1
  193. data/lib/nokogiri/xml/schema.rb +63 -0
  194. data/lib/nokogiri/xml/syntax_error.rb +25 -1
  195. data/lib/nokogiri/xml/text.rb +4 -1
  196. data/lib/nokogiri/xml/xpath.rb +1 -1
  197. data/lib/nokogiri/xml/xpath/syntax_error.rb +3 -0
  198. data/lib/nokogiri/xml/xpath_context.rb +2 -0
  199. data/lib/nokogiri/xslt.rb +26 -2
  200. data/lib/nokogiri/xslt/stylesheet.rb +19 -0
  201. data/lib/xsd/xmlparser/nokogiri.rb +45 -9
  202. data/tasks/cross_compile.rb +173 -0
  203. data/tasks/test.rb +25 -69
  204. data/test/css/test_nthiness.rb +3 -4
  205. data/test/css/test_parser.rb +75 -20
  206. data/test/css/test_tokenizer.rb +23 -1
  207. data/test/css/test_xpath_visitor.rb +10 -1
  208. data/test/decorators/test_slop.rb +16 -0
  209. data/test/ffi/test_document.rb +35 -0
  210. data/test/files/2ch.html +108 -0
  211. data/test/files/address_book.rlx +12 -0
  212. data/test/files/address_book.xml +10 -0
  213. data/test/files/bar/bar.xsd +4 -0
  214. data/test/files/encoding.html +82 -0
  215. data/test/files/encoding.xhtml +84 -0
  216. data/test/files/foo/foo.xsd +4 -0
  217. data/test/files/po.xml +32 -0
  218. data/test/files/po.xsd +66 -0
  219. data/test/files/shift_jis.html +10 -0
  220. data/test/files/shift_jis.xml +5 -0
  221. data/test/files/snuggles.xml +3 -0
  222. data/test/files/staff.dtd +10 -0
  223. data/test/files/valid_bar.xml +2 -0
  224. data/test/helper.rb +101 -23
  225. data/test/html/sax/test_parser.rb +81 -2
  226. data/test/html/sax/test_parser_context.rb +48 -0
  227. data/test/html/test_builder.rb +39 -8
  228. data/test/html/test_document.rb +186 -23
  229. data/test/html/test_document_encoding.rb +78 -1
  230. data/test/html/test_document_fragment.rb +253 -0
  231. data/test/html/test_element_description.rb +98 -0
  232. data/test/html/test_named_characters.rb +1 -1
  233. data/test/html/test_node.rb +124 -36
  234. data/test/html/test_node_encoding.rb +27 -0
  235. data/test/test_convert_xpath.rb +1 -52
  236. data/test/test_css_cache.rb +2 -13
  237. data/test/test_encoding_handler.rb +46 -0
  238. data/test/test_memory_leak.rb +88 -19
  239. data/test/test_nokogiri.rb +38 -5
  240. data/test/test_reader.rb +188 -6
  241. data/test/test_soap4r_sax.rb +52 -0
  242. data/test/test_xslt_transforms.rb +183 -83
  243. data/test/xml/node/test_save_options.rb +1 -1
  244. data/test/xml/node/test_subclass.rb +44 -0
  245. data/test/xml/sax/test_parser.rb +175 -4
  246. data/test/xml/sax/test_parser_context.rb +113 -0
  247. data/test/xml/sax/test_push_parser.rb +90 -2
  248. data/test/xml/test_attr.rb +35 -1
  249. data/test/xml/test_attribute_decl.rb +82 -0
  250. data/test/xml/test_builder.rb +186 -1
  251. data/test/xml/test_cdata.rb +32 -1
  252. data/test/xml/test_comment.rb +13 -1
  253. data/test/xml/test_document.rb +415 -43
  254. data/test/xml/test_document_encoding.rb +1 -1
  255. data/test/xml/test_document_fragment.rb +173 -5
  256. data/test/xml/test_dtd.rb +61 -6
  257. data/test/xml/test_dtd_encoding.rb +3 -1
  258. data/test/xml/test_element_content.rb +56 -0
  259. data/test/xml/test_element_decl.rb +73 -0
  260. data/test/xml/test_entity_decl.rb +120 -0
  261. data/test/xml/test_entity_reference.rb +5 -1
  262. data/test/xml/test_namespace.rb +68 -0
  263. data/test/xml/test_node.rb +546 -201
  264. data/test/xml/test_node_attributes.rb +34 -0
  265. data/test/xml/test_node_encoding.rb +33 -3
  266. data/test/xml/test_node_reparenting.rb +321 -0
  267. data/test/xml/test_node_set.rb +538 -2
  268. data/test/xml/test_parse_options.rb +52 -0
  269. data/test/xml/test_processing_instruction.rb +6 -1
  270. data/test/xml/test_reader_encoding.rb +1 -1
  271. data/test/xml/test_relax_ng.rb +60 -0
  272. data/test/xml/test_schema.rb +94 -0
  273. data/test/xml/test_syntax_error.rb +12 -0
  274. data/test/xml/test_text.rb +35 -1
  275. data/test/xml/test_unparented_node.rb +5 -5
  276. data/test/xml/test_xpath.rb +142 -11
  277. data/test/xslt/test_custom_functions.rb +94 -0
  278. metadata +328 -92
  279. data/ext/nokogiri/html_sax_parser.c +0 -57
  280. data/ext/nokogiri/html_sax_parser.h +0 -11
  281. data/ext/nokogiri/iconv.dll +0 -0
  282. data/ext/nokogiri/libexslt.dll +0 -0
  283. data/ext/nokogiri/libxml2.dll +0 -0
  284. data/ext/nokogiri/libxslt.dll +0 -0
  285. data/ext/nokogiri/native.so +0 -0
  286. data/ext/nokogiri/xml_xpath.c +0 -53
  287. data/ext/nokogiri/xml_xpath.h +0 -11
  288. data/ext/nokogiri/zlib1.dll +0 -0
  289. data/lib/action-nokogiri.rb +0 -30
  290. data/lib/nokogiri/css/generated_parser.rb +0 -713
  291. data/lib/nokogiri/css/generated_tokenizer.rb +0 -144
  292. data/lib/nokogiri/decorators.rb +0 -2
  293. data/lib/nokogiri/decorators/hpricot.rb +0 -3
  294. data/lib/nokogiri/decorators/hpricot/node.rb +0 -56
  295. data/lib/nokogiri/decorators/hpricot/node_set.rb +0 -54
  296. data/lib/nokogiri/decorators/hpricot/xpath_visitor.rb +0 -28
  297. data/lib/nokogiri/hpricot.rb +0 -51
  298. data/lib/nokogiri/xml/comment.rb +0 -6
  299. data/lib/nokogiri/xml/element.rb +0 -6
  300. data/lib/nokogiri/xml/entity_declaration.rb +0 -9
  301. data/lib/nokogiri/xml/fragment_handler.rb +0 -34
  302. data/test/hpricot/files/basic.xhtml +0 -17
  303. data/test/hpricot/files/boingboing.html +0 -2266
  304. data/test/hpricot/files/cy0.html +0 -3653
  305. data/test/hpricot/files/immob.html +0 -400
  306. data/test/hpricot/files/pace_application.html +0 -1320
  307. data/test/hpricot/files/tenderlove.html +0 -16
  308. data/test/hpricot/files/uswebgen.html +0 -220
  309. data/test/hpricot/files/utf8.html +0 -1054
  310. data/test/hpricot/files/week9.html +0 -1723
  311. data/test/hpricot/files/why.xml +0 -19
  312. data/test/hpricot/load_files.rb +0 -11
  313. data/test/hpricot/test_alter.rb +0 -68
  314. data/test/hpricot/test_builder.rb +0 -20
  315. data/test/hpricot/test_parser.rb +0 -426
  316. data/test/hpricot/test_paths.rb +0 -15
  317. data/test/hpricot/test_preserved.rb +0 -77
  318. data/test/hpricot/test_xml.rb +0 -30
  319. data/test/test_gc.rb +0 -15
@@ -0,0 +1,9 @@
1
+ #ifndef NOKOGIRI_XML_SCHEMA
2
+ #define NOKOGIRI_XML_SCHEMA
3
+
4
+ #include <nokogiri.h>
5
+
6
+ void init_xml_schema();
7
+
8
+ extern VALUE cNokogiriXmlSchema;
9
+ #endif
@@ -1,179 +1,45 @@
1
1
  #include <xml_syntax_error.h>
2
2
 
3
- static void dealloc(xmlErrorPtr ptr)
4
- {
5
- NOKOGIRI_DEBUG_START(ptr);
6
- xmlResetError(ptr);
7
- xmlFree(ptr);
8
- NOKOGIRI_DEBUG_END(ptr);
9
- }
10
-
11
- /*
12
- * call-seq:
13
- * column
14
- *
15
- * Column number or 0 if not available
16
- */
17
- static VALUE column(VALUE self)
18
- {
19
- xmlErrorPtr error;
20
- Data_Get_Struct(self, xmlError, error);
21
- return INT2NUM(error->int2);
22
- }
23
-
24
- /*
25
- * call-seq:
26
- * int1
27
- *
28
- * Extra number information
29
- */
30
- static VALUE int1(VALUE self)
31
- {
32
- xmlErrorPtr error;
33
- Data_Get_Struct(self, xmlError, error);
34
- return INT2NUM(error->int1);
35
- }
36
-
37
- /*
38
- * call-seq:
39
- * str3
40
- *
41
- * Extra string information
42
- */
43
- static VALUE str3(VALUE self)
44
- {
45
- xmlErrorPtr error;
46
- Data_Get_Struct(self, xmlError, error);
47
- if(error->str3)
48
- return NOKOGIRI_STR_NEW2(error->str3, "UTF-8");
49
- return Qnil;
50
- }
51
-
52
- /*
53
- * call-seq:
54
- * str2
55
- *
56
- * Extra string information
57
- */
58
- static VALUE str2(VALUE self)
59
- {
60
- xmlErrorPtr error;
61
- Data_Get_Struct(self, xmlError, error);
62
- if(error->str2)
63
- return NOKOGIRI_STR_NEW2(error->str2, "UTF-8");
64
- return Qnil;
65
- }
66
-
67
- /*
68
- * call-seq:
69
- * str1
70
- *
71
- * Extra string information
72
- */
73
- static VALUE str1(VALUE self)
74
- {
75
- xmlErrorPtr error;
76
- Data_Get_Struct(self, xmlError, error);
77
- if(error->str1)
78
- return NOKOGIRI_STR_NEW2(error->str1, "UTF-8");
79
- return Qnil;
80
- }
81
-
82
- /*
83
- * call-seq:
84
- * line
85
- *
86
- * Get the line number of the error
87
- */
88
- static VALUE line(VALUE self)
89
- {
90
- xmlErrorPtr error;
91
- Data_Get_Struct(self, xmlError, error);
92
- return INT2NUM(error->line);
93
- }
94
-
95
- /*
96
- * call-seq:
97
- * file
98
- *
99
- * Get the filename for the error
100
- */
101
- static VALUE file(VALUE self)
102
- {
103
- xmlErrorPtr error;
104
- Data_Get_Struct(self, xmlError, error);
105
- if(error->file)
106
- return NOKOGIRI_STR_NEW2(error->file, "UTF-8");
107
-
108
- return Qnil;
109
- }
110
-
111
- /*
112
- * call-seq:
113
- * level
114
- *
115
- * Get the error level
116
- */
117
- static VALUE level(VALUE self)
3
+ void Nokogiri_error_array_pusher(void * ctx, xmlErrorPtr error)
118
4
  {
119
- xmlErrorPtr error;
120
- Data_Get_Struct(self, xmlError, error);
121
- return INT2NUM((short)error->level);
5
+ VALUE list = (VALUE)ctx;
6
+ rb_ary_push(list, Nokogiri_wrap_xml_syntax_error((VALUE)NULL, error));
122
7
  }
123
8
 
124
- /*
125
- * call-seq:
126
- * code
127
- *
128
- * Get the error code
129
- */
130
- static VALUE code(VALUE self)
9
+ void Nokogiri_error_raise(void * ctx, xmlErrorPtr error)
131
10
  {
132
- xmlErrorPtr error;
133
- Data_Get_Struct(self, xmlError, error);
134
- return INT2NUM(error->code);
11
+ rb_exc_raise(Nokogiri_wrap_xml_syntax_error((VALUE)NULL, error));
135
12
  }
136
13
 
137
- /*
138
- * call-seq:
139
- * domain
140
- *
141
- * Get the part of the library that raised this exception
142
- */
143
- static VALUE domain(VALUE self)
14
+ VALUE Nokogiri_wrap_xml_syntax_error(VALUE klass, xmlErrorPtr error)
144
15
  {
145
- xmlErrorPtr error;
146
- Data_Get_Struct(self, xmlError, error);
147
- return INT2NUM(error->domain);
148
- }
16
+ VALUE msg, e;
149
17
 
150
- /*
151
- * call-seq:
152
- * message
153
- *
154
- * Get the human readable message.
155
- */
156
- static VALUE message(VALUE self)
157
- {
158
- xmlErrorPtr error;
159
- Data_Get_Struct(self, xmlError, error);
160
- return NOKOGIRI_STR_NEW2(error->message, "UTF-8");
161
- }
18
+ if(!klass) klass = cNokogiriXmlSyntaxError;
162
19
 
163
- void Nokogiri_error_array_pusher(void * ctx, xmlErrorPtr error)
164
- {
165
- VALUE list = (VALUE)ctx;
166
- rb_ary_push(list, Nokogiri_wrap_xml_syntax_error((VALUE)NULL, error));
167
- }
20
+ msg = (error && error->message) ? NOKOGIRI_STR_NEW2(error->message) : Qnil;
168
21
 
169
- VALUE Nokogiri_wrap_xml_syntax_error(VALUE klass, xmlErrorPtr error)
170
- {
171
- if(!klass) klass = cNokogiriXmlSyntaxError;
22
+ e = rb_class_new_instance(
23
+ 1,
24
+ &msg,
25
+ klass
26
+ );
172
27
 
173
- xmlErrorPtr ptr = calloc(1, sizeof(xmlError));
174
- xmlCopyError(error, ptr);
28
+ if (error)
29
+ {
30
+ rb_iv_set(e, "@domain", INT2NUM(error->domain));
31
+ rb_iv_set(e, "@code", INT2NUM(error->code));
32
+ rb_iv_set(e, "@level", INT2NUM((short)error->level));
33
+ rb_iv_set(e, "@file", RBSTR_OR_QNIL(error->file));
34
+ rb_iv_set(e, "@line", INT2NUM(error->line));
35
+ rb_iv_set(e, "@str1", RBSTR_OR_QNIL(error->str1));
36
+ rb_iv_set(e, "@str2", RBSTR_OR_QNIL(error->str2));
37
+ rb_iv_set(e, "@str3", RBSTR_OR_QNIL(error->str3));
38
+ rb_iv_set(e, "@int1", INT2NUM(error->int1));
39
+ rb_iv_set(e, "@column", INT2NUM(error->int2));
40
+ }
175
41
 
176
- return Data_Wrap_Struct(klass, NULL, dealloc, ptr);
42
+ return e;
177
43
  }
178
44
 
179
45
  VALUE cNokogiriXmlSyntaxError;
@@ -189,15 +55,4 @@ void init_xml_syntax_error()
189
55
  VALUE klass = rb_define_class_under(xml, "SyntaxError", syntax_error_mommy);
190
56
  cNokogiriXmlSyntaxError = klass;
191
57
 
192
- rb_define_method(klass, "message", message, 0);
193
- rb_define_method(klass, "domain", domain, 0);
194
- rb_define_method(klass, "code", code, 0);
195
- rb_define_method(klass, "level", level, 0);
196
- rb_define_method(klass, "file", file, 0);
197
- rb_define_method(klass, "line", line, 0);
198
- rb_define_method(klass, "str1", str1, 0);
199
- rb_define_method(klass, "str2", str2, 0);
200
- rb_define_method(klass, "str3", str3, 0);
201
- rb_define_method(klass, "int1", int1, 0);
202
- rb_define_method(klass, "column", column, 0);
203
58
  }
@@ -1,11 +1,12 @@
1
1
  #ifndef NOKOGIRI_XML_SYNTAX_ERROR
2
2
  #define NOKOGIRI_XML_SYNTAX_ERROR
3
3
 
4
- #include <native.h>
4
+ #include <nokogiri.h>
5
5
 
6
6
  void init_xml_syntax_error();
7
7
  VALUE Nokogiri_wrap_xml_syntax_error(VALUE klass, xmlErrorPtr error);
8
8
  void Nokogiri_error_array_pusher(void * ctx, xmlErrorPtr error);
9
+ NORETURN(void Nokogiri_error_raise(void * ctx, xmlErrorPtr error));
9
10
 
10
11
  extern VALUE cNokogiriXmlSyntaxError;
11
12
  #endif
@@ -6,15 +6,24 @@
6
6
  *
7
7
  * Create a new Text element on the +document+ with +content+
8
8
  */
9
- static VALUE new(VALUE klass, VALUE string, VALUE document)
9
+ static VALUE new(int argc, VALUE *argv, VALUE klass)
10
10
  {
11
11
  xmlDocPtr doc;
12
+ xmlNodePtr node;
13
+ VALUE string;
14
+ VALUE document;
15
+ VALUE rest;
16
+ VALUE rb_node;
17
+
18
+ rb_scan_args(argc, argv, "2*", &string, &document, &rest);
19
+
12
20
  Data_Get_Struct(document, xmlDoc, doc);
13
21
 
14
- xmlNodePtr node = xmlNewText((xmlChar *)StringValuePtr(string));
15
- node->doc = doc;
22
+ node = xmlNewText((xmlChar *)StringValuePtr(string));
23
+ node->doc = doc->doc;
16
24
 
17
- VALUE rb_node = Nokogiri_wrap_xml_node(node) ;
25
+ rb_node = Nokogiri_wrap_xml_node(klass, node) ;
26
+ rb_obj_call_init(rb_node, argc, argv);
18
27
 
19
28
  if(rb_block_given_p()) rb_yield(rb_node);
20
29
 
@@ -28,13 +37,14 @@ void init_xml_text()
28
37
  VALUE xml = rb_define_module_under(nokogiri, "XML");
29
38
  /* */
30
39
  VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
40
+ VALUE char_data = rb_define_class_under(xml, "CharacterData", node);
31
41
 
32
42
  /*
33
43
  * Wraps Text nodes.
34
44
  */
35
- VALUE klass = rb_define_class_under(xml, "Text", node);
45
+ VALUE klass = rb_define_class_under(xml, "Text", char_data);
36
46
 
37
47
  cNokogiriXmlText = klass;
38
48
 
39
- rb_define_singleton_method(klass, "new", new, 2);
49
+ rb_define_singleton_method(klass, "new", new, -1);
40
50
  }
@@ -1,7 +1,7 @@
1
1
  #ifndef NOKOGIRI_XML_TEXT
2
2
  #define NOKOGIRI_XML_TEXT
3
3
 
4
- #include <native.h>
4
+ #include <nokogiri.h>
5
5
 
6
6
  void init_xml_text();
7
7
 
@@ -1,5 +1,7 @@
1
1
  #include <xml_xpath_context.h>
2
2
 
3
+ int vasprintf (char **strp, const char *fmt, va_list ap);
4
+
3
5
  static void deallocate(xmlXPathContextPtr ctx)
4
6
  {
5
7
  NOKOGIRI_DEBUG_START(ctx);
@@ -25,10 +27,38 @@ static VALUE register_ns(VALUE self, VALUE prefix, VALUE uri)
25
27
  return self;
26
28
  }
27
29
 
30
+ /*
31
+ * call-seq:
32
+ * register_variable(name, value)
33
+ *
34
+ * Register the variable +name+ with +value+.
35
+ */
36
+ static VALUE register_variable(VALUE self, VALUE name, VALUE value)
37
+ {
38
+ xmlXPathContextPtr ctx;
39
+ xmlXPathObjectPtr xmlValue;
40
+ Data_Get_Struct(self, xmlXPathContext, ctx);
41
+
42
+ xmlValue = xmlXPathNewCString(StringValuePtr(value));
43
+
44
+ xmlXPathRegisterVariable( ctx,
45
+ (const xmlChar *)StringValuePtr(name),
46
+ xmlValue
47
+ );
48
+
49
+ return self;
50
+ }
51
+
28
52
  static void ruby_funcall(xmlXPathParserContextPtr ctx, int nargs)
29
53
  {
30
54
  VALUE xpath_handler = Qnil;
55
+ VALUE result;
56
+ VALUE *argv;
57
+ VALUE doc;
58
+ VALUE node_set = Qnil;
59
+ xmlNodeSetPtr xml_node_set = NULL;
31
60
  xmlXPathObjectPtr obj;
61
+ int i;
32
62
 
33
63
  assert(ctx);
34
64
  assert(ctx->context);
@@ -38,15 +68,19 @@ static void ruby_funcall(xmlXPathParserContextPtr ctx, int nargs)
38
68
 
39
69
  xpath_handler = (VALUE)(ctx->context->userData);
40
70
 
41
- VALUE * argv = (VALUE *)calloc((unsigned int)nargs, sizeof(VALUE));
42
- VALUE doc = DOC_RUBY_OBJECT(ctx->context->doc);
71
+ argv = (VALUE *)calloc((size_t)nargs, sizeof(VALUE));
72
+ for (i = 0 ; i < nargs ; ++i) {
73
+ rb_gc_register_address(&argv[i]);
74
+ }
75
+
76
+ doc = DOC_RUBY_OBJECT(ctx->context->doc);
43
77
 
44
- int i = nargs - 1;
78
+ i = nargs - 1;
45
79
  do {
46
80
  obj = valuePop(ctx);
47
81
  switch(obj->type) {
48
82
  case XPATH_STRING:
49
- argv[i] = NOKOGIRI_STR_NEW2(obj->stringval, ctx->context->doc->encoding);
83
+ argv[i] = NOKOGIRI_STR_NEW2(obj->stringval);
50
84
  break;
51
85
  case XPATH_BOOLEAN:
52
86
  argv[i] = obj->boolval == 1 ? Qtrue : Qfalse;
@@ -55,26 +89,25 @@ static void ruby_funcall(xmlXPathParserContextPtr ctx, int nargs)
55
89
  argv[i] = rb_float_new(obj->floatval);
56
90
  break;
57
91
  case XPATH_NODESET:
58
- argv[i] = Nokogiri_wrap_xml_node_set(obj->nodesetval);
92
+ argv[i] = Nokogiri_wrap_xml_node_set(obj->nodesetval, doc);
59
93
  break;
60
94
  default:
61
- argv[i] = NOKOGIRI_STR_NEW2(
62
- xmlXPathCastToString(obj), ctx->context->doc->encoding
63
- );
95
+ argv[i] = NOKOGIRI_STR_NEW2(xmlXPathCastToString(obj));
64
96
  }
65
97
  xmlXPathFreeNodeSetList(obj);
66
98
  } while(i-- > 0);
67
99
 
68
- VALUE result = rb_funcall2(
100
+ result = rb_funcall2(
69
101
  xpath_handler,
70
102
  rb_intern((const char *)ctx->context->function),
71
103
  nargs,
72
104
  argv
73
105
  );
74
- free(argv);
75
106
 
76
- VALUE node_set = Qnil;
77
- xmlNodeSetPtr xml_node_set = NULL;
107
+ for (i = 0 ; i < nargs ; ++i) {
108
+ rb_gc_unregister_address(&argv[i]);
109
+ }
110
+ free(argv);
78
111
 
79
112
  switch(TYPE(result)) {
80
113
  case T_FLOAT:
@@ -97,20 +130,19 @@ static void ruby_funcall(xmlXPathParserContextPtr ctx, int nargs)
97
130
  case T_NIL:
98
131
  break;
99
132
  case T_ARRAY:
100
- node_set = rb_funcall(
101
- cNokogiriXmlNodeSet,
102
- rb_intern("new"),
103
- 2,
104
- doc,
105
- result
106
- );
107
- Data_Get_Struct(node_set, xmlNodeSet, xml_node_set);
108
- xmlXPathReturnNodeSet(ctx, xmlXPathNodeSetMerge(NULL, xml_node_set));
133
+ {
134
+ VALUE args[2];
135
+ args[0] = doc;
136
+ args[1] = result;
137
+ node_set = rb_class_new_instance(2, args, cNokogiriXmlNodeSet);
138
+ Data_Get_Struct(node_set, xmlNodeSet, xml_node_set);
139
+ xmlXPathReturnNodeSet(ctx, xmlXPathNodeSetMerge(NULL, xml_node_set));
140
+ }
109
141
  break;
110
142
  case T_DATA:
111
- if(rb_funcall(result, rb_intern("is_a?"), 1, cNokogiriXmlNodeSet)) {
143
+ if(rb_obj_is_kind_of(result, cNokogiriXmlNodeSet)) {
112
144
  Data_Get_Struct(result, xmlNodeSet, xml_node_set);
113
- // Copy the node set, otherwise it will get GC'd.
145
+ /* Copy the node set, otherwise it will get GC'd. */
114
146
  xmlXPathReturnNodeSet(ctx, xmlXPathNodeSetMerge(NULL, xml_node_set));
115
147
  break;
116
148
  }
@@ -130,16 +162,16 @@ static xmlXPathFunction lookup( void *ctx,
130
162
  return NULL;
131
163
  }
132
164
 
165
+ NORETURN(static void xpath_exception_handler(void * ctx, xmlErrorPtr error));
133
166
  static void xpath_exception_handler(void * ctx, xmlErrorPtr error)
134
167
  {
135
168
  VALUE xpath = rb_const_get(mNokogiriXml, rb_intern("XPath"));
136
169
  VALUE klass = rb_const_get(xpath, rb_intern("SyntaxError"));
137
170
 
138
- rb_funcall(rb_mKernel, rb_intern("raise"), 1,
139
- Nokogiri_wrap_xml_syntax_error(klass, error)
140
- );
171
+ rb_exc_raise(Nokogiri_wrap_xml_syntax_error(klass, error));
141
172
  }
142
173
 
174
+ NORETURN(static void xpath_generic_exception_handler(void * ctx, const char *msg, ...));
143
175
  static void xpath_generic_exception_handler(void * ctx, const char *msg, ...)
144
176
  {
145
177
  char * message;
@@ -154,23 +186,27 @@ static void xpath_generic_exception_handler(void * ctx, const char *msg, ...)
154
186
 
155
187
  /*
156
188
  * call-seq:
157
- * evaluate(search_path)
189
+ * evaluate(search_path, handler = nil)
158
190
  *
159
191
  * Evaluate the +search_path+ returning an XML::XPath object.
160
192
  */
161
193
  static VALUE evaluate(int argc, VALUE *argv, VALUE self)
162
194
  {
163
195
  VALUE search_path, xpath_handler;
196
+ VALUE thing = Qnil;
164
197
  xmlXPathContextPtr ctx;
198
+ xmlXPathObjectPtr xpath;
199
+ xmlChar *query;
200
+
165
201
  Data_Get_Struct(self, xmlXPathContext, ctx);
166
202
 
167
203
  if(rb_scan_args(argc, argv, "11", &search_path, &xpath_handler) == 1)
168
204
  xpath_handler = Qnil;
169
205
 
170
- xmlChar* query = (xmlChar *)StringValuePtr(search_path);
206
+ query = (xmlChar *)StringValuePtr(search_path);
171
207
 
172
208
  if(Qnil != xpath_handler) {
173
- // FIXME: not sure if this is the correct place to shove private data.
209
+ /* FIXME: not sure if this is the correct place to shove private data. */
174
210
  ctx->userData = (void *)xpath_handler;
175
211
  xmlXPathRegisterFuncLookup(ctx, lookup, (void *)xpath_handler);
176
212
  }
@@ -178,11 +214,11 @@ static VALUE evaluate(int argc, VALUE *argv, VALUE self)
178
214
  xmlResetLastError();
179
215
  xmlSetStructuredErrorFunc(NULL, xpath_exception_handler);
180
216
 
181
- // For some reason, xmlXPathEvalExpression will blow up with a generic error
182
- // when there is a non existent function.
217
+ /* For some reason, xmlXPathEvalExpression will blow up with a generic error */
218
+ /* when there is a non existent function. */
183
219
  xmlSetGenericErrorFunc(NULL, xpath_generic_exception_handler);
184
220
 
185
- xmlXPathObjectPtr xpath = xmlXPathEvalExpression(query, ctx);
221
+ xpath = xmlXPathEvalExpression(query, ctx);
186
222
  xmlSetStructuredErrorFunc(NULL, NULL);
187
223
  xmlSetGenericErrorFunc(NULL, NULL);
188
224
 
@@ -191,22 +227,39 @@ static VALUE evaluate(int argc, VALUE *argv, VALUE self)
191
227
  VALUE klass = rb_const_get(xpath, rb_intern("SyntaxError"));
192
228
 
193
229
  xmlErrorPtr error = xmlGetLastError();
194
- rb_funcall(rb_mKernel, rb_intern("raise"), 1,
195
- Nokogiri_wrap_xml_syntax_error(klass, error)
196
- );
230
+ rb_exc_raise(Nokogiri_wrap_xml_syntax_error(klass, error));
197
231
  }
198
232
 
199
- VALUE xpath_object = Nokogiri_wrap_xml_xpath(xpath);
200
-
201
233
  assert(ctx->doc);
202
234
  assert(DOC_RUBY_OBJECT_TEST(ctx->doc));
203
235
 
204
- rb_funcall( xpath_object,
205
- rb_intern("document="),
206
- 1,
207
- DOC_RUBY_OBJECT(ctx->doc)
208
- );
209
- return xpath_object;
236
+ switch(xpath->type) {
237
+ case XPATH_STRING:
238
+ thing = NOKOGIRI_STR_NEW2(xpath->stringval);
239
+ break;
240
+ case XPATH_NODESET:
241
+ if(NULL == xpath->nodesetval) {
242
+ thing = Nokogiri_wrap_xml_node_set(xmlXPathNodeSetCreate(NULL),
243
+ DOC_RUBY_OBJECT(ctx->doc));
244
+ } else {
245
+ thing = Nokogiri_wrap_xml_node_set(xpath->nodesetval,
246
+ DOC_RUBY_OBJECT(ctx->doc));
247
+ }
248
+ break;
249
+ case XPATH_NUMBER:
250
+ thing = rb_float_new(xpath->floatval);
251
+ break;
252
+ case XPATH_BOOLEAN:
253
+ thing = xpath->boolval == 1 ? Qtrue : Qfalse;
254
+ break;
255
+ default:
256
+ thing = Nokogiri_wrap_xml_node_set(xmlXPathNodeSetCreate(NULL),
257
+ DOC_RUBY_OBJECT(ctx->doc));
258
+ }
259
+
260
+ xmlXPathFreeNodeSetList(xpath);
261
+
262
+ return thing;
210
263
  }
211
264
 
212
265
  /*
@@ -217,15 +270,18 @@ static VALUE evaluate(int argc, VALUE *argv, VALUE self)
217
270
  */
218
271
  static VALUE new(VALUE klass, VALUE nodeobj)
219
272
  {
273
+ xmlNodePtr node;
274
+ xmlXPathContextPtr ctx;
275
+ VALUE self;
276
+
220
277
  xmlXPathInit();
221
278
 
222
- xmlNodePtr node ;
223
279
  Data_Get_Struct(nodeobj, xmlNode, node);
224
280
 
225
- xmlXPathContextPtr ctx = xmlXPathNewContext(node->doc);
281
+ ctx = xmlXPathNewContext(node->doc);
226
282
  ctx->node = node;
227
- VALUE self = Data_Wrap_Struct(klass, 0, deallocate, ctx);
228
- //rb_iv_set(self, "@xpath_handler", Qnil);
283
+ self = Data_Wrap_Struct(klass, 0, deallocate, ctx);
284
+ /*rb_iv_set(self, "@xpath_handler", Qnil); */
229
285
  return self;
230
286
  }
231
287
 
@@ -248,5 +304,6 @@ void init_xml_xpath_context(void)
248
304
 
249
305
  rb_define_singleton_method(klass, "new", new, 1);
250
306
  rb_define_method(klass, "evaluate", evaluate, -1);
307
+ rb_define_method(klass, "register_variable", register_variable, 2);
251
308
  rb_define_method(klass, "register_ns", register_ns, 2);
252
309
  }