diff --git a/collects/s-exp/info.ss b/collects/s-exp/info.ss new file mode 100644 index 0000000000..d7b2b2b1a6 --- /dev/null +++ b/collects/s-exp/info.ss @@ -0,0 +1,3 @@ + +(module info setup/infotab + (define name "S-expression Module")) diff --git a/collects/s-exp/lang/info.ss b/collects/s-exp/lang/info.ss new file mode 100644 index 0000000000..f5ea5abac9 --- /dev/null +++ b/collects/s-exp/lang/info.ss @@ -0,0 +1,3 @@ + +(module info setup/infotab + (define name "S-expression Module reader")) diff --git a/collects/s-exp/lang/reader.ss b/collects/s-exp/lang/reader.ss new file mode 100644 index 0000000000..d52664d17e --- /dev/null +++ b/collects/s-exp/lang/reader.ss @@ -0,0 +1,26 @@ +(module reader scheme/base + + (provide (rename-out [*read read] + [*read-syntax read-syntax])) + + (define (*read in) + (wrap in read)) + + (define (*read-syntax src in) + (wrap in (lambda (in) + (read-syntax src in)))) + + (define (wrap port read) + (let ([body + (let loop ([a null]) + (let ([v (read port)]) + (if (eof-object? v) + (reverse a) + (loop (cons v a)))))]) + (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 . ,body)))))