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
@@ -1,7 +1,7 @@
1
1
  #ifndef NOKOGIRI_HTML_ENTITY_LOOKUP
2
2
  #define NOKOGIRI_HTML_ENTITY_LOOKUP
3
3
 
4
- #include <native.h>
4
+ #include <nokogiri.h>
5
5
 
6
6
  void init_html_entity_lookup();
7
7
 
@@ -0,0 +1,94 @@
1
+ #include <html_sax_parser_context.h>
2
+
3
+ VALUE cNokogiriHtmlSaxParserContext ;
4
+
5
+ static void deallocate(xmlParserCtxtPtr ctxt)
6
+ {
7
+ NOKOGIRI_DEBUG_START(handler);
8
+
9
+ ctxt->sax = NULL;
10
+
11
+ htmlFreeParserCtxt(ctxt);
12
+
13
+ NOKOGIRI_DEBUG_END(handler);
14
+ }
15
+
16
+ static VALUE parse_memory(VALUE klass, VALUE data, VALUE encoding)
17
+ {
18
+ htmlParserCtxtPtr ctxt;
19
+
20
+ if(NIL_P(data)) rb_raise(rb_eArgError, "data cannot be nil");
21
+ if(!(int)RSTRING_LEN(data))
22
+ rb_raise(rb_eRuntimeError, "data cannot be empty");
23
+
24
+ ctxt = htmlCreateMemoryParserCtxt(
25
+ StringValuePtr(data),
26
+ (int)RSTRING_LEN(data)
27
+ );
28
+
29
+ if(RTEST(encoding)) {
30
+ xmlCharEncodingHandlerPtr enc = xmlFindCharEncodingHandler(StringValuePtr(encoding));
31
+ if(enc != NULL) {
32
+ xmlSwitchToEncoding(ctxt, enc);
33
+ if(ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) {
34
+ rb_raise(rb_eRuntimeError, "Unsupported encoding %s",
35
+ StringValuePtr(encoding));
36
+ }
37
+ }
38
+ }
39
+
40
+ return Data_Wrap_Struct(klass, NULL, deallocate, ctxt);
41
+ }
42
+
43
+ static VALUE parse_file(VALUE klass, VALUE filename, VALUE encoding)
44
+ {
45
+ htmlParserCtxtPtr ctxt = htmlCreateFileParserCtxt(
46
+ StringValuePtr(filename),
47
+ StringValuePtr(encoding)
48
+ );
49
+ return Data_Wrap_Struct(klass, NULL, deallocate, ctxt);
50
+ }
51
+
52
+ static VALUE parse_with(VALUE self, VALUE sax_handler)
53
+ {
54
+ htmlParserCtxtPtr ctxt;
55
+ htmlSAXHandlerPtr sax;
56
+
57
+ if(!rb_obj_is_kind_of(sax_handler, cNokogiriXmlSaxParser))
58
+ rb_raise(rb_eArgError, "argument must be a Nokogiri::XML::SAX::Parser");
59
+
60
+ Data_Get_Struct(self, htmlParserCtxt, ctxt);
61
+ Data_Get_Struct(sax_handler, htmlSAXHandler, sax);
62
+
63
+ /* Free the sax handler since we'll assign our own */
64
+ if(ctxt->sax && ctxt->sax != (xmlSAXHandlerPtr)&xmlDefaultSAXHandler)
65
+ xmlFree(ctxt->sax);
66
+
67
+ ctxt->sax = sax;
68
+ ctxt->userData = (void *)NOKOGIRI_SAX_TUPLE_NEW(ctxt, sax_handler);
69
+
70
+ htmlParseDocument(ctxt);
71
+
72
+ if(NULL != ctxt->myDoc) xmlFreeDoc(ctxt->myDoc);
73
+
74
+ NOKOGIRI_SAX_TUPLE_DESTROY(ctxt->userData);
75
+ return self;
76
+ }
77
+
78
+ void init_html_sax_parser_context()
79
+ {
80
+ VALUE nokogiri = rb_define_module("Nokogiri");
81
+ VALUE xml = rb_define_module_under(nokogiri, "XML");
82
+ VALUE html = rb_define_module_under(nokogiri, "HTML");
83
+ VALUE sax = rb_define_module_under(xml, "SAX");
84
+ VALUE hsax = rb_define_module_under(html, "SAX");
85
+ VALUE pc = rb_define_class_under(sax, "ParserContext", rb_cObject);
86
+ VALUE klass = rb_define_class_under(hsax, "ParserContext", pc);
87
+
88
+ cNokogiriHtmlSaxParserContext = klass;
89
+
90
+ rb_define_singleton_method(klass, "memory", parse_memory, 2);
91
+ rb_define_singleton_method(klass, "file", parse_file, 2);
92
+
93
+ rb_define_method(klass, "parse_with", parse_with, 1);
94
+ }
@@ -0,0 +1,11 @@
1
+ #ifndef NOKOGIRI_HTML_SAX_PARSER_CONTEXT
2
+ #define NOKOGIRI_HTML_SAX_PARSER_CONTEXT
3
+
4
+ #include <nokogiri.h>
5
+
6
+ extern VALUE cNokogiriHtmlSaxParserContext;
7
+
8
+ void init_html_sax_parser_context();
9
+
10
+ #endif
11
+
@@ -1,4 +1,4 @@
1
- #include <native.h>
1
+ #include <nokogiri.h>
2
2
 
3
3
  VALUE mNokogiri ;
4
4
  VALUE mNokogiriXml ;
@@ -7,7 +7,7 @@ VALUE mNokogiriXslt ;
7
7
  VALUE mNokogiriXmlSax ;
8
8
  VALUE mNokogiriHtmlSax ;
9
9
 
10
- #ifdef XP_WIN
10
+ #ifdef USE_INCLUDED_VASPRINTF
11
11
  /*
12
12
  * I srsly hate windows. it doesn't have vasprintf.
13
13
  * Thank you Geoffroy Couprie for this implementation of vasprintf!
@@ -23,15 +23,21 @@ int vasprintf (char **strp, const char *fmt, va_list ap)
23
23
  }
24
24
  #endif
25
25
 
26
+ int is_2_6_16(void)
27
+ {
28
+ return (strcmp(xmlParserVersion, "20616") <= 0) ? 1 : 0 ;
29
+ }
26
30
 
27
- void Init_native()
31
+ void Init_nokogiri()
28
32
  {
33
+ #ifndef __MACRUBY__
29
34
  xmlMemSetup(
30
35
  (xmlFreeFunc)ruby_xfree,
31
36
  (xmlMallocFunc)ruby_xmalloc,
32
37
  (xmlReallocFunc)ruby_xrealloc,
33
38
  strdup
34
39
  );
40
+ #endif
35
41
 
36
42
  mNokogiri = rb_define_module("Nokogiri");
37
43
  mNokogiriXml = rb_define_module_under(mNokogiri, "XML");
@@ -42,13 +48,21 @@ void Init_native()
42
48
 
43
49
  rb_const_set( mNokogiri,
44
50
  rb_intern("LIBXML_VERSION"),
45
- NOKOGIRI_STR_NEW2(LIBXML_DOTTED_VERSION, "UTF-8")
51
+ NOKOGIRI_STR_NEW2(LIBXML_DOTTED_VERSION)
46
52
  );
47
53
  rb_const_set( mNokogiri,
48
54
  rb_intern("LIBXML_PARSER_VERSION"),
49
- NOKOGIRI_STR_NEW2(xmlParserVersion, "UTF-8")
55
+ NOKOGIRI_STR_NEW2(xmlParserVersion)
50
56
  );
51
57
 
58
+ #ifdef LIBXML_ICONV_ENABLED
59
+ rb_const_set(mNokogiri, rb_intern("LIBXML_ICONV_ENABLED"), Qtrue);
60
+ #else
61
+ rb_const_set(mNokogiri, rb_intern("LIBXML_ICONV_ENABLED"), Qfalse);
62
+ #endif
63
+
64
+ xmlInitParser();
65
+
52
66
  init_xml_document();
53
67
  init_html_document();
54
68
  init_xml_node();
@@ -61,13 +75,23 @@ void Init_native()
61
75
  init_xml_comment();
62
76
  init_xml_node_set();
63
77
  init_xml_xpath_context();
64
- init_xml_xpath();
78
+ init_xml_sax_parser_context();
65
79
  init_xml_sax_parser();
66
80
  init_xml_sax_push_parser();
67
81
  init_xml_reader();
68
82
  init_xml_dtd();
69
- init_html_sax_parser();
83
+ init_xml_element_content();
84
+ init_xml_attribute_decl();
85
+ init_xml_element_decl();
86
+ init_xml_entity_decl();
87
+ init_xml_namespace();
88
+ init_html_sax_parser_context();
70
89
  init_xslt_stylesheet();
71
90
  init_xml_syntax_error();
72
91
  init_html_entity_lookup();
92
+ init_html_element_description();
93
+ init_xml_schema();
94
+ init_xml_relax_ng();
95
+ init_nokogiri_io();
96
+ init_xml_encoding_handler();
73
97
  }
@@ -2,16 +2,41 @@
2
2
  #define NOKOGIRI_NATIVE
3
3
 
4
4
  #include <stdlib.h>
5
+ #include <string.h>
5
6
  #include <assert.h>
6
- #include <ruby.h>
7
+ #include <stdarg.h>
8
+
9
+ #ifdef USE_INCLUDED_VASPRINTF
10
+ int vasprintf (char **strp, const char *fmt, va_list ap);
11
+ #else
12
+
13
+ #define _GNU_SOURCE
14
+ # include <stdio.h>
15
+ #undef _GNU_SOURCE
16
+
17
+ #endif
18
+
7
19
  #include <libxml/parser.h>
20
+ #include <libxml/entities.h>
21
+ #include <libxml/parserInternals.h>
8
22
  #include <libxml/xpath.h>
9
23
  #include <libxml/xpathInternals.h>
10
24
  #include <libxml/xmlreader.h>
11
25
  #include <libxml/xmlsave.h>
26
+ #include <libxml/xmlschemas.h>
12
27
  #include <libxml/HTMLparser.h>
13
28
  #include <libxml/HTMLtree.h>
29
+ #include <libxml/relaxng.h>
30
+ #include <libxslt/extensions.h>
31
+ #include <ruby.h>
14
32
 
33
+ #ifdef HAVE_RUBY_ENCODING_H
34
+ #include <ruby/st.h>
35
+ #else
36
+ #include <st.h>
37
+ #endif
38
+
39
+ int is_2_6_16(void) ;
15
40
 
16
41
  #ifndef UNUSED
17
42
  # if defined(__GNUC__)
@@ -23,48 +48,37 @@
23
48
  # endif
24
49
  #endif
25
50
 
51
+ #ifndef NORETURN
52
+ # if defined(__GNUC__)
53
+ # define NORETURN(name) __attribute__((noreturn)) name
54
+ # else
55
+ # define NORETURN(name) name
56
+ # endif
57
+ #endif
58
+
26
59
  #ifdef HAVE_RUBY_ENCODING_H
27
60
 
28
61
  #include <ruby/encoding.h>
29
62
 
30
- #define NOKOGIRI_STR_NEW2(str, encoding) \
31
- ({ \
32
- VALUE _string = rb_str_new2((const char *)str); \
33
- if(NULL != encoding) { \
34
- int _enc = rb_enc_find_index(encoding); \
35
- if(_enc == -1) \
36
- rb_enc_associate_index(_string, rb_enc_find_index("ASCII")); \
37
- else \
38
- rb_enc_associate_index(_string, _enc); \
39
- } \
40
- _string; \
41
- })
42
-
43
- #define NOKOGIRI_STR_NEW(str, len, encoding) \
44
- ({ \
45
- VALUE _string = rb_str_new((const char *)str, (long)len); \
46
- if(NULL != encoding) { \
47
- int _enc = rb_enc_find_index(encoding); \
48
- if(_enc == -1) \
49
- rb_enc_associate_index(_string, rb_enc_find_index("ASCII")); \
50
- else \
51
- rb_enc_associate_index(_string, _enc); \
52
- } \
53
- _string; \
54
- })
63
+ #define NOKOGIRI_STR_NEW2(str) \
64
+ NOKOGIRI_STR_NEW(str, strlen((const char *)(str)))
65
+
66
+ #define NOKOGIRI_STR_NEW(str, len) \
67
+ rb_external_str_new_with_enc((const char *)(str), (long)(len), rb_utf8_encoding())
55
68
 
56
69
  #else
57
70
 
58
- #define NOKOGIRI_STR_NEW2(str, doc) \
59
- rb_str_new2((const char *)str)
71
+ #define NOKOGIRI_STR_NEW2(str) \
72
+ rb_str_new2((const char *)(str))
60
73
 
61
- #define NOKOGIRI_STR_NEW(str, len, doc) \
62
- rb_str_new((const char *)str, (long)len)
74
+ #define NOKOGIRI_STR_NEW(str, len) \
75
+ rb_str_new((const char *)(str), (long)(len))
63
76
  #endif
64
77
 
65
- #ifdef XP_WIN
66
- int vasprintf (char **strp, const char *fmt, va_list ap);
67
- #endif
78
+ #define RBSTR_OR_QNIL(_str) \
79
+ (_str ? NOKOGIRI_STR_NEW2(_str) : Qnil)
80
+
81
+ #include <xml_libxml2_hacks.h>
68
82
 
69
83
  #include <xml_io.h>
70
84
  #include <xml_document.h>
@@ -79,15 +93,24 @@ int vasprintf (char **strp, const char *fmt, va_list ap);
79
93
  #include <xml_document_fragment.h>
80
94
  #include <xml_comment.h>
81
95
  #include <xml_node_set.h>
82
- #include <xml_xpath.h>
83
96
  #include <xml_dtd.h>
97
+ #include <xml_attribute_decl.h>
98
+ #include <xml_element_decl.h>
99
+ #include <xml_entity_decl.h>
84
100
  #include <xml_xpath_context.h>
101
+ #include <xml_element_content.h>
102
+ #include <xml_sax_parser_context.h>
85
103
  #include <xml_sax_parser.h>
86
104
  #include <xml_sax_push_parser.h>
87
105
  #include <xml_reader.h>
88
- #include <html_sax_parser.h>
106
+ #include <html_sax_parser_context.h>
89
107
  #include <xslt_stylesheet.h>
90
108
  #include <xml_syntax_error.h>
109
+ #include <xml_schema.h>
110
+ #include <xml_relax_ng.h>
111
+ #include <html_element_description.h>
112
+ #include <xml_namespace.h>
113
+ #include <xml_encoding_handler.h>
91
114
 
92
115
  extern VALUE mNokogiri ;
93
116
  extern VALUE mNokogiriXml ;
@@ -97,12 +120,10 @@ extern VALUE mNokogiriHtmlSax ;
97
120
  extern VALUE mNokogiriXslt ;
98
121
 
99
122
  #define NOKOGIRI_ROOT_NODE(_node) \
100
- ({ \
101
- nokogiriTuplePtr tuple = (nokogiriTuplePtr)(_node->doc->_private); \
102
- xmlNodeSetPtr node_set = (xmlNodeSetPtr)(tuple->unlinkedNodes); \
103
- xmlXPathNodeSetAdd(node_set, _node); \
104
- _node; \
105
- })
123
+ st_insert(((nokogiriTuplePtr)(_node)->doc->_private)->unlinkedNodes, (st_data_t)(_node), (st_data_t)(_node))
124
+
125
+ #define NOKOGIRI_ROOT_NSDEF(_nsDef, _doc) \
126
+ st_insert(((nokogiriTuplePtr)(_doc)->_private)->unlinkedNodes, (st_data_t)(_nsDef), (st_data_t)(_nsDef))
106
127
 
107
128
  #ifdef DEBUG
108
129
 
@@ -114,6 +135,8 @@ extern VALUE mNokogiriXslt ;
114
135
  #define NOKOGIRI_DEBUG_START(p)
115
136
  #define NOKOGIRI_DEBUG_END(p)
116
137
 
138
+ #endif
139
+
117
140
  #ifndef RSTRING_PTR
118
141
  #define RSTRING_PTR(s) (RSTRING(s)->ptr)
119
142
  #endif
@@ -130,6 +153,10 @@ extern VALUE mNokogiriXslt ;
130
153
  #define RARRAY_LEN(a) RARRAY(a)->len
131
154
  #endif
132
155
 
156
+ #ifndef __builtin_expect
157
+ # if defined(__GNUC__)
158
+ # define __builtin_expect(expr, c) __builtin_expect((long)(expr), (long)(c))
159
+ # endif
133
160
  #endif
134
161
 
135
162
  #endif
@@ -19,21 +19,21 @@ static VALUE set_value(VALUE self, VALUE content)
19
19
  xmlChar *buffer;
20
20
  xmlNode *tmp;
21
21
 
22
- // Encode our content
22
+ /* Encode our content */
23
23
  buffer = xmlEncodeEntitiesReentrant(attr->doc, (unsigned char *)StringValuePtr(content));
24
24
 
25
25
  attr->children = xmlStringGetNodeList(attr->doc, buffer);
26
26
  attr->last = NULL;
27
27
  tmp = attr->children;
28
28
 
29
- // Loop through the children
29
+ /* Loop through the children */
30
30
  for(tmp = attr->children; tmp; tmp = tmp->next) {
31
31
  tmp->parent = (xmlNode *)attr;
32
32
  tmp->doc = attr->doc;
33
33
  if(tmp->next == NULL) attr->last = tmp;
34
34
  }
35
35
 
36
- // Free up memory
36
+ /* Free up memory */
37
37
  xmlFree(buffer);
38
38
  }
39
39
 
@@ -42,22 +42,33 @@ static VALUE set_value(VALUE self, VALUE content)
42
42
 
43
43
  /*
44
44
  * call-seq:
45
- * new(document, content)
45
+ * new(document, name)
46
46
  *
47
47
  * Create a new Attr element on the +document+ with +name+
48
48
  */
49
- static VALUE new(VALUE klass, VALUE doc, VALUE name)
49
+ static VALUE new(int argc, VALUE *argv, VALUE klass)
50
50
  {
51
51
  xmlDocPtr xml_doc;
52
- Data_Get_Struct(doc, xmlDoc, xml_doc);
52
+ VALUE document;
53
+ VALUE name;
54
+ VALUE rest;
55
+ xmlAttrPtr node;
56
+ VALUE rb_node;
53
57
 
54
- xmlAttrPtr node = xmlNewDocProp(
58
+ rb_scan_args(argc, argv, "2*", &document, &name, &rest);
59
+
60
+ Data_Get_Struct(document, xmlDoc, xml_doc);
61
+
62
+ node = xmlNewDocProp(
55
63
  xml_doc,
56
64
  (const xmlChar *)StringValuePtr(name),
57
65
  NULL
58
66
  );
59
67
 
60
- VALUE rb_node = Nokogiri_wrap_xml_node((xmlNodePtr)node);
68
+ NOKOGIRI_ROOT_NODE((xmlNodePtr)node);
69
+
70
+ rb_node = Nokogiri_wrap_xml_node(klass, (xmlNodePtr)node);
71
+ rb_obj_call_init(rb_node, argc, argv);
61
72
 
62
73
  if(rb_block_given_p()) rb_yield(rb_node);
63
74
 
@@ -78,6 +89,6 @@ void init_xml_attr()
78
89
 
79
90
  cNokogiriXmlAttr = klass;
80
91
 
81
- rb_define_singleton_method(klass, "new", new, 2);
92
+ rb_define_singleton_method(klass, "new", new, -1);
82
93
  rb_define_method(klass, "value=", set_value, 1);
83
94
  }