[前][次][番号順一覧][スレッド一覧]

ruby-changes:13393

From: naruse <ko1@a...>
Date: Wed, 30 Sep 2009 00:03:16 +0900 (JST)
Subject: [ruby-changes:13393] Ruby:r25163 (trunk): Escape as \x{XXXX} other than Unicode chars.

naruse	2009-09-30 00:02:59 +0900 (Wed, 30 Sep 2009)

  New Revision: 25163

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=25163

  Log:
    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]

  Modified files:
    trunk/ChangeLog
    trunk/string.c
    trunk/test/ruby/test_m17n.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 25162)
+++ ChangeLog	(revision 25163)
@@ -1,3 +1,8 @@
+Wed Sep 30 00:00:25 2009  NARUSE, Yui  <naruse@r...>
+
+	* 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@r...>
 
 	* configure.in (THREAD_MODEL): modified message when no thread
Index: string.c
===================================================================
--- string.c	(revision 25162)
+++ string.c	(revision 25163)
@@ -4123,21 +4123,30 @@
 	    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));
 	    }
 	}
     }
Index: test/ruby/test_m17n.rb
===================================================================
--- test/ruby/test_m17n.rb	(revision 25162)
+++ test/ruby/test_m17n.rb	(revision 25163)
@@ -201,10 +201,10 @@
     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

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]