commit 42d983a3cf39f9a02f3de10d2dce16a549091dff
parent fb906ad2d04f850606996cc4f4be12d29f6406f2
Author: Eli Barzilay <eli@racket-lang.org>
Date: Mon, 1 Sep 2008 07:26:53 +0000
All readers now use syntax/module-reader
svn: r11506
original commit: d8b6810fcefa42bee04a47048d2ece94615d2f60
Diffstat:
1 file changed, 18 insertions(+), 17 deletions(-)
diff --git a/collects/scribble/doc/reader.ss b/collects/scribble/doc/reader.ss
@@ -1,22 +1,23 @@
-#lang scheme/base
+#lang s-exp syntax/module-reader
-(require (prefix-in scribble: "../reader.ss"))
+scribble/doclang
-(provide (rename-out [*read read])
- (rename-out [*read-syntax read-syntax]))
+;; `read-inside' reads the whole body, so make wrapper1 return null so
+;; we get the right syntax, and then make wrapper2 do the actual
+;; reading. This might seem extreme, but I think that it's still
+;; better to use module-reader for the subtleties it deals with.
-(define (*read [inp (current-input-port)])
- (wrap inp (scribble:read-inside inp)))
+#:wrapper1 (lambda (t) '())
-(define (*read-syntax [src #f] [port (current-input-port)])
- (wrap port (scribble:read-syntax-inside src port)))
+#:wrapper2
+(lambda (in read stx?)
+ (let* ([skeleton (read in)]
+ [skeleton (if stx? (syntax->list skeleton) skeleton)]
+ [body (if stx?
+ (scribble:read-syntax-inside (object-name in) in)
+ (scribble:read-inside in))]
+ [mod `(,(car skeleton) ,(cadr skeleton) ,(caddr skeleton)
+ (#%module-begin doc () . ,body))])
+ (if stx? (datum->syntax #f mod) mod)))
-(define (wrap port body)
- (let* ([p-name (object-name port)]
- [name (if (path? p-name)
- (let-values ([(base name dir?) (split-path p-name)])
- (string->symbol (path->string (path-replace-suffix name #""))))
- 'page)]
- [id 'doc])
- `(module ,name scribble/doclang
- (#%module-begin ,id () . ,body))))
+(require (prefix-in scribble: "../reader.ss"))