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 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
@@ -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
@@ -26,9 +26,6 @@
26
26
  #include <ruby/encoding.h>
27
27
  #endif
28
28
 
29
- // Ruby 1.8/1.9 encoding compatibility
30
- VALUE rxml_str_new2(const char* xstr, const char* xencoding);
31
-
32
29
  #ifdef LIBXML_DEBUG_ENABLED
33
30
  #include <libxml/xpathInternals.h>
34
31
  #endif
@@ -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 rxml_str_new2((const char*) xattr->name, (xattr->doc ? xattr->doc->encoding : NULL));
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 = rxml_str_new2((const char*) value, (xattr->doc ? xattr->doc->encoding : NULL));
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 rxml_str_new2((const char*) xattr->name, xattr->doc->encoding);
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 rxml_str_new2((const char *)xattr->defaultValue, xattr->doc->encoding);
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 = rxml_str_new2((const char*) buffer, (const char*)xdoc->encoding);
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
- return rxml_xml_encoding_to_rb_encoding(mXMLEncoding, xmlParseCharEncoding(xencoding));
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 = rxml_str_new2((const char*) buffer, xencoding);
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 (rxml_str_new2((const char*) xdoc->URL, xdoc->encoding));
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 (rxml_str_new2((const char*) xdoc->version, xdoc->encoding));
775
+ return (rxml_new_cstr((const char*) xdoc->version, NULL));
774
776
  }
775
777
 
776
778
  /*
@@ -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 (rxml_str_new2((const char*) xdtd->ExternalID, xdtd->doc ? xdtd->doc->encoding : NULL));
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 (rxml_str_new2((const char*) xdtd->name, xdtd->doc ? xdtd->doc->encoding : NULL));
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 (rxml_str_new2((const char*) xdtd->SystemID, xdtd->doc ? xdtd->doc->encoding : NULL));
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 rxml_str_new2(xencoding, xencoding);
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
- VALUE rxml_xml_encoding_to_rb_encoding(VALUE klass, xmlCharEncoding xmlEncoding)
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 rb_enc_from_encoding(rb_enc_find(encodingName));
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
- return rxml_xml_encoding_to_rb_encoding(klass, NUM2INT(encoding));
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
- VALUE rxml_xml_encoding_to_rb_encoding(VALUE klass, xmlCharEncoding xmlEncoding);
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 rxml_namespace_string(xns, (const char*) xns->href);
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 rxml_namespace_string(xns, (const char*) xns->prefix);
119
+ return rxml_new_cstr((const char*) xns->prefix, NULL);
129
120
  }
130
121
 
131
122
  /*
@@ -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 = rxml_str_new2((const char*) base_uri, xnode->doc ? xnode->doc->encoding : NULL);
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 = rxml_str_new2((const char *) content, xnode->doc ? xnode->doc->encoding : NULL);
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 = rxml_str_new2((const char*) content, xnode->doc ? xnode->doc->encoding : NULL);
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 = rxml_str_new2((const char*) output->conv->content, xencoding);
585
+ result = rxml_new_cstr((const char*) output->conv->content, xencoding);
586
586
  else
587
- result = rxml_str_new2((const char*) output->buffer->content, xencoding);
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 = rxml_str_new2((const char*) lang, xnode->doc ? xnode->doc->encoding : NULL);
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 (rxml_str_new2("simple", xnode->doc ? xnode->doc->encoding : NULL));
824
+ return (rxml_new_cstr("simple", NULL));
825
825
  case XLINK_TYPE_EXTENDED:
826
- return (rxml_str_new2("extended", xnode->doc ? xnode->doc->encoding : NULL));
826
+ return (rxml_new_cstr("extended", NULL));
827
827
  case XLINK_TYPE_EXTENDED_SET:
828
- return (rxml_str_new2("extended_set", xnode->doc ? xnode->doc->encoding : NULL));
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 (rxml_str_new2((const char*) name, xnode->doc ? xnode->doc->encoding : NULL));
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 (rxml_str_new2((const char*) path, xnode->doc ? xnode->doc->encoding : NULL));
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 rxml_str_new2(ctxt->input->filename, ctxt->encoding);
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 (rxml_str_new2(ctxt->directory, ctxt->encoding));
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 (rxml_str_new2((const char*) ctxt->name, ctxt->encoding));
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, rxml_str_new2((const char*) ctxt->nameTab[i], ctxt->encoding));
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 (rxml_str_new2((const char*) ctxt->intSubName, ctxt->encoding));
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 (rxml_str_new2((const char*) ctxt->extSubURI, ctxt->encoding));
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 (rxml_str_new2((const char*) ctxt->extSubSystem, ctxt->encoding));
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 (rxml_str_new2((const char*) ctxt->version, ctxt->encoding));
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 = rxml_str_new2((const char*) xml, xencoding);
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 = rxml_str_new2((const char*) xml, xencoding);
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 = rxml_str_new2((const char*) xml, xencoding);
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 : rxml_str_new2(result, xencoding));
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 : rxml_str_new2(result, xencoding));
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 : rxml_str_new2(result, xencoding));
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 : rxml_str_new2(result, xencoding));
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 : rxml_str_new2(result, xencoding));
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 : rxml_str_new2(result, xencoding));
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 : rxml_str_new2(result, xencoding));
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 : rxml_str_new2(result, xencoding));
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 = rxml_str_new2(xattr, xencoding);
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 = rxml_str_new2((const char*)xnamespace, (const char*)xencoding);
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.1.2"
5
- #define RUBY_LIBXML_VERNUM 212
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 1
8
- #define RUBY_LIBXML_VER_MIC 2
7
+ #define RUBY_LIBXML_VER_MIN 2
8
+ #define RUBY_LIBXML_VER_MIC 0
9
9
  #define RUBY_LIBXML_VER_PATCH 0
@@ -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 = rxml_str_new2((const char*)xobject->stringval, xctxt->doc->encoding);
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 = rxml_str_new2((const char*)xns->prefix, xctxt->doc->encoding);
163
- VALUE uri = rxml_str_new2((const char*)xns->href, xctxt->doc->encoding);
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 = rxml_str_new2(&cp[1], xctxt->doc->encoding);
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 rxml_str_new2((const char*) rxpop->xpop->stringval, rxpop->xdoc->encoding);
295
+ return rxml_new_cstr((const char*) rxpop->xpop->stringval, rxpop->xdoc->encoding);
296
296
  }
297
297
 
298
298
  /*
Binary file
Binary file
@@ -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
@@ -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::ASCII_8BIT, attribute.name.encoding) if defined?(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::ASCII_8BIT, attribute.value.encoding) if defined?(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::ASCII_8BIT, attribute.value.encoding) if defined?(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::ASCII_8BIT, attribute.value.encoding) if defined?(Encoding)
82
+ assert_equal(Encoding::UTF_8, attribute.value.encoding) if defined?(Encoding)
83
83
  end
84
84
 
85
85
  def test_set_nil
@@ -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)
@@ -6,17 +6,7 @@ require 'test/unit'
6
6
 
7
7
  class TestDocumentWrite < Test::Unit::TestCase
8
8
  def setup
9
- load_encoding("utf-8")
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
@@ -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
@@ -5,23 +5,18 @@ require 'test/unit'
5
5
 
6
6
  class TestNode < Test::Unit::TestCase
7
7
  def setup
8
- load_encoding("utf-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(@encoding, @doc.root.child.name.encoding)
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
- if defined?(Encoding)
83
- assert_equal(@encoding, nodes[0].name.encoding)
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
- if defined?(Encoding)
144
- assert_equal(@encoding, @doc.root.content.encoding)
145
- assert_equal("M\u00F6tley Cr\u00FCe is an American heavy metal band formed in Los Angeles, California in 1981.Iron Maiden is a British heavy metal band formed in 1975.",
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
@@ -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::ISO8859_1, node.content.encoding)
231
- assert_equal("m\303\266tley_cr\303\274e".force_encoding(Encoding::ISO8859_1), node.content)
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
@@ -11,6 +11,7 @@ require './tc_attributes'
11
11
  require './tc_document'
12
12
  require './tc_document_write'
13
13
  require './tc_dtd'
14
+ require './tc_encoding'
14
15
  require './tc_error'
15
16
  require './tc_html_parser'
16
17
  require './tc_html_parser_context'
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: 15
4
+ hash: 7
5
5
  prerelease:
6
6
  segments:
7
7
  - 2
8
- - 1
9
8
  - 2
10
- version: 2.1.2
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-03 00:00:00 Z
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