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

ruby-changes:16209

From: naruse <ko1@a...>
Date: Sat, 5 Jun 2010 20:32:07 +0900 (JST)
Subject: [ruby-changes:16209] Ruby:r28175 (trunk): * string.c (rb_str_buf_cat_escaped_char): defined.

naruse	2010-06-05 20:31:54 +0900 (Sat, 05 Jun 2010)

  New Revision: 28175

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

  Log:
    * string.c (rb_str_buf_cat_escaped_char): defined.
      Splited from rb_str_inspect.

  Modified files:
    trunk/ChangeLog
    trunk/string.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 28174)
+++ ChangeLog	(revision 28175)
@@ -1,3 +1,8 @@
+Sat Jun  5 01:10:12 2010  NARUSE, Yui  <naruse@r...>
+
+	* string.c (rb_str_buf_cat_escaped_char): defined.
+	  Splited from rb_str_inspect.
+
 Sat Jun  5 16:39:13 2010  Tanaka Akira  <akr@f...>
 
 	* .gdbinit (rp): show type name for RTypedData.
Index: string.c
===================================================================
--- string.c	(revision 28174)
+++ string.c	(revision 28175)
@@ -4078,6 +4078,36 @@
 }
 #endif
 
+#define CHAR_ESC_LEN 13 /* sizeof(\x{ hex of 32bit unsigned int } \0) */
+
+int
+rb_str_buf_cat_escaped_char(VALUE result, unsigned int c, int unicode_p) {
+    char buf[CHAR_ESC_LEN + 1];
+    int l;
+    if (unicode_p) {
+	if (c < 0x7F && ISPRINT(c)) {
+	    snprintf(buf, CHAR_ESC_LEN, "%c", c);
+	}
+	else if (c < 0x10000) {
+	    snprintf(buf, CHAR_ESC_LEN, "\\u%04X", c);
+	}
+	else {
+	    snprintf(buf, CHAR_ESC_LEN, "\\u{%X}", c);
+	}
+    }
+    else {
+	if (c < 0x100) {
+	    snprintf(buf, CHAR_ESC_LEN, "\\x%02X", c);
+	}
+	else {
+	    snprintf(buf, CHAR_ESC_LEN, "\\x{%X}", c);
+	}
+    }
+    l = strlen(buf);
+    rb_str_buf_cat(result, buf, l);
+    return l;
+}
+
 /*
  * call-seq:
  *   str.inspect   -> string
@@ -4095,7 +4125,6 @@
 {
     rb_encoding *enc = STR_ENC_GET(str);
     const char *p, *pend, *prev;
-#define CHAR_ESC_LEN 13 /* sizeof(\x{ hex of 32bit unsigned int } \0) */
     char buf[CHAR_ESC_LEN + 1];
     VALUE result = rb_str_buf_new(0);
     rb_encoding *resenc = rb_default_internal_encoding();
@@ -4165,27 +4194,7 @@
 	}
 	else {
 	    if (p - n > prev) str_buf_cat(result, prev, p - n - prev);
-	    if (unicode_p) {
-		if (c < 0x100 && ISPRINT(c)) {
-		    snprintf(buf, CHAR_ESC_LEN, "%c", c);
-		}
-		else if (c < 0x10000) {
-		    snprintf(buf, CHAR_ESC_LEN, "\\u%04X", c);
-		}
-		else {
-		    snprintf(buf, CHAR_ESC_LEN, "\\u{%X}", c);
-		}
-		str_buf_cat(result, buf, strlen(buf));
-	    }
-	    else {
-		if (c < 0x100) {
-		    snprintf(buf, CHAR_ESC_LEN, "\\x%02X", c);
-		}
-		else {
-		    snprintf(buf, CHAR_ESC_LEN, "\\x{%X}", c);
-		}
-		str_buf_cat(result, buf, strlen(buf));
-	    }
+	    rb_str_buf_cat_escaped_char(result, c, unicode_p);
 	    prev = p;
 	    continue;
 	}

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

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