nokogiri 1.10.7 → 1.12.5-arm64-darwin

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 (242) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -0
  3. data/LICENSE-DEPENDENCIES.md +1173 -884
  4. data/LICENSE.md +1 -1
  5. data/README.md +176 -96
  6. data/dependencies.yml +12 -12
  7. data/ext/nokogiri/depend +38 -358
  8. data/ext/nokogiri/extconf.rb +716 -414
  9. data/ext/nokogiri/gumbo.c +584 -0
  10. data/ext/nokogiri/html4_document.c +166 -0
  11. data/ext/nokogiri/html4_element_description.c +294 -0
  12. data/ext/nokogiri/html4_entity_lookup.c +37 -0
  13. data/ext/nokogiri/html4_sax_parser_context.c +120 -0
  14. data/ext/nokogiri/html4_sax_push_parser.c +95 -0
  15. data/ext/nokogiri/include/libexslt/exslt.h +102 -0
  16. data/ext/nokogiri/include/libexslt/exsltconfig.h +70 -0
  17. data/ext/nokogiri/include/libexslt/exsltexports.h +140 -0
  18. data/ext/nokogiri/include/libxml2/libxml/DOCBparser.h +96 -0
  19. data/ext/nokogiri/include/libxml2/libxml/HTMLparser.h +306 -0
  20. data/ext/nokogiri/include/libxml2/libxml/HTMLtree.h +147 -0
  21. data/ext/nokogiri/include/libxml2/libxml/SAX.h +173 -0
  22. data/ext/nokogiri/include/libxml2/libxml/SAX2.h +178 -0
  23. data/ext/nokogiri/include/libxml2/libxml/c14n.h +128 -0
  24. data/ext/nokogiri/include/libxml2/libxml/catalog.h +182 -0
  25. data/ext/nokogiri/include/libxml2/libxml/chvalid.h +230 -0
  26. data/ext/nokogiri/include/libxml2/libxml/debugXML.h +217 -0
  27. data/ext/nokogiri/include/libxml2/libxml/dict.h +79 -0
  28. data/ext/nokogiri/include/libxml2/libxml/encoding.h +245 -0
  29. data/ext/nokogiri/include/libxml2/libxml/entities.h +151 -0
  30. data/ext/nokogiri/include/libxml2/libxml/globals.h +508 -0
  31. data/ext/nokogiri/include/libxml2/libxml/hash.h +236 -0
  32. data/ext/nokogiri/include/libxml2/libxml/list.h +137 -0
  33. data/ext/nokogiri/include/libxml2/libxml/nanoftp.h +163 -0
  34. data/ext/nokogiri/include/libxml2/libxml/nanohttp.h +81 -0
  35. data/ext/nokogiri/include/libxml2/libxml/parser.h +1243 -0
  36. data/ext/nokogiri/include/libxml2/libxml/parserInternals.h +644 -0
  37. data/ext/nokogiri/include/libxml2/libxml/pattern.h +100 -0
  38. data/ext/nokogiri/include/libxml2/libxml/relaxng.h +217 -0
  39. data/ext/nokogiri/include/libxml2/libxml/schemasInternals.h +958 -0
  40. data/ext/nokogiri/include/libxml2/libxml/schematron.h +142 -0
  41. data/ext/nokogiri/include/libxml2/libxml/threads.h +89 -0
  42. data/ext/nokogiri/include/libxml2/libxml/tree.h +1311 -0
  43. data/ext/nokogiri/include/libxml2/libxml/uri.h +94 -0
  44. data/ext/nokogiri/include/libxml2/libxml/valid.h +458 -0
  45. data/ext/nokogiri/include/libxml2/libxml/xinclude.h +129 -0
  46. data/ext/nokogiri/include/libxml2/libxml/xlink.h +189 -0
  47. data/ext/nokogiri/include/libxml2/libxml/xmlIO.h +368 -0
  48. data/ext/nokogiri/include/libxml2/libxml/xmlautomata.h +146 -0
  49. data/ext/nokogiri/include/libxml2/libxml/xmlerror.h +945 -0
  50. data/ext/nokogiri/include/libxml2/libxml/xmlexports.h +77 -0
  51. data/ext/nokogiri/include/libxml2/libxml/xmlmemory.h +224 -0
  52. data/ext/nokogiri/include/libxml2/libxml/xmlmodule.h +57 -0
  53. data/ext/nokogiri/include/libxml2/libxml/xmlreader.h +428 -0
  54. data/ext/nokogiri/include/libxml2/libxml/xmlregexp.h +222 -0
  55. data/ext/nokogiri/include/libxml2/libxml/xmlsave.h +88 -0
  56. data/ext/nokogiri/include/libxml2/libxml/xmlschemas.h +246 -0
  57. data/ext/nokogiri/include/libxml2/libxml/xmlschemastypes.h +151 -0
  58. data/ext/nokogiri/include/libxml2/libxml/xmlstring.h +140 -0
  59. data/ext/nokogiri/include/libxml2/libxml/xmlunicode.h +202 -0
  60. data/ext/nokogiri/include/libxml2/libxml/xmlversion.h +485 -0
  61. data/ext/nokogiri/include/libxml2/libxml/xmlwriter.h +488 -0
  62. data/ext/nokogiri/include/libxml2/libxml/xpath.h +564 -0
  63. data/ext/nokogiri/include/libxml2/libxml/xpathInternals.h +632 -0
  64. data/ext/nokogiri/include/libxml2/libxml/xpointer.h +114 -0
  65. data/ext/nokogiri/include/libxslt/attributes.h +38 -0
  66. data/ext/nokogiri/include/libxslt/documents.h +93 -0
  67. data/ext/nokogiri/include/libxslt/extensions.h +262 -0
  68. data/ext/nokogiri/include/libxslt/extra.h +72 -0
  69. data/ext/nokogiri/include/libxslt/functions.h +78 -0
  70. data/ext/nokogiri/include/libxslt/imports.h +75 -0
  71. data/ext/nokogiri/include/libxslt/keys.h +53 -0
  72. data/ext/nokogiri/include/libxslt/namespaces.h +68 -0
  73. data/ext/nokogiri/include/libxslt/numbersInternals.h +73 -0
  74. data/ext/nokogiri/include/libxslt/pattern.h +84 -0
  75. data/ext/nokogiri/include/libxslt/preproc.h +43 -0
  76. data/ext/nokogiri/include/libxslt/security.h +104 -0
  77. data/ext/nokogiri/include/libxslt/templates.h +77 -0
  78. data/ext/nokogiri/include/libxslt/transform.h +207 -0
  79. data/ext/nokogiri/include/libxslt/variables.h +118 -0
  80. data/ext/nokogiri/include/libxslt/xslt.h +110 -0
  81. data/ext/nokogiri/include/libxslt/xsltInternals.h +1978 -0
  82. data/ext/nokogiri/include/libxslt/xsltconfig.h +180 -0
  83. data/ext/nokogiri/include/libxslt/xsltexports.h +142 -0
  84. data/ext/nokogiri/include/libxslt/xsltlocale.h +76 -0
  85. data/ext/nokogiri/include/libxslt/xsltutils.h +313 -0
  86. data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
  87. data/ext/nokogiri/nokogiri.c +228 -91
  88. data/ext/nokogiri/nokogiri.h +191 -89
  89. data/ext/nokogiri/test_global_handlers.c +40 -0
  90. data/ext/nokogiri/xml_attr.c +15 -15
  91. data/ext/nokogiri/xml_attribute_decl.c +18 -18
  92. data/ext/nokogiri/xml_cdata.c +13 -18
  93. data/ext/nokogiri/xml_comment.c +19 -26
  94. data/ext/nokogiri/xml_document.c +267 -195
  95. data/ext/nokogiri/xml_document_fragment.c +13 -15
  96. data/ext/nokogiri/xml_dtd.c +54 -48
  97. data/ext/nokogiri/xml_element_content.c +31 -26
  98. data/ext/nokogiri/xml_element_decl.c +22 -22
  99. data/ext/nokogiri/xml_encoding_handler.c +28 -17
  100. data/ext/nokogiri/xml_entity_decl.c +32 -30
  101. data/ext/nokogiri/xml_entity_reference.c +16 -18
  102. data/ext/nokogiri/xml_namespace.c +60 -51
  103. data/ext/nokogiri/xml_node.c +493 -407
  104. data/ext/nokogiri/xml_node_set.c +174 -162
  105. data/ext/nokogiri/xml_processing_instruction.c +17 -19
  106. data/ext/nokogiri/xml_reader.c +197 -172
  107. data/ext/nokogiri/xml_relax_ng.c +52 -28
  108. data/ext/nokogiri/xml_sax_parser.c +112 -112
  109. data/ext/nokogiri/xml_sax_parser_context.c +105 -86
  110. data/ext/nokogiri/xml_sax_push_parser.c +36 -27
  111. data/ext/nokogiri/xml_schema.c +112 -33
  112. data/ext/nokogiri/xml_syntax_error.c +42 -21
  113. data/ext/nokogiri/xml_text.c +13 -17
  114. data/ext/nokogiri/xml_xpath_context.c +158 -73
  115. data/ext/nokogiri/xslt_stylesheet.c +158 -164
  116. data/gumbo-parser/CHANGES.md +63 -0
  117. data/gumbo-parser/Makefile +101 -0
  118. data/gumbo-parser/THANKS +27 -0
  119. data/lib/nokogiri/2.5/nokogiri.bundle +0 -0
  120. data/lib/nokogiri/2.6/nokogiri.bundle +0 -0
  121. data/lib/nokogiri/2.7/nokogiri.bundle +0 -0
  122. data/lib/nokogiri/3.0/nokogiri.bundle +0 -0
  123. data/lib/nokogiri/css/node.rb +1 -0
  124. data/lib/nokogiri/css/parser.rb +64 -63
  125. data/lib/nokogiri/css/parser.y +3 -3
  126. data/lib/nokogiri/css/parser_extras.rb +39 -36
  127. data/lib/nokogiri/css/syntax_error.rb +2 -1
  128. data/lib/nokogiri/css/tokenizer.rb +1 -0
  129. data/lib/nokogiri/css/xpath_visitor.rb +73 -43
  130. data/lib/nokogiri/css.rb +15 -14
  131. data/lib/nokogiri/decorators/slop.rb +1 -0
  132. data/lib/nokogiri/extension.rb +31 -0
  133. data/lib/nokogiri/gumbo.rb +14 -0
  134. data/lib/nokogiri/html.rb +32 -27
  135. data/lib/nokogiri/{html → html4}/builder.rb +3 -2
  136. data/lib/nokogiri/{html → html4}/document.rb +17 -30
  137. data/lib/nokogiri/{html → html4}/document_fragment.rb +18 -17
  138. data/lib/nokogiri/{html → html4}/element_description.rb +2 -1
  139. data/lib/nokogiri/{html → html4}/element_description_defaults.rb +2 -1
  140. data/lib/nokogiri/{html → html4}/entity_lookup.rb +2 -1
  141. data/lib/nokogiri/{html → html4}/sax/parser.rb +12 -14
  142. data/lib/nokogiri/html4/sax/parser_context.rb +19 -0
  143. data/lib/nokogiri/{html → html4}/sax/push_parser.rb +6 -5
  144. data/lib/nokogiri/html4.rb +40 -0
  145. data/lib/nokogiri/html5/document.rb +74 -0
  146. data/lib/nokogiri/html5/document_fragment.rb +80 -0
  147. data/lib/nokogiri/html5/node.rb +93 -0
  148. data/lib/nokogiri/html5.rb +473 -0
  149. data/lib/nokogiri/jruby/dependencies.rb +20 -0
  150. data/lib/nokogiri/syntax_error.rb +1 -0
  151. data/lib/nokogiri/version/constant.rb +5 -0
  152. data/lib/nokogiri/version/info.rb +215 -0
  153. data/lib/nokogiri/version.rb +3 -109
  154. data/lib/nokogiri/xml/attr.rb +1 -0
  155. data/lib/nokogiri/xml/attribute_decl.rb +1 -0
  156. data/lib/nokogiri/xml/builder.rb +41 -2
  157. data/lib/nokogiri/xml/cdata.rb +1 -0
  158. data/lib/nokogiri/xml/character_data.rb +1 -0
  159. data/lib/nokogiri/xml/document.rb +138 -41
  160. data/lib/nokogiri/xml/document_fragment.rb +5 -6
  161. data/lib/nokogiri/xml/dtd.rb +1 -0
  162. data/lib/nokogiri/xml/element_content.rb +1 -0
  163. data/lib/nokogiri/xml/element_decl.rb +1 -0
  164. data/lib/nokogiri/xml/entity_decl.rb +1 -0
  165. data/lib/nokogiri/xml/entity_reference.rb +1 -0
  166. data/lib/nokogiri/xml/namespace.rb +1 -0
  167. data/lib/nokogiri/xml/node/save_options.rb +2 -1
  168. data/lib/nokogiri/xml/node.rb +629 -293
  169. data/lib/nokogiri/xml/node_set.rb +1 -0
  170. data/lib/nokogiri/xml/notation.rb +1 -0
  171. data/lib/nokogiri/xml/parse_options.rb +12 -3
  172. data/lib/nokogiri/xml/pp/character_data.rb +1 -0
  173. data/lib/nokogiri/xml/pp/node.rb +1 -0
  174. data/lib/nokogiri/xml/pp.rb +3 -2
  175. data/lib/nokogiri/xml/processing_instruction.rb +1 -0
  176. data/lib/nokogiri/xml/reader.rb +9 -12
  177. data/lib/nokogiri/xml/relax_ng.rb +7 -2
  178. data/lib/nokogiri/xml/sax/document.rb +25 -30
  179. data/lib/nokogiri/xml/sax/parser.rb +1 -0
  180. data/lib/nokogiri/xml/sax/parser_context.rb +1 -0
  181. data/lib/nokogiri/xml/sax/push_parser.rb +1 -0
  182. data/lib/nokogiri/xml/sax.rb +5 -4
  183. data/lib/nokogiri/xml/schema.rb +13 -4
  184. data/lib/nokogiri/xml/searchable.rb +25 -16
  185. data/lib/nokogiri/xml/syntax_error.rb +1 -0
  186. data/lib/nokogiri/xml/text.rb +1 -0
  187. data/lib/nokogiri/xml/xpath/syntax_error.rb +2 -1
  188. data/lib/nokogiri/xml/xpath.rb +4 -5
  189. data/lib/nokogiri/xml/xpath_context.rb +1 -0
  190. data/lib/nokogiri/xml.rb +36 -36
  191. data/lib/nokogiri/xslt/stylesheet.rb +2 -1
  192. data/lib/nokogiri/xslt.rb +17 -16
  193. data/lib/nokogiri.rb +32 -51
  194. data/lib/xsd/xmlparser/nokogiri.rb +1 -0
  195. metadata +182 -193
  196. data/ext/nokogiri/html_document.c +0 -170
  197. data/ext/nokogiri/html_document.h +0 -10
  198. data/ext/nokogiri/html_element_description.c +0 -279
  199. data/ext/nokogiri/html_element_description.h +0 -10
  200. data/ext/nokogiri/html_entity_lookup.c +0 -32
  201. data/ext/nokogiri/html_entity_lookup.h +0 -8
  202. data/ext/nokogiri/html_sax_parser_context.c +0 -116
  203. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  204. data/ext/nokogiri/html_sax_push_parser.c +0 -87
  205. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  206. data/ext/nokogiri/xml_attr.h +0 -9
  207. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  208. data/ext/nokogiri/xml_cdata.h +0 -9
  209. data/ext/nokogiri/xml_comment.h +0 -9
  210. data/ext/nokogiri/xml_document.h +0 -23
  211. data/ext/nokogiri/xml_document_fragment.h +0 -10
  212. data/ext/nokogiri/xml_dtd.h +0 -10
  213. data/ext/nokogiri/xml_element_content.h +0 -10
  214. data/ext/nokogiri/xml_element_decl.h +0 -9
  215. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  216. data/ext/nokogiri/xml_entity_decl.h +0 -10
  217. data/ext/nokogiri/xml_entity_reference.h +0 -9
  218. data/ext/nokogiri/xml_io.c +0 -61
  219. data/ext/nokogiri/xml_io.h +0 -11
  220. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  221. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  222. data/ext/nokogiri/xml_namespace.h +0 -14
  223. data/ext/nokogiri/xml_node.h +0 -13
  224. data/ext/nokogiri/xml_node_set.h +0 -12
  225. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  226. data/ext/nokogiri/xml_reader.h +0 -10
  227. data/ext/nokogiri/xml_relax_ng.h +0 -9
  228. data/ext/nokogiri/xml_sax_parser.h +0 -39
  229. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  230. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  231. data/ext/nokogiri/xml_schema.h +0 -9
  232. data/ext/nokogiri/xml_syntax_error.h +0 -13
  233. data/ext/nokogiri/xml_text.h +0 -9
  234. data/ext/nokogiri/xml_xpath_context.h +0 -10
  235. data/ext/nokogiri/xslt_stylesheet.h +0 -14
  236. data/lib/nokogiri/html/sax/parser_context.rb +0 -16
  237. data/patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch +0 -78
  238. data/patches/libxml2/0002-Remove-script-macro-support.patch +0 -40
  239. data/patches/libxml2/0003-Update-entities-to-remove-handling-of-ssi.patch +0 -44
  240. data/patches/libxml2/0004-libxml2.la-is-in-top_builddir.patch +0 -25
  241. data/ports/archives/libxml2-2.9.10.tar.gz +0 -0
  242. data/ports/archives/libxslt-1.1.34.tar.gz +0 -0
@@ -1,4 +1,6 @@
1
- #include <xml_entity_reference.h>
1
+ #include <nokogiri.h>
2
+
3
+ VALUE cNokogiriXmlEntityReference;
2
4
 
3
5
  /*
4
6
  * call-seq:
@@ -6,7 +8,8 @@
6
8
  *
7
9
  * Create a new EntityReference element on the +document+ with +name+
8
10
  */
9
- static VALUE new(int argc, VALUE *argv, VALUE klass)
11
+ static VALUE
12
+ new (int argc, VALUE *argv, VALUE klass)
10
13
  {
11
14
  xmlDocPtr xml_doc;
12
15
  xmlNodePtr node;
@@ -20,33 +23,28 @@ static VALUE new(int argc, VALUE *argv, VALUE klass)
20
23
  Data_Get_Struct(document, xmlDoc, xml_doc);
21
24
 
22
25
  node = xmlNewReference(
23
- xml_doc,
24
- (const xmlChar *)StringValueCStr(name)
25
- );
26
+ xml_doc,
27
+ (const xmlChar *)StringValueCStr(name)
28
+ );
26
29
 
27
- nokogiri_root_node(node);
30
+ noko_xml_document_pin_node(node);
28
31
 
29
- rb_node = Nokogiri_wrap_xml_node(klass, node);
32
+ rb_node = noko_xml_node_wrap(klass, node);
30
33
  rb_obj_call_init(rb_node, argc, argv);
31
34
 
32
- if(rb_block_given_p()) rb_yield(rb_node);
35
+ if (rb_block_given_p()) { rb_yield(rb_node); }
33
36
 
34
37
  return rb_node;
35
38
  }
36
39
 
37
- VALUE cNokogiriXmlEntityReference;
38
- void init_xml_entity_reference()
40
+ void
41
+ noko_init_xml_entity_reference()
39
42
  {
40
- VALUE nokogiri = rb_define_module("Nokogiri");
41
- VALUE xml = rb_define_module_under(nokogiri, "XML");
42
- VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
43
-
43
+ assert(cNokogiriXmlNode);
44
44
  /*
45
45
  * EntityReference represents an EntityReference node in an xml document.
46
46
  */
47
- VALUE klass = rb_define_class_under(xml, "EntityReference", node);
48
-
49
- cNokogiriXmlEntityReference = klass;
47
+ cNokogiriXmlEntityReference = rb_define_class_under(mNokogiriXml, "EntityReference", cNokogiriXmlNode);
50
48
 
51
- rb_define_singleton_method(klass, "new", new, -1);
49
+ rb_define_singleton_method(cNokogiriXmlEntityReference, "new", new, -1);
52
50
  }
@@ -1,23 +1,42 @@
1
- #include <xml_namespace.h>
1
+ #include <nokogiri.h>
2
+
3
+ /*
4
+ * The lifecycle of a Namespace node is more complicated than other Nodes, for two reasons:
5
+ *
6
+ * 1. the underlying C structure has a different layout than all the other node structs, with the
7
+ * `_private` member where we store a pointer to Ruby object data not being in first position.
8
+ * 2. xmlNs structures returned in an xmlNodeset from an XPath query are copies of the document's
9
+ * namespaces, and so do not share the same memory lifecycle as everything else in a document.
10
+ *
11
+ * As a result of 1, you may see special handling of XML_NAMESPACE_DECL node types throughout the
12
+ * Nokogiri C code, though I intend to wrap up that logic in ruby_object_{get,set} functions
13
+ * shortly.
14
+ *
15
+ * As a result of 2, you will see we have special handling in this file and in xml_node_set.c to
16
+ * carefully manage the memory lifecycle of xmlNs structs to match the Ruby object's GC
17
+ * lifecycle. In xml_node_set.c we have local versions of xmlXPathNodeSetDel() and
18
+ * xmlXPathFreeNodeSet() that avoid freeing xmlNs structs in the node set. In this file, we decide
19
+ * whether or not to call dealloc_namespace() depending on whether the xmlNs struct appears to be
20
+ * in an xmlNodeSet (and thus the result of an XPath query) or not.
21
+ *
22
+ * Yes, this is madness.
23
+ */
2
24
 
3
25
  VALUE cNokogiriXmlNamespace ;
4
26
 
5
- static void dealloc_namespace(xmlNsPtr ns)
27
+ static void
28
+ dealloc_namespace(xmlNsPtr ns)
6
29
  {
7
30
  /*
8
- *
9
31
  * this deallocator is only used for namespace nodes that are part of an xpath
10
- * node set.
11
- *
12
- * see Nokogiri_wrap_xml_namespace() for more details.
13
- *
32
+ * node set. see noko_xml_namespace_wrap().
14
33
  */
15
34
  NOKOGIRI_DEBUG_START(ns) ;
16
35
  if (ns->href) {
17
- xmlFree((xmlChar *)(uintptr_t)ns->href);
36
+ xmlFree(DISCARD_CONST_QUAL_XMLCHAR(ns->href));
18
37
  }
19
38
  if (ns->prefix) {
20
- xmlFree((xmlChar *)(uintptr_t)ns->prefix);
39
+ xmlFree(DISCARD_CONST_QUAL_XMLCHAR(ns->prefix));
21
40
  }
22
41
  xmlFree(ns);
23
42
  NOKOGIRI_DEBUG_END(ns) ;
@@ -30,12 +49,13 @@ static void dealloc_namespace(xmlNsPtr ns)
30
49
  *
31
50
  * Get the prefix for this namespace. Returns +nil+ if there is no prefix.
32
51
  */
33
- static VALUE prefix(VALUE self)
52
+ static VALUE
53
+ prefix(VALUE self)
34
54
  {
35
55
  xmlNsPtr ns;
36
56
 
37
57
  Data_Get_Struct(self, xmlNs, ns);
38
- if(!ns->prefix) return Qnil;
58
+ if (!ns->prefix) { return Qnil; }
39
59
 
40
60
  return NOKOGIRI_STR_NEW2(ns->prefix);
41
61
  }
@@ -46,66 +66,55 @@ static VALUE prefix(VALUE self)
46
66
  *
47
67
  * Get the href for this namespace
48
68
  */
49
- static VALUE href(VALUE self)
69
+ static VALUE
70
+ href(VALUE self)
50
71
  {
51
72
  xmlNsPtr ns;
52
73
 
53
74
  Data_Get_Struct(self, xmlNs, ns);
54
- if(!ns->href) return Qnil;
75
+ if (!ns->href) { return Qnil; }
55
76
 
56
77
  return NOKOGIRI_STR_NEW2(ns->href);
57
78
  }
58
79
 
59
- static int part_of_an_xpath_node_set_eh(xmlNsPtr node)
80
+ VALUE
81
+ noko_xml_namespace_wrap(xmlNsPtr c_namespace, xmlDocPtr c_document)
60
82
  {
61
- return (node->next && ! NOKOGIRI_NAMESPACE_EH(node->next));
62
- }
83
+ VALUE rb_namespace;
63
84
 
64
- VALUE Nokogiri_wrap_xml_namespace(xmlDocPtr doc, xmlNsPtr node)
65
- {
66
- VALUE ns = 0, document, node_cache;
67
-
68
- assert(doc->type == XML_DOCUMENT_NODE || doc->type == XML_HTML_DOCUMENT_NODE);
69
-
70
- if (node->_private) return (VALUE)node->_private;
71
-
72
- if (doc->type == XML_DOCUMENT_FRAG_NODE) doc = doc->doc;
85
+ if (c_namespace->_private) {
86
+ return (VALUE)c_namespace->_private;
87
+ }
73
88
 
74
- if (DOC_RUBY_OBJECT_TEST(doc)) {
75
- document = DOC_RUBY_OBJECT(doc);
89
+ if (c_document) {
90
+ rb_namespace = Data_Wrap_Struct(cNokogiriXmlNamespace, 0, 0, c_namespace);
76
91
 
77
- if (part_of_an_xpath_node_set_eh(node)) {
78
- /*
79
- * this is a duplicate returned as part of an xpath query node set, and so
80
- * we need to make sure we manage this memory.
81
- *
82
- * see comments in xml_node_set.c for more details.
83
- */
84
- ns = Data_Wrap_Struct(cNokogiriXmlNamespace, 0, dealloc_namespace, node);
85
- } else {
86
- ns = Data_Wrap_Struct(cNokogiriXmlNamespace, 0, 0, node);
87
- node_cache = rb_iv_get(document, "@node_cache");
88
- rb_ary_push(node_cache, ns);
92
+ if (DOC_RUBY_OBJECT_TEST(c_document)) {
93
+ rb_iv_set(rb_namespace, "@document", DOC_RUBY_OBJECT(c_document));
94
+ rb_ary_push(DOC_NODE_CACHE(c_document), rb_namespace);
89
95
  }
90
-
91
- rb_iv_set(ns, "@document", document);
92
96
  } else {
93
- ns = Data_Wrap_Struct(cNokogiriXmlNamespace, 0, 0, node);
97
+ rb_namespace = Data_Wrap_Struct(cNokogiriXmlNamespace, 0, dealloc_namespace, c_namespace);
94
98
  }
95
99
 
96
- node->_private = (void *)ns;
100
+ c_namespace->_private = (void *)rb_namespace;
101
+
102
+ return rb_namespace;
103
+ }
97
104
 
98
- return ns;
105
+ VALUE
106
+ noko_xml_namespace_wrap_xpath_copy(xmlNsPtr c_namespace)
107
+ {
108
+ return noko_xml_namespace_wrap(c_namespace, NULL);
99
109
  }
100
110
 
101
- void init_xml_namespace()
111
+ void
112
+ noko_init_xml_namespace()
102
113
  {
103
- VALUE nokogiri = rb_define_module("Nokogiri");
104
- VALUE xml = rb_define_module_under(nokogiri, "XML");
105
- VALUE klass = rb_define_class_under(xml, "Namespace", rb_cObject);
114
+ cNokogiriXmlNamespace = rb_define_class_under(mNokogiriXml, "Namespace", rb_cObject);
106
115
 
107
- cNokogiriXmlNamespace = klass;
116
+ rb_undef_alloc_func(cNokogiriXmlNamespace);
108
117
 
109
- rb_define_method(klass, "prefix", prefix, 0);
110
- rb_define_method(klass, "href", href, 0);
118
+ rb_define_method(cNokogiriXmlNamespace, "prefix", prefix, 0);
119
+ rb_define_method(cNokogiriXmlNamespace, "href", href, 0);
111
120
  }