33 lines
880 B
Racket
33 lines
880 B
Racket
#lang racket/base
|
|
(require xml
|
|
scribble/text
|
|
(for-syntax racket/base
|
|
racket/list
|
|
syntax/parse)
|
|
racket/port)
|
|
|
|
(define-syntax (include-template stx)
|
|
(syntax-parse stx
|
|
[(_ (~optional (~seq #:command-char command-char:expr)) p:expr)
|
|
(quasisyntax/loc stx
|
|
(with-output-to-string
|
|
(lambda ()
|
|
(output (include/text #,@(if (attribute command-char)
|
|
(list #'#:command-char #'command-char)
|
|
empty)
|
|
p)))))]))
|
|
|
|
(define-syntax include-template/xexpr
|
|
(syntax-rules ()
|
|
[(_ . p)
|
|
(string->xexpr (include-template . p))]))
|
|
|
|
(define-syntax in
|
|
(syntax-rules ()
|
|
[(_ x xs e ...)
|
|
(for/list ([x xs])
|
|
(begin/text e ...))]))
|
|
|
|
(provide include-template
|
|
in)
|