summaryrefslogtreecommitdiff
path: root/transcode.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-09-07 03:13:29 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-09-07 03:13:29 +0000
commit020e681eece7359f1cfcda9871b600084507dbb1 (patch)
tree7235e608341c13a79b9518f009f48d2e68d509cc /transcode.c
parent120772041e7addfc574e3b045cb4fc6a3517f4f4 (diff)
* include/ruby/encoding.h (ECONV_XML_ATTR_CONTENT_ENCODER): defined.
(ECONV_STATEFUL_ENCODER_MASK): defined. (ECONV_XML_ATTR_QUOTE_ENCODER): defined. (ECONV_XML_ATTR_ENCODER): removed. * enc/trans/escape.trans (rb_escape_xml_attr_content): defined. (rb_escape_xml_attr_quote): defined. (rb_escape_xml_attr): removed. * io.c (NEED_WRITECONV): writeconv is required if supplemental converter is used. (make_writeconv): apply stateful encoder in writeconv. * transcode.c: follow the constant change. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19209 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'transcode.c')
-rw-r--r--transcode.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/transcode.c b/transcode.c
index acfe688ca4..1fdd27d7de 100644
--- a/transcode.c
+++ b/transcode.c
@@ -896,7 +896,7 @@ rb_econv_open(const char *sname, const char *dname, int ecflags)
return NULL;
if ((ecflags & ECONV_XML_TEXT_ENCODER) &&
- (ecflags & ECONV_XML_ATTR_ENCODER))
+ (ecflags & ECONV_XML_ATTR_CONTENT_ENCODER))
return NULL;
num_encoders = 0;
@@ -909,8 +909,11 @@ rb_econv_open(const char *sname, const char *dname, int ecflags)
if (ecflags & ECONV_XML_TEXT_ENCODER)
if (!(encoders[num_encoders++] = get_transcoder_entry("", "xml-text-escaped")))
return NULL;
- if (ecflags & ECONV_XML_ATTR_ENCODER)
- if (!(encoders[num_encoders++] = get_transcoder_entry("", "xml-attr-escaped")))
+ if (ecflags & ECONV_XML_ATTR_CONTENT_ENCODER)
+ if (!(encoders[num_encoders++] = get_transcoder_entry("", "xml-attr-content-escaped")))
+ return NULL;
+ if (ecflags & ECONV_XML_ATTR_QUOTE_ENCODER)
+ if (!(encoders[num_encoders++] = get_transcoder_entry("", "xml-attr-quoted")))
return NULL;
num_decoders = 0;
@@ -1792,7 +1795,8 @@ econv_description(const char *sname, const char *dname, int ecflags, VALUE mesg)
ECONV_CRLF_NEWLINE_ENCODER|
ECONV_CR_NEWLINE_ENCODER|
ECONV_XML_TEXT_ENCODER|
- ECONV_XML_ATTR_ENCODER)) {
+ ECONV_XML_ATTR_CONTENT_ENCODER|
+ ECONV_XML_ATTR_QUOTE_ENCODER)) {
const char *pre = "";
if (has_description)
rb_str_cat2(mesg, " with ");
@@ -1812,9 +1816,13 @@ econv_description(const char *sname, const char *dname, int ecflags, VALUE mesg)
rb_str_cat2(mesg, pre); pre = ",";
rb_str_cat2(mesg, "XML-text");
}
- if (ecflags & ECONV_XML_ATTR_ENCODER) {
+ if (ecflags & ECONV_XML_ATTR_CONTENT_ENCODER) {
+ rb_str_cat2(mesg, pre); pre = ",";
+ rb_str_cat2(mesg, "XML-attr-content");
+ }
+ if (ecflags & ECONV_XML_ATTR_QUOTE_ENCODER) {
rb_str_cat2(mesg, pre); pre = ",";
- rb_str_cat2(mesg, "XML-attr");
+ rb_str_cat2(mesg, "XML-attr-quote");
}
has_description = 1;
}
@@ -2173,7 +2181,7 @@ econv_opts(VALUE opt)
ecflags |= ECONV_XML_TEXT_ENCODER|ECONV_UNDEF_HEX_CHARREF;
}
else if (v==sym_attr) {
- ecflags |= ECONV_XML_ATTR_ENCODER|ECONV_UNDEF_HEX_CHARREF;
+ ecflags |= ECONV_XML_ATTR_CONTENT_ENCODER|ECONV_XML_ATTR_QUOTE_ENCODER|ECONV_UNDEF_HEX_CHARREF;
}
else {
rb_raise(rb_eArgError, "unexpected value for xml option: %s", rb_id2name(SYM2ID(v)));
@@ -2329,7 +2337,8 @@ str_transcode0(int argc, VALUE *argv, VALUE *self, int ecflags, VALUE ecopts)
ECONV_CRLF_NEWLINE_ENCODER|
ECONV_CR_NEWLINE_ENCODER|
ECONV_XML_TEXT_ENCODER|
- ECONV_XML_ATTR_ENCODER)) == 0) {
+ ECONV_XML_ATTR_CONTENT_ENCODER|
+ ECONV_XML_ATTR_QUOTE_ENCODER)) == 0) {
if (senc && senc == denc) {
return -1;
}
@@ -3573,7 +3582,8 @@ Init_transcode(void)
rb_define_const(rb_cEncodingConverter, "CRLF_NEWLINE_ENCODER", INT2FIX(ECONV_CRLF_NEWLINE_ENCODER));
rb_define_const(rb_cEncodingConverter, "CR_NEWLINE_ENCODER", INT2FIX(ECONV_CR_NEWLINE_ENCODER));
rb_define_const(rb_cEncodingConverter, "XML_TEXT_ENCODER", INT2FIX(ECONV_XML_TEXT_ENCODER));
- rb_define_const(rb_cEncodingConverter, "XML_ATTR_ENCODER", INT2FIX(ECONV_XML_ATTR_ENCODER));
+ rb_define_const(rb_cEncodingConverter, "XML_ATTR_CONTENT_ENCODER", INT2FIX(ECONV_XML_ATTR_CONTENT_ENCODER));
+ rb_define_const(rb_cEncodingConverter, "XML_ATTR_QUOTE_ENCODER", INT2FIX(ECONV_XML_ATTR_QUOTE_ENCODER));
rb_define_method(rb_eConversionUndefined, "source_encoding_name", ecerr_source_encoding_name, 0);
rb_define_method(rb_eConversionUndefined, "destination_encoding_name", ecerr_destination_encoding_name, 0);