nokogiri 1.0.0 → 1.6.8.1

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 (309) hide show
  1. checksums.yaml +7 -0
  2. data/.autotest +26 -0
  3. data/.cross_rubies +9 -0
  4. data/.editorconfig +17 -0
  5. data/.gemtest +0 -0
  6. data/.travis.yml +51 -0
  7. data/CHANGELOG.rdoc +1160 -0
  8. data/CONTRIBUTING.md +42 -0
  9. data/C_CODING_STYLE.rdoc +33 -0
  10. data/Gemfile +22 -0
  11. data/LICENSE.txt +31 -0
  12. data/Manifest.txt +284 -40
  13. data/README.md +166 -0
  14. data/ROADMAP.md +111 -0
  15. data/Rakefile +310 -199
  16. data/STANDARD_RESPONSES.md +47 -0
  17. data/Y_U_NO_GEMSPEC.md +155 -0
  18. data/appveyor.yml +22 -0
  19. data/bin/nokogiri +118 -0
  20. data/build_all +45 -0
  21. data/dependencies.yml +29 -0
  22. data/ext/nokogiri/depend +358 -0
  23. data/ext/nokogiri/extconf.rb +664 -34
  24. data/ext/nokogiri/html_document.c +120 -33
  25. data/ext/nokogiri/html_document.h +1 -1
  26. data/ext/nokogiri/html_element_description.c +279 -0
  27. data/ext/nokogiri/html_element_description.h +10 -0
  28. data/ext/nokogiri/html_entity_lookup.c +32 -0
  29. data/ext/nokogiri/html_entity_lookup.h +8 -0
  30. data/ext/nokogiri/html_sax_parser_context.c +116 -0
  31. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  32. data/ext/nokogiri/html_sax_push_parser.c +87 -0
  33. data/ext/nokogiri/html_sax_push_parser.h +9 -0
  34. data/ext/nokogiri/nokogiri.c +145 -0
  35. data/ext/nokogiri/nokogiri.h +131 -0
  36. data/ext/nokogiri/xml_attr.c +94 -0
  37. data/ext/nokogiri/xml_attr.h +9 -0
  38. data/ext/nokogiri/xml_attribute_decl.c +70 -0
  39. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  40. data/ext/nokogiri/xml_cdata.c +23 -19
  41. data/ext/nokogiri/xml_cdata.h +1 -1
  42. data/ext/nokogiri/xml_comment.c +69 -0
  43. data/ext/nokogiri/xml_comment.h +9 -0
  44. data/ext/nokogiri/xml_document.c +501 -54
  45. data/ext/nokogiri/xml_document.h +14 -1
  46. data/ext/nokogiri/xml_document_fragment.c +48 -0
  47. data/ext/nokogiri/xml_document_fragment.h +10 -0
  48. data/ext/nokogiri/xml_dtd.c +109 -24
  49. data/ext/nokogiri/xml_dtd.h +3 -1
  50. data/ext/nokogiri/xml_element_content.c +123 -0
  51. data/ext/nokogiri/xml_element_content.h +10 -0
  52. data/ext/nokogiri/xml_element_decl.c +69 -0
  53. data/ext/nokogiri/xml_element_decl.h +9 -0
  54. data/ext/nokogiri/xml_encoding_handler.c +79 -0
  55. data/ext/nokogiri/xml_encoding_handler.h +8 -0
  56. data/ext/nokogiri/xml_entity_decl.c +110 -0
  57. data/ext/nokogiri/xml_entity_decl.h +10 -0
  58. data/ext/nokogiri/xml_entity_reference.c +52 -0
  59. data/ext/nokogiri/xml_entity_reference.h +9 -0
  60. data/ext/nokogiri/xml_io.c +60 -0
  61. data/ext/nokogiri/xml_io.h +11 -0
  62. data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
  63. data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
  64. data/ext/nokogiri/xml_namespace.c +117 -0
  65. data/ext/nokogiri/xml_namespace.h +13 -0
  66. data/ext/nokogiri/xml_node.c +1285 -315
  67. data/ext/nokogiri/xml_node.h +4 -6
  68. data/ext/nokogiri/xml_node_set.c +415 -54
  69. data/ext/nokogiri/xml_node_set.h +6 -2
  70. data/ext/nokogiri/xml_processing_instruction.c +56 -0
  71. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  72. data/ext/nokogiri/xml_reader.c +316 -77
  73. data/ext/nokogiri/xml_reader.h +1 -1
  74. data/ext/nokogiri/xml_relax_ng.c +161 -0
  75. data/ext/nokogiri/xml_relax_ng.h +9 -0
  76. data/ext/nokogiri/xml_sax_parser.c +215 -80
  77. data/ext/nokogiri/xml_sax_parser.h +30 -1
  78. data/ext/nokogiri/xml_sax_parser_context.c +262 -0
  79. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  80. data/ext/nokogiri/xml_sax_push_parser.c +115 -0
  81. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  82. data/ext/nokogiri/xml_schema.c +205 -0
  83. data/ext/nokogiri/xml_schema.h +9 -0
  84. data/ext/nokogiri/xml_syntax_error.c +45 -175
  85. data/ext/nokogiri/xml_syntax_error.h +4 -2
  86. data/ext/nokogiri/xml_text.c +37 -14
  87. data/ext/nokogiri/xml_text.h +1 -1
  88. data/ext/nokogiri/xml_xpath_context.c +230 -13
  89. data/ext/nokogiri/xml_xpath_context.h +2 -1
  90. data/ext/nokogiri/xslt_stylesheet.c +196 -34
  91. data/ext/nokogiri/xslt_stylesheet.h +6 -1
  92. data/lib/nokogiri/css/node.rb +18 -61
  93. data/lib/nokogiri/css/parser.rb +725 -17
  94. data/lib/nokogiri/css/parser.y +126 -63
  95. data/lib/nokogiri/css/parser_extras.rb +91 -0
  96. data/lib/nokogiri/css/syntax_error.rb +7 -0
  97. data/lib/nokogiri/css/tokenizer.rb +148 -5
  98. data/lib/nokogiri/css/tokenizer.rex +31 -39
  99. data/lib/nokogiri/css/xpath_visitor.rb +109 -51
  100. data/lib/nokogiri/css.rb +24 -3
  101. data/lib/nokogiri/decorators/slop.rb +42 -0
  102. data/lib/nokogiri/html/builder.rb +27 -1
  103. data/lib/nokogiri/html/document.rb +329 -3
  104. data/lib/nokogiri/html/document_fragment.rb +39 -0
  105. data/lib/nokogiri/html/element_description.rb +23 -0
  106. data/lib/nokogiri/html/element_description_defaults.rb +671 -0
  107. data/lib/nokogiri/html/entity_lookup.rb +13 -0
  108. data/lib/nokogiri/html/sax/parser.rb +35 -4
  109. data/lib/nokogiri/html/sax/parser_context.rb +16 -0
  110. data/lib/nokogiri/html/sax/push_parser.rb +36 -0
  111. data/lib/nokogiri/html.rb +18 -76
  112. data/lib/nokogiri/syntax_error.rb +4 -0
  113. data/lib/nokogiri/version.rb +106 -1
  114. data/lib/nokogiri/xml/attr.rb +14 -0
  115. data/lib/nokogiri/xml/attribute_decl.rb +18 -0
  116. data/lib/nokogiri/xml/builder.rb +395 -31
  117. data/lib/nokogiri/xml/cdata.rb +4 -2
  118. data/lib/nokogiri/xml/character_data.rb +7 -0
  119. data/lib/nokogiri/xml/document.rb +267 -12
  120. data/lib/nokogiri/xml/document_fragment.rb +149 -0
  121. data/lib/nokogiri/xml/dtd.rb +27 -1
  122. data/lib/nokogiri/xml/element_content.rb +36 -0
  123. data/lib/nokogiri/xml/element_decl.rb +13 -0
  124. data/lib/nokogiri/xml/entity_decl.rb +19 -0
  125. data/lib/nokogiri/xml/namespace.rb +13 -0
  126. data/lib/nokogiri/xml/node/save_options.rb +61 -0
  127. data/lib/nokogiri/xml/node.rb +748 -109
  128. data/lib/nokogiri/xml/node_set.rb +200 -72
  129. data/lib/nokogiri/xml/parse_options.rb +120 -0
  130. data/lib/nokogiri/xml/pp/character_data.rb +18 -0
  131. data/lib/nokogiri/xml/pp/node.rb +56 -0
  132. data/lib/nokogiri/xml/pp.rb +2 -0
  133. data/lib/nokogiri/xml/processing_instruction.rb +8 -0
  134. data/lib/nokogiri/xml/reader.rb +102 -4
  135. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  136. data/lib/nokogiri/xml/sax/document.rb +114 -2
  137. data/lib/nokogiri/xml/sax/parser.rb +97 -7
  138. data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
  139. data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
  140. data/lib/nokogiri/xml/sax.rb +2 -7
  141. data/lib/nokogiri/xml/schema.rb +63 -0
  142. data/lib/nokogiri/xml/searchable.rb +221 -0
  143. data/lib/nokogiri/xml/syntax_error.rb +27 -1
  144. data/lib/nokogiri/xml/text.rb +4 -1
  145. data/lib/nokogiri/xml/xpath/syntax_error.rb +11 -0
  146. data/lib/nokogiri/xml/xpath.rb +4 -0
  147. data/lib/nokogiri/xml/xpath_context.rb +3 -1
  148. data/lib/nokogiri/xml.rb +45 -38
  149. data/lib/nokogiri/xslt/stylesheet.rb +19 -0
  150. data/lib/nokogiri/xslt.rb +47 -2
  151. data/lib/nokogiri.rb +117 -24
  152. data/lib/xsd/xmlparser/nokogiri.rb +102 -0
  153. data/patches/sort-patches-by-date +25 -0
  154. data/ports/archives/libxml2-2.9.4.tar.gz +0 -0
  155. data/ports/archives/libxslt-1.1.29.tar.gz +0 -0
  156. data/suppressions/README.txt +1 -0
  157. data/suppressions/nokogiri_ree-1.8.7.358.supp +61 -0
  158. data/suppressions/nokogiri_ruby-1.8.7.370.supp +0 -0
  159. data/suppressions/nokogiri_ruby-1.9.2.320.supp +28 -0
  160. data/suppressions/nokogiri_ruby-1.9.3.327.supp +28 -0
  161. data/tasks/test.rb +100 -0
  162. data/test/css/test_nthiness.rb +73 -6
  163. data/test/css/test_parser.rb +184 -39
  164. data/test/css/test_tokenizer.rb +72 -19
  165. data/test/css/test_xpath_visitor.rb +44 -2
  166. data/test/decorators/test_slop.rb +20 -0
  167. data/test/files/2ch.html +108 -0
  168. data/test/files/GH_1042.html +18 -0
  169. data/test/files/address_book.rlx +12 -0
  170. data/test/files/address_book.xml +10 -0
  171. data/test/files/atom.xml +344 -0
  172. data/test/files/bar/bar.xsd +4 -0
  173. data/test/files/bogus.xml +0 -0
  174. data/test/files/dont_hurt_em_why.xml +422 -0
  175. data/test/files/encoding.html +82 -0
  176. data/test/files/encoding.xhtml +84 -0
  177. data/test/files/exslt.xml +8 -0
  178. data/test/files/exslt.xslt +35 -0
  179. data/test/files/foo/foo.xsd +4 -0
  180. data/test/files/metacharset.html +10 -0
  181. data/test/files/namespace_pressure_test.xml +1684 -0
  182. data/test/files/noencoding.html +47 -0
  183. data/test/files/po.xml +32 -0
  184. data/test/files/po.xsd +66 -0
  185. data/test/files/saml/saml20assertion_schema.xsd +283 -0
  186. data/test/files/saml/saml20protocol_schema.xsd +302 -0
  187. data/test/files/saml/xenc_schema.xsd +146 -0
  188. data/test/files/saml/xmldsig_schema.xsd +318 -0
  189. data/test/files/shift_jis.html +10 -0
  190. data/test/files/shift_jis.xml +5 -0
  191. data/test/files/shift_jis_no_charset.html +9 -0
  192. data/test/files/slow-xpath.xml +25509 -0
  193. data/test/files/snuggles.xml +3 -0
  194. data/test/files/staff.dtd +10 -0
  195. data/test/files/test_document_url/bar.xml +2 -0
  196. data/test/files/test_document_url/document.dtd +4 -0
  197. data/test/files/test_document_url/document.xml +6 -0
  198. data/test/files/tlm.html +2 -1
  199. data/test/files/to_be_xincluded.xml +2 -0
  200. data/test/files/valid_bar.xml +2 -0
  201. data/test/files/xinclude.xml +4 -0
  202. data/test/helper.rb +124 -13
  203. data/test/html/sax/test_parser.rb +118 -4
  204. data/test/html/sax/test_parser_context.rb +46 -0
  205. data/test/html/sax/test_push_parser.rb +87 -0
  206. data/test/html/test_builder.rb +94 -8
  207. data/test/html/test_document.rb +626 -11
  208. data/test/html/test_document_encoding.rb +145 -0
  209. data/test/html/test_document_fragment.rb +301 -0
  210. data/test/html/test_element_description.rb +105 -0
  211. data/test/html/test_named_characters.rb +14 -0
  212. data/test/html/test_node.rb +212 -0
  213. data/test/html/test_node_encoding.rb +85 -0
  214. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +14 -0
  215. data/test/namespaces/test_namespaces_aliased_default.rb +24 -0
  216. data/test/namespaces/test_namespaces_in_builder_doc.rb +75 -0
  217. data/test/namespaces/test_namespaces_in_cloned_doc.rb +31 -0
  218. data/test/namespaces/test_namespaces_in_created_doc.rb +75 -0
  219. data/test/namespaces/test_namespaces_in_parsed_doc.rb +80 -0
  220. data/test/namespaces/test_namespaces_preservation.rb +31 -0
  221. data/test/test_convert_xpath.rb +2 -47
  222. data/test/test_css_cache.rb +45 -0
  223. data/test/test_encoding_handler.rb +48 -0
  224. data/test/test_memory_leak.rb +156 -0
  225. data/test/test_nokogiri.rb +103 -1
  226. data/test/test_soap4r_sax.rb +52 -0
  227. data/test/test_xslt_transforms.rb +293 -8
  228. data/test/xml/node/test_save_options.rb +28 -0
  229. data/test/xml/node/test_subclass.rb +44 -0
  230. data/test/xml/sax/test_parser.rb +309 -8
  231. data/test/xml/sax/test_parser_context.rb +115 -0
  232. data/test/xml/sax/test_push_parser.rb +157 -0
  233. data/test/xml/test_attr.rb +67 -0
  234. data/test/xml/test_attribute_decl.rb +86 -0
  235. data/test/xml/test_builder.rb +327 -2
  236. data/test/xml/test_c14n.rb +180 -0
  237. data/test/xml/test_cdata.rb +32 -2
  238. data/test/xml/test_comment.rb +40 -0
  239. data/test/xml/test_document.rb +846 -35
  240. data/test/xml/test_document_encoding.rb +31 -0
  241. data/test/xml/test_document_fragment.rb +271 -0
  242. data/test/xml/test_dtd.rb +153 -9
  243. data/test/xml/test_dtd_encoding.rb +31 -0
  244. data/test/xml/test_element_content.rb +56 -0
  245. data/test/xml/test_element_decl.rb +73 -0
  246. data/test/xml/test_entity_decl.rb +122 -0
  247. data/test/xml/test_entity_reference.rb +251 -0
  248. data/test/xml/test_namespace.rb +96 -0
  249. data/test/xml/test_node.rb +1126 -105
  250. data/test/xml/test_node_attributes.rb +115 -0
  251. data/test/xml/test_node_encoding.rb +69 -0
  252. data/test/xml/test_node_inheritance.rb +32 -0
  253. data/test/xml/test_node_reparenting.rb +549 -0
  254. data/test/xml/test_node_set.rb +668 -9
  255. data/test/xml/test_parse_options.rb +64 -0
  256. data/test/xml/test_processing_instruction.rb +30 -0
  257. data/test/xml/test_reader.rb +589 -0
  258. data/test/xml/test_reader_encoding.rb +134 -0
  259. data/test/xml/test_relax_ng.rb +60 -0
  260. data/test/xml/test_schema.rb +142 -0
  261. data/test/xml/test_syntax_error.rb +30 -0
  262. data/test/xml/test_text.rb +49 -2
  263. data/test/xml/test_unparented_node.rb +440 -0
  264. data/test/xml/test_xinclude.rb +83 -0
  265. data/test/xml/test_xpath.rb +445 -0
  266. data/test/xslt/test_custom_functions.rb +133 -0
  267. data/test/xslt/test_exception_handling.rb +37 -0
  268. data/test_all +107 -0
  269. metadata +459 -115
  270. data/History.txt +0 -6
  271. data/README.ja.txt +0 -86
  272. data/README.txt +0 -87
  273. data/ext/nokogiri/html_sax_parser.c +0 -32
  274. data/ext/nokogiri/html_sax_parser.h +0 -11
  275. data/ext/nokogiri/native.c +0 -40
  276. data/ext/nokogiri/native.h +0 -51
  277. data/ext/nokogiri/xml_xpath.c +0 -46
  278. data/ext/nokogiri/xml_xpath.h +0 -11
  279. data/lib/nokogiri/css/generated_parser.rb +0 -653
  280. data/lib/nokogiri/css/generated_tokenizer.rb +0 -159
  281. data/lib/nokogiri/decorators/hpricot/node.rb +0 -58
  282. data/lib/nokogiri/decorators/hpricot/node_set.rb +0 -14
  283. data/lib/nokogiri/decorators/hpricot/xpath_visitor.rb +0 -17
  284. data/lib/nokogiri/decorators/hpricot.rb +0 -3
  285. data/lib/nokogiri/decorators.rb +0 -1
  286. data/lib/nokogiri/hpricot.rb +0 -47
  287. data/lib/nokogiri/xml/after_handler.rb +0 -18
  288. data/lib/nokogiri/xml/before_handler.rb +0 -32
  289. data/lib/nokogiri/xml/element.rb +0 -6
  290. data/lib/nokogiri/xml/entity_declaration.rb +0 -9
  291. data/nokogiri.gemspec +0 -34
  292. data/test/hpricot/files/basic.xhtml +0 -17
  293. data/test/hpricot/files/boingboing.html +0 -2266
  294. data/test/hpricot/files/cy0.html +0 -3653
  295. data/test/hpricot/files/immob.html +0 -400
  296. data/test/hpricot/files/pace_application.html +0 -1320
  297. data/test/hpricot/files/tenderlove.html +0 -16
  298. data/test/hpricot/files/uswebgen.html +0 -220
  299. data/test/hpricot/files/utf8.html +0 -1054
  300. data/test/hpricot/files/week9.html +0 -1723
  301. data/test/hpricot/files/why.xml +0 -19
  302. data/test/hpricot/load_files.rb +0 -7
  303. data/test/hpricot/test_alter.rb +0 -67
  304. data/test/hpricot/test_builder.rb +0 -27
  305. data/test/hpricot/test_parser.rb +0 -423
  306. data/test/hpricot/test_paths.rb +0 -15
  307. data/test/hpricot/test_preserved.rb +0 -78
  308. data/test/hpricot/test_xml.rb +0 -30
  309. data/test/test_reader.rb +0 -222
@@ -0,0 +1,48 @@
1
+ #include <xml_document_fragment.h>
2
+
3
+ /*
4
+ * call-seq:
5
+ * new(document)
6
+ *
7
+ * Create a new DocumentFragment element on the +document+
8
+ */
9
+ static VALUE new(int argc, VALUE *argv, VALUE klass)
10
+ {
11
+ xmlDocPtr xml_doc;
12
+ xmlNodePtr node;
13
+ VALUE document;
14
+ VALUE rest;
15
+ VALUE rb_node;
16
+
17
+ rb_scan_args(argc, argv, "1*", &document, &rest);
18
+
19
+ Data_Get_Struct(document, xmlDoc, xml_doc);
20
+
21
+ node = xmlNewDocFragment(xml_doc->doc);
22
+
23
+ nokogiri_root_node(node);
24
+
25
+ rb_node = Nokogiri_wrap_xml_node(klass, node);
26
+ rb_obj_call_init(rb_node, argc, argv);
27
+
28
+ if(rb_block_given_p()) rb_yield(rb_node);
29
+
30
+ return rb_node;
31
+ }
32
+
33
+ VALUE cNokogiriXmlDocumentFragment;
34
+ void init_xml_document_fragment()
35
+ {
36
+ VALUE nokogiri = rb_define_module("Nokogiri");
37
+ VALUE xml = rb_define_module_under(nokogiri, "XML");
38
+ VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
39
+
40
+ /*
41
+ * DocumentFragment represents a DocumentFragment node in an xml document.
42
+ */
43
+ VALUE klass = rb_define_class_under(xml, "DocumentFragment", node);
44
+
45
+ cNokogiriXmlDocumentFragment = klass;
46
+
47
+ rb_define_singleton_method(klass, "new", new, -1);
48
+ }
@@ -0,0 +1,10 @@
1
+ #ifndef NOKOGIRI_XML_DOCUMENT_FRAGMENT
2
+ #define NOKOGIRI_XML_DOCUMENT_FRAGMENT
3
+
4
+ #include <nokogiri.h>
5
+
6
+ void init_xml_document_fragment();
7
+
8
+ extern VALUE cNokogiriXmlDocumentFragment;
9
+ #endif
10
+
@@ -6,22 +6,25 @@ static void notation_copier(void *payload, void *data, xmlChar *name)
6
6
  VALUE klass = rb_const_get(mNokogiriXml, rb_intern("Notation"));
7
7
 
8
8
  xmlNotationPtr c_notation = (xmlNotationPtr)payload;
9
+ VALUE notation;
10
+ VALUE argv[3];
11
+ argv[0] = (c_notation->name ? NOKOGIRI_STR_NEW2(c_notation->name) : Qnil);
12
+ argv[1] = (c_notation->PublicID ? NOKOGIRI_STR_NEW2(c_notation->PublicID) : Qnil);
13
+ argv[2] = (c_notation->SystemID ? NOKOGIRI_STR_NEW2(c_notation->SystemID) : Qnil);
9
14
 
10
- VALUE notation = rb_funcall(klass, rb_intern("new"), 3,
11
- c_notation->name ? rb_str_new2((const char *)c_notation->name) : Qnil,
12
- c_notation->PublicID ? rb_str_new2((const char *)c_notation->PublicID) : Qnil,
13
- c_notation->SystemID ? rb_str_new2((const char *)c_notation->SystemID) : Qnil);
15
+ notation = rb_class_new_instance(3, argv, klass);
14
16
 
15
- rb_hash_aset(hash, rb_str_new2((const char *)name), notation);
17
+ rb_hash_aset(hash, NOKOGIRI_STR_NEW2(name),notation);
16
18
  }
17
19
 
18
- static void element_copier(void *payload, void *data, xmlChar *name)
20
+ static void element_copier(void *_payload, void *data, xmlChar *name)
19
21
  {
20
22
  VALUE hash = (VALUE)data;
23
+ xmlNodePtr payload = (xmlNodePtr)_payload;
21
24
 
22
- VALUE element = Nokogiri_wrap_xml_node((xmlNodePtr)payload);
25
+ VALUE element = Nokogiri_wrap_xml_node(Qnil, payload);
23
26
 
24
- rb_hash_aset(hash, rb_str_new2((const char *)name), element);
27
+ rb_hash_aset(hash, NOKOGIRI_STR_NEW2(name), element);
25
28
  }
26
29
 
27
30
  /*
@@ -33,11 +36,13 @@ static void element_copier(void *payload, void *data, xmlChar *name)
33
36
  static VALUE entities(VALUE self)
34
37
  {
35
38
  xmlDtdPtr dtd;
39
+ VALUE hash;
40
+
36
41
  Data_Get_Struct(self, xmlDtd, dtd);
37
42
 
38
43
  if(!dtd->entities) return Qnil;
39
44
 
40
- VALUE hash = rb_hash_new();
45
+ hash = rb_hash_new();
41
46
 
42
47
  xmlHashScan((xmlHashTablePtr)dtd->entities, element_copier, (void *)hash);
43
48
 
@@ -46,40 +51,44 @@ static VALUE entities(VALUE self)
46
51
 
47
52
  /*
48
53
  * call-seq:
49
- * attributes
54
+ * notations
50
55
  *
51
- * Get a hash of the attributes for this DTD.
56
+ * Get a hash of the notations for this DTD.
52
57
  */
53
- static VALUE attributes(VALUE self)
58
+ static VALUE notations(VALUE self)
54
59
  {
55
60
  xmlDtdPtr dtd;
61
+ VALUE hash;
62
+
56
63
  Data_Get_Struct(self, xmlDtd, dtd);
57
64
 
58
- if(!dtd->attributes) return Qnil;
65
+ if(!dtd->notations) return Qnil;
59
66
 
60
- VALUE hash = rb_hash_new();
67
+ hash = rb_hash_new();
61
68
 
62
- xmlHashScan((xmlHashTablePtr)dtd->attributes, element_copier, (void *)hash);
69
+ xmlHashScan((xmlHashTablePtr)dtd->notations, notation_copier, (void *)hash);
63
70
 
64
71
  return hash;
65
72
  }
66
73
 
67
74
  /*
68
75
  * call-seq:
69
- * notations
76
+ * attributes
70
77
  *
71
- * Get a hash of the notations for this DTD.
78
+ * Get a hash of the attributes for this DTD.
72
79
  */
73
- static VALUE notations(VALUE self)
80
+ static VALUE attributes(VALUE self)
74
81
  {
75
82
  xmlDtdPtr dtd;
83
+ VALUE hash;
84
+
76
85
  Data_Get_Struct(self, xmlDtd, dtd);
77
86
 
78
- if(!dtd->notations) return Qnil;
87
+ hash = rb_hash_new();
79
88
 
80
- VALUE hash = rb_hash_new();
89
+ if(!dtd->attributes) return hash;
81
90
 
82
- xmlHashScan((xmlHashTablePtr)dtd->notations, notation_copier, (void *)hash);
91
+ xmlHashScan((xmlHashTablePtr)dtd->attributes, element_copier, (void *)hash);
83
92
 
84
93
  return hash;
85
94
  }
@@ -93,25 +102,101 @@ static VALUE notations(VALUE self)
93
102
  static VALUE elements(VALUE self)
94
103
  {
95
104
  xmlDtdPtr dtd;
105
+ VALUE hash;
106
+
96
107
  Data_Get_Struct(self, xmlDtd, dtd);
97
108
 
98
109
  if(!dtd->elements) return Qnil;
99
110
 
100
- VALUE hash = rb_hash_new();
111
+ hash = rb_hash_new();
101
112
 
102
113
  xmlHashScan((xmlHashTablePtr)dtd->elements, element_copier, (void *)hash);
103
114
 
104
115
  return hash;
105
116
  }
106
117
 
118
+ /*
119
+ * call-seq:
120
+ * validate(document)
121
+ *
122
+ * Validate +document+ returning a list of errors
123
+ */
124
+ static VALUE validate(VALUE self, VALUE document)
125
+ {
126
+ xmlDocPtr doc;
127
+ xmlDtdPtr dtd;
128
+ xmlValidCtxtPtr ctxt;
129
+ VALUE error_list;
130
+
131
+ Data_Get_Struct(self, xmlDtd, dtd);
132
+ Data_Get_Struct(document, xmlDoc, doc);
133
+ error_list = rb_ary_new();
134
+
135
+ ctxt = xmlNewValidCtxt();
136
+
137
+ xmlSetStructuredErrorFunc((void *)error_list, Nokogiri_error_array_pusher);
138
+
139
+ xmlValidateDtd(ctxt, doc, dtd);
140
+
141
+ xmlSetStructuredErrorFunc(NULL, NULL);
142
+
143
+ xmlFreeValidCtxt(ctxt);
144
+
145
+ return error_list;
146
+ }
147
+
148
+ /*
149
+ * call-seq:
150
+ * system_id
151
+ *
152
+ * Get the System ID for this DTD
153
+ */
154
+ static VALUE system_id(VALUE self)
155
+ {
156
+ xmlDtdPtr dtd;
157
+ Data_Get_Struct(self, xmlDtd, dtd);
158
+
159
+ if(!dtd->SystemID) return Qnil;
160
+
161
+ return NOKOGIRI_STR_NEW2(dtd->SystemID);
162
+ }
163
+
164
+ /*
165
+ * call-seq:
166
+ * external_id
167
+ *
168
+ * Get the External ID for this DTD
169
+ */
170
+ static VALUE external_id(VALUE self)
171
+ {
172
+ xmlDtdPtr dtd;
173
+ Data_Get_Struct(self, xmlDtd, dtd);
174
+
175
+ if(!dtd->ExternalID) return Qnil;
176
+
177
+ return NOKOGIRI_STR_NEW2(dtd->ExternalID);
178
+ }
179
+
180
+ VALUE cNokogiriXmlDtd;
181
+
107
182
  void init_xml_dtd()
108
183
  {
109
184
  VALUE nokogiri = rb_define_module("Nokogiri");
110
185
  VALUE xml = rb_define_module_under(nokogiri, "XML");
111
- VALUE klass = rb_define_class_under(xml, "DTD", cNokogiriXmlNode);
186
+ VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
187
+
188
+ /*
189
+ * Nokogiri::XML::DTD wraps DTD nodes in an XML document
190
+ */
191
+ VALUE klass = rb_define_class_under(xml, "DTD", node);
192
+
193
+ cNokogiriXmlDtd = klass;
112
194
 
113
195
  rb_define_method(klass, "notations", notations, 0);
114
196
  rb_define_method(klass, "elements", elements, 0);
115
- rb_define_method(klass, "attributes", attributes, 0);
116
197
  rb_define_method(klass, "entities", entities, 0);
198
+ rb_define_method(klass, "validate", validate, 1);
199
+ rb_define_method(klass, "attributes", attributes, 0);
200
+ rb_define_method(klass, "system_id", system_id, 0);
201
+ rb_define_method(klass, "external_id", external_id, 0);
117
202
  }
@@ -1,7 +1,9 @@
1
1
  #ifndef NOKOGIRI_XML_DTD
2
2
  #define NOKOGIRI_XML_DTD
3
3
 
4
- #include <native.h>
4
+ #include <nokogiri.h>
5
+
6
+ extern VALUE cNokogiriXmlDtd;
5
7
 
6
8
  void init_xml_dtd();
7
9
 
@@ -0,0 +1,123 @@
1
+ #include <xml_element_content.h>
2
+
3
+ VALUE cNokogiriXmlElementContent;
4
+
5
+ /*
6
+ * call-seq:
7
+ * name
8
+ *
9
+ * Get the require element +name+
10
+ */
11
+ static VALUE get_name(VALUE self)
12
+ {
13
+ xmlElementContentPtr elem;
14
+ Data_Get_Struct(self, xmlElementContent, elem);
15
+
16
+ if(!elem->name) return Qnil;
17
+ return NOKOGIRI_STR_NEW2(elem->name);
18
+ }
19
+
20
+ /*
21
+ * call-seq:
22
+ * type
23
+ *
24
+ * Get the element content +type+. Possible values are PCDATA, ELEMENT, SEQ,
25
+ * or OR.
26
+ */
27
+ static VALUE get_type(VALUE self)
28
+ {
29
+ xmlElementContentPtr elem;
30
+ Data_Get_Struct(self, xmlElementContent, elem);
31
+
32
+ return INT2NUM((long)elem->type);
33
+ }
34
+
35
+ /*
36
+ * call-seq:
37
+ * c1
38
+ *
39
+ * Get the first child.
40
+ */
41
+ static VALUE get_c1(VALUE self)
42
+ {
43
+ xmlElementContentPtr elem;
44
+ Data_Get_Struct(self, xmlElementContent, elem);
45
+
46
+ if(!elem->c1) return Qnil;
47
+ return Nokogiri_wrap_element_content(rb_iv_get(self, "@document"), elem->c1);
48
+ }
49
+
50
+ /*
51
+ * call-seq:
52
+ * c2
53
+ *
54
+ * Get the first child.
55
+ */
56
+ static VALUE get_c2(VALUE self)
57
+ {
58
+ xmlElementContentPtr elem;
59
+ Data_Get_Struct(self, xmlElementContent, elem);
60
+
61
+ if(!elem->c2) return Qnil;
62
+ return Nokogiri_wrap_element_content(rb_iv_get(self, "@document"), elem->c2);
63
+ }
64
+
65
+ /*
66
+ * call-seq:
67
+ * occur
68
+ *
69
+ * Get the element content +occur+ flag. Possible values are ONCE, OPT, MULT
70
+ * or PLUS.
71
+ */
72
+ static VALUE get_occur(VALUE self)
73
+ {
74
+ xmlElementContentPtr elem;
75
+ Data_Get_Struct(self, xmlElementContent, elem);
76
+
77
+ return INT2NUM((long)elem->ocur);
78
+ }
79
+
80
+ /*
81
+ * call-seq:
82
+ * prefix
83
+ *
84
+ * Get the element content namespace +prefix+.
85
+ */
86
+ static VALUE get_prefix(VALUE self)
87
+ {
88
+ xmlElementContentPtr elem;
89
+ Data_Get_Struct(self, xmlElementContent, elem);
90
+
91
+ if(!elem->prefix) return Qnil;
92
+
93
+ return NOKOGIRI_STR_NEW2(elem->prefix);
94
+ }
95
+
96
+ VALUE Nokogiri_wrap_element_content(VALUE doc, xmlElementContentPtr element)
97
+ {
98
+ VALUE elem = Data_Wrap_Struct(cNokogiriXmlElementContent, 0, 0, element);
99
+
100
+ /* Setting the document is necessary so that this does not get GC'd until */
101
+ /* the document is GC'd */
102
+ rb_iv_set(elem, "@document", doc);
103
+
104
+ return elem;
105
+ }
106
+
107
+ void init_xml_element_content()
108
+ {
109
+ VALUE nokogiri = rb_define_module("Nokogiri");
110
+ VALUE xml = rb_define_module_under(nokogiri, "XML");
111
+
112
+ VALUE klass = rb_define_class_under(xml, "ElementContent", rb_cObject);
113
+
114
+ cNokogiriXmlElementContent = klass;
115
+
116
+ rb_define_method(klass, "name", get_name, 0);
117
+ rb_define_method(klass, "type", get_type, 0);
118
+ rb_define_method(klass, "occur", get_occur, 0);
119
+ rb_define_method(klass, "prefix", get_prefix, 0);
120
+
121
+ rb_define_private_method(klass, "c1", get_c1, 0);
122
+ rb_define_private_method(klass, "c2", get_c2, 0);
123
+ }
@@ -0,0 +1,10 @@
1
+ #ifndef NOKOGIRI_XML_ELEMENT_CONTENT
2
+ #define NOKOGIRI_XML_ELEMENT_CONTENT
3
+
4
+ #include <nokogiri.h>
5
+
6
+
7
+ VALUE Nokogiri_wrap_element_content(VALUE doc, xmlElementContentPtr element);
8
+ void init_xml_element_content();
9
+
10
+ #endif
@@ -0,0 +1,69 @@
1
+ #include <xml_element_decl.h>
2
+
3
+ static ID id_document;
4
+
5
+ /*
6
+ * call-seq:
7
+ * element_type
8
+ *
9
+ * The element_type
10
+ */
11
+ static VALUE element_type(VALUE self)
12
+ {
13
+ xmlElementPtr node;
14
+ Data_Get_Struct(self, xmlElement, node);
15
+ return INT2NUM((long)node->etype);
16
+ }
17
+
18
+ /*
19
+ * call-seq:
20
+ * content
21
+ *
22
+ * The allowed content for this ElementDecl
23
+ */
24
+ static VALUE content(VALUE self)
25
+ {
26
+ xmlElementPtr node;
27
+ Data_Get_Struct(self, xmlElement, node);
28
+
29
+ if(!node->content) return Qnil;
30
+
31
+ return Nokogiri_wrap_element_content(
32
+ rb_funcall(self, id_document, 0),
33
+ node->content
34
+ );
35
+ }
36
+
37
+ /*
38
+ * call-seq:
39
+ * prefix
40
+ *
41
+ * The namespace prefix for this ElementDecl
42
+ */
43
+ static VALUE prefix(VALUE self)
44
+ {
45
+ xmlElementPtr node;
46
+ Data_Get_Struct(self, xmlElement, node);
47
+
48
+ if(!node->prefix) return Qnil;
49
+
50
+ return NOKOGIRI_STR_NEW2(node->prefix);
51
+ }
52
+
53
+ VALUE cNokogiriXmlElementDecl;
54
+
55
+ void init_xml_element_decl()
56
+ {
57
+ VALUE nokogiri = rb_define_module("Nokogiri");
58
+ VALUE xml = rb_define_module_under(nokogiri, "XML");
59
+ VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
60
+ VALUE klass = rb_define_class_under(xml, "ElementDecl", node);
61
+
62
+ cNokogiriXmlElementDecl = klass;
63
+
64
+ rb_define_method(klass, "element_type", element_type, 0);
65
+ rb_define_method(klass, "content", content, 0);
66
+ rb_define_method(klass, "prefix", prefix, 0);
67
+
68
+ id_document = rb_intern("document");
69
+ }
@@ -0,0 +1,9 @@
1
+ #ifndef NOKOGIRI_XML_ELEMENT_DECL
2
+ #define NOKOGIRI_XML_ELEMENT_DECL
3
+
4
+ #include <nokogiri.h>
5
+
6
+ void init_xml_element_decl();
7
+
8
+ extern VALUE cNokogiriXmlElementDecl;
9
+ #endif
@@ -0,0 +1,79 @@
1
+ #include <xml_encoding_handler.h>
2
+
3
+ /*
4
+ * call-seq: Nokogiri::EncodingHandler.[](name)
5
+ *
6
+ * Get the encoding handler for +name+
7
+ */
8
+ static VALUE get(VALUE klass, VALUE key)
9
+ {
10
+ xmlCharEncodingHandlerPtr handler;
11
+
12
+ handler = xmlFindCharEncodingHandler(StringValueCStr(key));
13
+ if(handler)
14
+ return Data_Wrap_Struct(klass, NULL, NULL, handler);
15
+
16
+ return Qnil;
17
+ }
18
+
19
+ /*
20
+ * call-seq: Nokogiri::EncodingHandler.delete(name)
21
+ *
22
+ * Delete the encoding alias named +name+
23
+ */
24
+ static VALUE delete(VALUE klass, VALUE name)
25
+ {
26
+ if(xmlDelEncodingAlias(StringValueCStr(name))) return Qnil;
27
+
28
+ return Qtrue;
29
+ }
30
+
31
+ /*
32
+ * call-seq: Nokogiri::EncodingHandler.alias(from, to)
33
+ *
34
+ * Alias encoding handler with name +from+ to name +to+
35
+ */
36
+ static VALUE alias(VALUE klass, VALUE from, VALUE to)
37
+ {
38
+ xmlAddEncodingAlias(StringValueCStr(from), StringValueCStr(to));
39
+
40
+ return to;
41
+ }
42
+
43
+ /*
44
+ * call-seq: Nokogiri::EncodingHandler.clear_aliases!
45
+ *
46
+ * Remove all encoding aliases.
47
+ */
48
+ static VALUE clear_aliases(VALUE klass)
49
+ {
50
+ xmlCleanupEncodingAliases();
51
+
52
+ return klass;
53
+ }
54
+
55
+ /*
56
+ * call-seq: name
57
+ *
58
+ * Get the name of this EncodingHandler
59
+ */
60
+ static VALUE name(VALUE self)
61
+ {
62
+ xmlCharEncodingHandlerPtr handler;
63
+
64
+ Data_Get_Struct(self, xmlCharEncodingHandler, handler);
65
+
66
+ return NOKOGIRI_STR_NEW2(handler->name);
67
+ }
68
+
69
+ void init_xml_encoding_handler()
70
+ {
71
+ VALUE nokogiri = rb_define_module("Nokogiri");
72
+ VALUE klass = rb_define_class_under(nokogiri, "EncodingHandler", rb_cObject);
73
+
74
+ rb_define_singleton_method(klass, "[]", get, 1);
75
+ rb_define_singleton_method(klass, "delete", delete, 1);
76
+ rb_define_singleton_method(klass, "alias", alias, 2);
77
+ rb_define_singleton_method(klass, "clear_aliases!", clear_aliases, 0);
78
+ rb_define_method(klass, "name", name, 0);
79
+ }
@@ -0,0 +1,8 @@
1
+ #ifndef NOKOGIRI_XML_ENCODING_HANDLER
2
+ #define NOKOGIRI_XML_ENCODING_HANDLER
3
+
4
+ #include <nokogiri.h>
5
+
6
+ void init_xml_encoding_handler();
7
+
8
+ #endif
@@ -0,0 +1,110 @@
1
+ #include <xml_entity_decl.h>
2
+
3
+ /*
4
+ * call-seq:
5
+ * original_content
6
+ *
7
+ * Get the original_content before ref substitution
8
+ */
9
+ static VALUE original_content(VALUE self)
10
+ {
11
+ xmlEntityPtr node;
12
+ Data_Get_Struct(self, xmlEntity, node);
13
+
14
+ if(!node->orig) return Qnil;
15
+
16
+ return NOKOGIRI_STR_NEW2(node->orig);
17
+ }
18
+
19
+ /*
20
+ * call-seq:
21
+ * content
22
+ *
23
+ * Get the content
24
+ */
25
+ static VALUE get_content(VALUE self)
26
+ {
27
+ xmlEntityPtr node;
28
+ Data_Get_Struct(self, xmlEntity, node);
29
+
30
+ if(!node->content) return Qnil;
31
+
32
+ return NOKOGIRI_STR_NEW(node->content, node->length);
33
+ }
34
+
35
+ /*
36
+ * call-seq:
37
+ * entity_type
38
+ *
39
+ * Get the entity type
40
+ */
41
+ static VALUE entity_type(VALUE self)
42
+ {
43
+ xmlEntityPtr node;
44
+ Data_Get_Struct(self, xmlEntity, node);
45
+
46
+ return INT2NUM((int)node->etype);
47
+ }
48
+
49
+ /*
50
+ * call-seq:
51
+ * external_id
52
+ *
53
+ * Get the external identifier for PUBLIC
54
+ */
55
+ static VALUE external_id(VALUE self)
56
+ {
57
+ xmlEntityPtr node;
58
+ Data_Get_Struct(self, xmlEntity, node);
59
+
60
+ if(!node->ExternalID) return Qnil;
61
+
62
+ return NOKOGIRI_STR_NEW2(node->ExternalID);
63
+ }
64
+
65
+ /*
66
+ * call-seq:
67
+ * system_id
68
+ *
69
+ * Get the URI for a SYSTEM or PUBLIC Entity
70
+ */
71
+ static VALUE system_id(VALUE self)
72
+ {
73
+ xmlEntityPtr node;
74
+ Data_Get_Struct(self, xmlEntity, node);
75
+
76
+ if(!node->SystemID) return Qnil;
77
+
78
+ return NOKOGIRI_STR_NEW2(node->SystemID);
79
+ }
80
+
81
+ VALUE cNokogiriXmlEntityDecl;
82
+
83
+ void init_xml_entity_decl()
84
+ {
85
+ VALUE nokogiri = rb_define_module("Nokogiri");
86
+ VALUE xml = rb_define_module_under(nokogiri, "XML");
87
+ VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
88
+ VALUE klass = rb_define_class_under(xml, "EntityDecl", node);
89
+
90
+ cNokogiriXmlEntityDecl = klass;
91
+
92
+ rb_define_method(klass, "original_content", original_content, 0);
93
+ rb_define_method(klass, "content", get_content, 0);
94
+ rb_define_method(klass, "entity_type", entity_type, 0);
95
+ rb_define_method(klass, "external_id", external_id, 0);
96
+ rb_define_method(klass, "system_id", system_id, 0);
97
+
98
+ rb_const_set(cNokogiriXmlEntityDecl, rb_intern("INTERNAL_GENERAL"),
99
+ INT2NUM(XML_INTERNAL_GENERAL_ENTITY));
100
+ rb_const_set(cNokogiriXmlEntityDecl, rb_intern("EXTERNAL_GENERAL_PARSED"),
101
+ INT2NUM(XML_EXTERNAL_GENERAL_PARSED_ENTITY));
102
+ rb_const_set(cNokogiriXmlEntityDecl, rb_intern("EXTERNAL_GENERAL_UNPARSED"),
103
+ INT2NUM(XML_EXTERNAL_GENERAL_UNPARSED_ENTITY));
104
+ rb_const_set(cNokogiriXmlEntityDecl, rb_intern("INTERNAL_PARAMETER"),
105
+ INT2NUM(XML_INTERNAL_PARAMETER_ENTITY));
106
+ rb_const_set(cNokogiriXmlEntityDecl, rb_intern("EXTERNAL_PARAMETER"),
107
+ INT2NUM(XML_EXTERNAL_PARAMETER_ENTITY));
108
+ rb_const_set(cNokogiriXmlEntityDecl, rb_intern("INTERNAL_PREDEFINED"),
109
+ INT2NUM(XML_INTERNAL_PREDEFINED_ENTITY));
110
+ }
@@ -0,0 +1,10 @@
1
+ #ifndef NOKOGIRI_XML_ENTITY_DECL
2
+ #define NOKOGIRI_XML_ENTITY_DECL
3
+
4
+ #include <nokogiri.h>
5
+
6
+ void init_xml_entity_decl();
7
+
8
+ extern VALUE cNokogiriXmlEntityDecl;
9
+ #endif
10
+