diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-09-07 03:13:29 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-09-07 03:13:29 +0000 |
commit | 020e681eece7359f1cfcda9871b600084507dbb1 (patch) | |
tree | 7235e608341c13a79b9518f009f48d2e68d509cc /transcode.c | |
parent | 120772041e7addfc574e3b045cb4fc6a3517f4f4 (diff) | |
download | ruby-020e681eece7359f1cfcda9871b600084507dbb1.tar.gz |
* 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.c | 28 |
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); |