~ chicken-core (chicken-5) e1936189444046a61eda5cb20f9f8a69b975a7de
commit e1936189444046a61eda5cb20f9f8a69b975a7de Author: felix <felix@call-with-current-continuation.org> AuthorDate: Mon Mar 28 03:37:26 2011 -0400 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Mon Mar 28 03:37:26 2011 -0400 pp should escape tab and newline (thanks to Mr. Post) diff --git a/extras.scm b/extras.scm index a7bc4290..a2b0d7c5 100644 --- a/extras.scm +++ b/extras.scm @@ -335,16 +335,21 @@ ((string? obj) (if display? (out obj col) (let loop ((i 0) (j 0) (col (out "\"" col))) - (if (and col (< j (string-length obj))) + (if (and col (fx< j (string-length obj))) (let ((c (string-ref obj j))) - (if (or (char=? c #\\) - (char=? c #\")) - (loop j - (+ j 1) - (out "\\" - (out (##sys#substring obj i j) - col))) - (loop i (+ j 1) col))) + (cond ((assq c '((#\\ . "\\") + (#\" . "\\\"") + (#\tab . "\\t") + (#\newline . "\\n") + (#\return . "\\r"))) + => + (lambda (a) + (let ((col2 + (out (##sys#substring obj i j) col))) + (loop (fx+ j 1) + (fx+ j 1) + (out (cdr a) col2))))) + (else (loop i (fx+ j 1) col)))) (out "\"" (out (##sys#substring obj i j) col)))))) ((char? obj) (if display?Trap