libxml-ruby 2.1.2-x86-mingw32 → 2.2.0-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY +7 -0
- data/ext/libxml/libxml.c +0 -15
- data/ext/libxml/ruby_libxml.h +0 -3
- data/ext/libxml/ruby_xml_attr.c +2 -2
- data/ext/libxml/ruby_xml_attr_decl.c +2 -2
- data/ext/libxml/ruby_xml_document.c +7 -5
- data/ext/libxml/ruby_xml_dtd.c +3 -3
- data/ext/libxml/ruby_xml_encoding.c +25 -4
- data/ext/libxml/ruby_xml_encoding.h +4 -1
- data/ext/libxml/ruby_xml_namespace.c +2 -11
- data/ext/libxml/ruby_xml_node.c +11 -11
- data/ext/libxml/ruby_xml_parser_context.c +8 -8
- data/ext/libxml/ruby_xml_reader.c +13 -13
- data/ext/libxml/ruby_xml_version.h +4 -4
- data/ext/libxml/ruby_xml_xpath.c +1 -1
- data/ext/libxml/ruby_xml_xpath_context.c +3 -3
- data/ext/libxml/ruby_xml_xpath_object.c +1 -1
- data/lib/1.8/libxml_ruby.so +0 -0
- data/lib/1.9/libxml_ruby.so +0 -0
- data/test/new_main.rb +29 -0
- data/test/tc_attr.rb +4 -4
- data/test/tc_document.rb +0 -14
- data/test/tc_document_write.rb +6 -11
- data/test/tc_encoding.rb +119 -0
- data/test/tc_node.rb +12 -72
- data/test/tc_parser.rb +2 -2
- data/test/test_suite.rb +1 -0
- metadata +7 -4
data/HISTORY
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
= Release History
|
2
2
|
|
3
|
+
== 2.2.0 / 2011-08-09 Charlie Savage
|
4
|
+
|
5
|
+
* Update encoding support for Ruby 1.9 so that libxml-ruby returns
|
6
|
+
strings encoded in UTF-8. This change was required since libxml internally
|
7
|
+
stores strings in UTF-8. The exceptions to this rule are the #to_s methods
|
8
|
+
which return UTF-8 by default but can return other encodings if requested.
|
9
|
+
|
3
10
|
== 2.1.2 / 2011-08-03 Charlie Savage
|
4
11
|
|
5
12
|
* Fix segmentation fault that could occur when an XPathContext was marked
|
data/ext/libxml/libxml.c
CHANGED
@@ -21,21 +21,6 @@ static void rxml_init_memory(void)
|
|
21
21
|
);*/
|
22
22
|
}
|
23
23
|
|
24
|
-
VALUE rxml_str_new2(const char* xstr, const char* xencoding)
|
25
|
-
{
|
26
|
-
#ifdef HAVE_RUBY_ENCODING_H
|
27
|
-
if (xencoding)
|
28
|
-
{
|
29
|
-
xmlCharEncoding xmlEncoding = xmlParseCharEncoding(xencoding);
|
30
|
-
VALUE encoding = rxml_xml_encoding_to_rb_encoding(mXMLEncoding, xmlEncoding);
|
31
|
-
rb_encoding* xencodingPtr = (rb_encoding*) RDATA(encoding)->data;
|
32
|
-
return rb_external_str_new_with_enc(xstr, strlen(xstr), xencodingPtr);
|
33
|
-
}
|
34
|
-
#endif
|
35
|
-
return rb_str_new2(xstr);
|
36
|
-
}
|
37
|
-
|
38
|
-
|
39
24
|
void Init_libxml_ruby(void)
|
40
25
|
{
|
41
26
|
/* The libxml gem provides Ruby language bindings for GNOME's Libxml2
|
data/ext/libxml/ruby_libxml.h
CHANGED
data/ext/libxml/ruby_xml_attr.c
CHANGED
@@ -166,7 +166,7 @@ static VALUE rxml_attr_name_get(VALUE self)
|
|
166
166
|
if (xattr->name == NULL)
|
167
167
|
return Qnil;
|
168
168
|
else
|
169
|
-
return
|
169
|
+
return rxml_new_cstr((const char*) xattr->name, NULL);
|
170
170
|
}
|
171
171
|
|
172
172
|
/*
|
@@ -285,7 +285,7 @@ VALUE rxml_attr_value_get(VALUE self)
|
|
285
285
|
|
286
286
|
if (value != NULL)
|
287
287
|
{
|
288
|
-
result =
|
288
|
+
result = rxml_new_cstr((const char*) value, NULL);
|
289
289
|
xmlFree(value);
|
290
290
|
}
|
291
291
|
return result;
|
@@ -54,7 +54,7 @@ static VALUE rxml_attr_decl_name_get(VALUE self)
|
|
54
54
|
if (xattr->name == NULL)
|
55
55
|
return Qnil;
|
56
56
|
else
|
57
|
-
return
|
57
|
+
return rxml_new_cstr((const char*) xattr->name, xattr->doc->encoding);
|
58
58
|
}
|
59
59
|
|
60
60
|
/*
|
@@ -135,7 +135,7 @@ VALUE rxml_attr_decl_value_get(VALUE self)
|
|
135
135
|
Data_Get_Struct(self, xmlAttribute, xattr);
|
136
136
|
|
137
137
|
if (xattr->defaultValue)
|
138
|
-
return
|
138
|
+
return rxml_new_cstr((const char *)xattr->defaultValue, NULL);
|
139
139
|
else
|
140
140
|
return Qnil;
|
141
141
|
}
|
@@ -174,7 +174,7 @@ static VALUE rxml_document_canonicalize(int argc, VALUE *argv, VALUE self)
|
|
174
174
|
|
175
175
|
if (buffer)
|
176
176
|
{
|
177
|
-
result =
|
177
|
+
result = rxml_new_cstr((const char*) buffer, NULL);
|
178
178
|
xmlFree(buffer);
|
179
179
|
}
|
180
180
|
|
@@ -349,10 +349,12 @@ static VALUE rxml_document_rb_encoding_get(VALUE self)
|
|
349
349
|
{
|
350
350
|
xmlDocPtr xdoc;
|
351
351
|
const char *xencoding;
|
352
|
+
rb_encoding* rbencoding;
|
352
353
|
Data_Get_Struct(self, xmlDoc, xdoc);
|
353
354
|
|
354
355
|
xencoding = (const char*)xdoc->encoding;
|
355
|
-
|
356
|
+
rbencoding = rxml_xml_encoding_to_rb_encoding(mXMLEncoding, xmlParseCharEncoding(xencoding));
|
357
|
+
return rb_enc_from_encoding(rbencoding);
|
356
358
|
}
|
357
359
|
#endif
|
358
360
|
|
@@ -734,7 +736,7 @@ static VALUE rxml_document_to_s(int argc, VALUE *argv, VALUE self)
|
|
734
736
|
Data_Get_Struct(self, xmlDoc, xdoc);
|
735
737
|
xmlDocDumpFormatMemoryEnc(xdoc, &buffer, &length, xencoding, indent);
|
736
738
|
|
737
|
-
result =
|
739
|
+
result = rxml_new_cstr((const char*) buffer, xencoding);
|
738
740
|
xmlFree(buffer);
|
739
741
|
return result;
|
740
742
|
}
|
@@ -753,7 +755,7 @@ static VALUE rxml_document_url_get(VALUE self)
|
|
753
755
|
if (xdoc->URL == NULL)
|
754
756
|
return (Qnil);
|
755
757
|
else
|
756
|
-
return (
|
758
|
+
return (rxml_new_cstr((const char*) xdoc->URL, NULL));
|
757
759
|
}
|
758
760
|
|
759
761
|
/*
|
@@ -770,7 +772,7 @@ static VALUE rxml_document_version_get(VALUE self)
|
|
770
772
|
if (xdoc->version == NULL)
|
771
773
|
return (Qnil);
|
772
774
|
else
|
773
|
-
return (
|
775
|
+
return (rxml_new_cstr((const char*) xdoc->version, NULL));
|
774
776
|
}
|
775
777
|
|
776
778
|
/*
|
data/ext/libxml/ruby_xml_dtd.c
CHANGED
@@ -90,7 +90,7 @@ static VALUE rxml_dtd_external_id_get(VALUE self)
|
|
90
90
|
if (xdtd->ExternalID == NULL)
|
91
91
|
return (Qnil);
|
92
92
|
else
|
93
|
-
return (
|
93
|
+
return (rxml_new_cstr((const char*) xdtd->ExternalID, NULL));
|
94
94
|
}
|
95
95
|
|
96
96
|
/*
|
@@ -108,7 +108,7 @@ static VALUE rxml_dtd_name_get(VALUE self)
|
|
108
108
|
if (xdtd->name == NULL)
|
109
109
|
return (Qnil);
|
110
110
|
else
|
111
|
-
return (
|
111
|
+
return (rxml_new_cstr((const char*) xdtd->name, NULL));
|
112
112
|
}
|
113
113
|
|
114
114
|
|
@@ -127,7 +127,7 @@ static VALUE rxml_dtd_uri_get(VALUE self)
|
|
127
127
|
if (xdtd->SystemID == NULL)
|
128
128
|
return (Qnil);
|
129
129
|
else
|
130
|
-
return (
|
130
|
+
return (rxml_new_cstr((const char*) xdtd->SystemID, NULL));
|
131
131
|
}
|
132
132
|
|
133
133
|
/*
|
@@ -71,7 +71,7 @@ static VALUE rxml_encoding_to_s(VALUE klass, VALUE encoding)
|
|
71
71
|
if (!xencoding)
|
72
72
|
return Qnil;
|
73
73
|
else
|
74
|
-
return
|
74
|
+
return rxml_new_cstr(xencoding, xencoding);
|
75
75
|
}
|
76
76
|
|
77
77
|
#ifdef HAVE_RUBY_ENCODING_H
|
@@ -79,7 +79,7 @@ static VALUE rxml_encoding_to_s(VALUE klass, VALUE encoding)
|
|
79
79
|
* Converts an xmlCharEncoding enum value into a Ruby Encoding object (available
|
80
80
|
* on Ruby 1.9.* and higher).
|
81
81
|
*/
|
82
|
-
|
82
|
+
rb_encoding* rxml_xml_encoding_to_rb_encoding(VALUE klass, xmlCharEncoding xmlEncoding)
|
83
83
|
{
|
84
84
|
const char* encodingName;
|
85
85
|
|
@@ -148,7 +148,7 @@ VALUE rxml_xml_encoding_to_rb_encoding(VALUE klass, xmlCharEncoding xmlEncoding)
|
|
148
148
|
break;
|
149
149
|
}
|
150
150
|
|
151
|
-
return
|
151
|
+
return rb_enc_find(encodingName);
|
152
152
|
}
|
153
153
|
|
154
154
|
/*
|
@@ -160,10 +160,31 @@ VALUE rxml_xml_encoding_to_rb_encoding(VALUE klass, xmlCharEncoding xmlEncoding)
|
|
160
160
|
*/
|
161
161
|
VALUE rxml_encoding_to_rb_encoding(VALUE klass, VALUE encoding)
|
162
162
|
{
|
163
|
-
|
163
|
+
xmlCharEncoding xmlEncoding = (xmlCharEncoding)NUM2INT(encoding);
|
164
|
+
rb_encoding* rbencoding = rxml_xml_encoding_to_rb_encoding(klass, xmlEncoding);
|
165
|
+
return rb_enc_from_encoding(rbencoding);
|
164
166
|
}
|
165
167
|
#endif
|
166
168
|
|
169
|
+
|
170
|
+
VALUE rxml_new_cstr(const char* xstr, const char* xencoding)
|
171
|
+
{
|
172
|
+
#ifdef HAVE_RUBY_ENCODING_H
|
173
|
+
rb_encoding* rbencoding;
|
174
|
+
if (xencoding)
|
175
|
+
{
|
176
|
+
xmlCharEncoding xmlEncoding = xmlParseCharEncoding(xencoding);
|
177
|
+
rbencoding = rxml_xml_encoding_to_rb_encoding(mXMLEncoding, xmlEncoding);
|
178
|
+
}
|
179
|
+
else
|
180
|
+
{
|
181
|
+
rbencoding = rb_utf8_encoding();
|
182
|
+
}
|
183
|
+
return rb_external_str_new_with_enc(xstr, strlen(xstr), rbencoding);
|
184
|
+
#endif
|
185
|
+
return rb_str_new2(xstr);
|
186
|
+
}
|
187
|
+
|
167
188
|
void rxml_init_encoding(void)
|
168
189
|
{
|
169
190
|
mXMLEncoding = rb_define_module_under(mXML, "Encoding");
|
@@ -7,8 +7,11 @@ extern VALUE mXMLEncoding;
|
|
7
7
|
|
8
8
|
void rxml_init_encoding();
|
9
9
|
|
10
|
+
// Ruby 1.8/1.9 encoding compatibility
|
11
|
+
VALUE rxml_new_cstr(const char* xstr, const char* xencoding);
|
12
|
+
|
10
13
|
#ifdef HAVE_RUBY_ENCODING_H
|
11
|
-
|
14
|
+
rb_encoding* rxml_xml_encoding_to_rb_encoding(VALUE klass, xmlCharEncoding xmlEncoding);
|
12
15
|
#endif
|
13
16
|
|
14
17
|
#endif
|
@@ -34,15 +34,6 @@ VALUE rxml_namespace_wrap(xmlNsPtr xns)
|
|
34
34
|
return Data_Wrap_Struct(cXMLNamespace, NULL, NULL, xns);
|
35
35
|
}
|
36
36
|
|
37
|
-
static VALUE rxml_namespace_string(xmlNsPtr xns, const char* buffer)
|
38
|
-
{
|
39
|
-
const char* xencoding = NULL;
|
40
|
-
#if LIBXML_VERSION >= 20628
|
41
|
-
xencoding = xns->context ? xns->context->encoding : NULL;
|
42
|
-
#endif
|
43
|
-
return rxml_str_new2(buffer, xencoding);
|
44
|
-
}
|
45
|
-
|
46
37
|
|
47
38
|
/*
|
48
39
|
* call-seq:
|
@@ -90,7 +81,7 @@ static VALUE rxml_namespace_href_get(VALUE self)
|
|
90
81
|
if (xns->href == NULL)
|
91
82
|
return Qnil;
|
92
83
|
else
|
93
|
-
return
|
84
|
+
return rxml_new_cstr((const char*) xns->href, NULL);
|
94
85
|
}
|
95
86
|
|
96
87
|
/*
|
@@ -125,7 +116,7 @@ static VALUE rxml_namespace_prefix_get(VALUE self)
|
|
125
116
|
if (xns->prefix == NULL)
|
126
117
|
return Qnil;
|
127
118
|
else
|
128
|
-
return
|
119
|
+
return rxml_new_cstr((const char*) xns->prefix, NULL);
|
129
120
|
}
|
130
121
|
|
131
122
|
/*
|
data/ext/libxml/ruby_xml_node.c
CHANGED
@@ -300,7 +300,7 @@ static VALUE rxml_node_base_uri_get(VALUE self)
|
|
300
300
|
base_uri = xmlNodeGetBase(xnode->doc, xnode);
|
301
301
|
if (base_uri)
|
302
302
|
{
|
303
|
-
result =
|
303
|
+
result = rxml_new_cstr((const char*) base_uri, NULL);
|
304
304
|
xmlFree(base_uri);
|
305
305
|
}
|
306
306
|
|
@@ -344,7 +344,7 @@ static VALUE rxml_node_content_get(VALUE self)
|
|
344
344
|
content = xmlNodeGetContent(xnode);
|
345
345
|
if (content)
|
346
346
|
{
|
347
|
-
result =
|
347
|
+
result = rxml_new_cstr((const char *) content, NULL);
|
348
348
|
xmlFree(content);
|
349
349
|
}
|
350
350
|
|
@@ -391,7 +391,7 @@ static VALUE rxml_node_content_stripped_get(VALUE self)
|
|
391
391
|
content = xmlNodeGetContent(xnode);
|
392
392
|
if (content)
|
393
393
|
{
|
394
|
-
result =
|
394
|
+
result = rxml_new_cstr((const char*) content, NULL);
|
395
395
|
xmlFree(content);
|
396
396
|
}
|
397
397
|
return (result);
|
@@ -582,9 +582,9 @@ static VALUE rxml_node_to_s(int argc, VALUE *argv, VALUE self)
|
|
582
582
|
xmlOutputBufferFlush(output);
|
583
583
|
|
584
584
|
if (output->conv)
|
585
|
-
result =
|
585
|
+
result = rxml_new_cstr((const char*) output->conv->content, xencoding);
|
586
586
|
else
|
587
|
-
result =
|
587
|
+
result = rxml_new_cstr((const char*) output->buffer->content, xencoding);
|
588
588
|
|
589
589
|
xmlOutputBufferClose(output);
|
590
590
|
|
@@ -688,7 +688,7 @@ static VALUE rxml_node_lang_get(VALUE self)
|
|
688
688
|
|
689
689
|
if (lang)
|
690
690
|
{
|
691
|
-
result =
|
691
|
+
result = rxml_new_cstr((const char*) lang, NULL);
|
692
692
|
xmlFree(lang);
|
693
693
|
}
|
694
694
|
|
@@ -821,11 +821,11 @@ static VALUE rxml_node_xlink_type_name(VALUE self)
|
|
821
821
|
case XLINK_TYPE_NONE:
|
822
822
|
return (Qnil);
|
823
823
|
case XLINK_TYPE_SIMPLE:
|
824
|
-
return (
|
824
|
+
return (rxml_new_cstr("simple", NULL));
|
825
825
|
case XLINK_TYPE_EXTENDED:
|
826
|
-
return (
|
826
|
+
return (rxml_new_cstr("extended", NULL));
|
827
827
|
case XLINK_TYPE_EXTENDED_SET:
|
828
|
-
return (
|
828
|
+
return (rxml_new_cstr("extended_set", NULL));
|
829
829
|
default:
|
830
830
|
rb_fatal("Unknowng xlink type, %d", xlt);
|
831
831
|
}
|
@@ -876,7 +876,7 @@ static VALUE rxml_node_name_get(VALUE self)
|
|
876
876
|
if (xnode->name == NULL)
|
877
877
|
return (Qnil);
|
878
878
|
else
|
879
|
-
return (
|
879
|
+
return (rxml_new_cstr((const char*) name, NULL));
|
880
880
|
}
|
881
881
|
|
882
882
|
/*
|
@@ -968,7 +968,7 @@ static VALUE rxml_node_path(VALUE self)
|
|
968
968
|
if (path == NULL)
|
969
969
|
return (Qnil);
|
970
970
|
else
|
971
|
-
return (
|
971
|
+
return (rxml_new_cstr((const char*) path, NULL));
|
972
972
|
}
|
973
973
|
|
974
974
|
/*
|
@@ -188,7 +188,7 @@ static VALUE rxml_parser_context_base_uri_get(VALUE self)
|
|
188
188
|
Data_Get_Struct(self, xmlParserCtxt, ctxt);
|
189
189
|
|
190
190
|
if (ctxt->input && ctxt->input->filename)
|
191
|
-
return
|
191
|
+
return rxml_new_cstr(ctxt->input->filename, ctxt->encoding);
|
192
192
|
else
|
193
193
|
return Qnil;
|
194
194
|
}
|
@@ -229,7 +229,7 @@ static VALUE rxml_parser_context_data_directory_get(VALUE self)
|
|
229
229
|
if (ctxt->directory == NULL)
|
230
230
|
return (Qnil);
|
231
231
|
else
|
232
|
-
return (
|
232
|
+
return (rxml_new_cstr(ctxt->directory, ctxt->encoding));
|
233
233
|
}
|
234
234
|
|
235
235
|
/*
|
@@ -487,7 +487,7 @@ static VALUE rxml_parser_context_name_node_get(VALUE self)
|
|
487
487
|
if (ctxt->name == NULL)
|
488
488
|
return (Qnil);
|
489
489
|
else
|
490
|
-
return (
|
490
|
+
return (rxml_new_cstr((const char*) ctxt->name, ctxt->encoding));
|
491
491
|
}
|
492
492
|
|
493
493
|
/*
|
@@ -514,7 +514,7 @@ static VALUE rxml_parser_context_name_tab_get(VALUE self)
|
|
514
514
|
if (ctxt->nameTab[i] == NULL)
|
515
515
|
continue;
|
516
516
|
else
|
517
|
-
rb_ary_push(tab_ary,
|
517
|
+
rb_ary_push(tab_ary, rxml_new_cstr((const char*) ctxt->nameTab[i], ctxt->encoding));
|
518
518
|
}
|
519
519
|
|
520
520
|
return (tab_ary);
|
@@ -780,7 +780,7 @@ static VALUE rxml_parser_context_subset_name_get(VALUE self)
|
|
780
780
|
if (ctxt->intSubName == NULL)
|
781
781
|
return (Qnil);
|
782
782
|
else
|
783
|
-
return (
|
783
|
+
return (rxml_new_cstr((const char*) ctxt->intSubName, ctxt->encoding));
|
784
784
|
}
|
785
785
|
|
786
786
|
/*
|
@@ -799,7 +799,7 @@ static VALUE rxml_parser_context_subset_external_uri_get(VALUE self)
|
|
799
799
|
if (ctxt->extSubURI == NULL)
|
800
800
|
return (Qnil);
|
801
801
|
else
|
802
|
-
return (
|
802
|
+
return (rxml_new_cstr((const char*) ctxt->extSubURI, ctxt->encoding));
|
803
803
|
}
|
804
804
|
|
805
805
|
/*
|
@@ -818,7 +818,7 @@ static VALUE rxml_parser_context_subset_external_system_id_get(VALUE self)
|
|
818
818
|
if (ctxt->extSubSystem == NULL)
|
819
819
|
return (Qnil);
|
820
820
|
else
|
821
|
-
return (
|
821
|
+
return (rxml_new_cstr((const char*) ctxt->extSubSystem, ctxt->encoding));
|
822
822
|
}
|
823
823
|
|
824
824
|
/*
|
@@ -903,7 +903,7 @@ static VALUE rxml_parser_context_version_get(VALUE self)
|
|
903
903
|
if (ctxt->version == NULL)
|
904
904
|
return (Qnil);
|
905
905
|
else
|
906
|
-
return (
|
906
|
+
return (rxml_new_cstr((const char*) ctxt->version, ctxt->encoding));
|
907
907
|
}
|
908
908
|
|
909
909
|
/*
|
@@ -489,7 +489,7 @@ static VALUE rxml_reader_read_inner_xml(VALUE self)
|
|
489
489
|
if (xml)
|
490
490
|
{
|
491
491
|
const xmlChar *xencoding = xmlTextReaderConstEncoding(xReader);
|
492
|
-
result =
|
492
|
+
result = rxml_new_cstr((const char*) xml, xencoding);
|
493
493
|
xmlFree(xml);
|
494
494
|
}
|
495
495
|
|
@@ -515,7 +515,7 @@ static VALUE rxml_reader_read_outer_xml(VALUE self)
|
|
515
515
|
if (xml)
|
516
516
|
{
|
517
517
|
const xmlChar *xencoding = xmlTextReaderConstEncoding(xReader);
|
518
|
-
result =
|
518
|
+
result = rxml_new_cstr((const char*) xml, xencoding);
|
519
519
|
xmlFree(xml);
|
520
520
|
}
|
521
521
|
|
@@ -553,7 +553,7 @@ static VALUE rxml_reader_read_string(VALUE self)
|
|
553
553
|
if (xml)
|
554
554
|
{
|
555
555
|
const xmlChar *xencoding = xmlTextReaderConstEncoding(xReader);
|
556
|
-
result =
|
556
|
+
result = rxml_new_cstr((const char*) xml, xencoding);
|
557
557
|
xmlFree(xml);
|
558
558
|
}
|
559
559
|
|
@@ -612,7 +612,7 @@ static VALUE rxml_reader_name(VALUE self)
|
|
612
612
|
const xmlChar *result = xmlTextReaderConstName(xReader);
|
613
613
|
const xmlChar *xencoding = xmlTextReaderConstEncoding(xReader);
|
614
614
|
|
615
|
-
return (result == NULL ? Qnil :
|
615
|
+
return (result == NULL ? Qnil : rxml_new_cstr(result, xencoding));
|
616
616
|
}
|
617
617
|
|
618
618
|
/*
|
@@ -627,7 +627,7 @@ static VALUE rxml_reader_local_name(VALUE self)
|
|
627
627
|
const xmlChar *result = xmlTextReaderConstLocalName(xReader);
|
628
628
|
const xmlChar *xencoding = xmlTextReaderConstEncoding(xReader);
|
629
629
|
|
630
|
-
return (result == NULL ? Qnil :
|
630
|
+
return (result == NULL ? Qnil : rxml_new_cstr(result, xencoding));
|
631
631
|
}
|
632
632
|
|
633
633
|
/*
|
@@ -680,7 +680,7 @@ static VALUE rxml_reader_base_uri(VALUE self)
|
|
680
680
|
const xmlChar *result = xmlTextReaderConstBaseUri(xReader);
|
681
681
|
const xmlChar *xencoding = xmlTextReaderConstEncoding(xReader);
|
682
682
|
|
683
|
-
return (result == NULL ? Qnil :
|
683
|
+
return (result == NULL ? Qnil : rxml_new_cstr(result, xencoding));
|
684
684
|
}
|
685
685
|
|
686
686
|
/*
|
@@ -695,7 +695,7 @@ static VALUE rxml_reader_namespace_uri(VALUE self)
|
|
695
695
|
const xmlChar *result = xmlTextReaderConstNamespaceUri(xReader);
|
696
696
|
const xmlChar *xencoding = xmlTextReaderConstEncoding(xReader);
|
697
697
|
|
698
|
-
return (result == NULL ? Qnil :
|
698
|
+
return (result == NULL ? Qnil : rxml_new_cstr(result, xencoding));
|
699
699
|
}
|
700
700
|
|
701
701
|
/*
|
@@ -710,7 +710,7 @@ static VALUE rxml_reader_value(VALUE self)
|
|
710
710
|
const xmlChar *result = xmlTextReaderConstValue(xReader);
|
711
711
|
const xmlChar *xencoding = xmlTextReaderConstEncoding(xReader);
|
712
712
|
|
713
|
-
return (result == NULL ? Qnil :
|
713
|
+
return (result == NULL ? Qnil : rxml_new_cstr(result, xencoding));
|
714
714
|
}
|
715
715
|
|
716
716
|
/*
|
@@ -725,7 +725,7 @@ static VALUE rxml_reader_prefix(VALUE self)
|
|
725
725
|
const xmlChar *result = xmlTextReaderConstPrefix(xReader);
|
726
726
|
const xmlChar *xencoding = xmlTextReaderConstEncoding(xReader);
|
727
727
|
|
728
|
-
return (result == NULL ? Qnil :
|
728
|
+
return (result == NULL ? Qnil : rxml_new_cstr(result, xencoding));
|
729
729
|
}
|
730
730
|
|
731
731
|
/*
|
@@ -781,7 +781,7 @@ static VALUE rxml_reader_xml_lang(VALUE self)
|
|
781
781
|
const xmlChar *result = xmlTextReaderConstXmlLang(xReader);
|
782
782
|
const xmlChar *xencoding = xmlTextReaderConstEncoding(xReader);
|
783
783
|
|
784
|
-
return (result == NULL ? Qnil :
|
784
|
+
return (result == NULL ? Qnil : rxml_new_cstr(result, xencoding));
|
785
785
|
}
|
786
786
|
|
787
787
|
/*
|
@@ -796,7 +796,7 @@ static VALUE rxml_reader_xml_version(VALUE self)
|
|
796
796
|
const xmlChar *result = xmlTextReaderConstXmlVersion(xReader);
|
797
797
|
const xmlChar *xencoding = xmlTextReaderConstEncoding(xReader);
|
798
798
|
|
799
|
-
return (result == NULL ? Qnil :
|
799
|
+
return (result == NULL ? Qnil : rxml_new_cstr(result, xencoding));
|
800
800
|
}
|
801
801
|
|
802
802
|
/*
|
@@ -849,7 +849,7 @@ static VALUE rxml_reader_attribute(VALUE self, VALUE key)
|
|
849
849
|
|
850
850
|
if (xattr)
|
851
851
|
{
|
852
|
-
result =
|
852
|
+
result = rxml_new_cstr(xattr, xencoding);
|
853
853
|
xmlFree(xattr);
|
854
854
|
}
|
855
855
|
return result;
|
@@ -871,7 +871,7 @@ static VALUE rxml_reader_lookup_namespace(VALUE self, VALUE prefix)
|
|
871
871
|
|
872
872
|
if (xnamespace)
|
873
873
|
{
|
874
|
-
result =
|
874
|
+
result = rxml_new_cstr((const char*)xnamespace, (const char*)xencoding);
|
875
875
|
xmlFree((void *)xnamespace);
|
876
876
|
}
|
877
877
|
return result;
|
@@ -1,9 +1,9 @@
|
|
1
1
|
/* Don't nuke this block! It is used for automatically updating the
|
2
2
|
* versions below. VERSION = string formatting, VERNUM = numbered
|
3
3
|
* version for inline testing: increment both or none at all.*/
|
4
|
-
#define RUBY_LIBXML_VERSION "2.
|
5
|
-
#define RUBY_LIBXML_VERNUM
|
4
|
+
#define RUBY_LIBXML_VERSION "2.2.0"
|
5
|
+
#define RUBY_LIBXML_VERNUM 220
|
6
6
|
#define RUBY_LIBXML_VER_MAJ 2
|
7
|
-
#define RUBY_LIBXML_VER_MIN
|
8
|
-
#define RUBY_LIBXML_VER_MIC
|
7
|
+
#define RUBY_LIBXML_VER_MIN 2
|
8
|
+
#define RUBY_LIBXML_VER_MIC 0
|
9
9
|
#define RUBY_LIBXML_VER_PATCH 0
|
data/ext/libxml/ruby_xml_xpath.c
CHANGED
@@ -104,7 +104,7 @@ rxml_xpath_to_value(xmlXPathContextPtr xctxt, xmlXPathObjectPtr xobject) {
|
|
104
104
|
xmlXPathFreeObject(xobject);
|
105
105
|
break;
|
106
106
|
case XPATH_STRING:
|
107
|
-
result =
|
107
|
+
result = rxml_new_cstr((const char*)xobject->stringval, xctxt->doc->encoding);
|
108
108
|
xmlXPathFreeObject(xobject);
|
109
109
|
break;
|
110
110
|
default:
|
@@ -159,8 +159,8 @@ static VALUE rxml_xpath_context_register_namespaces_from_node(VALUE self,
|
|
159
159
|
Skip it for now. */
|
160
160
|
if (xns->prefix)
|
161
161
|
{
|
162
|
-
VALUE prefix =
|
163
|
-
VALUE uri =
|
162
|
+
VALUE prefix = rxml_new_cstr((const char*)xns->prefix, xctxt->doc->encoding);
|
163
|
+
VALUE uri = rxml_new_cstr((const char*)xns->href, xctxt->doc->encoding);
|
164
164
|
rxml_xpath_context_register_namespace(self, prefix, uri);
|
165
165
|
}
|
166
166
|
xns = xns->next;
|
@@ -215,7 +215,7 @@ static VALUE rxml_xpath_context_register_namespaces(VALUE self, VALUE nslist)
|
|
215
215
|
{
|
216
216
|
rprefix = rb_str_new(StringValuePtr(nslist), (int) ((long) cp
|
217
217
|
- (long) StringValuePtr(nslist)));
|
218
|
-
ruri =
|
218
|
+
ruri = rxml_new_cstr(&cp[1], xctxt->doc->encoding);
|
219
219
|
}
|
220
220
|
/* Should test the results of this */
|
221
221
|
rxml_xpath_context_register_namespace(self, rprefix, ruri);
|
@@ -292,7 +292,7 @@ static VALUE rxml_xpath_object_string(VALUE self)
|
|
292
292
|
if (rxpop->xpop->stringval == NULL)
|
293
293
|
return Qnil;
|
294
294
|
|
295
|
-
return
|
295
|
+
return rxml_new_cstr((const char*) rxpop->xpop->stringval, rxpop->xdoc->encoding);
|
296
296
|
}
|
297
297
|
|
298
298
|
/*
|
data/lib/1.8/libxml_ruby.so
CHANGED
Binary file
|
data/lib/1.9/libxml_ruby.so
CHANGED
Binary file
|
data/test/new_main.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
string1 = "(ISC)²"
|
4
|
+
puts string1.encoding
|
5
|
+
puts string1.bytes.to_a.join(' ')
|
6
|
+
puts string1
|
7
|
+
|
8
|
+
puts ""
|
9
|
+
string2 = string1.encode('iso-8859-1')
|
10
|
+
puts string2.encoding
|
11
|
+
puts string2.bytes.to_a.join(' ')
|
12
|
+
puts string2
|
13
|
+
|
14
|
+
puts ""
|
15
|
+
string3 = string1.force_encoding('iso-8859-1').encode('utf-8')
|
16
|
+
puts string3.encoding
|
17
|
+
puts string3.bytes.to_a.join(' ')
|
18
|
+
puts string3
|
19
|
+
|
20
|
+
#UTF-8
|
21
|
+
#40 73 83 67 41 194 178
|
22
|
+
#(ISC)²
|
23
|
+
#
|
24
|
+
#ISO-8859-1
|
25
|
+
#40 73 83 67 41 178
|
26
|
+
#(ISC)²
|
27
|
+
|
28
|
+
|
29
|
+
#40 73 83 67 41 195 130 194 178
|
data/test/tc_attr.rb
CHANGED
@@ -48,7 +48,7 @@ class AttrNodeTest < Test::Unit::TestCase
|
|
48
48
|
def test_name
|
49
49
|
attribute = city_member.attributes.get_attribute('name')
|
50
50
|
assert_equal('name', attribute.name)
|
51
|
-
assert_equal(Encoding::
|
51
|
+
assert_equal(Encoding::UTF_8, attribute.name.encoding) if defined?(Encoding)
|
52
52
|
|
53
53
|
attribute = city_member.attributes.get_attribute('href')
|
54
54
|
assert_equal('href', attribute.name)
|
@@ -64,7 +64,7 @@ class AttrNodeTest < Test::Unit::TestCase
|
|
64
64
|
def test_value
|
65
65
|
attribute = city_member.attributes.get_attribute('name')
|
66
66
|
assert_equal('Cambridge', attribute.value)
|
67
|
-
assert_equal(Encoding::
|
67
|
+
assert_equal(Encoding::UTF_8, attribute.value.encoding) if defined?(Encoding)
|
68
68
|
|
69
69
|
attribute = city_member.attributes.get_attribute('href')
|
70
70
|
assert_equal('http://www.foo.net/cgi-bin/wfs?FeatureID=C10239', attribute.value)
|
@@ -74,12 +74,12 @@ class AttrNodeTest < Test::Unit::TestCase
|
|
74
74
|
attribute = city_member.attributes.get_attribute('name')
|
75
75
|
attribute.value = 'London'
|
76
76
|
assert_equal('London', attribute.value)
|
77
|
-
assert_equal(Encoding::
|
77
|
+
assert_equal(Encoding::UTF_8, attribute.value.encoding) if defined?(Encoding)
|
78
78
|
|
79
79
|
attribute = city_member.attributes.get_attribute('href')
|
80
80
|
attribute.value = 'http://i.have.changed'
|
81
81
|
assert_equal('http://i.have.changed', attribute.value)
|
82
|
-
assert_equal(Encoding::
|
82
|
+
assert_equal(Encoding::UTF_8, attribute.value.encoding) if defined?(Encoding)
|
83
83
|
end
|
84
84
|
|
85
85
|
def test_set_nil
|
data/test/tc_document.rb
CHANGED
@@ -88,20 +88,6 @@ class TestDocument < Test::Unit::TestCase
|
|
88
88
|
@doc.to_s(:indent => false))
|
89
89
|
end
|
90
90
|
|
91
|
-
def test_encoding
|
92
|
-
doc = XML::Document.new
|
93
|
-
assert_equal(XML::Encoding::NONE, doc.encoding)
|
94
|
-
assert_equal(Encoding::ASCII_8BIT, doc.rb_encoding) if defined?(Encoding)
|
95
|
-
|
96
|
-
file = File.expand_path(File.join(File.dirname(__FILE__), 'model/bands.xml'))
|
97
|
-
doc = XML::Document.file(file)
|
98
|
-
assert_equal(XML::Encoding::UTF_8, doc.encoding)
|
99
|
-
assert_equal(Encoding::UTF_8, doc.rb_encoding) if defined?(Encoding)
|
100
|
-
|
101
|
-
doc.encoding = XML::Encoding::ISO_8859_1
|
102
|
-
assert_equal(XML::Encoding::ISO_8859_1, doc.encoding)
|
103
|
-
assert_equal(Encoding::ISO8859_1, doc.rb_encoding) if defined?(Encoding)
|
104
|
-
end
|
105
91
|
|
106
92
|
def test_doc_node_type
|
107
93
|
assert_equal(XML::Node::DOCUMENT_NODE, XML::Document.new.node_type)
|
data/test/tc_document_write.rb
CHANGED
@@ -6,17 +6,7 @@ require 'test/unit'
|
|
6
6
|
|
7
7
|
class TestDocumentWrite < Test::Unit::TestCase
|
8
8
|
def setup
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
def teardown
|
13
|
-
XML.default_keep_blanks = true
|
14
|
-
@doc = nil
|
15
|
-
end
|
16
|
-
|
17
|
-
def load_encoding(name)
|
18
|
-
@encoding = Encoding.find(name) if defined?(Encoding)
|
19
|
-
@file_name = "model/bands.#{name.downcase}.xml"
|
9
|
+
@file_name = "model/bands.utf-8.xml"
|
20
10
|
|
21
11
|
# Strip spaces to make testing easier
|
22
12
|
XML.default_keep_blanks = false
|
@@ -24,6 +14,11 @@ class TestDocumentWrite < Test::Unit::TestCase
|
|
24
14
|
@doc = XML::Document.file(file)
|
25
15
|
end
|
26
16
|
|
17
|
+
def teardown
|
18
|
+
XML.default_keep_blanks = true
|
19
|
+
@doc = nil
|
20
|
+
end
|
21
|
+
|
27
22
|
# --- to_s tests ---
|
28
23
|
def test_to_s_default
|
29
24
|
# Default to_s has indentation
|
data/test/tc_encoding.rb
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
if defined?(Encoding)
|
4
|
+
require './test_helper'
|
5
|
+
require 'test/unit'
|
6
|
+
|
7
|
+
# Code UTF8 Latin1 Hex
|
8
|
+
# m 109 109 6D
|
9
|
+
# ö 195 182 246 C3 B6 / F6
|
10
|
+
# t 116 116 74
|
11
|
+
# l 108 108 6C
|
12
|
+
# e 101 101 65
|
13
|
+
# y 121 121 79
|
14
|
+
# _ 95 95 5F
|
15
|
+
# c 99 99 63
|
16
|
+
# r 114 114 72
|
17
|
+
# ü 195 188 252 C3 BC / FC
|
18
|
+
# e 101 101 65
|
19
|
+
|
20
|
+
# See:
|
21
|
+
# http://en.wikipedia.org/wiki/ISO/IEC_8859-1
|
22
|
+
# http://en.wikipedia.org/wiki/List_of_Unicode_characters
|
23
|
+
|
24
|
+
class TestEncoding < Test::Unit::TestCase
|
25
|
+
def setup
|
26
|
+
Encoding.default_internal = nil
|
27
|
+
end
|
28
|
+
|
29
|
+
def load_encoding(encoding)
|
30
|
+
@encoding = encoding
|
31
|
+
file_name = "model/bands.#{@encoding.name.downcase}.xml"
|
32
|
+
|
33
|
+
# Strip spaces to make testing easier
|
34
|
+
XML.default_keep_blanks = false
|
35
|
+
file = File.join(File.dirname(__FILE__), file_name)
|
36
|
+
@doc = XML::Document.file(file)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_encoding
|
40
|
+
doc = XML::Document.new
|
41
|
+
assert_equal(XML::Encoding::NONE, doc.encoding)
|
42
|
+
assert_equal(Encoding::ASCII_8BIT, doc.rb_encoding) if defined?(Encoding)
|
43
|
+
|
44
|
+
file = File.expand_path(File.join(File.dirname(__FILE__), 'model/bands.xml'))
|
45
|
+
doc = XML::Document.file(file)
|
46
|
+
assert_equal(XML::Encoding::UTF_8, doc.encoding)
|
47
|
+
assert_equal(Encoding::UTF_8, doc.rb_encoding) if defined?(Encoding)
|
48
|
+
|
49
|
+
doc.encoding = XML::Encoding::ISO_8859_1
|
50
|
+
assert_equal(XML::Encoding::ISO_8859_1, doc.encoding)
|
51
|
+
assert_equal(Encoding::ISO8859_1, doc.rb_encoding) if defined?(Encoding)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_no_internal_encoding_iso_8859_1
|
55
|
+
Encoding.default_internal = nil
|
56
|
+
load_encoding(Encoding::ISO_8859_1)
|
57
|
+
node = @doc.root.children.first
|
58
|
+
|
59
|
+
name = node.name
|
60
|
+
assert_equal(Encoding::UTF_8, name.encoding)
|
61
|
+
assert_equal("m\u00F6tley_cr\u00FCe", name)
|
62
|
+
assert_equal("109 195 182 116 108 101 121 95 99 114 195 188 101",
|
63
|
+
name.bytes.to_a.join(" "))
|
64
|
+
assert_equal("M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.",
|
65
|
+
node.content)
|
66
|
+
|
67
|
+
name = name.encode(Encoding::ISO_8859_1)
|
68
|
+
assert_equal(Encoding::ISO_8859_1, name.encoding)
|
69
|
+
assert_equal("m\xF6tley_cr\xFCe".force_encoding(Encoding::ISO_8859_1), name)
|
70
|
+
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
71
|
+
name.bytes.to_a.join(" "))
|
72
|
+
assert_equal("M\xF6tley Cr\xFCe is an American heavy metal band formed in Los Angeles, California in 1981.".force_encoding(Encoding::ISO_8859_1),
|
73
|
+
node.content.encode(Encoding::ISO_8859_1))
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_internal_encoding_iso_8859_1
|
77
|
+
Encoding.default_internal = Encoding::ISO_8859_1
|
78
|
+
load_encoding(Encoding::ISO_8859_1)
|
79
|
+
node = @doc.root.children.first
|
80
|
+
|
81
|
+
name = node.name
|
82
|
+
assert_equal(Encoding::ISO_8859_1, name.encoding)
|
83
|
+
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
84
|
+
name.bytes.to_a.join(" "))
|
85
|
+
assert_equal("m\xF6tley_cr\xFCe".force_encoding(Encoding::ISO_8859_1), name)
|
86
|
+
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
87
|
+
name.bytes.to_a.join(" "))
|
88
|
+
assert_equal("M\xF6tley Cr\xFCe is an American heavy metal band formed in Los Angeles, California in 1981.".force_encoding(Encoding::ISO_8859_1),
|
89
|
+
node.content.encode(Encoding::ISO_8859_1))
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_no_internal_encoding_utf_8
|
93
|
+
Encoding.default_internal = nil
|
94
|
+
load_encoding(Encoding::UTF_8)
|
95
|
+
node = @doc.root.children.first
|
96
|
+
|
97
|
+
name = node.name
|
98
|
+
assert_equal(@encoding, name.encoding)
|
99
|
+
assert_equal("109 195 182 116 108 101 121 95 99 114 195 188 101",
|
100
|
+
name.bytes.to_a.join(" "))
|
101
|
+
|
102
|
+
name = name.encode(Encoding::ISO_8859_1)
|
103
|
+
assert_equal(Encoding::ISO_8859_1, name.encoding)
|
104
|
+
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
105
|
+
name.bytes.to_a.join(" "))
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_internal_encoding_utf_8
|
109
|
+
Encoding.default_internal = Encoding::ISO_8859_1
|
110
|
+
load_encoding(Encoding::UTF_8)
|
111
|
+
node = @doc.root.children.first
|
112
|
+
|
113
|
+
name = node.name
|
114
|
+
assert_equal(Encoding::ISO_8859_1, name.encoding)
|
115
|
+
assert_equal("109 246 116 108 101 121 95 99 114 252 101",
|
116
|
+
name.bytes.to_a.join(" "))
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
data/test/tc_node.rb
CHANGED
@@ -5,23 +5,18 @@ require 'test/unit'
|
|
5
5
|
|
6
6
|
class TestNode < Test::Unit::TestCase
|
7
7
|
def setup
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
def teardown
|
12
|
-
XML.default_keep_blanks = true
|
13
|
-
@doc = nil
|
14
|
-
end
|
15
|
-
|
16
|
-
def load_encoding(name)
|
17
|
-
@encoding = Encoding.find(name) if defined?(Encoding)
|
18
|
-
@file_name = "model/bands.#{name.downcase}.xml"
|
8
|
+
@file_name = "model/bands.utf-8.xml"
|
19
9
|
|
20
10
|
# Strip spaces to make testing easier
|
21
11
|
XML.default_keep_blanks = false
|
22
12
|
file = File.join(File.dirname(__FILE__), @file_name)
|
23
13
|
@doc = XML::Document.file(file)
|
24
14
|
end
|
15
|
+
|
16
|
+
def teardown
|
17
|
+
XML.default_keep_blanks = true
|
18
|
+
@doc = nil
|
19
|
+
end
|
25
20
|
|
26
21
|
def nodes
|
27
22
|
# Find all nodes with a country attributes
|
@@ -65,7 +60,7 @@ class TestNode < Test::Unit::TestCase
|
|
65
60
|
assert_instance_of(XML::Node, @doc.root.child)
|
66
61
|
|
67
62
|
if defined?(Encoding)
|
68
|
-
assert_equal(
|
63
|
+
assert_equal(Encoding::UTF_8, @doc.root.child.name.encoding)
|
69
64
|
assert_equal("m\u00F6tley_cr\u00FCe", @doc.root.child.name)
|
70
65
|
else
|
71
66
|
assert_equal("m\303\266tley_cr\303\274e", @doc.root.child.name)
|
@@ -79,25 +74,8 @@ class TestNode < Test::Unit::TestCase
|
|
79
74
|
end
|
80
75
|
|
81
76
|
def test_name
|
82
|
-
|
83
|
-
|
84
|
-
assert_equal("m\u00F6tley_cr\u00FCe", nodes[0].name)
|
85
|
-
else
|
86
|
-
assert_equal("m\303\266tley_cr\303\274e", nodes[0].name)
|
87
|
-
end
|
88
|
-
assert_equal("iron_maiden", nodes[1].name)
|
89
|
-
end
|
90
|
-
|
91
|
-
def test_name_iso_8859_1
|
92
|
-
load_encoding("iso-8859-1")
|
93
|
-
|
94
|
-
if defined?(Encoding)
|
95
|
-
assert_equal(@encoding, nodes[0].name.encoding)
|
96
|
-
assert_equal("m\303\266tley_cr\303\274e".force_encoding(@encoding), nodes[0].name)
|
97
|
-
else
|
98
|
-
assert_equal("m\303\266tley_cr\303\274e", nodes[0].name)
|
99
|
-
end
|
100
|
-
assert_equal("iron_maiden", nodes[1].name)
|
77
|
+
node = @doc.root.children.last
|
78
|
+
assert_equal("iron_maiden", node.name)
|
101
79
|
end
|
102
80
|
|
103
81
|
def test_node_find
|
@@ -140,47 +118,9 @@ class TestNode < Test::Unit::TestCase
|
|
140
118
|
end
|
141
119
|
|
142
120
|
def test_content
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
@doc.root.content)
|
147
|
-
|
148
|
-
first = @doc.root.child
|
149
|
-
assert_equal("M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.",
|
150
|
-
first.content)
|
151
|
-
assert_equal("Iron Maiden is a British heavy metal band formed in 1975.", first.next.content)
|
152
|
-
else
|
153
|
-
assert_equal("M\303\266tley Cr\303\274e is an American heavy metal band formed in Los Angeles, California in 1981.Iron Maiden is a British heavy metal band formed in 1975.",
|
154
|
-
@doc.root.content)
|
155
|
-
|
156
|
-
first = @doc.root.child
|
157
|
-
assert_equal("M\303\266tley Cr\303\274e is an American heavy metal band formed in Los Angeles, California in 1981.",
|
158
|
-
first.content)
|
159
|
-
assert_equal("Iron Maiden is a British heavy metal band formed in 1975.",
|
160
|
-
first.next.content)
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
def test_content_iso_8859_1
|
165
|
-
load_encoding("iso-8859-1")
|
166
|
-
if defined?(Encoding)
|
167
|
-
assert_equal(@encoding, @doc.root.content.encoding)
|
168
|
-
assert_equal("M\xC3\xB6tley Cr\xC3\xBCe is an American heavy metal band formed in Los Angeles, California in 1981.Iron Maiden is a British heavy metal band formed in 1975.".force_encoding(@encoding),
|
169
|
-
@doc.root.content)
|
170
|
-
|
171
|
-
first = @doc.root.child
|
172
|
-
assert_equal("M\xC3\xB6tley Cr\xC3\xBCe is an American heavy metal band formed in Los Angeles, California in 1981.".force_encoding(@encoding),
|
173
|
-
first.content)
|
174
|
-
assert_equal("Iron Maiden is a British heavy metal band formed in 1975.", first.next.content)
|
175
|
-
else
|
176
|
-
assert_equal("M\303\266tley Cr\303\274e is an American heavy metal band formed in Los Angeles, California in 1981.Iron Maiden is a British heavy metal band formed in 1975.",
|
177
|
-
@doc.root.content)
|
178
|
-
|
179
|
-
first = @doc.root.child
|
180
|
-
assert_equal("M\303\266tley Cr\303\274e is an American heavy metal band formed in Los Angeles, California in 1981.",
|
181
|
-
first.content)
|
182
|
-
assert_equal("Iron Maiden is a British heavy metal band formed in 1975.", first.next.content)
|
183
|
-
end
|
121
|
+
node = @doc.root.last
|
122
|
+
assert_equal("Iron Maiden is a British heavy metal band formed in 1975.",
|
123
|
+
node.content)
|
184
124
|
end
|
185
125
|
|
186
126
|
def test_base
|
data/test/tc_parser.rb
CHANGED
@@ -227,8 +227,8 @@ class TestParser < Test::Unit::TestCase
|
|
227
227
|
doc = parser.parse
|
228
228
|
node = doc.find_first('//metal')
|
229
229
|
if defined?(Encoding)
|
230
|
-
assert_equal(Encoding::
|
231
|
-
assert_equal("m\303\266tley_cr\303\274e"
|
230
|
+
assert_equal(Encoding::UTF_8, node.content.encoding)
|
231
|
+
assert_equal("m\303\266tley_cr\303\274e", node.content)
|
232
232
|
else
|
233
233
|
assert_equal("m\303\266tley_cr\303\274e", node.content)
|
234
234
|
end
|
data/test/test_suite.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: libxml-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
|
-
- 1
|
9
8
|
- 2
|
10
|
-
|
9
|
+
- 0
|
10
|
+
version: 2.2.0
|
11
11
|
platform: x86-mingw32
|
12
12
|
authors:
|
13
13
|
- Ross Bamform
|
@@ -20,7 +20,7 @@ autorequire:
|
|
20
20
|
bindir: bin
|
21
21
|
cert_chain: []
|
22
22
|
|
23
|
-
date: 2011-08-
|
23
|
+
date: 2011-08-09 00:00:00 Z
|
24
24
|
dependencies: []
|
25
25
|
|
26
26
|
description: " The Libxml-Ruby project provides Ruby language bindings for the GNOME\n Libxml2 XML toolkit. It is free software, released under the MIT License.\n Libxml-ruby's primary advantage over REXML is performance - if speed\n is your need, these are good libraries to consider, as demonstrated\n by the informal benchmark below.\n"
|
@@ -156,6 +156,7 @@ files:
|
|
156
156
|
- test/model/shiporder.xsd
|
157
157
|
- test/model/soap.xml
|
158
158
|
- test/model/xinclude.xml
|
159
|
+
- test/new_main.rb
|
159
160
|
- test/tc_attr.rb
|
160
161
|
- test/tc_attributes.rb
|
161
162
|
- test/tc_attr_decl.rb
|
@@ -163,6 +164,7 @@ files:
|
|
163
164
|
- test/tc_document.rb
|
164
165
|
- test/tc_document_write.rb
|
165
166
|
- test/tc_dtd.rb
|
167
|
+
- test/tc_encoding.rb
|
166
168
|
- test/tc_error.rb
|
167
169
|
- test/tc_gc.rb
|
168
170
|
- test/tc_html_parser.rb
|
@@ -241,6 +243,7 @@ test_files:
|
|
241
243
|
- test/tc_document.rb
|
242
244
|
- test/tc_document_write.rb
|
243
245
|
- test/tc_dtd.rb
|
246
|
+
- test/tc_encoding.rb
|
244
247
|
- test/tc_error.rb
|
245
248
|
- test/tc_gc.rb
|
246
249
|
- test/tc_html_parser.rb
|