mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +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:
parent
8445eb1db5
commit
c03ef352bc
2 changed files with 11 additions and 2 deletions
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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=?
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue