1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 19:50:24 +02:00

Favor non-hex string escapes over hex escapes when writing strings

The characters U+0007 to U+000D have non-hex forms for their
escapes when in written strings.

* libguile/print.c (write_character): use non-hex escapes
* test-suite/tests/reader.test (write R6RS string escapes): adjust test
This commit is contained in:
Michael Gran 2010-09-26 12:25:18 -07:00
parent 8445eb1db5
commit c03ef352bc
2 changed files with 11 additions and 2 deletions

View file

@ -904,9 +904,17 @@ write_character (scm_t_wchar ch, SCM port, int string_escapes_p)
/* Represent CH using the in-string escape syntax. */ /* Represent CH using the in-string escape syntax. */
static const char hex[] = "0123456789abcdef"; static const char hex[] = "0123456789abcdef";
static const char escapes[7] = "abtnvfr";
char buf[9]; char buf[9];
if (!SCM_R6RS_ESCAPES_P) if (ch >= 0x07 && ch <= 0x0D && ch != 0x0A)
{
/* Use special escapes for some C0 controls. */
buf[0] = '\\';
buf[1] = escapes[ch - 0x07];
scm_lfwrite (buf, 2, port);
}
else if (!SCM_R6RS_ESCAPES_P)
{ {
if (ch <= 0xFF) if (ch <= 0xFF)
{ {

View file

@ -309,6 +309,7 @@
(pass-if "write R6RS string escapes" (pass-if "write R6RS string escapes"
(let* ((s1 (apply string (let* ((s1 (apply string
(map integer->char '(#x8 ; backspace (map integer->char '(#x8 ; backspace
#x18 ; cancel
#x20 ; space #x20 ; space
#x30 ; zero #x30 ; zero
#x40 ; at sign #x40 ; at sign
@ -319,7 +320,7 @@
(lambda () (write s1))))))) (lambda () (write s1)))))))
(lset= eqv? (lset= eqv?
(string->list s2) (string->list s2)
(list #\" #\\ #\x #\8 #\; #\space #\0 #\@ #\")))) (list #\" #\\ #\b #\\ #\x #\1 #\8 #\; #\space #\0 #\@ #\"))))
(pass-if "display R6RS string escapes" (pass-if "display R6RS string escapes"
(string=? (string=?