1(define-module (mdoc utils markup)
2 #:use-module (skribilo ast)
3 #:use-module (skribilo writer)
4 #:use-module (skribilo utils syntax)
5 #:use-module (skribilo evaluator)
6
7 #:use-module (mdoc utils output)
8
9 #:export (make-block
10 make-listing
11 make-ornament
12 make-macro
13 make-parsed-macro))
14
15(skribilo-module-syntax)
16
17(define* (make-block markup start end #:optional opts)
18 (markup-writer markup
19 :options (or opts '())
20 :before (lambda (n e)
21 (apply output-macro e start))
22 :after (lambda (n e)
23 (apply output-macro e end))))
24
25(define (make-listing markup . list-opts)
26 (make-block markup
27 (cons* 'Bl list-opts)
28 '(El)
29 '(:symbol)))
30
31(define (make-ornament markup macro)
32 (markup-writer markup
33 :before (string-append "\n." (symbol->string macro) " ")
34 :after "\n"))
35
36(define* (make-macro markup macro #:optional opts)
37 (markup-writer markup
38 :options (or opts '())
39 :action (lambda (n e)
40 (output-macro e macro (markup-body n)))))
41
42(define* (make-parsed-macro markup macro #:optional opts)
43 (markup-writer markup
44 :options (or opts '())
45 :action (lambda (n e)
46 (with-parsed-macro (e macro)
47 (evaluate-document (markup-body n) e)))))