summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-09-29 15:02:59 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-09-29 15:02:59 +0000
commit3f3e44962cedb1e5c607f62004789d6876ab0ff0 (patch)
tree1dc4620e4dcf3fb6ce75e63a3ab1ae7f99c245e7
parentda707bbaf1460d2f4da23960f1f1b59fce4937df (diff)
downloadruby-3f3e44962cedb1e5c607f62004789d6876ab0ff0.tar.gz
ruby-3f3e44962cedb1e5c607f62004789d6876ab0ff0.tar.xz
ruby-3f3e44962cedb1e5c607f62004789d6876ab0ff0.zip
Escape as \x{XXXX} other than Unicode chars.
* string.c (rb_str_inspect): escape as \x{XXXX} when the encoding is other than Unicode. [ruby-dev:39388] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@25163 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--string.c25
-rw-r--r--test/ruby/test_m17n.rb4
3 files changed, 24 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index f5b395df3..5205024e8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Sep 30 00:00:25 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_inspect): escape as \x{XXXX} when the encoding is
+ other than Unicode. [ruby-dev:39388]
+
Wed Sep 30 00:00:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
* configure.in (THREAD_MODEL): modified message when no thread
diff --git a/string.c b/string.c
index 4ee979ee8..3ba6693a1 100644
--- a/string.c
+++ b/string.c
@@ -4123,21 +4123,30 @@ rb_str_inspect(VALUE str)
char buf[11];
escape_codepoint:
- if (unicode_p && c != -1) {
- if (c > 0xFFFF) {
- sprintf(buf, "\\u{%X}", c);
+ if (c == -1) {
+ char *q;
+ for (q = p-n; q < p; q++) {
+ sprintf(buf, "\\x%02X", *q & 0377);
+ str_buf_cat(result, buf, strlen(buf));
}
- else {
+ }
+ else if (unicode_p) {
+ if (c < 0x10000) {
sprintf(buf, "\\u%04X", c);
}
+ else {
+ sprintf(buf, "\\u{%X}", c);
+ }
str_buf_cat(result, buf, strlen(buf));
}
else {
- char *q;
- for (q = p-n; q < p; q++) {
- sprintf(buf, "\\x%02X", *q & 0377);
- str_buf_cat(result, buf, strlen(buf));
+ if (c < 0x100) {
+ sprintf(buf, "\\x%02X", c);
+ }
+ else {
+ sprintf(buf, "\\x{%X}", c);
}
+ str_buf_cat(result, buf, strlen(buf));
}
}
}
diff --git a/test/ruby/test_m17n.rb b/test/ruby/test_m17n.rb
index cb24bac86..d8a3c0955 100644
--- a/test/ruby/test_m17n.rb
+++ b/test/ruby/test_m17n.rb
@@ -201,10 +201,10 @@ class TestM17N < Test::Unit::TestCase
assert_equal('"\xFC\x80\x80\x80\x80 "', u("\xfc\x80\x80\x80\x80 ").inspect)
- assert_equal("\"\\xA1\\x8F\\xA1\\xA1\"", e("\xa1\x8f\xa1\xa1").inspect)
+ assert_equal("\"\\xA1\\x{8FA1A1}\"", e("\xa1\x8f\xa1\xa1").inspect)
assert_equal('"\x81."', s("\x81.").inspect)
- assert_equal(s('"\x81\x40"'), s("\x81@").inspect)
+ assert_equal(s('"\x{8140}"'), s("\x81@").inspect)
assert_equal('"\xFC"', u("\xfc").inspect)
end