nokogiri 1.11.0.rc3 → 1.11.0.rc4
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.
- checksums.yaml +4 -4
- data/LICENSE-DEPENDENCIES.md +1015 -947
- data/README.md +1 -1
- data/ext/nokogiri/depend +476 -357
- data/ext/nokogiri/extconf.rb +441 -321
- data/ext/nokogiri/html_document.c +79 -78
- data/ext/nokogiri/html_sax_parser_context.c +2 -2
- data/ext/nokogiri/nokogiri.c +34 -46
- data/ext/nokogiri/nokogiri.h +22 -26
- data/ext/nokogiri/xml_document.c +2 -2
- data/ext/nokogiri/xml_node.c +1 -1
- data/ext/nokogiri/xml_node_set.c +1 -1
- data/ext/nokogiri/xml_relax_ng.c +29 -11
- data/ext/nokogiri/xml_sax_parser.c +2 -7
- data/ext/nokogiri/xml_sax_parser_context.c +2 -2
- data/ext/nokogiri/xml_schema.c +55 -13
- data/ext/nokogiri/xml_xpath_context.c +80 -4
- data/ext/nokogiri/xslt_stylesheet.c +1 -4
- data/lib/nokogiri.rb +1 -1
- data/lib/nokogiri/css/parser.rb +3 -3
- data/lib/nokogiri/css/parser.y +2 -2
- data/lib/nokogiri/css/xpath_visitor.rb +70 -42
- data/lib/nokogiri/html/document.rb +12 -26
- data/lib/nokogiri/version.rb +2 -149
- data/lib/nokogiri/version/constant.rb +5 -0
- data/lib/nokogiri/version/info.rb +182 -0
- data/lib/nokogiri/xml/document.rb +17 -7
- data/lib/nokogiri/xml/document_fragment.rb +4 -6
- data/lib/nokogiri/xml/node.rb +50 -27
- data/lib/nokogiri/xml/parse_options.rb +6 -0
- data/lib/nokogiri/xml/relax_ng.rb +6 -2
- data/lib/nokogiri/xml/schema.rb +12 -4
- data/lib/nokogiri/xml/searchable.rb +3 -1
- data/patches/libxml2/0006-htmlParseComment-treat-as-if-it-closed-the-comment.patch +73 -0
- data/patches/libxml2/0007-use-new-htmlParseLookupCommentEnd-to-find-comment-en.patch +103 -0
- data/patches/libxml2/0008-use-glibc-strlen.patch +53 -0
- metadata +34 -22
@@ -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
|
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
|
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
|
-
|
22
|
-
|
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
|
37
|
-
|
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
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
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(
|
66
|
-
VALUE encoding_found = rb_funcall(
|
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(
|
61
|
+
xmlFreeDoc(c_doc);
|
69
62
|
rb_exc_raise(encoding_found);
|
70
63
|
}
|
71
64
|
}
|
72
65
|
|
73
|
-
if(
|
74
|
-
|
66
|
+
if ((c_doc == NULL) || (!(options & XML_PARSE_RECOVER) && (RARRAY_LEN(rb_error_list) > 0))) {
|
67
|
+
VALUE rb_error ;
|
75
68
|
|
76
|
-
xmlFreeDoc(
|
69
|
+
xmlFreeDoc(c_doc);
|
77
70
|
|
78
|
-
|
79
|
-
if(
|
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
|
-
|
88
|
-
rb_iv_set(
|
89
|
-
return
|
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
|
100
|
-
|
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
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
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
|
-
|
114
|
-
|
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(
|
120
|
-
|
114
|
+
if ((c_doc == NULL) || (!(options & XML_PARSE_RECOVER) && (RARRAY_LEN(rb_error_list) > 0))) {
|
115
|
+
VALUE rb_error ;
|
121
116
|
|
122
|
-
xmlFreeDoc(
|
117
|
+
xmlFreeDoc(c_doc);
|
123
118
|
|
124
|
-
|
125
|
-
if(
|
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
|
-
|
134
|
-
rb_iv_set(
|
135
|
-
return
|
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
|
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
|
-
|
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(
|
164
|
-
rb_define_singleton_method(
|
165
|
-
rb_define_singleton_method(
|
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(
|
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(
|
7
|
+
NOKOGIRI_DEBUG_START(ctxt);
|
8
8
|
|
9
9
|
ctxt->sax = NULL;
|
10
10
|
|
11
11
|
htmlFreeParserCtxt(ctxt);
|
12
12
|
|
13
|
-
NOKOGIRI_DEBUG_END(
|
13
|
+
NOKOGIRI_DEBUG_END(ctxt);
|
14
14
|
}
|
15
15
|
|
16
16
|
static VALUE
|
data/ext/nokogiri/nokogiri.c
CHANGED
@@ -7,12 +7,11 @@ VALUE mNokogiriXslt ;
|
|
7
7
|
VALUE mNokogiriXmlSax ;
|
8
8
|
VALUE mNokogiriHtmlSax ;
|
9
9
|
|
10
|
-
#
|
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
|
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
|
-
|
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
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
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,33 +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(
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
rb_const_set(
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
rb_const_set(
|
93
|
-
rb_intern("LIBXSLT_LOADED_VERSION"),
|
94
|
-
NOKOGIRI_STR_NEW2(xsltEngineVersion)
|
95
|
-
);
|
96
|
-
|
97
|
-
#ifdef NOKOGIRI_USE_PACKAGED_LIBRARIES
|
98
|
-
rb_const_set(mNokogiri, rb_intern("NOKOGIRI_USE_PACKAGED_LIBRARIES"), Qtrue);
|
99
|
-
rb_const_set(mNokogiri, rb_intern("NOKOGIRI_LIBXML2_PATCHES"), rb_str_split(NOKOGIRI_STR_NEW2(NOKOGIRI_LIBXML2_PATCHES), " "));
|
100
|
-
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), " "));
|
101
84
|
#else
|
102
|
-
rb_const_set(mNokogiri, rb_intern("
|
103
|
-
rb_const_set(mNokogiri, rb_intern("
|
104
|
-
rb_const_set(mNokogiri, rb_intern("
|
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);
|
105
89
|
#endif
|
106
90
|
|
107
91
|
#ifdef LIBXML_ICONV_ENABLED
|
@@ -110,6 +94,10 @@ void Init_nokogiri()
|
|
110
94
|
rb_const_set(mNokogiri, rb_intern("LIBXML_ICONV_ENABLED"), Qfalse);
|
111
95
|
#endif
|
112
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
|
+
|
113
101
|
xmlInitParser();
|
114
102
|
|
115
103
|
init_xml_document();
|
data/ext/nokogiri/nokogiri.h
CHANGED
@@ -2,31 +2,24 @@
|
|
2
2
|
#define NOKOGIRI_NATIVE
|
3
3
|
|
4
4
|
#if _MSC_VER
|
5
|
-
#ifndef WIN32_LEAN_AND_MEAN
|
6
|
-
#define WIN32_LEAN_AND_MEAN
|
7
|
-
#endif /* WIN32_LEAN_AND_MEAN */
|
8
|
-
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
|
13
|
-
#include <
|
5
|
+
# ifndef WIN32_LEAN_AND_MEAN
|
6
|
+
# define WIN32_LEAN_AND_MEAN
|
7
|
+
# endif /* WIN32_LEAN_AND_MEAN */
|
8
|
+
|
9
|
+
# ifndef WIN32
|
10
|
+
# define WIN32
|
11
|
+
# endif /* WIN32 */
|
12
|
+
|
13
|
+
# include <winsock2.h>
|
14
|
+
# include <ws2tcpip.h>
|
15
|
+
# include <windows.h>
|
14
16
|
#endif
|
15
17
|
|
16
18
|
#include <stdlib.h>
|
17
19
|
#include <string.h>
|
18
20
|
#include <assert.h>
|
19
21
|
#include <stdarg.h>
|
20
|
-
|
21
|
-
#ifdef USE_INCLUDED_VASPRINTF
|
22
|
-
int vasprintf (char **strp, const char *fmt, va_list ap);
|
23
|
-
#else
|
24
|
-
|
25
|
-
#define _GNU_SOURCE
|
26
|
-
# include <stdio.h>
|
27
|
-
#undef _GNU_SOURCE
|
28
|
-
|
29
|
-
#endif
|
22
|
+
#include <stdio.h>
|
30
23
|
|
31
24
|
#include <libxml/parser.h>
|
32
25
|
#include <libxml/entities.h>
|
@@ -43,6 +36,7 @@ int vasprintf (char **strp, const char *fmt, va_list ap);
|
|
43
36
|
#include <libxslt/extensions.h>
|
44
37
|
#include <libxslt/xsltconfig.h>
|
45
38
|
#include <libxml/c14n.h>
|
39
|
+
|
46
40
|
#include <ruby.h>
|
47
41
|
#include <ruby/st.h>
|
48
42
|
#include <ruby/encoding.h>
|
@@ -106,25 +100,27 @@ extern VALUE mNokogiriHtml ;
|
|
106
100
|
extern VALUE mNokogiriHtmlSax ;
|
107
101
|
extern VALUE mNokogiriXslt ;
|
108
102
|
|
103
|
+
int vasprintf(char **strp, const char *fmt, va_list ap);
|
104
|
+
|
109
105
|
void nokogiri_root_node(xmlNodePtr);
|
110
106
|
void nokogiri_root_nsdef(xmlNsPtr, xmlDocPtr);
|
111
107
|
|
112
108
|
#ifdef DEBUG
|
113
109
|
|
114
|
-
#define NOKOGIRI_DEBUG_START(p) if (getenv("NOKOGIRI_NO_FREE")) return ; if (getenv("NOKOGIRI_DEBUG")) fprintf(stderr,"nokogiri: %s:%d %p start\n", __FILE__, __LINE__, p);
|
115
|
-
#define NOKOGIRI_DEBUG_END(p) if (getenv("NOKOGIRI_DEBUG")) fprintf(stderr,"nokogiri: %s:%d %p end\n", __FILE__, __LINE__, p);
|
110
|
+
# define NOKOGIRI_DEBUG_START(p) if (getenv("NOKOGIRI_NO_FREE")) return ; if (getenv("NOKOGIRI_DEBUG")) fprintf(stderr,"nokogiri: %s:%d %p start\n", __FILE__, __LINE__, p);
|
111
|
+
# define NOKOGIRI_DEBUG_END(p) if (getenv("NOKOGIRI_DEBUG")) fprintf(stderr,"nokogiri: %s:%d %p end\n", __FILE__, __LINE__, p);
|
116
112
|
|
117
113
|
#else
|
118
114
|
|
119
|
-
#define NOKOGIRI_DEBUG_START(p)
|
120
|
-
#define NOKOGIRI_DEBUG_END(p)
|
115
|
+
# define NOKOGIRI_DEBUG_START(p)
|
116
|
+
# define NOKOGIRI_DEBUG_END(p)
|
121
117
|
|
122
118
|
#endif
|
123
119
|
|
124
120
|
#ifndef __builtin_expect
|
125
|
-
#
|
126
|
-
#
|
127
|
-
#
|
121
|
+
# if defined(__GNUC__)
|
122
|
+
# define __builtin_expect(expr, c) __builtin_expect((long)(expr), (long)(c))
|
123
|
+
# endif
|
128
124
|
#endif
|
129
125
|
|
130
126
|
#define XMLNS_PREFIX "xmlns"
|