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/