mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* transcode.c (get_replacement_character): don't return ASCII
incompatible replacements. (make_replacement): don't convert the result of get_replacement_character. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19277 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
817a623d13
commit
3cc7c9d0dd
2 changed files with 16 additions and 44 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
Wed Sep 10 01:16:07 2008 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
|
* transcode.c (get_replacement_character): don't return ASCII
|
||||||
|
incompatible replacements.
|
||||||
|
(make_replacement): don't convert the result of
|
||||||
|
get_replacement_character.
|
||||||
|
|
||||||
Wed Sep 10 01:05:00 2008 Tanaka Akira <akr@fsij.org>
|
Wed Sep 10 01:05:00 2008 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
* enc/trans/newline.trans (rb_universal_newline): swap src_encoding
|
* enc/trans/newline.trans (rb_universal_newline): swap src_encoding
|
||||||
|
|
53
transcode.c
53
transcode.c
|
@ -372,44 +372,16 @@ load_transcoder_entry(transcoder_entry_t *entry)
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char*
|
static const char*
|
||||||
get_replacement_character(rb_encoding *enc, size_t *len_ret, const char **repl_enc_ptr)
|
get_replacement_character(const char *encname, size_t *len_ret, const char **repl_encname_ptr)
|
||||||
{
|
{
|
||||||
static rb_encoding *utf16be_encoding, *utf16le_encoding;
|
if (encoding_equal(encname, "UTF-8")) {
|
||||||
static rb_encoding *utf32be_encoding, *utf32le_encoding;
|
|
||||||
if (!utf16be_encoding) {
|
|
||||||
utf16be_encoding = rb_enc_find("UTF-16BE");
|
|
||||||
utf16le_encoding = rb_enc_find("UTF-16LE");
|
|
||||||
utf32be_encoding = rb_enc_find("UTF-32BE");
|
|
||||||
utf32le_encoding = rb_enc_find("UTF-32LE");
|
|
||||||
}
|
|
||||||
if (rb_utf8_encoding() == enc) {
|
|
||||||
*len_ret = 3;
|
*len_ret = 3;
|
||||||
*repl_enc_ptr = "UTF-8";
|
*repl_encname_ptr = "UTF-8";
|
||||||
return "\xEF\xBF\xBD";
|
return "\xEF\xBF\xBD";
|
||||||
}
|
}
|
||||||
else if (utf16be_encoding == enc) {
|
|
||||||
*len_ret = 2;
|
|
||||||
*repl_enc_ptr = "UTF-16BE";
|
|
||||||
return "\xFF\xFD";
|
|
||||||
}
|
|
||||||
else if (utf16le_encoding == enc) {
|
|
||||||
*len_ret = 2;
|
|
||||||
*repl_enc_ptr = "UTF-16LE";
|
|
||||||
return "\xFD\xFF";
|
|
||||||
}
|
|
||||||
else if (utf32be_encoding == enc) {
|
|
||||||
*len_ret = 4;
|
|
||||||
*repl_enc_ptr = "UTF-32BE";
|
|
||||||
return "\x00\x00\xFF\xFD";
|
|
||||||
}
|
|
||||||
else if (utf32le_encoding == enc) {
|
|
||||||
*len_ret = 4;
|
|
||||||
*repl_enc_ptr = "UTF-32LE";
|
|
||||||
return "\xFD\xFF\x00\x00";
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
*len_ret = 1;
|
*len_ret = 1;
|
||||||
*repl_enc_ptr = "US-ASCII";
|
*repl_encname_ptr = "US-ASCII";
|
||||||
return "?";
|
return "?";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2034,16 +2006,17 @@ make_replacement(rb_econv_t *ec)
|
||||||
const char *repl_enc;
|
const char *repl_enc;
|
||||||
const char *ins_enc;
|
const char *ins_enc;
|
||||||
size_t len;
|
size_t len;
|
||||||
int allocated = 0;
|
|
||||||
|
|
||||||
if (ec->replacement_str)
|
if (ec->replacement_str)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
ins_enc = rb_econv_encoding_to_insert_output(ec);
|
||||||
|
|
||||||
tc = ec->last_tc;
|
tc = ec->last_tc;
|
||||||
if (tc) {
|
if (*ins_enc) {
|
||||||
tr = tc->transcoder;
|
tr = tc->transcoder;
|
||||||
enc = rb_enc_find(tr->dst_encoding);
|
enc = rb_enc_find(tr->dst_encoding);
|
||||||
replacement = (const unsigned char *)get_replacement_character(enc, &len, &repl_enc);
|
replacement = (const unsigned char *)get_replacement_character(ins_enc, &len, &repl_enc);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
replacement = (unsigned char *)"?";
|
replacement = (unsigned char *)"?";
|
||||||
|
@ -2051,18 +2024,10 @@ make_replacement(rb_econv_t *ec)
|
||||||
repl_enc = "";
|
repl_enc = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
ins_enc = rb_econv_encoding_to_insert_output(ec);
|
|
||||||
if (*repl_enc && !encoding_equal(repl_enc, ins_enc)) {
|
|
||||||
replacement = allocate_converted_string(repl_enc, ins_enc, replacement, len, NULL, 0, &len);
|
|
||||||
if (!replacement)
|
|
||||||
return -1;
|
|
||||||
allocated = 1;
|
|
||||||
repl_enc = ins_enc;
|
|
||||||
}
|
|
||||||
ec->replacement_str = replacement;
|
ec->replacement_str = replacement;
|
||||||
ec->replacement_len = len;
|
ec->replacement_len = len;
|
||||||
ec->replacement_enc = repl_enc;
|
ec->replacement_enc = repl_enc;
|
||||||
ec->replacement_allocated = allocated;
|
ec->replacement_allocated = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue