read-print: Define forms for which \n, \t, etc. are not escaped.
Previously, the pretty-printer would unconditionally leave everything but double-quotes and backslashes unescaped when rendering a string. With this change, the previous behavior only applies to forms listed in %NATURAL-WHITESPACE-STRING-FORMS. * guix/read-print.scm (%natural-whitespace-string-forms): New variable. (printed-string): New procedure. (pretty-print-with-comments): Use it instead of 'escaped-string'. * tests/read-print.scm: Add test.master
parent
ac9a7f6be9
commit
82968362ea
|
@ -386,6 +386,21 @@ particular newlines, is left as is."
|
||||||
str)
|
str)
|
||||||
#\")))
|
#\")))
|
||||||
|
|
||||||
|
(define %natural-whitespace-string-forms
|
||||||
|
;; When a string has one of these forms as its parent, only double quotes
|
||||||
|
;; and backslashes are escaped; newlines, tabs, etc. are left as-is.
|
||||||
|
'(synopsis description G_ N_))
|
||||||
|
|
||||||
|
(define (printed-string str context)
|
||||||
|
"Return the read syntax for STR depending on CONTEXT."
|
||||||
|
(match context
|
||||||
|
(()
|
||||||
|
(object->string str))
|
||||||
|
((head . _)
|
||||||
|
(if (memq head %natural-whitespace-string-forms)
|
||||||
|
(escaped-string str)
|
||||||
|
(object->string str)))))
|
||||||
|
|
||||||
(define (string-width str)
|
(define (string-width str)
|
||||||
"Return the \"width\" of STR--i.e., the width of the longest line of STR."
|
"Return the \"width\" of STR--i.e., the width of the longest line of STR."
|
||||||
(apply max (map string-length (string-split str #\newline))))
|
(apply max (map string-length (string-split str #\newline))))
|
||||||
|
@ -691,7 +706,7 @@ FORMAT-VERTICAL-SPACE; a useful value of 'canonicalize-vertical-space'."
|
||||||
(+ column 1)))))
|
(+ column 1)))))
|
||||||
(_
|
(_
|
||||||
(let* ((str (cond ((string? obj)
|
(let* ((str (cond ((string? obj)
|
||||||
(escaped-string obj))
|
(printed-string obj context))
|
||||||
((integer? obj)
|
((integer? obj)
|
||||||
(integer->string obj context))
|
(integer->string obj context))
|
||||||
(else
|
(else
|
||||||
|
|
|
@ -186,6 +186,9 @@ expressions."
|
||||||
(lambda _
|
(lambda _
|
||||||
xyz))))")
|
xyz))))")
|
||||||
|
|
||||||
|
(test-pretty-print "\
|
||||||
|
(string-append \"a\\tb\" \"\\n\")")
|
||||||
|
|
||||||
(test-pretty-print "\
|
(test-pretty-print "\
|
||||||
(description \"abcdefghijkl
|
(description \"abcdefghijkl
|
||||||
mnopqrstuvwxyz.\")"
|
mnopqrstuvwxyz.\")"
|
||||||
|
|
Reference in New Issue