nokogiri 1.11.0.rc4 → 1.11.3

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 (93) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -0
  3. data/LICENSE-DEPENDENCIES.md +12 -12
  4. data/LICENSE.md +1 -1
  5. data/README.md +168 -91
  6. data/ext/nokogiri/depend +34 -474
  7. data/ext/nokogiri/extconf.rb +270 -183
  8. data/ext/nokogiri/html_document.c +10 -15
  9. data/ext/nokogiri/html_element_description.c +84 -71
  10. data/ext/nokogiri/html_entity_lookup.c +21 -16
  11. data/ext/nokogiri/html_sax_parser_context.c +67 -64
  12. data/ext/nokogiri/html_sax_push_parser.c +42 -34
  13. data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
  14. data/ext/nokogiri/nokogiri.c +171 -60
  15. data/ext/nokogiri/nokogiri.h +158 -75
  16. data/ext/nokogiri/test_global_handlers.c +40 -0
  17. data/ext/nokogiri/xml_attr.c +15 -15
  18. data/ext/nokogiri/xml_attribute_decl.c +18 -18
  19. data/ext/nokogiri/xml_cdata.c +13 -18
  20. data/ext/nokogiri/xml_comment.c +19 -26
  21. data/ext/nokogiri/xml_document.c +246 -188
  22. data/ext/nokogiri/xml_document_fragment.c +13 -15
  23. data/ext/nokogiri/xml_dtd.c +54 -48
  24. data/ext/nokogiri/xml_element_content.c +30 -27
  25. data/ext/nokogiri/xml_element_decl.c +22 -22
  26. data/ext/nokogiri/xml_encoding_handler.c +17 -11
  27. data/ext/nokogiri/xml_entity_decl.c +32 -30
  28. data/ext/nokogiri/xml_entity_reference.c +16 -18
  29. data/ext/nokogiri/xml_namespace.c +56 -49
  30. data/ext/nokogiri/xml_node.c +371 -320
  31. data/ext/nokogiri/xml_node_set.c +168 -156
  32. data/ext/nokogiri/xml_processing_instruction.c +17 -19
  33. data/ext/nokogiri/xml_reader.c +191 -157
  34. data/ext/nokogiri/xml_relax_ng.c +29 -23
  35. data/ext/nokogiri/xml_sax_parser.c +117 -112
  36. data/ext/nokogiri/xml_sax_parser_context.c +101 -84
  37. data/ext/nokogiri/xml_sax_push_parser.c +36 -27
  38. data/ext/nokogiri/xml_schema.c +48 -42
  39. data/ext/nokogiri/xml_syntax_error.c +42 -21
  40. data/ext/nokogiri/xml_text.c +13 -17
  41. data/ext/nokogiri/xml_xpath_context.c +134 -127
  42. data/ext/nokogiri/xslt_stylesheet.c +157 -157
  43. data/lib/nokogiri/css/parser.rb +1 -1
  44. data/lib/nokogiri/extension.rb +26 -0
  45. data/lib/nokogiri/html/document_fragment.rb +15 -15
  46. data/lib/nokogiri/version/constant.rb +1 -1
  47. data/lib/nokogiri/version/info.rb +31 -8
  48. data/lib/nokogiri/xml/document.rb +74 -28
  49. data/lib/nokogiri/xml/node.rb +39 -42
  50. data/lib/nokogiri/xml/reader.rb +2 -9
  51. data/lib/nokogiri/xml/xpath/syntax_error.rb +1 -1
  52. data/lib/nokogiri/xml/xpath.rb +1 -3
  53. data/lib/nokogiri.rb +2 -6
  54. data/patches/libxml2/0009-avoid-isnan-isinf.patch +81 -0
  55. data/patches/libxml2/0010-parser.c-shrink-the-input-buffer-when-appropriate.patch +70 -0
  56. data/patches/libxml2/0011-update-automake-files-for-arm64.patch +2511 -0
  57. data/patches/libxslt/0001-update-automake-files-for-arm64.patch +2511 -0
  58. metadata +66 -160
  59. data/ext/nokogiri/html_document.h +0 -10
  60. data/ext/nokogiri/html_element_description.h +0 -10
  61. data/ext/nokogiri/html_entity_lookup.h +0 -8
  62. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  63. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  64. data/ext/nokogiri/xml_attr.h +0 -9
  65. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  66. data/ext/nokogiri/xml_cdata.h +0 -9
  67. data/ext/nokogiri/xml_comment.h +0 -9
  68. data/ext/nokogiri/xml_document.h +0 -23
  69. data/ext/nokogiri/xml_document_fragment.h +0 -10
  70. data/ext/nokogiri/xml_dtd.h +0 -10
  71. data/ext/nokogiri/xml_element_content.h +0 -10
  72. data/ext/nokogiri/xml_element_decl.h +0 -9
  73. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  74. data/ext/nokogiri/xml_entity_decl.h +0 -10
  75. data/ext/nokogiri/xml_entity_reference.h +0 -9
  76. data/ext/nokogiri/xml_io.c +0 -63
  77. data/ext/nokogiri/xml_io.h +0 -11
  78. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  79. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  80. data/ext/nokogiri/xml_namespace.h +0 -14
  81. data/ext/nokogiri/xml_node.h +0 -13
  82. data/ext/nokogiri/xml_node_set.h +0 -12
  83. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  84. data/ext/nokogiri/xml_reader.h +0 -10
  85. data/ext/nokogiri/xml_relax_ng.h +0 -9
  86. data/ext/nokogiri/xml_sax_parser.h +0 -39
  87. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  88. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  89. data/ext/nokogiri/xml_schema.h +0 -9
  90. data/ext/nokogiri/xml_syntax_error.h +0 -13
  91. data/ext/nokogiri/xml_text.h +0 -9
  92. data/ext/nokogiri/xml_xpath_context.h +0 -10
  93. data/ext/nokogiri/xslt_stylesheet.h +0 -14
@@ -1,31 +1,29 @@
1
- #include <xslt_stylesheet.h>
1
+ #include <nokogiri.h>
2
2
 
3
- #include <libxslt/xsltInternals.h>
4
- #include <libxslt/xsltutils.h>
5
- #include <libxslt/transform.h>
6
- #include <libexslt/exslt.h>
7
-
8
- VALUE xslt;
3
+ VALUE cNokogiriXsltStylesheet ;
9
4
 
10
- static void mark(nokogiriXsltStylesheetTuple *wrapper)
5
+ static void
6
+ mark(nokogiriXsltStylesheetTuple *wrapper)
11
7
  {
12
8
  rb_gc_mark(wrapper->func_instances);
13
9
  }
14
10
 
15
- static void dealloc(nokogiriXsltStylesheetTuple *wrapper)
11
+ static void
12
+ dealloc(nokogiriXsltStylesheetTuple *wrapper)
16
13
  {
17
- xsltStylesheetPtr doc = wrapper->ss;
14
+ xsltStylesheetPtr doc = wrapper->ss;
18
15
 
19
- NOKOGIRI_DEBUG_START(doc);
20
- xsltFreeStylesheet(doc); /* commented out for now. */
21
- NOKOGIRI_DEBUG_END(doc);
16
+ NOKOGIRI_DEBUG_START(doc);
17
+ xsltFreeStylesheet(doc); /* commented out for now. */
18
+ NOKOGIRI_DEBUG_END(doc);
22
19
 
23
- free(wrapper);
20
+ free(wrapper);
24
21
  }
25
22
 
26
- static void xslt_generic_error_handler(void * ctx, const char *msg, ...)
23
+ static void
24
+ xslt_generic_error_handler(void *ctx, const char *msg, ...)
27
25
  {
28
- char * message;
26
+ char *message;
29
27
 
30
28
  va_list args;
31
29
  va_start(args, msg);
@@ -37,7 +35,8 @@ static void xslt_generic_error_handler(void * ctx, const char *msg, ...)
37
35
  free(message);
38
36
  }
39
37
 
40
- VALUE Nokogiri_wrap_xslt_stylesheet(xsltStylesheetPtr ss)
38
+ VALUE
39
+ Nokogiri_wrap_xslt_stylesheet(xsltStylesheetPtr ss)
41
40
  {
42
41
  VALUE self;
43
42
  nokogiriXsltStylesheetTuple *wrapper;
@@ -58,29 +57,30 @@ VALUE Nokogiri_wrap_xslt_stylesheet(xsltStylesheetPtr ss)
58
57
  *
59
58
  * Parse a stylesheet from +document+.
60
59
  */
61
- static VALUE parse_stylesheet_doc(VALUE klass, VALUE xmldocobj)
60
+ static VALUE
61
+ parse_stylesheet_doc(VALUE klass, VALUE xmldocobj)
62
62
  {
63
- xmlDocPtr xml, xml_cpy;
64
- VALUE errstr, exception;
65
- xsltStylesheetPtr ss ;
66
- Data_Get_Struct(xmldocobj, xmlDoc, xml);
67
- exsltRegisterAll();
63
+ xmlDocPtr xml, xml_cpy;
64
+ VALUE errstr, exception;
65
+ xsltStylesheetPtr ss ;
66
+ Data_Get_Struct(xmldocobj, xmlDoc, xml);
67
+ exsltRegisterAll();
68
68
 
69
- errstr = rb_str_new(0, 0);
70
- xsltSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
69
+ errstr = rb_str_new(0, 0);
70
+ xsltSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
71
71
 
72
- xml_cpy = xmlCopyDoc(xml, 1); /* 1 => recursive */
73
- ss = xsltParseStylesheetDoc(xml_cpy);
72
+ xml_cpy = xmlCopyDoc(xml, 1); /* 1 => recursive */
73
+ ss = xsltParseStylesheetDoc(xml_cpy);
74
74
 
75
- xsltSetGenericErrorFunc(NULL, NULL);
75
+ xsltSetGenericErrorFunc(NULL, NULL);
76
76
 
77
- if (!ss) {
78
- xmlFreeDoc(xml_cpy);
79
- exception = rb_exc_new3(rb_eRuntimeError, errstr);
80
- rb_exc_raise(exception);
81
- }
77
+ if (!ss) {
78
+ xmlFreeDoc(xml_cpy);
79
+ exception = rb_exc_new3(rb_eRuntimeError, errstr);
80
+ rb_exc_raise(exception);
81
+ }
82
82
 
83
- return Nokogiri_wrap_xslt_stylesheet(ss);
83
+ return Nokogiri_wrap_xslt_stylesheet(ss);
84
84
  }
85
85
 
86
86
 
@@ -90,20 +90,21 @@ static VALUE parse_stylesheet_doc(VALUE klass, VALUE xmldocobj)
90
90
  *
91
91
  * Serialize +document+ to an xml string.
92
92
  */
93
- static VALUE serialize(VALUE self, VALUE xmlobj)
93
+ static VALUE
94
+ serialize(VALUE self, VALUE xmlobj)
94
95
  {
95
- xmlDocPtr xml ;
96
- nokogiriXsltStylesheetTuple *wrapper;
97
- xmlChar* doc_ptr ;
98
- int doc_len ;
99
- VALUE rval ;
100
-
101
- Data_Get_Struct(xmlobj, xmlDoc, xml);
102
- Data_Get_Struct(self, nokogiriXsltStylesheetTuple, wrapper);
103
- xsltSaveResultToString(&doc_ptr, &doc_len, xml, wrapper->ss);
104
- rval = NOKOGIRI_STR_NEW(doc_ptr, doc_len);
105
- xmlFree(doc_ptr);
106
- return rval ;
96
+ xmlDocPtr xml ;
97
+ nokogiriXsltStylesheetTuple *wrapper;
98
+ xmlChar *doc_ptr ;
99
+ int doc_len ;
100
+ VALUE rval ;
101
+
102
+ Data_Get_Struct(xmlobj, xmlDoc, xml);
103
+ Data_Get_Struct(self, nokogiriXsltStylesheetTuple, wrapper);
104
+ xsltSaveResultToString(&doc_ptr, &doc_len, xml, wrapper->ss);
105
+ rval = NOKOGIRI_STR_NEW(doc_ptr, doc_len);
106
+ xmlFree(doc_ptr);
107
+ return rval ;
107
108
  }
108
109
 
109
110
  /*
@@ -121,109 +122,114 @@ static VALUE serialize(VALUE self, VALUE xmlobj)
121
122
  * puts xslt.transform(doc, ['key', 'value'])
122
123
  *
123
124
  */
124
- static VALUE transform(int argc, VALUE* argv, VALUE self)
125
+ static VALUE
126
+ transform(int argc, VALUE *argv, VALUE self)
125
127
  {
126
- VALUE xmldoc, paramobj, errstr, exception ;
127
- xmlDocPtr xml ;
128
- xmlDocPtr result ;
129
- nokogiriXsltStylesheetTuple *wrapper;
130
- const char** params ;
131
- long param_len, j ;
132
- int parse_error_occurred ;
133
-
134
- rb_scan_args(argc, argv, "11", &xmldoc, &paramobj);
135
- if (NIL_P(paramobj)) { paramobj = rb_ary_new2(0L) ; }
136
- if (!rb_obj_is_kind_of(xmldoc, cNokogiriXmlDocument))
137
- rb_raise(rb_eArgError, "argument must be a Nokogiri::XML::Document");
138
-
139
- /* handle hashes as arguments. */
140
- if(T_HASH == TYPE(paramobj)) {
141
- paramobj = rb_funcall(paramobj, rb_intern("to_a"), 0);
142
- paramobj = rb_funcall(paramobj, rb_intern("flatten"), 0);
143
- }
144
-
145
- Check_Type(paramobj, T_ARRAY);
146
-
147
- Data_Get_Struct(xmldoc, xmlDoc, xml);
148
- Data_Get_Struct(self, nokogiriXsltStylesheetTuple, wrapper);
149
-
150
- param_len = RARRAY_LEN(paramobj);
151
- params = calloc((size_t)param_len+1, sizeof(char*));
152
- for (j = 0 ; j < param_len ; j++) {
153
- VALUE entry = rb_ary_entry(paramobj, j);
154
- const char * ptr = StringValueCStr(entry);
155
- params[j] = ptr;
156
- }
157
- params[param_len] = 0 ;
158
-
159
- errstr = rb_str_new(0, 0);
160
- xsltSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
161
- xmlSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
162
-
163
- result = xsltApplyStylesheet(wrapper->ss, xml, params);
164
- free(params);
165
-
166
- xsltSetGenericErrorFunc(NULL, NULL);
167
- xmlSetGenericErrorFunc(NULL, NULL);
168
-
169
- parse_error_occurred = (Qfalse == rb_funcall(errstr, rb_intern("empty?"), 0));
170
-
171
- if (parse_error_occurred) {
172
- exception = rb_exc_new3(rb_eRuntimeError, errstr);
173
- rb_exc_raise(exception);
174
- }
175
-
176
- return Nokogiri_wrap_xml_document((VALUE)0, result) ;
128
+ VALUE xmldoc, paramobj, errstr, exception ;
129
+ xmlDocPtr xml ;
130
+ xmlDocPtr result ;
131
+ nokogiriXsltStylesheetTuple *wrapper;
132
+ const char **params ;
133
+ long param_len, j ;
134
+ int parse_error_occurred ;
135
+
136
+ rb_scan_args(argc, argv, "11", &xmldoc, &paramobj);
137
+ if (NIL_P(paramobj)) { paramobj = rb_ary_new2(0L) ; }
138
+ if (!rb_obj_is_kind_of(xmldoc, cNokogiriXmlDocument)) {
139
+ rb_raise(rb_eArgError, "argument must be a Nokogiri::XML::Document");
140
+ }
141
+
142
+ /* handle hashes as arguments. */
143
+ if (T_HASH == TYPE(paramobj)) {
144
+ paramobj = rb_funcall(paramobj, rb_intern("to_a"), 0);
145
+ paramobj = rb_funcall(paramobj, rb_intern("flatten"), 0);
146
+ }
147
+
148
+ Check_Type(paramobj, T_ARRAY);
149
+
150
+ Data_Get_Struct(xmldoc, xmlDoc, xml);
151
+ Data_Get_Struct(self, nokogiriXsltStylesheetTuple, wrapper);
152
+
153
+ param_len = RARRAY_LEN(paramobj);
154
+ params = calloc((size_t)param_len + 1, sizeof(char *));
155
+ for (j = 0 ; j < param_len ; j++) {
156
+ VALUE entry = rb_ary_entry(paramobj, j);
157
+ const char *ptr = StringValueCStr(entry);
158
+ params[j] = ptr;
159
+ }
160
+ params[param_len] = 0 ;
161
+
162
+ errstr = rb_str_new(0, 0);
163
+ xsltSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
164
+ xmlSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
165
+
166
+ result = xsltApplyStylesheet(wrapper->ss, xml, params);
167
+ free(params);
168
+
169
+ xsltSetGenericErrorFunc(NULL, NULL);
170
+ xmlSetGenericErrorFunc(NULL, NULL);
171
+
172
+ parse_error_occurred = (Qfalse == rb_funcall(errstr, rb_intern("empty?"), 0));
173
+
174
+ if (parse_error_occurred) {
175
+ exception = rb_exc_new3(rb_eRuntimeError, errstr);
176
+ rb_exc_raise(exception);
177
+ }
178
+
179
+ return noko_xml_document_wrap((VALUE)0, result) ;
177
180
  }
178
181
 
179
- static void method_caller(xmlXPathParserContextPtr ctxt, int nargs)
182
+ static void
183
+ method_caller(xmlXPathParserContextPtr ctxt, int nargs)
180
184
  {
181
- VALUE handler;
182
- const char *function_name;
183
- xsltTransformContextPtr transform;
184
- const xmlChar *functionURI;
185
+ VALUE handler;
186
+ const char *function_name;
187
+ xsltTransformContextPtr transform;
188
+ const xmlChar *functionURI;
185
189
 
186
- transform = xsltXPathGetTransformContext(ctxt);
187
- functionURI = ctxt->context->functionURI;
188
- handler = (VALUE)xsltGetExtData(transform, functionURI);
189
- function_name = (const char*)(ctxt->context->function);
190
+ transform = xsltXPathGetTransformContext(ctxt);
191
+ functionURI = ctxt->context->functionURI;
192
+ handler = (VALUE)xsltGetExtData(transform, functionURI);
193
+ function_name = (const char *)(ctxt->context->function);
190
194
 
191
- Nokogiri_marshal_xpath_funcall_and_return_values(ctxt, nargs, handler, (const char*)function_name);
195
+ Nokogiri_marshal_xpath_funcall_and_return_values(ctxt, nargs, handler, (const char *)function_name);
192
196
  }
193
197
 
194
- static void * initFunc(xsltTransformContextPtr ctxt, const xmlChar *uri)
198
+ static void *
199
+ initFunc(xsltTransformContextPtr ctxt, const xmlChar *uri)
195
200
  {
196
- VALUE modules = rb_iv_get(xslt, "@modules");
197
- VALUE obj = rb_hash_aref(modules, rb_str_new2((const char *)uri));
198
- VALUE args = { Qfalse };
199
- VALUE methods = rb_funcall(obj, rb_intern("instance_methods"), 1, args);
200
- VALUE inst;
201
- nokogiriXsltStylesheetTuple *wrapper;
202
- int i;
203
-
204
- for(i = 0; i < RARRAY_LEN(methods); i++) {
205
- VALUE method_name = rb_obj_as_string(rb_ary_entry(methods, i));
206
- xsltRegisterExtFunction(ctxt,
207
- (unsigned char *)StringValueCStr(method_name), uri, method_caller);
208
- }
209
-
210
- Data_Get_Struct((VALUE)ctxt->style->_private, nokogiriXsltStylesheetTuple,
211
- wrapper);
212
- inst = rb_class_new_instance(0, NULL, obj);
213
- rb_ary_push(wrapper->func_instances, inst);
214
-
215
- return (void *)inst;
201
+ VALUE modules = rb_iv_get(mNokogiriXslt, "@modules");
202
+ VALUE obj = rb_hash_aref(modules, rb_str_new2((const char *)uri));
203
+ VALUE args = { Qfalse };
204
+ VALUE methods = rb_funcall(obj, rb_intern("instance_methods"), 1, args);
205
+ VALUE inst;
206
+ nokogiriXsltStylesheetTuple *wrapper;
207
+ int i;
208
+
209
+ for (i = 0; i < RARRAY_LEN(methods); i++) {
210
+ VALUE method_name = rb_obj_as_string(rb_ary_entry(methods, i));
211
+ xsltRegisterExtFunction(ctxt,
212
+ (unsigned char *)StringValueCStr(method_name), uri, method_caller);
213
+ }
214
+
215
+ Data_Get_Struct((VALUE)ctxt->style->_private, nokogiriXsltStylesheetTuple,
216
+ wrapper);
217
+ inst = rb_class_new_instance(0, NULL, obj);
218
+ rb_ary_push(wrapper->func_instances, inst);
219
+
220
+ return (void *)inst;
216
221
  }
217
222
 
218
- static void shutdownFunc(xsltTransformContextPtr ctxt,
219
- const xmlChar *uri, void *data)
223
+ static void
224
+ shutdownFunc(xsltTransformContextPtr ctxt,
225
+ const xmlChar *uri, void *data)
220
226
  {
221
- nokogiriXsltStylesheetTuple *wrapper;
227
+ nokogiriXsltStylesheetTuple *wrapper;
222
228
 
223
- Data_Get_Struct((VALUE)ctxt->style->_private, nokogiriXsltStylesheetTuple,
224
- wrapper);
229
+ Data_Get_Struct((VALUE)ctxt->style->_private, nokogiriXsltStylesheetTuple,
230
+ wrapper);
225
231
 
226
- rb_ary_clear(wrapper->func_instances);
232
+ rb_ary_clear(wrapper->func_instances);
227
233
  }
228
234
 
229
235
  /*
@@ -232,32 +238,26 @@ static void shutdownFunc(xsltTransformContextPtr ctxt,
232
238
  *
233
239
  * Register a class that implements custom XSLT transformation functions.
234
240
  */
235
- static VALUE registr(VALUE self, VALUE uri, VALUE obj)
241
+ static VALUE
242
+ registr(VALUE self, VALUE uri, VALUE obj)
236
243
  {
237
- VALUE modules = rb_iv_get(self, "@modules");
238
- if(NIL_P(modules)) rb_raise(rb_eRuntimeError, "wtf! @modules isn't set");
244
+ VALUE modules = rb_iv_get(self, "@modules");
245
+ if (NIL_P(modules)) { rb_raise(rb_eRuntimeError, "wtf! @modules isn't set"); }
239
246
 
240
- rb_hash_aset(modules, uri, obj);
241
- xsltRegisterExtModule((unsigned char *)StringValueCStr(uri), initFunc, shutdownFunc);
242
- return self;
247
+ rb_hash_aset(modules, uri, obj);
248
+ xsltRegisterExtModule((unsigned char *)StringValueCStr(uri), initFunc, shutdownFunc);
249
+ return self;
243
250
  }
244
251
 
245
- VALUE cNokogiriXsltStylesheet ;
246
- void init_xslt_stylesheet()
252
+ void
253
+ noko_init_xslt_stylesheet()
247
254
  {
248
- VALUE nokogiri;
249
- VALUE klass;
250
-
251
- nokogiri = rb_define_module("Nokogiri");
252
- xslt = rb_define_module_under(nokogiri, "XSLT");
253
- klass = rb_define_class_under(xslt, "Stylesheet", rb_cObject);
254
-
255
- rb_iv_set(xslt, "@modules", rb_hash_new());
255
+ rb_define_singleton_method(mNokogiriXslt, "register", registr, 2);
256
+ rb_iv_set(mNokogiriXslt, "@modules", rb_hash_new());
256
257
 
257
- cNokogiriXsltStylesheet = klass;
258
+ cNokogiriXsltStylesheet = rb_define_class_under(mNokogiriXslt, "Stylesheet", rb_cObject);
258
259
 
259
- rb_define_singleton_method(klass, "parse_stylesheet_doc", parse_stylesheet_doc, 1);
260
- rb_define_singleton_method(xslt, "register", registr, 2);
261
- rb_define_method(klass, "serialize", serialize, 1);
262
- rb_define_method(klass, "transform", transform, -1);
260
+ rb_define_singleton_method(cNokogiriXsltStylesheet, "parse_stylesheet_doc", parse_stylesheet_doc, 1);
261
+ rb_define_method(cNokogiriXsltStylesheet, "serialize", serialize, 1);
262
+ rb_define_method(cNokogiriXsltStylesheet, "transform", transform, -1);
263
263
  }
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
3
  # DO NOT MODIFY!!!!
4
- # This file is automatically generated by Racc 1.5.1
4
+ # This file is automatically generated by Racc 1.5.2
5
5
  # from Racc grammar file "".
6
6
  #
7
7
 
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ # load the C or Java extension
4
+ begin
5
+ ::RUBY_VERSION =~ /(\d+\.\d+)/
6
+ require "nokogiri/#{Regexp.last_match(1)}/nokogiri"
7
+ rescue LoadError => e
8
+ if e.message =~ /GLIBC/
9
+ warn(<<~EOM)
10
+
11
+ ERROR: It looks like you're trying to use Nokogiri as a precompiled native gem on a system with glibc < 2.17:
12
+
13
+ #{e.message}
14
+
15
+ If that's the case, then please install Nokogiri via the `ruby` platform gem:
16
+ gem install nokogiri --platform=ruby
17
+ or:
18
+ bundle config set force_ruby_platform true
19
+
20
+ Please visit https://nokogiri.org/tutorials/installing_nokogiri.html for more help.
21
+
22
+ EOM
23
+ raise e
24
+ end
25
+ require 'nokogiri/nokogiri'
26
+ end
@@ -4,26 +4,26 @@ module Nokogiri
4
4
  class DocumentFragment < Nokogiri::XML::DocumentFragment
5
5
  ####
6
6
  # Create a Nokogiri::XML::DocumentFragment from +tags+, using +encoding+
7
- def self.parse tags, encoding = nil
7
+ def self.parse(tags, encoding = nil)
8
8
  doc = HTML::Document.new
9
9
 
10
10
  encoding ||= if tags.respond_to?(:encoding)
11
- encoding = tags.encoding
12
- if encoding == ::Encoding::ASCII_8BIT
13
- 'UTF-8'
14
- else
15
- encoding.name
16
- end
17
- else
18
- 'UTF-8'
19
- end
11
+ encoding = tags.encoding
12
+ if encoding == ::Encoding::ASCII_8BIT
13
+ 'UTF-8'
14
+ else
15
+ encoding.name
16
+ end
17
+ else
18
+ 'UTF-8'
19
+ end
20
20
 
21
21
  doc.encoding = encoding
22
22
 
23
23
  new(doc, tags)
24
24
  end
25
25
 
26
- def initialize document, tags = nil, ctx = nil
26
+ def initialize(document, tags = nil, ctx = nil)
27
27
  return self unless tags
28
28
 
29
29
  if ctx
@@ -33,13 +33,13 @@ module Nokogiri
33
33
  self.errors = document.errors - preexisting_errors
34
34
  else
35
35
  # This is a horrible hack, but I don't care
36
- if tags.strip =~ /^<body/i
37
- path = "/html/body"
36
+ path = if /^\s*?<body/i.match?(tags)
37
+ "/html/body"
38
38
  else
39
- path = "/html/body/node()"
39
+ "/html/body/node()"
40
40
  end
41
41
 
42
- temp_doc = HTML::Document.parse "<html><body>#{tags}", nil, document.encoding
42
+ temp_doc = HTML::Document.parse("<html><body>#{tags}", nil, document.encoding)
43
43
  temp_doc.xpath(path).each { |child| child.parent = self }
44
44
  self.errors = temp_doc.errors
45
45
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
  module Nokogiri
3
3
  # The version of Nokogiri you are using
4
- VERSION = "1.11.0.rc4"
4
+ VERSION = "1.11.3"
5
5
  end
@@ -10,6 +10,14 @@ module Nokogiri
10
10
  ::JRUBY_VERSION if ::RUBY_PLATFORM == "java"
11
11
  end
12
12
 
13
+ def windows?
14
+ ::RUBY_PLATFORM =~ /mingw|mswin/
15
+ end
16
+
17
+ def ruby_minor
18
+ Gem::Version.new(::RUBY_VERSION).segments[0..1].join(".")
19
+ end
20
+
13
21
  def engine
14
22
  defined?(::RUBY_ENGINE) ? ::RUBY_ENGINE : "mri"
15
23
  end
@@ -74,18 +82,38 @@ module Nokogiri
74
82
 
75
83
  def to_hash
76
84
  header_directory = File.expand_path(File.join(File.dirname(__FILE__), "../../../ext/nokogiri"))
85
+
77
86
  {}.tap do |vi|
78
87
  vi["warnings"] = []
79
88
  vi["nokogiri"] = {}.tap do |nokogiri|
80
89
  nokogiri["version"] = Nokogiri::VERSION
81
90
 
82
91
  unless jruby?
92
+ # enable gems like nokogumbo to build with the following in their extconf.rb:
93
+ #
94
+ # append_cflags(Nokogiri::VERSION_INFO["nokogiri"]["cppflags"])
95
+ # append_ldflags(Nokogiri::VERSION_INFO["nokogiri"]["ldflags"])
96
+ #
83
97
  cppflags = ["-I#{header_directory.shellescape}"]
98
+ ldflags = []
99
+
84
100
  if libxml2_using_packaged?
85
- cppflags << "-I#{File.join(header_directory, "include").shellescape}"
86
- cppflags << "-I#{File.join(header_directory, "include/libxml2").shellescape}"
101
+ cppflags << "-I#{File.join(header_directory, 'include').shellescape}"
102
+ cppflags << "-I#{File.join(header_directory, 'include/libxml2').shellescape}"
103
+
104
+ if windows?
105
+ # on windows, nokogumbo needs to link against nokogiri.so to resolve symbols. see #2167
106
+ lib_directory = File.expand_path(File.join(File.dirname(__FILE__), "../#{ruby_minor}"))
107
+ unless File.exist?(lib_directory)
108
+ lib_directory = File.expand_path(File.join(File.dirname(__FILE__), ".."))
109
+ end
110
+ ldflags << "-L#{lib_directory.shellescape}"
111
+ ldflags << "-l:nokogiri.so"
112
+ end
87
113
  end
114
+
88
115
  nokogiri["cppflags"] = cppflags
116
+ nokogiri["ldflags"] = ldflags
89
117
  end
90
118
  end
91
119
  vi["ruby"] = {}.tap do |ruby|
@@ -170,12 +198,7 @@ module Nokogiri
170
198
  if Nokogiri.jruby?
171
199
  require "nokogiri/jruby/dependencies"
172
200
  end
173
- begin
174
- ::RUBY_VERSION =~ /(\d+\.\d+)/
175
- require "nokogiri/#{Regexp.last_match(1)}/nokogiri"
176
- rescue LoadError
177
- require "nokogiri/nokogiri"
178
- end
201
+ require "nokogiri/extension"
179
202
 
180
203
  # More complete version information about libxml
181
204
  VERSION_INFO = VersionInfo.instance.to_hash