svn: r13614

original commit: 965110bc551acfdcfac53262903aed13c71826b5
This commit is contained in:
Robby Findler 2009-02-15 21:05:03 +00:00
parent 632cbd8aae
commit efd572e426

View File

@ -32,22 +32,6 @@
@;(require scheme/include)
@;(include/reader "chat-noir-literate.ss" scr:read-syntax-inside)
@(define-syntax (content-elsewhere stx)
(syntax-case stx ()
[(_ fn)
(string? (syntax-e #'fn))
(let ([fn (syntax-e #'fn)])
(register-external-file (path->complete-path fn))
(call-with-input-file fn
(λ (port)
(port-count-lines! port)
(let ([reader-line (read-line port)])
(unless (regexp-match #rx"^#reader" reader-line)
(raise-syntax-error #f (format "expected a #reader line, found ~s" reader-line) stx))
(let* ([content (scr:read-syntax-inside fn port)]
[w/context (give-lexical-content stx content)])
#`(begin #,@w/context))))))]))
@;{ stolen from include.ss. Should probably be refactored to just have one of these.}
@(define-for-syntax (give-lexical-content ctx content)
(let loop ([content content])
@ -72,4 +56,21 @@
content
content))])))
@(define-syntax (content-elsewhere stx)
(syntax-case stx ()
[(_ fn)
(string? (syntax-e #'fn))
(let ([fn (syntax-e #'fn)])
(register-external-file (path->complete-path fn))
(call-with-input-file fn
(λ (port)
(port-count-lines! port)
(let ([reader-line (read-line port)])
(unless (regexp-match #rx"^#reader" reader-line)
(raise-syntax-error #f (format "expected a #reader line, found ~s" reader-line) stx))
(let* ([content (scr:read-syntax-inside fn port)]
[w/context (give-lexical-content stx content)])
#`(begin #,@w/context))))))]))
@content-elsewhere["chat-noir-literate.ss"]