1(define-module (mdoc utils output)2 #:use-module (skribilo output)3 #:use-module (skribilo ast)45 #:export (in-parsed-macro?6 with-parsed-macro78 output-macro9 output-newline10 output-section11 output-preamble))1213(define in-parsed-macro?14 (make-parameter #f))1516(define-syntax with-parsed-macro17 (syntax-rules ()18 ((with-parsed-macro (E M) BODY ...)19 (begin20 (%output-macro E M "")21 (parameterize ((in-parsed-macro? #t))22 BODY ...)23 (output-newline E)))))2425;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2627(define (%output-macro e name . value)28 (define (->string obj)29 (if (string? obj)30 obj31 (ast->string obj)))3233 (unless (in-parsed-macro?)34 (output-newline e)35 (output "." e))3637 (output38 (if (null? value)39 (symbol->string name)40 (format #f "~a ~a"41 (symbol->string name)42 (string-join (map ->string value) " ")))43 e))4445(define (output-macro e name . value)46 (%output-macro e name value)47 (unless (in-parsed-macro?)48 (output-newline e)))4950(define (output-newline e)51 (output "\n" e))5253(define (output-section e title)54 (output-macro e 'Sh (string-upcase title)))5556(define (output-preamble e name date section system)57 (output-macro e 'Dd date)58 (output-macro e 'Dt (string-upcase name) section)59 (if system60 (output-macro e 'Os system)61 (output-macro e 'Os)))