nokogiri 1.10.9-java → 1.11.0.rc4-java

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 (158) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE-DEPENDENCIES.md +1015 -947
  3. data/README.md +24 -22
  4. data/ext/java/nokogiri/HtmlDocument.java +34 -46
  5. data/ext/java/nokogiri/HtmlSaxParserContext.java +88 -58
  6. data/ext/java/nokogiri/HtmlSaxPushParser.java +1 -1
  7. data/ext/java/nokogiri/NokogiriService.java +1 -1
  8. data/ext/java/nokogiri/XmlAttr.java +13 -20
  9. data/ext/java/nokogiri/XmlAttributeDecl.java +11 -12
  10. data/ext/java/nokogiri/XmlCdata.java +3 -4
  11. data/ext/java/nokogiri/XmlComment.java +1 -1
  12. data/ext/java/nokogiri/XmlDocument.java +148 -175
  13. data/ext/java/nokogiri/XmlDocumentFragment.java +13 -31
  14. data/ext/java/nokogiri/XmlDtd.java +5 -8
  15. data/ext/java/nokogiri/XmlElement.java +1 -20
  16. data/ext/java/nokogiri/XmlElementDecl.java +23 -28
  17. data/ext/java/nokogiri/XmlEntityDecl.java +23 -27
  18. data/ext/java/nokogiri/XmlEntityReference.java +2 -2
  19. data/ext/java/nokogiri/XmlNamespace.java +72 -89
  20. data/ext/java/nokogiri/XmlNode.java +303 -406
  21. data/ext/java/nokogiri/XmlNodeSet.java +70 -76
  22. data/ext/java/nokogiri/XmlReader.java +12 -13
  23. data/ext/java/nokogiri/XmlRelaxng.java +10 -3
  24. data/ext/java/nokogiri/XmlSaxParserContext.java +15 -10
  25. data/ext/java/nokogiri/XmlSchema.java +87 -27
  26. data/ext/java/nokogiri/XmlSyntaxError.java +2 -6
  27. data/ext/java/nokogiri/XmlText.java +12 -9
  28. data/ext/java/nokogiri/XmlXpathContext.java +55 -25
  29. data/ext/java/nokogiri/XsltStylesheet.java +7 -15
  30. data/ext/java/nokogiri/internals/HtmlDomParserContext.java +52 -46
  31. data/ext/java/nokogiri/internals/NokogiriHandler.java +1 -1
  32. data/ext/java/nokogiri/internals/NokogiriHelpers.java +71 -135
  33. data/ext/java/nokogiri/internals/NokogiriNamespaceCache.java +90 -58
  34. data/ext/java/nokogiri/internals/NokogiriNamespaceContext.java +9 -2
  35. data/ext/java/nokogiri/internals/NokogiriXPathFunction.java +67 -10
  36. data/ext/java/nokogiri/internals/NokogiriXPathFunctionResolver.java +4 -2
  37. data/ext/java/nokogiri/internals/ParserContext.java +27 -73
  38. data/ext/java/nokogiri/internals/ReaderNode.java +2 -4
  39. data/ext/java/nokogiri/internals/XmlDomParserContext.java +18 -33
  40. data/ext/nokogiri/depend +476 -357
  41. data/ext/nokogiri/extconf.rb +485 -352
  42. data/ext/nokogiri/html_document.c +79 -78
  43. data/ext/nokogiri/html_sax_parser_context.c +2 -2
  44. data/ext/nokogiri/nokogiri.c +34 -40
  45. data/ext/nokogiri/xml_document.c +18 -4
  46. data/ext/nokogiri/xml_io.c +8 -6
  47. data/ext/nokogiri/xml_node.c +21 -1
  48. data/ext/nokogiri/xml_node_set.c +1 -1
  49. data/ext/nokogiri/xml_reader.c +6 -17
  50. data/ext/nokogiri/xml_relax_ng.c +29 -11
  51. data/ext/nokogiri/xml_sax_parser.c +2 -7
  52. data/ext/nokogiri/xml_sax_parser_context.c +2 -2
  53. data/ext/nokogiri/xml_schema.c +55 -13
  54. data/ext/nokogiri/xml_xpath_context.c +80 -4
  55. data/ext/nokogiri/xslt_stylesheet.c +1 -8
  56. data/lib/nokogiri.rb +4 -21
  57. data/lib/nokogiri/css.rb +1 -0
  58. data/lib/nokogiri/css/node.rb +1 -0
  59. data/lib/nokogiri/css/parser.rb +63 -62
  60. data/lib/nokogiri/css/parser.y +2 -2
  61. data/lib/nokogiri/css/parser_extras.rb +39 -36
  62. data/lib/nokogiri/css/syntax_error.rb +1 -0
  63. data/lib/nokogiri/css/tokenizer.rb +1 -0
  64. data/lib/nokogiri/css/xpath_visitor.rb +73 -43
  65. data/lib/nokogiri/decorators/slop.rb +1 -0
  66. data/lib/nokogiri/html.rb +1 -0
  67. data/lib/nokogiri/html/builder.rb +1 -0
  68. data/lib/nokogiri/html/document.rb +13 -26
  69. data/lib/nokogiri/html/document_fragment.rb +1 -0
  70. data/lib/nokogiri/html/element_description.rb +1 -0
  71. data/lib/nokogiri/html/element_description_defaults.rb +1 -0
  72. data/lib/nokogiri/html/entity_lookup.rb +1 -0
  73. data/lib/nokogiri/html/sax/parser.rb +1 -0
  74. data/lib/nokogiri/html/sax/parser_context.rb +1 -0
  75. data/lib/nokogiri/html/sax/push_parser.rb +1 -0
  76. data/lib/nokogiri/jruby/dependencies.rb +20 -0
  77. data/lib/nokogiri/nokogiri.jar +0 -0
  78. data/lib/nokogiri/syntax_error.rb +1 -0
  79. data/lib/nokogiri/version.rb +3 -109
  80. data/lib/nokogiri/version/constant.rb +5 -0
  81. data/lib/nokogiri/version/info.rb +182 -0
  82. data/lib/nokogiri/xml.rb +1 -0
  83. data/lib/nokogiri/xml/attr.rb +1 -0
  84. data/lib/nokogiri/xml/attribute_decl.rb +1 -0
  85. data/lib/nokogiri/xml/builder.rb +3 -2
  86. data/lib/nokogiri/xml/cdata.rb +1 -0
  87. data/lib/nokogiri/xml/character_data.rb +1 -0
  88. data/lib/nokogiri/xml/document.rb +20 -15
  89. data/lib/nokogiri/xml/document_fragment.rb +5 -6
  90. data/lib/nokogiri/xml/dtd.rb +1 -0
  91. data/lib/nokogiri/xml/element_content.rb +1 -0
  92. data/lib/nokogiri/xml/element_decl.rb +1 -0
  93. data/lib/nokogiri/xml/entity_decl.rb +1 -0
  94. data/lib/nokogiri/xml/entity_reference.rb +1 -0
  95. data/lib/nokogiri/xml/namespace.rb +1 -0
  96. data/lib/nokogiri/xml/node.rb +587 -249
  97. data/lib/nokogiri/xml/node/save_options.rb +1 -0
  98. data/lib/nokogiri/xml/node_set.rb +1 -0
  99. data/lib/nokogiri/xml/notation.rb +1 -0
  100. data/lib/nokogiri/xml/parse_options.rb +10 -3
  101. data/lib/nokogiri/xml/pp.rb +1 -0
  102. data/lib/nokogiri/xml/pp/character_data.rb +1 -0
  103. data/lib/nokogiri/xml/pp/node.rb +1 -0
  104. data/lib/nokogiri/xml/processing_instruction.rb +1 -0
  105. data/lib/nokogiri/xml/reader.rb +7 -3
  106. data/lib/nokogiri/xml/relax_ng.rb +7 -2
  107. data/lib/nokogiri/xml/sax.rb +1 -0
  108. data/lib/nokogiri/xml/sax/document.rb +1 -0
  109. data/lib/nokogiri/xml/sax/parser.rb +1 -0
  110. data/lib/nokogiri/xml/sax/parser_context.rb +1 -0
  111. data/lib/nokogiri/xml/sax/push_parser.rb +1 -0
  112. data/lib/nokogiri/xml/schema.rb +13 -4
  113. data/lib/nokogiri/xml/searchable.rb +25 -16
  114. data/lib/nokogiri/xml/syntax_error.rb +1 -0
  115. data/lib/nokogiri/xml/text.rb +1 -0
  116. data/lib/nokogiri/xml/xpath.rb +1 -0
  117. data/lib/nokogiri/xml/xpath/syntax_error.rb +1 -0
  118. data/lib/nokogiri/xml/xpath_context.rb +1 -0
  119. data/lib/nokogiri/xslt.rb +1 -0
  120. data/lib/nokogiri/xslt/stylesheet.rb +1 -0
  121. data/lib/xsd/xmlparser/nokogiri.rb +1 -0
  122. metadata +89 -96
  123. data/ext/java/nokogiri/internals/NokogiriEncodingReaderWrapper.java +0 -107
  124. data/ext/java/nokogiri/internals/UncloseableInputStream.java +0 -102
  125. data/ext/nokogiri/html_document.h +0 -10
  126. data/ext/nokogiri/html_element_description.h +0 -10
  127. data/ext/nokogiri/html_entity_lookup.h +0 -8
  128. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  129. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  130. data/ext/nokogiri/nokogiri.h +0 -121
  131. data/ext/nokogiri/xml_attr.h +0 -9
  132. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  133. data/ext/nokogiri/xml_cdata.h +0 -9
  134. data/ext/nokogiri/xml_comment.h +0 -9
  135. data/ext/nokogiri/xml_document.h +0 -23
  136. data/ext/nokogiri/xml_document_fragment.h +0 -10
  137. data/ext/nokogiri/xml_dtd.h +0 -10
  138. data/ext/nokogiri/xml_element_content.h +0 -10
  139. data/ext/nokogiri/xml_element_decl.h +0 -9
  140. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  141. data/ext/nokogiri/xml_entity_decl.h +0 -10
  142. data/ext/nokogiri/xml_entity_reference.h +0 -9
  143. data/ext/nokogiri/xml_io.h +0 -11
  144. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  145. data/ext/nokogiri/xml_namespace.h +0 -14
  146. data/ext/nokogiri/xml_node.h +0 -13
  147. data/ext/nokogiri/xml_node_set.h +0 -12
  148. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  149. data/ext/nokogiri/xml_reader.h +0 -10
  150. data/ext/nokogiri/xml_relax_ng.h +0 -9
  151. data/ext/nokogiri/xml_sax_parser.h +0 -39
  152. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  153. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  154. data/ext/nokogiri/xml_schema.h +0 -9
  155. data/ext/nokogiri/xml_syntax_error.h +0 -13
  156. data/ext/nokogiri/xml_text.h +0 -9
  157. data/ext/nokogiri/xml_xpath_context.h +0 -10
  158. data/ext/nokogiri/xslt_stylesheet.h +0 -14
@@ -1,6 +1,7 @@
1
1
  #include <html_document.h>
2
2
 
3
3
  static ID id_encoding_found;
4
+ static ID id_to_s;
4
5
 
5
6
  /*
6
7
  * call-seq:
@@ -8,19 +9,20 @@ static ID id_encoding_found;
8
9
  *
9
10
  * Create a new document
10
11
  */
11
- static VALUE new(int argc, VALUE *argv, VALUE klass)
12
+ static VALUE
13
+ rb_html_document_s_new(int argc, VALUE *argv, VALUE klass)
12
14
  {
13
15
  VALUE uri, external_id, rest, rb_doc;
14
16
  htmlDocPtr doc;
15
17
 
16
18
  rb_scan_args(argc, argv, "0*", &rest);
17
- uri = rb_ary_entry(rest, (long)0);
19
+ uri = rb_ary_entry(rest, (long)0);
18
20
  external_id = rb_ary_entry(rest, (long)1);
19
21
 
20
22
  doc = htmlNewDoc(
21
- RTEST(uri) ? (const xmlChar *)StringValueCStr(uri) : NULL,
22
- RTEST(external_id) ? (const xmlChar *)StringValueCStr(external_id) : NULL
23
- );
23
+ RTEST(uri) ? (const xmlChar *)StringValueCStr(uri) : NULL,
24
+ RTEST(external_id) ? (const xmlChar *)StringValueCStr(external_id) : NULL
25
+ );
24
26
  rb_doc = Nokogiri_wrap_xml_document(klass, doc);
25
27
  rb_obj_call_init(rb_doc, argc, argv);
26
28
  return rb_doc ;
@@ -33,60 +35,55 @@ static VALUE new(int argc, VALUE *argv, VALUE klass)
33
35
  * Read the HTML document from +io+ with given +url+, +encoding+,
34
36
  * and +options+. See Nokogiri::HTML.parse
35
37
  */
36
- static VALUE read_io( VALUE klass,
37
- VALUE io,
38
- VALUE url,
39
- VALUE encoding,
40
- VALUE options )
38
+ static VALUE
39
+ rb_html_document_s_read_io(VALUE klass, VALUE rb_io, VALUE rb_url, VALUE rb_encoding, VALUE rb_options)
41
40
  {
42
- const char * c_url = NIL_P(url) ? NULL : StringValueCStr(url);
43
- const char * c_enc = NIL_P(encoding) ? NULL : StringValueCStr(encoding);
44
- VALUE error_list = rb_ary_new();
45
- VALUE document;
46
- htmlDocPtr doc;
41
+ VALUE rb_doc;
42
+ VALUE rb_error_list = rb_ary_new();
43
+ htmlDocPtr c_doc;
44
+ const char *c_url = NIL_P(rb_url) ? NULL : StringValueCStr(rb_url);
45
+ const char *c_encoding = NIL_P(rb_encoding) ? NULL : StringValueCStr(rb_encoding);
46
+ int options = NUM2INT(rb_options);
47
+
48
+ xmlSetStructuredErrorFunc((void *)rb_error_list, Nokogiri_error_array_pusher);
49
+
50
+ c_doc = htmlReadIO(io_read_callback, io_close_callback, (void *)rb_io, c_url, c_encoding, options);
47
51
 
48
- xmlResetLastError();
49
- xmlSetStructuredErrorFunc((void *)error_list, Nokogiri_error_array_pusher);
50
-
51
- doc = htmlReadIO(
52
- io_read_callback,
53
- io_close_callback,
54
- (void *)io,
55
- c_url,
56
- c_enc,
57
- (int)NUM2INT(options)
58
- );
59
52
  xmlSetStructuredErrorFunc(NULL, NULL);
60
53
 
61
54
  /*
62
55
  * If EncodingFound has occurred in EncodingReader, make sure to do
63
56
  * a cleanup and propagate the error.
64
57
  */
65
- if (rb_respond_to(io, id_encoding_found)) {
66
- VALUE encoding_found = rb_funcall(io, id_encoding_found, 0);
58
+ if (rb_respond_to(rb_io, id_encoding_found)) {
59
+ VALUE encoding_found = rb_funcall(rb_io, id_encoding_found, 0);
67
60
  if (!NIL_P(encoding_found)) {
68
- xmlFreeDoc(doc);
61
+ xmlFreeDoc(c_doc);
69
62
  rb_exc_raise(encoding_found);
70
63
  }
71
64
  }
72
65
 
73
- if(doc == NULL) {
74
- xmlErrorPtr error;
66
+ if ((c_doc == NULL) || (!(options & XML_PARSE_RECOVER) && (RARRAY_LEN(rb_error_list) > 0))) {
67
+ VALUE rb_error ;
75
68
 
76
- xmlFreeDoc(doc);
69
+ xmlFreeDoc(c_doc);
77
70
 
78
- error = xmlGetLastError();
79
- if(error)
80
- rb_exc_raise(Nokogiri_wrap_xml_syntax_error(error));
81
- else
71
+ rb_error = rb_ary_entry(rb_error_list, 0);
72
+ if (rb_error == Qnil) {
82
73
  rb_raise(rb_eRuntimeError, "Could not parse document");
74
+ } else {
75
+ VALUE exception_message = rb_funcall(rb_error, id_to_s, 0);
76
+ exception_message = rb_str_concat(rb_str_new2("Parser without recover option encountered error or warning: "),
77
+ exception_message);
78
+ rb_exc_raise(rb_class_new_instance(1, &exception_message, cNokogiriXmlSyntaxError));
79
+ }
83
80
 
84
81
  return Qnil;
85
82
  }
86
83
 
87
- document = Nokogiri_wrap_xml_document(klass, doc);
88
- rb_iv_set(document, "@errors", error_list);
89
- return document;
84
+ rb_doc = Nokogiri_wrap_xml_document(klass, c_doc);
85
+ rb_iv_set(rb_doc, "@errors", rb_error_list);
86
+ return rb_doc;
90
87
  }
91
88
 
92
89
  /*
@@ -96,43 +93,45 @@ static VALUE read_io( VALUE klass,
96
93
  * Read the HTML document contained in +string+ with given +url+, +encoding+,
97
94
  * and +options+. See Nokogiri::HTML.parse
98
95
  */
99
- static VALUE read_memory( VALUE klass,
100
- VALUE string,
101
- VALUE url,
102
- VALUE encoding,
103
- VALUE options )
96
+ static VALUE
97
+ rb_html_document_s_read_memory(VALUE klass, VALUE rb_html, VALUE rb_url, VALUE rb_encoding, VALUE rb_options)
104
98
  {
105
- const char * c_buffer = StringValuePtr(string);
106
- const char * c_url = NIL_P(url) ? NULL : StringValueCStr(url);
107
- const char * c_enc = NIL_P(encoding) ? NULL : StringValueCStr(encoding);
108
- int len = (int)RSTRING_LEN(string);
109
- VALUE error_list = rb_ary_new();
110
- VALUE document;
111
- htmlDocPtr doc;
99
+ VALUE rb_doc;
100
+ VALUE rb_error_list = rb_ary_new();
101
+ htmlDocPtr c_doc;
102
+ const char *c_buffer = StringValuePtr(rb_html);
103
+ const char *c_url = NIL_P(rb_url) ? NULL : StringValueCStr(rb_url);
104
+ const char *c_encoding = NIL_P(rb_encoding) ? NULL : StringValueCStr(rb_encoding);
105
+ int html_len = (int)RSTRING_LEN(rb_html);
106
+ int options = NUM2INT(rb_options);
112
107
 
113
- xmlResetLastError();
114
- xmlSetStructuredErrorFunc((void *)error_list, Nokogiri_error_array_pusher);
108
+ xmlSetStructuredErrorFunc((void *)rb_error_list, Nokogiri_error_array_pusher);
109
+
110
+ c_doc = htmlReadMemory(c_buffer, html_len, c_url, c_encoding, options);
115
111
 
116
- doc = htmlReadMemory(c_buffer, len, c_url, c_enc, (int)NUM2INT(options));
117
112
  xmlSetStructuredErrorFunc(NULL, NULL);
118
113
 
119
- if(doc == NULL) {
120
- xmlErrorPtr error;
114
+ if ((c_doc == NULL) || (!(options & XML_PARSE_RECOVER) && (RARRAY_LEN(rb_error_list) > 0))) {
115
+ VALUE rb_error ;
121
116
 
122
- xmlFreeDoc(doc);
117
+ xmlFreeDoc(c_doc);
123
118
 
124
- error = xmlGetLastError();
125
- if(error)
126
- rb_exc_raise(Nokogiri_wrap_xml_syntax_error(error));
127
- else
119
+ rb_error = rb_ary_entry(rb_error_list, 0);
120
+ if (rb_error == Qnil) {
128
121
  rb_raise(rb_eRuntimeError, "Could not parse document");
122
+ } else {
123
+ VALUE exception_message = rb_funcall(rb_error, id_to_s, 0);
124
+ exception_message = rb_str_concat(rb_str_new2("Parser without recover option encountered error or warning: "),
125
+ exception_message);
126
+ rb_exc_raise(rb_class_new_instance(1, &exception_message, cNokogiriXmlSyntaxError));
127
+ }
129
128
 
130
129
  return Qnil;
131
130
  }
132
131
 
133
- document = Nokogiri_wrap_xml_document(klass, doc);
134
- rb_iv_set(document, "@errors", error_list);
135
- return document;
132
+ rb_doc = Nokogiri_wrap_xml_document(klass, c_doc);
133
+ rb_iv_set(rb_doc, "@errors", rb_error_list);
134
+ return rb_doc;
136
135
  }
137
136
 
138
137
  /*
@@ -141,7 +140,8 @@ static VALUE read_memory( VALUE klass,
141
140
  *
142
141
  * The type for this document
143
142
  */
144
- static VALUE type(VALUE self)
143
+ static VALUE
144
+ rb_html_document_type(VALUE self)
145
145
  {
146
146
  htmlDocPtr doc;
147
147
  Data_Get_Struct(self, xmlDoc, doc);
@@ -149,22 +149,23 @@ static VALUE type(VALUE self)
149
149
  }
150
150
 
151
151
  VALUE cNokogiriHtmlDocument ;
152
- void init_html_document()
153
- {
154
- VALUE nokogiri = rb_define_module("Nokogiri");
155
- VALUE html = rb_define_module_under(nokogiri, "HTML");
156
- VALUE xml = rb_define_module_under(nokogiri, "XML");
157
- VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
158
- VALUE xml_doc = rb_define_class_under(xml, "Document", node);
159
- VALUE klass = rb_define_class_under(html, "Document", xml_doc);
160
152
 
161
- cNokogiriHtmlDocument = klass;
153
+ void
154
+ init_html_document()
155
+ {
156
+ VALUE nokogiri = rb_define_module("Nokogiri");
157
+ VALUE nokogiri_xml = rb_define_module_under(nokogiri, "XML");
158
+ VALUE nokogiri_xml_node = rb_define_class_under(nokogiri_xml, "Node", rb_cObject);
159
+ VALUE nokogiri_xml_document = rb_define_class_under(nokogiri_xml, "Document", nokogiri_xml_node);
160
+ VALUE nokogiri_html = rb_define_module_under(nokogiri, "HTML");
161
+ cNokogiriHtmlDocument = rb_define_class_under(nokogiri_html, "Document", nokogiri_xml_document);
162
162
 
163
- rb_define_singleton_method(klass, "read_memory", read_memory, 4);
164
- rb_define_singleton_method(klass, "read_io", read_io, 4);
165
- rb_define_singleton_method(klass, "new", new, -1);
163
+ rb_define_singleton_method(cNokogiriHtmlDocument, "read_memory", rb_html_document_s_read_memory, 4);
164
+ rb_define_singleton_method(cNokogiriHtmlDocument, "read_io", rb_html_document_s_read_io, 4);
165
+ rb_define_singleton_method(cNokogiriHtmlDocument, "new", rb_html_document_s_new, -1);
166
166
 
167
- rb_define_method(klass, "type", type, 0);
167
+ rb_define_method(cNokogiriHtmlDocument, "type", rb_html_document_type, 0);
168
168
 
169
169
  id_encoding_found = rb_intern("encoding_found");
170
+ id_to_s = rb_intern("to_s");
170
171
  }
@@ -4,13 +4,13 @@ VALUE cNokogiriHtmlSaxParserContext ;
4
4
 
5
5
  static void deallocate(xmlParserCtxtPtr ctxt)
6
6
  {
7
- NOKOGIRI_DEBUG_START(handler);
7
+ NOKOGIRI_DEBUG_START(ctxt);
8
8
 
9
9
  ctxt->sax = NULL;
10
10
 
11
11
  htmlFreeParserCtxt(ctxt);
12
12
 
13
- NOKOGIRI_DEBUG_END(handler);
13
+ NOKOGIRI_DEBUG_END(ctxt);
14
14
  }
15
15
 
16
16
  static VALUE
@@ -7,12 +7,11 @@ VALUE mNokogiriXslt ;
7
7
  VALUE mNokogiriXmlSax ;
8
8
  VALUE mNokogiriHtmlSax ;
9
9
 
10
- #ifdef USE_INCLUDED_VASPRINTF
10
+ #ifndef HAVE_VASPRINTF
11
11
  /*
12
- * I srsly hate windows. it doesn't have vasprintf.
13
12
  * Thank you Geoffroy Couprie for this implementation of vasprintf!
14
13
  */
15
- int vasprintf (char **strp, const char *fmt, va_list ap)
14
+ int vasprintf(char **strp, const char *fmt, va_list ap)
16
15
  {
17
16
  /* Mingw32/64 have a broken vsnprintf implementation that fails when
18
17
  * using a zero-byte limit in order to retrieve the required size for malloc.
@@ -21,23 +20,15 @@ int vasprintf (char **strp, const char *fmt, va_list ap)
21
20
  char tmp[1];
22
21
  int len = vsnprintf (tmp, 1, fmt, ap) + 1;
23
22
  char *res = (char *)malloc((unsigned int)len);
24
- if (res == NULL)
25
- return -1;
23
+ if (res == NULL) {
24
+ return -1;
25
+ }
26
26
  *strp = res;
27
27
  return vsnprintf(res, (unsigned int)len, fmt, ap);
28
28
  }
29
29
  #endif
30
30
 
31
- void vasprintf_free (void *p)
32
- {
33
- free(p);
34
- }
35
-
36
- #ifdef HAVE_RUBY_UTIL_H
37
31
  #include "ruby/util.h"
38
- #else
39
- #include "util.h"
40
- #endif
41
32
 
42
33
  void nokogiri_root_node(xmlNodePtr node)
43
34
  {
@@ -45,7 +36,7 @@ void nokogiri_root_node(xmlNodePtr node)
45
36
  nokogiriTuplePtr tuple;
46
37
 
47
38
  doc = node->doc;
48
- if (doc->type == XML_DOCUMENT_FRAG_NODE) doc = doc->doc;
39
+ if (doc->type == XML_DOCUMENT_FRAG_NODE) { doc = doc->doc; }
49
40
  tuple = (nokogiriTuplePtr)doc->_private;
50
41
  st_insert(tuple->unlinkedNodes, (st_data_t)node, (st_data_t)node);
51
42
  }
@@ -54,7 +45,7 @@ void nokogiri_root_nsdef(xmlNsPtr ns, xmlDocPtr doc)
54
45
  {
55
46
  nokogiriTuplePtr tuple;
56
47
 
57
- if (doc->type == XML_DOCUMENT_FRAG_NODE) doc = doc->doc;
48
+ if (doc->type == XML_DOCUMENT_FRAG_NODE) { doc = doc->doc; }
58
49
  tuple = (nokogiriTuplePtr)doc->_private;
59
50
  st_insert(tuple->unlinkedNodes, (st_data_t)ns, (st_data_t)ns);
60
51
  }
@@ -62,10 +53,10 @@ void nokogiri_root_nsdef(xmlNsPtr ns, xmlDocPtr doc)
62
53
  void Init_nokogiri()
63
54
  {
64
55
  xmlMemSetup(
65
- (xmlFreeFunc)ruby_xfree,
66
- (xmlMallocFunc)ruby_xmalloc,
67
- (xmlReallocFunc)ruby_xrealloc,
68
- ruby_strdup
56
+ (xmlFreeFunc)ruby_xfree,
57
+ (xmlMallocFunc)ruby_xmalloc,
58
+ (xmlReallocFunc)ruby_xrealloc,
59
+ ruby_strdup
69
60
  );
70
61
 
71
62
  mNokogiri = rb_define_module("Nokogiri");
@@ -75,27 +66,26 @@ void Init_nokogiri()
75
66
  mNokogiriXmlSax = rb_define_module_under(mNokogiriXml, "SAX");
76
67
  mNokogiriHtmlSax = rb_define_module_under(mNokogiriHtml, "SAX");
77
68
 
78
- rb_const_set( mNokogiri,
79
- rb_intern("LIBXML_VERSION"),
80
- NOKOGIRI_STR_NEW2(LIBXML_DOTTED_VERSION)
81
- );
82
- rb_const_set( mNokogiri,
83
- rb_intern("LIBXML_PARSER_VERSION"),
84
- NOKOGIRI_STR_NEW2(xmlParserVersion)
85
- );
86
-
87
- #ifdef NOKOGIRI_USE_PACKAGED_LIBRARIES
88
- rb_const_set(mNokogiri, rb_intern("NOKOGIRI_USE_PACKAGED_LIBRARIES"), Qtrue);
89
- rb_const_set(mNokogiri, rb_intern("NOKOGIRI_LIBXML2_PATH"), NOKOGIRI_STR_NEW2(NOKOGIRI_LIBXML2_PATH));
90
- rb_const_set(mNokogiri, rb_intern("NOKOGIRI_LIBXSLT_PATH"), NOKOGIRI_STR_NEW2(NOKOGIRI_LIBXSLT_PATH));
91
- rb_const_set(mNokogiri, rb_intern("NOKOGIRI_LIBXML2_PATCHES"), rb_str_split(NOKOGIRI_STR_NEW2(NOKOGIRI_LIBXML2_PATCHES), " "));
92
- rb_const_set(mNokogiri, rb_intern("NOKOGIRI_LIBXSLT_PATCHES"), rb_str_split(NOKOGIRI_STR_NEW2(NOKOGIRI_LIBXSLT_PATCHES), " "));
69
+ rb_const_set(mNokogiri, rb_intern("LIBXML_COMPILED_VERSION"), NOKOGIRI_STR_NEW2(LIBXML_DOTTED_VERSION));
70
+ rb_const_set(mNokogiri, rb_intern("LIBXML_LOADED_VERSION"), NOKOGIRI_STR_NEW2(xmlParserVersion));
71
+
72
+ rb_const_set(mNokogiri, rb_intern("LIBXSLT_COMPILED_VERSION"), NOKOGIRI_STR_NEW2(LIBXSLT_DOTTED_VERSION));
73
+ rb_const_set(mNokogiri, rb_intern("LIBXSLT_LOADED_VERSION"), NOKOGIRI_STR_NEW2(xsltEngineVersion));
74
+
75
+ #ifdef NOKOGIRI_PACKAGED_LIBRARIES
76
+ rb_const_set(mNokogiri, rb_intern("PACKAGED_LIBRARIES"), Qtrue);
77
+ #ifdef NOKOGIRI_PRECOMPILED_LIBRARIES
78
+ rb_const_set(mNokogiri, rb_intern("PRECOMPILED_LIBRARIES"), Qtrue);
79
+ #else
80
+ rb_const_set(mNokogiri, rb_intern("PRECOMPILED_LIBRARIES"), Qfalse);
81
+ #endif
82
+ rb_const_set(mNokogiri, rb_intern("LIBXML2_PATCHES"), rb_str_split(NOKOGIRI_STR_NEW2(NOKOGIRI_LIBXML2_PATCHES), " "));
83
+ rb_const_set(mNokogiri, rb_intern("LIBXSLT_PATCHES"), rb_str_split(NOKOGIRI_STR_NEW2(NOKOGIRI_LIBXSLT_PATCHES), " "));
93
84
  #else
94
- rb_const_set(mNokogiri, rb_intern("NOKOGIRI_USE_PACKAGED_LIBRARIES"), Qfalse);
95
- rb_const_set(mNokogiri, rb_intern("NOKOGIRI_LIBXML2_PATH"), Qnil);
96
- rb_const_set(mNokogiri, rb_intern("NOKOGIRI_LIBXSLT_PATH"), Qnil);
97
- rb_const_set(mNokogiri, rb_intern("NOKOGIRI_LIBXML2_PATCHES"), Qnil);
98
- rb_const_set(mNokogiri, rb_intern("NOKOGIRI_LIBXSLT_PATCHES"), Qnil);
85
+ rb_const_set(mNokogiri, rb_intern("PACKAGED_LIBRARIES"), Qfalse);
86
+ rb_const_set(mNokogiri, rb_intern("PRECOMPILED_LIBRARIES"), Qfalse);
87
+ rb_const_set(mNokogiri, rb_intern("LIBXML2_PATCHES"), Qnil);
88
+ rb_const_set(mNokogiri, rb_intern("LIBXSLT_PATCHES"), Qnil);
99
89
  #endif
100
90
 
101
91
  #ifdef LIBXML_ICONV_ENABLED
@@ -104,6 +94,10 @@ void Init_nokogiri()
104
94
  rb_const_set(mNokogiri, rb_intern("LIBXML_ICONV_ENABLED"), Qfalse);
105
95
  #endif
106
96
 
97
+ #ifdef NOKOGIRI_OTHER_LIBRARY_VERSIONS
98
+ rb_const_set(mNokogiri, rb_intern("OTHER_LIBRARY_VERSIONS"), NOKOGIRI_STR_NEW2(NOKOGIRI_OTHER_LIBRARY_VERSIONS));
99
+ #endif
100
+
107
101
  xmlInitParser();
108
102
 
109
103
  init_xml_document();
@@ -1,6 +1,6 @@
1
1
  #include <xml_document.h>
2
2
 
3
- static int dealloc_node_i(xmlNodePtr key, xmlNodePtr node, xmlDocPtr doc)
3
+ static int dealloc_node_i2(xmlNodePtr key, xmlNodePtr node, xmlDocPtr doc)
4
4
  {
5
5
  switch(node->type) {
6
6
  case XML_ATTRIBUTE_NODE:
@@ -20,6 +20,11 @@ static int dealloc_node_i(xmlNodePtr key, xmlNodePtr node, xmlDocPtr doc)
20
20
  return ST_CONTINUE;
21
21
  }
22
22
 
23
+ static int dealloc_node_i(st_data_t key, st_data_t node, st_data_t doc)
24
+ {
25
+ return dealloc_node_i2((xmlNodePtr)key, (xmlNodePtr)node, (xmlDocPtr)doc);
26
+ }
27
+
23
28
  static void remove_private(xmlNodePtr node)
24
29
  {
25
30
  xmlNodePtr child;
@@ -38,6 +43,15 @@ static void remove_private(xmlNodePtr node)
38
43
  node->_private = NULL;
39
44
  }
40
45
 
46
+ static void mark(xmlDocPtr doc)
47
+ {
48
+ nokogiriTuplePtr tuple = (nokogiriTuplePtr)doc->_private;
49
+ if(tuple) {
50
+ rb_gc_mark(tuple->doc);
51
+ rb_gc_mark(tuple->node_cache);
52
+ }
53
+ }
54
+
41
55
  static void dealloc(xmlDocPtr doc)
42
56
  {
43
57
  st_table *node_hash;
@@ -492,7 +506,7 @@ static int block_caller(void * ctx, xmlNodePtr _node, xmlNodePtr _parent)
492
506
  * The block must return a non-nil, non-false value if the +obj+ passed in
493
507
  * should be included in the canonicalized document.
494
508
  */
495
- static VALUE canonicalize(int argc, VALUE* argv, VALUE self)
509
+ static VALUE nokogiri_xml_document_canonicalize(int argc, VALUE* argv, VALUE self)
496
510
  {
497
511
  VALUE mode;
498
512
  VALUE incl_ns;
@@ -573,7 +587,7 @@ void init_xml_document()
573
587
  rb_define_method(klass, "encoding", encoding, 0);
574
588
  rb_define_method(klass, "encoding=", set_encoding, 1);
575
589
  rb_define_method(klass, "version", version, 0);
576
- rb_define_method(klass, "canonicalize", canonicalize, -1);
590
+ rb_define_method(klass, "canonicalize", nokogiri_xml_document_canonicalize, -1);
577
591
  rb_define_method(klass, "dup", duplicate_document, -1);
578
592
  rb_define_method(klass, "url", url, 0);
579
593
  rb_define_method(klass, "create_entity", create_entity, -1);
@@ -588,7 +602,7 @@ VALUE Nokogiri_wrap_xml_document(VALUE klass, xmlDocPtr doc)
588
602
 
589
603
  VALUE rb_doc = Data_Wrap_Struct(
590
604
  klass ? klass : cNokogiriXmlDocument,
591
- 0,
605
+ mark,
592
606
  dealloc,
593
607
  doc
594
608
  );
@@ -2,12 +2,13 @@
2
2
 
3
3
  static ID id_read, id_write;
4
4
 
5
- VALUE read_check(VALUE *args) {
5
+ VALUE read_check(VALUE val) {
6
+ VALUE *args = (VALUE *)val;
6
7
  return rb_funcall(args[0], id_read, 1, args[1]);
7
8
  }
8
9
 
9
- VALUE read_failed(void) {
10
- return Qundef;
10
+ VALUE read_failed(VALUE arg, VALUE exc) {
11
+ return Qundef;
11
12
  }
12
13
 
13
14
  int io_read_callback(void * ctx, char * buffer, int len) {
@@ -30,12 +31,13 @@ int io_read_callback(void * ctx, char * buffer, int len) {
30
31
  return (int)safe_len;
31
32
  }
32
33
 
33
- VALUE write_check(VALUE *args) {
34
+ VALUE write_check(VALUE val) {
35
+ VALUE *args = (VALUE *)val;
34
36
  return rb_funcall(args[0], id_write, 1, args[1]);
35
37
  }
36
38
 
37
- VALUE write_failed(void) {
38
- return Qundef;
39
+ VALUE write_failed(VALUE arg, VALUE exc) {
40
+ return Qundef;
39
41
  }
40
42
 
41
43
  int io_write_callback(void * ctx, char * buffer, int len) {