summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/skribilo.scm25
1 files changed, 20 insertions, 5 deletions
diff --git a/doc/skribilo.scm b/doc/skribilo.scm
index 1025db4..a666eed 100644
--- a/doc/skribilo.scm
+++ b/doc/skribilo.scm
@@ -1,5 +1,5 @@
;;; guix-forge --- Guix software forge meta-service
-;;; Copyright © 2022 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2022–2023 Arun Isaac <arunisaac@systemreboot.net>
;;;
;;; This file is part of guix-forge.
;;;
@@ -207,13 +207,28 @@ the default value. DEFAULT, when specified, will override the default
value extracted from the source."
(make-record-field identifier #f default documentation))
+(define (quoted-write object port)
+ "Write @var{object} to @var{port} printing quoted expressions using
+the quote character."
+ (match object
+ (('quote child)
+ (display "'" port)
+ (quoted-write child port))
+ ((parent children ...)
+ (display "(" port)
+ (quoted-write parent port)
+ (unless (null? children)
+ (display " " port))
+ (for-each (cut quoted-write <> port)
+ children)
+ (display ")" port))
+ (_ (write object port))))
+
(define (expression->string exp)
"Return EXP as a human-readable string. In particular, quote forms
are printed using the quote symbol."
- (match exp
- (('quote exp)
- (string-append "'" (expression->string exp)))
- (_ (format "~s" exp))))
+ (call-with-output-string
+ (cut quoted-write exp <>)))
(define (record-documentation file identifier . fields)
"Document record identified by IDENTIFIER, a symbol, in FILE. FIELDS