rubyjedi-nokogiri_java 1.4.0.20100513161003-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. data/.autotest +26 -0
  2. data/CHANGELOG.ja.rdoc +330 -0
  3. data/CHANGELOG.rdoc +341 -0
  4. data/Manifest.txt +277 -0
  5. data/README.ja.rdoc +105 -0
  6. data/README.rdoc +125 -0
  7. data/Rakefile +307 -0
  8. data/bin/nokogiri +49 -0
  9. data/deps.rip +5 -0
  10. data/ext/nokogiri/extconf.rb +149 -0
  11. data/ext/nokogiri/html_document.c +145 -0
  12. data/ext/nokogiri/html_document.h +10 -0
  13. data/ext/nokogiri/html_element_description.c +272 -0
  14. data/ext/nokogiri/html_element_description.h +10 -0
  15. data/ext/nokogiri/html_entity_lookup.c +32 -0
  16. data/ext/nokogiri/html_entity_lookup.h +8 -0
  17. data/ext/nokogiri/html_sax_parser_context.c +92 -0
  18. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  19. data/ext/nokogiri/nokogiri.c +96 -0
  20. data/ext/nokogiri/nokogiri.h +148 -0
  21. data/ext/nokogiri/xml_attr.c +92 -0
  22. data/ext/nokogiri/xml_attr.h +9 -0
  23. data/ext/nokogiri/xml_attribute_decl.c +67 -0
  24. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  25. data/ext/nokogiri/xml_cdata.c +54 -0
  26. data/ext/nokogiri/xml_cdata.h +9 -0
  27. data/ext/nokogiri/xml_comment.c +52 -0
  28. data/ext/nokogiri/xml_comment.h +9 -0
  29. data/ext/nokogiri/xml_document.c +386 -0
  30. data/ext/nokogiri/xml_document.h +24 -0
  31. data/ext/nokogiri/xml_document_fragment.c +46 -0
  32. data/ext/nokogiri/xml_document_fragment.h +10 -0
  33. data/ext/nokogiri/xml_dtd.c +192 -0
  34. data/ext/nokogiri/xml_dtd.h +10 -0
  35. data/ext/nokogiri/xml_element_content.c +123 -0
  36. data/ext/nokogiri/xml_element_content.h +10 -0
  37. data/ext/nokogiri/xml_element_decl.c +69 -0
  38. data/ext/nokogiri/xml_element_decl.h +9 -0
  39. data/ext/nokogiri/xml_encoding_handler.c +79 -0
  40. data/ext/nokogiri/xml_encoding_handler.h +8 -0
  41. data/ext/nokogiri/xml_entity_decl.c +97 -0
  42. data/ext/nokogiri/xml_entity_decl.h +10 -0
  43. data/ext/nokogiri/xml_entity_reference.c +50 -0
  44. data/ext/nokogiri/xml_entity_reference.h +9 -0
  45. data/ext/nokogiri/xml_io.c +31 -0
  46. data/ext/nokogiri/xml_io.h +11 -0
  47. data/ext/nokogiri/xml_namespace.c +82 -0
  48. data/ext/nokogiri/xml_namespace.h +13 -0
  49. data/ext/nokogiri/xml_node.c +1080 -0
  50. data/ext/nokogiri/xml_node.h +13 -0
  51. data/ext/nokogiri/xml_node_set.c +405 -0
  52. data/ext/nokogiri/xml_node_set.h +9 -0
  53. data/ext/nokogiri/xml_processing_instruction.c +54 -0
  54. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  55. data/ext/nokogiri/xml_reader.c +593 -0
  56. data/ext/nokogiri/xml_reader.h +10 -0
  57. data/ext/nokogiri/xml_relax_ng.c +159 -0
  58. data/ext/nokogiri/xml_relax_ng.h +9 -0
  59. data/ext/nokogiri/xml_sax_parser.c +283 -0
  60. data/ext/nokogiri/xml_sax_parser.h +43 -0
  61. data/ext/nokogiri/xml_sax_parser_context.c +157 -0
  62. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  63. data/ext/nokogiri/xml_sax_push_parser.c +114 -0
  64. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  65. data/ext/nokogiri/xml_schema.c +156 -0
  66. data/ext/nokogiri/xml_schema.h +9 -0
  67. data/ext/nokogiri/xml_syntax_error.c +52 -0
  68. data/ext/nokogiri/xml_syntax_error.h +13 -0
  69. data/ext/nokogiri/xml_text.c +48 -0
  70. data/ext/nokogiri/xml_text.h +9 -0
  71. data/ext/nokogiri/xml_xpath.c +53 -0
  72. data/ext/nokogiri/xml_xpath.h +11 -0
  73. data/ext/nokogiri/xml_xpath_context.c +239 -0
  74. data/ext/nokogiri/xml_xpath_context.h +9 -0
  75. data/ext/nokogiri/xslt_stylesheet.c +131 -0
  76. data/ext/nokogiri/xslt_stylesheet.h +9 -0
  77. data/lib/isorelax.jar +0 -0
  78. data/lib/jing.jar +0 -0
  79. data/lib/nekodtd.jar +0 -0
  80. data/lib/nekohtml.jar +0 -0
  81. data/lib/nokogiri.rb +123 -0
  82. data/lib/nokogiri/css.rb +25 -0
  83. data/lib/nokogiri/css/generated_parser.rb +659 -0
  84. data/lib/nokogiri/css/generated_tokenizer.rb +145 -0
  85. data/lib/nokogiri/css/node.rb +99 -0
  86. data/lib/nokogiri/css/parser.rb +82 -0
  87. data/lib/nokogiri/css/parser.y +230 -0
  88. data/lib/nokogiri/css/syntax_error.rb +7 -0
  89. data/lib/nokogiri/css/tokenizer.rb +7 -0
  90. data/lib/nokogiri/css/tokenizer.rex +55 -0
  91. data/lib/nokogiri/css/xpath_visitor.rb +164 -0
  92. data/lib/nokogiri/decorators/slop.rb +33 -0
  93. data/lib/nokogiri/ffi/encoding_handler.rb +42 -0
  94. data/lib/nokogiri/ffi/html/document.rb +28 -0
  95. data/lib/nokogiri/ffi/html/element_description.rb +81 -0
  96. data/lib/nokogiri/ffi/html/entity_lookup.rb +16 -0
  97. data/lib/nokogiri/ffi/html/sax/parser_context.rb +38 -0
  98. data/lib/nokogiri/ffi/io_callbacks.rb +42 -0
  99. data/lib/nokogiri/ffi/libxml.rb +372 -0
  100. data/lib/nokogiri/ffi/structs/common_node.rb +26 -0
  101. data/lib/nokogiri/ffi/structs/html_elem_desc.rb +24 -0
  102. data/lib/nokogiri/ffi/structs/html_entity_desc.rb +13 -0
  103. data/lib/nokogiri/ffi/structs/xml_alloc.rb +16 -0
  104. data/lib/nokogiri/ffi/structs/xml_attr.rb +19 -0
  105. data/lib/nokogiri/ffi/structs/xml_attribute.rb +27 -0
  106. data/lib/nokogiri/ffi/structs/xml_buffer.rb +16 -0
  107. data/lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb +11 -0
  108. data/lib/nokogiri/ffi/structs/xml_document.rb +108 -0
  109. data/lib/nokogiri/ffi/structs/xml_dtd.rb +28 -0
  110. data/lib/nokogiri/ffi/structs/xml_element.rb +26 -0
  111. data/lib/nokogiri/ffi/structs/xml_element_content.rb +17 -0
  112. data/lib/nokogiri/ffi/structs/xml_entity.rb +32 -0
  113. data/lib/nokogiri/ffi/structs/xml_enumeration.rb +12 -0
  114. data/lib/nokogiri/ffi/structs/xml_node.rb +28 -0
  115. data/lib/nokogiri/ffi/structs/xml_node_set.rb +53 -0
  116. data/lib/nokogiri/ffi/structs/xml_notation.rb +11 -0
  117. data/lib/nokogiri/ffi/structs/xml_ns.rb +15 -0
  118. data/lib/nokogiri/ffi/structs/xml_parser_context.rb +19 -0
  119. data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +14 -0
  120. data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +51 -0
  121. data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +124 -0
  122. data/lib/nokogiri/ffi/structs/xml_schema.rb +13 -0
  123. data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +31 -0
  124. data/lib/nokogiri/ffi/structs/xml_text_reader.rb +12 -0
  125. data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +37 -0
  126. data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +35 -0
  127. data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +20 -0
  128. data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +13 -0
  129. data/lib/nokogiri/ffi/xml/attr.rb +41 -0
  130. data/lib/nokogiri/ffi/xml/attribute_decl.rb +27 -0
  131. data/lib/nokogiri/ffi/xml/cdata.rb +19 -0
  132. data/lib/nokogiri/ffi/xml/comment.rb +18 -0
  133. data/lib/nokogiri/ffi/xml/document.rb +135 -0
  134. data/lib/nokogiri/ffi/xml/document_fragment.rb +21 -0
  135. data/lib/nokogiri/ffi/xml/dtd.rb +67 -0
  136. data/lib/nokogiri/ffi/xml/element_content.rb +43 -0
  137. data/lib/nokogiri/ffi/xml/element_decl.rb +19 -0
  138. data/lib/nokogiri/ffi/xml/entity_decl.rb +27 -0
  139. data/lib/nokogiri/ffi/xml/entity_reference.rb +19 -0
  140. data/lib/nokogiri/ffi/xml/namespace.rb +44 -0
  141. data/lib/nokogiri/ffi/xml/node.rb +465 -0
  142. data/lib/nokogiri/ffi/xml/node_set.rb +146 -0
  143. data/lib/nokogiri/ffi/xml/processing_instruction.rb +20 -0
  144. data/lib/nokogiri/ffi/xml/reader.rb +227 -0
  145. data/lib/nokogiri/ffi/xml/relax_ng.rb +85 -0
  146. data/lib/nokogiri/ffi/xml/sax/parser.rb +135 -0
  147. data/lib/nokogiri/ffi/xml/sax/parser_context.rb +67 -0
  148. data/lib/nokogiri/ffi/xml/sax/push_parser.rb +55 -0
  149. data/lib/nokogiri/ffi/xml/schema.rb +92 -0
  150. data/lib/nokogiri/ffi/xml/syntax_error.rb +98 -0
  151. data/lib/nokogiri/ffi/xml/text.rb +18 -0
  152. data/lib/nokogiri/ffi/xml/xpath.rb +19 -0
  153. data/lib/nokogiri/ffi/xml/xpath_context.rb +135 -0
  154. data/lib/nokogiri/ffi/xslt/stylesheet.rb +50 -0
  155. data/lib/nokogiri/html.rb +36 -0
  156. data/lib/nokogiri/html/builder.rb +35 -0
  157. data/lib/nokogiri/html/document.rb +88 -0
  158. data/lib/nokogiri/html/document_fragment.rb +15 -0
  159. data/lib/nokogiri/html/element_description.rb +23 -0
  160. data/lib/nokogiri/html/element_description_defaults.rb +671 -0
  161. data/lib/nokogiri/html/entity_lookup.rb +13 -0
  162. data/lib/nokogiri/html/sax/parser.rb +48 -0
  163. data/lib/nokogiri/html/sax/parser_context.rb +16 -0
  164. data/lib/nokogiri/nokogiri.jar +0 -0
  165. data/lib/nokogiri/syntax_error.rb +4 -0
  166. data/lib/nokogiri/version.rb +33 -0
  167. data/lib/nokogiri/version_warning.rb +11 -0
  168. data/lib/nokogiri/xml.rb +67 -0
  169. data/lib/nokogiri/xml/attr.rb +14 -0
  170. data/lib/nokogiri/xml/attribute_decl.rb +18 -0
  171. data/lib/nokogiri/xml/builder.rb +405 -0
  172. data/lib/nokogiri/xml/cdata.rb +11 -0
  173. data/lib/nokogiri/xml/character_data.rb +7 -0
  174. data/lib/nokogiri/xml/document.rb +163 -0
  175. data/lib/nokogiri/xml/document_fragment.rb +73 -0
  176. data/lib/nokogiri/xml/dtd.rb +11 -0
  177. data/lib/nokogiri/xml/element_content.rb +36 -0
  178. data/lib/nokogiri/xml/element_decl.rb +13 -0
  179. data/lib/nokogiri/xml/entity_decl.rb +15 -0
  180. data/lib/nokogiri/xml/fragment_handler.rb +73 -0
  181. data/lib/nokogiri/xml/namespace.rb +13 -0
  182. data/lib/nokogiri/xml/node.rb +730 -0
  183. data/lib/nokogiri/xml/node/save_options.rb +42 -0
  184. data/lib/nokogiri/xml/node_set.rb +318 -0
  185. data/lib/nokogiri/xml/notation.rb +6 -0
  186. data/lib/nokogiri/xml/parse_options.rb +85 -0
  187. data/lib/nokogiri/xml/pp.rb +2 -0
  188. data/lib/nokogiri/xml/pp/character_data.rb +18 -0
  189. data/lib/nokogiri/xml/pp/node.rb +56 -0
  190. data/lib/nokogiri/xml/processing_instruction.rb +8 -0
  191. data/lib/nokogiri/xml/reader.rb +74 -0
  192. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  193. data/lib/nokogiri/xml/sax.rb +4 -0
  194. data/lib/nokogiri/xml/sax/document.rb +160 -0
  195. data/lib/nokogiri/xml/sax/parser.rb +115 -0
  196. data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
  197. data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
  198. data/lib/nokogiri/xml/schema.rb +61 -0
  199. data/lib/nokogiri/xml/syntax_error.rb +43 -0
  200. data/lib/nokogiri/xml/xpath.rb +10 -0
  201. data/lib/nokogiri/xml/xpath/syntax_error.rb +8 -0
  202. data/lib/nokogiri/xml/xpath_context.rb +16 -0
  203. data/lib/nokogiri/xslt.rb +48 -0
  204. data/lib/nokogiri/xslt/stylesheet.rb +25 -0
  205. data/lib/xercesImpl.jar +0 -0
  206. data/lib/xsd/xmlparser/nokogiri.rb +90 -0
  207. data/tasks/test.rb +100 -0
  208. data/test/css/test_nthiness.rb +159 -0
  209. data/test/css/test_parser.rb +282 -0
  210. data/test/css/test_tokenizer.rb +190 -0
  211. data/test/css/test_xpath_visitor.rb +76 -0
  212. data/test/ffi/test_document.rb +35 -0
  213. data/test/files/2ch.html +108 -0
  214. data/test/files/address_book.rlx +12 -0
  215. data/test/files/address_book.xml +10 -0
  216. data/test/files/bar/bar.xsd +4 -0
  217. data/test/files/dont_hurt_em_why.xml +422 -0
  218. data/test/files/exslt.xml +8 -0
  219. data/test/files/exslt.xslt +35 -0
  220. data/test/files/foo/foo.xsd +4 -0
  221. data/test/files/po.xml +32 -0
  222. data/test/files/po.xsd +66 -0
  223. data/test/files/shift_jis.html +10 -0
  224. data/test/files/shift_jis.xml +5 -0
  225. data/test/files/snuggles.xml +3 -0
  226. data/test/files/staff.dtd +10 -0
  227. data/test/files/staff.xml +59 -0
  228. data/test/files/staff.xslt +32 -0
  229. data/test/files/tlm.html +850 -0
  230. data/test/files/valid_bar.xml +2 -0
  231. data/test/helper.rb +137 -0
  232. data/test/html/sax/test_parser.rb +83 -0
  233. data/test/html/sax/test_parser_context.rb +48 -0
  234. data/test/html/test_builder.rb +164 -0
  235. data/test/html/test_document.rb +385 -0
  236. data/test/html/test_document_encoding.rb +77 -0
  237. data/test/html/test_document_fragment.rb +157 -0
  238. data/test/html/test_element_description.rb +98 -0
  239. data/test/html/test_named_characters.rb +14 -0
  240. data/test/html/test_node.rb +242 -0
  241. data/test/html/test_node_encoding.rb +27 -0
  242. data/test/test_convert_xpath.rb +135 -0
  243. data/test/test_css_cache.rb +45 -0
  244. data/test/test_encoding_handler.rb +46 -0
  245. data/test/test_jruby.rb +40 -0
  246. data/test/test_memory_leak.rb +87 -0
  247. data/test/test_nokogiri.rb +140 -0
  248. data/test/test_reader.rb +358 -0
  249. data/test/test_soap4r_sax.rb +52 -0
  250. data/test/test_xslt_transforms.rb +150 -0
  251. data/test/xml/node/test_save_options.rb +20 -0
  252. data/test/xml/node/test_subclass.rb +44 -0
  253. data/test/xml/sax/test_parser.rb +314 -0
  254. data/test/xml/sax/test_parser_context.rb +63 -0
  255. data/test/xml/sax/test_push_parser.rb +135 -0
  256. data/test/xml/test_attr.rb +38 -0
  257. data/test/xml/test_attribute_decl.rb +90 -0
  258. data/test/xml/test_builder.rb +167 -0
  259. data/test/xml/test_cdata.rb +38 -0
  260. data/test/xml/test_comment.rb +29 -0
  261. data/test/xml/test_document.rb +638 -0
  262. data/test/xml/test_document_encoding.rb +26 -0
  263. data/test/xml/test_document_fragment.rb +149 -0
  264. data/test/xml/test_dtd.rb +92 -0
  265. data/test/xml/test_dtd_encoding.rb +33 -0
  266. data/test/xml/test_element_content.rb +56 -0
  267. data/test/xml/test_element_decl.rb +73 -0
  268. data/test/xml/test_entity_decl.rb +83 -0
  269. data/test/xml/test_entity_reference.rb +21 -0
  270. data/test/xml/test_namespace.rb +70 -0
  271. data/test/xml/test_node.rb +740 -0
  272. data/test/xml/test_node_attributes.rb +34 -0
  273. data/test/xml/test_node_encoding.rb +107 -0
  274. data/test/xml/test_node_reparenting.rb +279 -0
  275. data/test/xml/test_node_set.rb +577 -0
  276. data/test/xml/test_parse_options.rb +52 -0
  277. data/test/xml/test_processing_instruction.rb +30 -0
  278. data/test/xml/test_reader_encoding.rb +126 -0
  279. data/test/xml/test_relax_ng.rb +60 -0
  280. data/test/xml/test_schema.rb +89 -0
  281. data/test/xml/test_syntax_error.rb +12 -0
  282. data/test/xml/test_text.rb +30 -0
  283. data/test/xml/test_unparented_node.rb +381 -0
  284. data/test/xml/test_xpath.rb +169 -0
  285. metadata +477 -0
@@ -0,0 +1,9 @@
1
+ #ifndef NOKOGIRI_XML_ATTR
2
+ #define NOKOGIRI_XML_ATTR
3
+
4
+ #include <nokogiri.h>
5
+
6
+ void init_xml_attr();
7
+
8
+ extern VALUE cNokogiriXmlAttr;
9
+ #endif
@@ -0,0 +1,67 @@
1
+ #include <xml_attribute_decl.h>
2
+
3
+ /*
4
+ * call-seq:
5
+ * attribute_type
6
+ *
7
+ * The attribute_type for this AttributeDecl
8
+ */
9
+ static VALUE attribute_type(VALUE self)
10
+ {
11
+ xmlAttributePtr node;
12
+ Data_Get_Struct(self, xmlAttribute, node);
13
+ return INT2NUM((long)node->atype);
14
+ }
15
+
16
+ /*
17
+ * call-seq:
18
+ * default
19
+ *
20
+ * The default value
21
+ */
22
+ static VALUE default_value(VALUE self)
23
+ {
24
+ xmlAttributePtr node;
25
+ Data_Get_Struct(self, xmlAttribute, node);
26
+
27
+ if(node->defaultValue) return NOKOGIRI_STR_NEW2(node->defaultValue);
28
+ return Qnil;
29
+ }
30
+
31
+ /*
32
+ * call-seq:
33
+ * enumeration
34
+ *
35
+ * An enumeration of possible values
36
+ */
37
+ static VALUE enumeration(VALUE self)
38
+ {
39
+ xmlAttributePtr node;
40
+ Data_Get_Struct(self, xmlAttribute, node);
41
+
42
+ VALUE list = rb_ary_new();
43
+ xmlEnumerationPtr enm = node->tree;
44
+
45
+ while(enm) {
46
+ rb_ary_push(list, NOKOGIRI_STR_NEW2(enm->name));
47
+ enm = enm->next;
48
+ }
49
+
50
+ return list;
51
+ }
52
+
53
+ VALUE cNokogiriXmlAttributeDecl;
54
+
55
+ void init_xml_attribute_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, "AttributeDecl", node);
61
+
62
+ cNokogiriXmlAttributeDecl = klass;
63
+
64
+ rb_define_method(klass, "attribute_type", attribute_type, 0);
65
+ rb_define_method(klass, "default", default_value, 0);
66
+ rb_define_method(klass, "enumeration", enumeration, 0);
67
+ }
@@ -0,0 +1,9 @@
1
+ #ifndef NOKOGIRI_XML_ATTRIBUTE_DECL
2
+ #define NOKOGIRI_XML_ATTRIBUTE_DECL
3
+
4
+ #include <nokogiri.h>
5
+
6
+ void init_xml_attribute_decl();
7
+
8
+ extern VALUE cNokogiriXmlAttributeDecl;
9
+ #endif
@@ -0,0 +1,54 @@
1
+ #include <xml_cdata.h>
2
+
3
+ /*
4
+ * call-seq:
5
+ * new(document, content)
6
+ *
7
+ * Create a new CDATA element on the +document+ with +content+
8
+ */
9
+ static VALUE new(int argc, VALUE *argv, VALUE klass)
10
+ {
11
+ xmlDocPtr xml_doc;
12
+ VALUE doc;
13
+ VALUE content;
14
+ VALUE rest;
15
+
16
+ rb_scan_args(argc, argv, "2*", &doc, &content, &rest);
17
+
18
+ Data_Get_Struct(doc, xmlDoc, xml_doc);
19
+
20
+ xmlNodePtr node = xmlNewCDataBlock(
21
+ xml_doc->doc,
22
+ NIL_P(content) ? NULL : (const xmlChar *)StringValuePtr(content),
23
+ NIL_P(content) ? 0 : (int)RSTRING_LEN(content)
24
+ );
25
+
26
+ NOKOGIRI_ROOT_NODE(node);
27
+
28
+ VALUE rb_node = Nokogiri_wrap_xml_node(klass, node);
29
+ rb_obj_call_init(rb_node, argc, argv);
30
+
31
+ if(rb_block_given_p()) rb_yield(rb_node);
32
+
33
+ return rb_node;
34
+ }
35
+
36
+ VALUE cNokogiriXmlCData;
37
+ void init_xml_cdata()
38
+ {
39
+ VALUE nokogiri = rb_define_module("Nokogiri");
40
+ VALUE xml = rb_define_module_under(nokogiri, "XML");
41
+ VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
42
+ VALUE char_data = rb_define_class_under(xml, "CharacterData", node);
43
+ VALUE text = rb_define_class_under(xml, "Text", char_data);
44
+
45
+ /*
46
+ * CData represents a CData node in an xml document.
47
+ */
48
+ VALUE klass = rb_define_class_under(xml, "CDATA", text);
49
+
50
+
51
+ cNokogiriXmlCData = klass;
52
+
53
+ rb_define_singleton_method(klass, "new", new, -1);
54
+ }
@@ -0,0 +1,9 @@
1
+ #ifndef NOKOGIRI_XML_CDATA
2
+ #define NOKOGIRI_XML_CDATA
3
+
4
+ #include <nokogiri.h>
5
+
6
+ void init_xml_cdata();
7
+
8
+ extern VALUE cNokogiriXmlCData;
9
+ #endif
@@ -0,0 +1,52 @@
1
+ #include <xml_comment.h>
2
+
3
+ /*
4
+ * call-seq:
5
+ * new(document, content)
6
+ *
7
+ * Create a new Comment element on the +document+ with +content+
8
+ */
9
+ static VALUE new(int argc, VALUE *argv, VALUE klass)
10
+ {
11
+ xmlDocPtr xml_doc;
12
+ VALUE document;
13
+ VALUE content;
14
+ VALUE rest;
15
+
16
+ rb_scan_args(argc, argv, "2*", &document, &content, &rest);
17
+
18
+ Data_Get_Struct(document, xmlDoc, xml_doc);
19
+
20
+ xmlNodePtr node = xmlNewDocComment(
21
+ xml_doc,
22
+ (const xmlChar *)StringValuePtr(content)
23
+ );
24
+
25
+ VALUE rb_node = Nokogiri_wrap_xml_node(klass, node);
26
+ rb_obj_call_init(rb_node, argc, argv);
27
+
28
+ NOKOGIRI_ROOT_NODE(node);
29
+
30
+ if(rb_block_given_p()) rb_yield(rb_node);
31
+
32
+ return rb_node;
33
+ }
34
+
35
+ VALUE cNokogiriXmlComment;
36
+ void init_xml_comment()
37
+ {
38
+ VALUE nokogiri = rb_define_module("Nokogiri");
39
+ VALUE xml = rb_define_module_under(nokogiri, "XML");
40
+ VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
41
+ VALUE char_data = rb_define_class_under(xml, "CharacterData", node);
42
+
43
+ /*
44
+ * Comment represents a comment node in an xml document.
45
+ */
46
+ VALUE klass = rb_define_class_under(xml, "Comment", char_data);
47
+
48
+
49
+ cNokogiriXmlComment = klass;
50
+
51
+ rb_define_singleton_method(klass, "new", new, -1);
52
+ }
@@ -0,0 +1,9 @@
1
+ #ifndef NOKOGIRI_XML_COMMENT
2
+ #define NOKOGIRI_XML_COMMENT
3
+
4
+ #include <nokogiri.h>
5
+
6
+ void init_xml_comment();
7
+
8
+ extern VALUE cNokogiriXmlComment;
9
+ #endif
@@ -0,0 +1,386 @@
1
+ #include <xml_document.h>
2
+
3
+ static int dealloc_node_i(xmlNodePtr key, xmlNodePtr node, xmlDocPtr doc)
4
+ {
5
+ switch(node->type) {
6
+ case XML_ATTRIBUTE_NODE:
7
+ xmlFreePropList((xmlAttrPtr)node);
8
+ break;
9
+ default:
10
+ if(node->parent == NULL) {
11
+ xmlAddChild((xmlNodePtr)doc, node);
12
+ }
13
+ }
14
+ return ST_CONTINUE;
15
+ }
16
+
17
+ static void dealloc(xmlDocPtr doc)
18
+ {
19
+ NOKOGIRI_DEBUG_START(doc);
20
+
21
+ st_table *node_hash = DOC_UNLINKED_NODE_HASH(doc);
22
+
23
+ xmlDeregisterNodeFunc func = xmlDeregisterNodeDefault(NULL);
24
+
25
+ st_foreach(node_hash, dealloc_node_i, (st_data_t)doc);
26
+ st_free_table(node_hash);
27
+
28
+ free(doc->_private);
29
+ doc->_private = NULL;
30
+ xmlFreeDoc(doc);
31
+
32
+ xmlDeregisterNodeDefault(func);
33
+
34
+ NOKOGIRI_DEBUG_END(doc);
35
+ }
36
+
37
+ static void recursively_remove_namespaces_from_node(xmlNodePtr node)
38
+ {
39
+ xmlNodePtr child ;
40
+
41
+ xmlSetNs(node, NULL);
42
+
43
+ for (child = node->children ; child ; child = child->next)
44
+ recursively_remove_namespaces_from_node(child);
45
+ }
46
+
47
+ /*
48
+ * call-seq:
49
+ * url
50
+ *
51
+ * Get the url name for this document.
52
+ */
53
+ static VALUE url(VALUE self)
54
+ {
55
+ xmlDocPtr doc;
56
+ Data_Get_Struct(self, xmlDoc, doc);
57
+
58
+ if(doc->URL) return NOKOGIRI_STR_NEW2(doc->URL);
59
+
60
+ return Qnil;
61
+ }
62
+
63
+ /*
64
+ * call-seq:
65
+ * root=
66
+ *
67
+ * Set the root element on this document
68
+ */
69
+ static VALUE set_root(VALUE self, VALUE root)
70
+ {
71
+ xmlDocPtr doc;
72
+ xmlNodePtr new_root;
73
+
74
+ Data_Get_Struct(self, xmlDoc, doc);
75
+ Data_Get_Struct(root, xmlNode, new_root);
76
+
77
+ xmlNodePtr old_root = NULL;
78
+
79
+ /* If the new root's document is not the same as the current document,
80
+ * then we need to dup the node in to this document. */
81
+ if(new_root->doc != doc) {
82
+ old_root = xmlDocGetRootElement(doc);
83
+ if (!(new_root = xmlDocCopyNode(new_root, doc, 1))) {
84
+ rb_raise(rb_eRuntimeError, "Could not reparent node (xmlDocCopyNode)");
85
+ }
86
+ }
87
+
88
+ xmlDocSetRootElement(doc, new_root);
89
+ if(old_root) NOKOGIRI_ROOT_NODE(old_root);
90
+ return root;
91
+ }
92
+
93
+ /*
94
+ * call-seq:
95
+ * root
96
+ *
97
+ * Get the root node for this document.
98
+ */
99
+ static VALUE root(VALUE self)
100
+ {
101
+ xmlDocPtr doc;
102
+ Data_Get_Struct(self, xmlDoc, doc);
103
+
104
+ xmlNodePtr root = xmlDocGetRootElement(doc);
105
+
106
+ if(!root) return Qnil;
107
+ return Nokogiri_wrap_xml_node(Qnil, root) ;
108
+ }
109
+
110
+ /*
111
+ * call-seq:
112
+ * encoding= encoding
113
+ *
114
+ * Set the encoding string for this Document
115
+ */
116
+ static VALUE set_encoding(VALUE self, VALUE encoding)
117
+ {
118
+ xmlDocPtr doc;
119
+ Data_Get_Struct(self, xmlDoc, doc);
120
+
121
+ doc->encoding = xmlStrdup((xmlChar *)StringValuePtr(encoding));
122
+
123
+ return encoding;
124
+ }
125
+
126
+ /*
127
+ * call-seq:
128
+ * encoding
129
+ *
130
+ * Get the encoding for this Document
131
+ */
132
+ static VALUE encoding(VALUE self)
133
+ {
134
+ xmlDocPtr doc;
135
+ Data_Get_Struct(self, xmlDoc, doc);
136
+
137
+ if(!doc->encoding) return Qnil;
138
+ return NOKOGIRI_STR_NEW2(doc->encoding);
139
+ }
140
+
141
+ /*
142
+ * call-seq:
143
+ * version
144
+ *
145
+ * Get the XML version for this Document
146
+ */
147
+ static VALUE version(VALUE self)
148
+ {
149
+ xmlDocPtr doc;
150
+ Data_Get_Struct(self, xmlDoc, doc);
151
+
152
+ if(!doc->version) return Qnil;
153
+ return NOKOGIRI_STR_NEW2(doc->version);
154
+ }
155
+
156
+ /*
157
+ * call-seq:
158
+ * read_io(io, url, encoding, options)
159
+ *
160
+ * Create a new document from an IO object
161
+ */
162
+ static VALUE read_io( VALUE klass,
163
+ VALUE io,
164
+ VALUE url,
165
+ VALUE encoding,
166
+ VALUE options )
167
+ {
168
+ const char * c_url = NIL_P(url) ? NULL : StringValuePtr(url);
169
+ const char * c_enc = NIL_P(encoding) ? NULL : StringValuePtr(encoding);
170
+ VALUE error_list = rb_ary_new();
171
+
172
+ xmlResetLastError();
173
+ xmlSetStructuredErrorFunc((void *)error_list, Nokogiri_error_array_pusher);
174
+
175
+ xmlDocPtr doc = xmlReadIO(
176
+ (xmlInputReadCallback)io_read_callback,
177
+ (xmlInputCloseCallback)io_close_callback,
178
+ (void *)io,
179
+ c_url,
180
+ c_enc,
181
+ (int)NUM2INT(options)
182
+ );
183
+ xmlSetStructuredErrorFunc(NULL, NULL);
184
+
185
+ if(doc == NULL) {
186
+ xmlFreeDoc(doc);
187
+
188
+ xmlErrorPtr error = xmlGetLastError();
189
+ if(error)
190
+ rb_exc_raise(Nokogiri_wrap_xml_syntax_error((VALUE)NULL, error));
191
+ else
192
+ rb_raise(rb_eRuntimeError, "Could not parse document");
193
+
194
+ return Qnil;
195
+ }
196
+
197
+ VALUE document = Nokogiri_wrap_xml_document(klass, doc);
198
+ rb_iv_set(document, "@errors", error_list);
199
+ return document;
200
+ }
201
+
202
+ /*
203
+ * call-seq:
204
+ * read_memory(string, url, encoding, options)
205
+ *
206
+ * Create a new document from a String
207
+ */
208
+ static VALUE read_memory( VALUE klass,
209
+ VALUE string,
210
+ VALUE url,
211
+ VALUE encoding,
212
+ VALUE options )
213
+ {
214
+ const char * c_buffer = StringValuePtr(string);
215
+ const char * c_url = NIL_P(url) ? NULL : StringValuePtr(url);
216
+ const char * c_enc = NIL_P(encoding) ? NULL : StringValuePtr(encoding);
217
+ int len = RSTRING_LEN(string);
218
+ VALUE error_list = rb_ary_new();
219
+
220
+ xmlResetLastError();
221
+ xmlSetStructuredErrorFunc((void *)error_list, Nokogiri_error_array_pusher);
222
+ xmlDocPtr doc = xmlReadMemory(c_buffer, len, c_url, c_enc, (int)NUM2INT(options));
223
+ xmlSetStructuredErrorFunc(NULL, NULL);
224
+
225
+ if(doc == NULL) {
226
+ xmlFreeDoc(doc);
227
+
228
+ xmlErrorPtr error = xmlGetLastError();
229
+ if(error)
230
+ rb_exc_raise(Nokogiri_wrap_xml_syntax_error((VALUE)NULL, error));
231
+ else
232
+ rb_raise(rb_eRuntimeError, "Could not parse document");
233
+
234
+ return Qnil;
235
+ }
236
+
237
+ VALUE document = Nokogiri_wrap_xml_document(klass, doc);
238
+ rb_iv_set(document, "@errors", error_list);
239
+ return document;
240
+ }
241
+
242
+ /*
243
+ * call-seq:
244
+ * dup
245
+ *
246
+ * Copy this Document. An optional depth may be passed in, but it defaults
247
+ * to a deep copy. 0 is a shallow copy, 1 is a deep copy.
248
+ */
249
+ static VALUE duplicate_node(int argc, VALUE *argv, VALUE self)
250
+ {
251
+ VALUE level;
252
+
253
+ if(rb_scan_args(argc, argv, "01", &level) == 0)
254
+ level = INT2NUM((long)1);
255
+
256
+ xmlDocPtr doc, dup;
257
+ Data_Get_Struct(self, xmlDoc, doc);
258
+
259
+ dup = xmlCopyDoc(doc, (int)NUM2INT(level));
260
+ if(dup == NULL) return Qnil;
261
+
262
+ dup->type = doc->type;
263
+ return Nokogiri_wrap_xml_document(rb_obj_class(self), dup);
264
+ }
265
+
266
+ /*
267
+ * call-seq:
268
+ * new(version = default)
269
+ *
270
+ * Create a new document with +version+ (defaults to "1.0")
271
+ */
272
+ static VALUE new(int argc, VALUE *argv, VALUE klass)
273
+ {
274
+ VALUE version, rest, rb_doc ;
275
+
276
+ rb_scan_args(argc, argv, "0*", &rest);
277
+ version = rb_ary_entry(rest, (long)0);
278
+ if (NIL_P(version)) version = rb_str_new2("1.0");
279
+
280
+ xmlDocPtr doc = xmlNewDoc((xmlChar *)StringValuePtr(version));
281
+ rb_doc = Nokogiri_wrap_xml_document(klass, doc);
282
+ rb_obj_call_init(rb_doc, argc, argv);
283
+ return rb_doc ;
284
+ }
285
+
286
+ /*
287
+ * call-seq:
288
+ * remove_namespaces!
289
+ *
290
+ * Remove all namespaces from all nodes in the document.
291
+ *
292
+ * This could be useful for developers who either don't understand namespaces
293
+ * or don't care about them.
294
+ *
295
+ * The following example shows a use case, and you can decide for yourself
296
+ * whether this is a good thing or not:
297
+ *
298
+ * doc = Nokogiri::XML <<-EOXML
299
+ * <root>
300
+ * <car xmlns:part="http://general-motors.com/">
301
+ * <part:tire>Michelin Model XGV</part:tire>
302
+ * </car>
303
+ * <bicycle xmlns:part="http://schwinn.com/">
304
+ * <part:tire>I'm a bicycle tire!</part:tire>
305
+ * </bicycle>
306
+ * </root>
307
+ * EOXML
308
+ *
309
+ * doc.xpath("//tire").to_s # => ""
310
+ * doc.xpath("//part:tire", "part" => "http://general-motors.com/").to_s # => "<part:tire>Michelin Model XGV</part:tire>"
311
+ * doc.xpath("//part:tire", "part" => "http://schwinn.com/").to_s # => "<part:tire>I'm a bicycle tire!</part:tire>"
312
+ *
313
+ * doc.remove_namespaces!
314
+ *
315
+ * doc.xpath("//tire").to_s # => "<tire>Michelin Model XGV</tire><tire>I'm a bicycle tire!</tire>"
316
+ * doc.xpath("//part:tire", "part" => "http://general-motors.com/").to_s # => ""
317
+ * doc.xpath("//part:tire", "part" => "http://schwinn.com/").to_s # => ""
318
+ *
319
+ * For more information on why this probably is *not* a good thing in general,
320
+ * please direct your browser to
321
+ * http://tenderlovemaking.com/2009/04/23/namespaces-in-xml/
322
+ */
323
+ VALUE remove_namespaces_bang(VALUE self)
324
+ {
325
+ xmlDocPtr doc ;
326
+ Data_Get_Struct(self, xmlDoc, doc);
327
+
328
+ recursively_remove_namespaces_from_node((xmlNodePtr)doc);
329
+ return self;
330
+ }
331
+
332
+
333
+ VALUE cNokogiriXmlDocument ;
334
+ void init_xml_document()
335
+ {
336
+ VALUE nokogiri = rb_define_module("Nokogiri");
337
+ VALUE xml = rb_define_module_under(nokogiri, "XML");
338
+ VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
339
+
340
+ /*
341
+ * Nokogiri::XML::Document wraps an xml document.
342
+ */
343
+ VALUE klass = rb_define_class_under(xml, "Document", node);
344
+
345
+ cNokogiriXmlDocument = klass;
346
+
347
+ rb_define_singleton_method(klass, "read_memory", read_memory, 4);
348
+ rb_define_singleton_method(klass, "read_io", read_io, 4);
349
+ rb_define_singleton_method(klass, "new", new, -1);
350
+
351
+ rb_define_method(klass, "root", root, 0);
352
+ rb_define_method(klass, "root=", set_root, 1);
353
+ rb_define_method(klass, "encoding", encoding, 0);
354
+ rb_define_method(klass, "encoding=", set_encoding, 1);
355
+ rb_define_method(klass, "version", version, 0);
356
+ rb_define_method(klass, "dup", duplicate_node, -1);
357
+ rb_define_method(klass, "url", url, 0);
358
+ rb_define_method(klass, "remove_namespaces!", remove_namespaces_bang, 0);
359
+ }
360
+
361
+
362
+ /* this takes klass as a param because it's used for HtmlDocument, too. */
363
+ VALUE Nokogiri_wrap_xml_document(VALUE klass, xmlDocPtr doc)
364
+ {
365
+ nokogiriTuplePtr tuple = (nokogiriTuplePtr)malloc(sizeof(nokogiriTuple));
366
+
367
+ VALUE rb_doc = Data_Wrap_Struct(
368
+ klass ? klass : cNokogiriXmlDocument,
369
+ 0,
370
+ dealloc,
371
+ doc
372
+ );
373
+
374
+ VALUE cache = rb_ary_new();
375
+ rb_iv_set(rb_doc, "@decorators", Qnil);
376
+ rb_iv_set(rb_doc, "@node_cache", cache);
377
+
378
+ tuple->doc = (void *)rb_doc;
379
+ tuple->unlinkedNodes = st_init_numtable_with_size(128);
380
+ tuple->node_cache = cache;
381
+ doc->_private = tuple ;
382
+
383
+ rb_obj_call_init(rb_doc, 0, NULL);
384
+
385
+ return rb_doc ;
386
+ }