*SL: avoid run-time dependency on Scribble

Instead, move the Scribble dependencies into generated documentation
submodules.
This commit is contained in:
Matthew Flatt 2012-07-10 15:55:18 -06:00
parent 428711bf93
commit 3f479a0556
9 changed files with 101 additions and 90 deletions

View File

@ -73,5 +73,6 @@
;; procedures:
(provide-and-scribble
procedures
(begin)
(all-from-except intermediate: lang/private/intermediate-funs procedures cons list* append random)
(all-from advanced: lang/private/advanced-funs procedures))

View File

@ -56,4 +56,5 @@
;; procedures:
(provide-and-scribble
procedures
(begin)
(all-from beginner: (submod lang/private/beginner-funs with-wrapper) procedures))

View File

@ -61,4 +61,5 @@
;; procedures:
(provide-and-scribble
procedures
(begin)
(all-from beginner: (submod lang/private/beginner-funs with-wrapper) procedures))

View File

@ -61,6 +61,5 @@
;; procedures:
(provide-and-scribble
procedures
(begin)
(all-from intermediate: lang/private/intermediate-funs procedures))

View File

@ -62,6 +62,7 @@
(provide-and-scribble
procedures
(begin)
(all-from beginner: lang/private/intermediate-funs procedures))
(provide

View File

@ -10,44 +10,46 @@
(for-syntax scheme/base))
;; Documents the procedures:
(require scribble/manual scribble/eval "sl-eval.rkt" "provide-and-scribble.rkt")
(require "provide-and-scribble.rkt")
(define pp (let ([pretty-print (lambda (v) (pretty-write v))]) pretty-print))
(define (asl)
(define *bsl
(asl-eval
(require 2htdp/image)
(define c1 (circle 10 "solid" "green"))
(define zero 0)
(define one (list 1))
;; b 69, c 42, e 61
(define list-for-hash '((b . 69) (c . 42) (e . 61) (r . 999)))
(define hsh (make-hash list-for-hash))
(define heq (make-hasheq list-for-hash))
(define heqv (make-hasheqv list-for-hash))
(define ish (make-immutable-hash list-for-hash))
(define ieq (make-immutable-hasheq list-for-hash))
(define ieqv (make-immutable-hasheqv list-for-hash))
(define q (make-posn "bye" 2))
(define p (make-posn 2 -3))
(define v (vector "a" "b" "c" "d" "e"))
(define b (box 33))
(define s "hello world")
(define x (list 2 "hello" true))))
(set! asl (lambda () *bsl))
*bsl)
(provide-and-scribble
procedures
(begin
(require scribble/manual scribble/eval "sl-eval.rkt")
(define (asl)
(define *bsl
(asl-eval
(require 2htdp/image)
(define c1 (circle 10 "solid" "green"))
(define zero 0)
(define one (list 1))
;; b 69, c 42, e 61
(define list-for-hash '((b . 69) (c . 42) (e . 61) (r . 999)))
(define hsh (make-hash list-for-hash))
(define heq (make-hasheq list-for-hash))
(define heqv (make-hasheqv list-for-hash))
(define ish (make-immutable-hash list-for-hash))
(define ieq (make-immutable-hasheq list-for-hash))
(define ieqv (make-immutable-hasheqv list-for-hash))
(define q (make-posn "bye" 2))
(define p (make-posn 2 -3))
(define v (vector "a" "b" "c" "d" "e"))
(define b (box 33))
(define s "hello world")
(define x (list 2 "hello" true))))
(set! asl (lambda () *bsl))
*bsl))
("Numbers: Integers, Rationals, Reals, Complex, Exacts, Inexacts"
@defproc[(random [x integer]) integer]{

View File

@ -12,12 +12,9 @@
;; Implements the procedures:
(require "teachprims.rkt" "teach.rkt" lang/posn lang/imageeq "provide-and-scribble.rkt")
;; Documents the procedures:
(require scribble/manual scribble/eval "sl-eval.rkt")
(define-syntax (provide-and-wrap stx)
(syntax-parse stx
[(provide-and-wrap wrap doc-tag:id (title (defproc (name args ...) range w ...) ...) ...)
[(provide-and-wrap wrap doc-tag:id requires (title (defproc (name args ...) range w ...) ...) ...)
(with-syntax ([((f ...) ...) (map generate-temporaries (syntax->list #'((name ...) ...)))]
[((internal-name ...) ...)
(map (lambda (x)
@ -40,11 +37,15 @@
(module+ with-wrapper
(wrap f internal-name) ... ...
(provide-and-scribble
doc-tag (title (defproc ((f external-name) args ...) range w ...) ...) ...))
doc-tag
requires
(title (defproc ((f external-name) args ...) range w ...) ...) ...))
;; and one that doesn't
(module+ without-wrapper
(provide-and-scribble
doc-tag (title (defproc (name args ...) range w ...) ...) ...))))]))
doc-tag
requires
(title (defproc (name args ...) range w ...) ...) ...))))]))
(define-syntax (in-rator-position-only stx)
(syntax-case stx ()
@ -69,32 +70,34 @@
#'orig-name))]))]))
(define (bsl)
(define *bsl
(bsl+-eval
(require 2htdp/image)
(define c1 (circle 10 "solid" "green"))
(define zero 0)
(define one (list 1))
(define q (make-posn "bye" 2))
(define p (make-posn 2 -3))
(define a (list (list 'a 22) (list 'b 8) (list 'c 70)))
(define v (list 1 2 3 4 5 6 7 8 9 'A))
(define w (list (list (list (list "bye") 3) true) 42))
(define z (list (list (list (list 'a 'b) 2 3) ) (list false true) "world"))
(define y (list (list (list 1 2 3) false "world")))
(define x (list 2 "hello" true))))
(set! bsl (lambda () *bsl))
*bsl)
;; procedures with documentation:
(provide-and-wrap
in-rator-position-only
procedures
(begin
(require scribble/manual scribble/eval "sl-eval.rkt")
(define (bsl)
(define *bsl
(bsl+-eval
(require 2htdp/image)
(define c1 (circle 10 "solid" "green"))
(define zero 0)
(define one (list 1))
(define q (make-posn "bye" 2))
(define p (make-posn 2 -3))
(define a (list (list 'a 22) (list 'b 8) (list 'c 70)))
(define v (list 1 2 3 4 5 6 7 8 9 'A))
(define w (list (list (list (list "bye") 3) true) 42))
(define z (list (list (list (list 'a 'b) 2 3) ) (list false true) "world"))
(define y (list (list (list 1 2 3) false "world")))
(define x (list 2 "hello" true))))
(set! bsl (lambda () *bsl))
*bsl))
("Numbers: Integers, Rationals, Reals, Complex, Exacts, Inexacts"
@defproc[(number? [n any/c]) boolean?]{

View File

@ -7,20 +7,23 @@
(for-syntax scheme/base))
;; Documents the procedures:
(require scribble/manual scribble/eval "sl-eval.rkt" "provide-and-scribble.rkt")
(define (isl)
(define *bsl
(isl+-eval
; (require 2htdp/image)
(define i 3)
(define a-list '(0 1 2 3 4 5 6 7 8 9))
(define threshold 3)))
(set! isl (lambda () *bsl))
*bsl)
(require "provide-and-scribble.rkt")
(provide-and-scribble
procedures
(begin
(require scribble/manual scribble/eval "sl-eval.rkt")
(define (isl)
(define *bsl
(isl+-eval
; (require 2htdp/image)
(define i 3)
(define a-list '(0 1 2 3 4 5 6 7 8 9))
(define threshold 3)))
(set! isl (lambda () *bsl))
*bsl))
(all-from-except beginner: (submod lang/private/beginner-funs without-wrapper) procedures + * / append)
("Numbers (relaxed conditions)"

View File

@ -29,32 +29,30 @@ tests to run:
collects/tests/htdp-lang/
|#
(require (for-syntax syntax/parse) scribble/manual scribble/eval racket/sandbox)
(require (for-syntax syntax/parse))
(require racket/provide)
(provide
provide-and-scribble all-from all-from-except
)
provide-and-scribble
all-from all-from-except defproc)
;; ---------------------------------------------------------------------------------------------------
(define-for-syntax *add #f)
(define-syntax-rule
(all-from a ...)
(raise-syntax-error "use with provide-and-scribble only"))
(define-syntax-rule
(all-from-except a ...)
(raise-syntax-error "use with provide-and-scribble only"))
(define-for-syntax (provide-and-scribble-only stx)
(raise-syntax-error #f "use with provide-and-scribble only" stx))
(define-syntax all-from provide-and-scribble-only)
(define-syntax all-from-except provide-and-scribble-only)
(define-syntax defproc provide-and-scribble-only)
(define-syntax (provide-and-scribble stx)
(syntax-parse stx #:literals (defproc)
[(provide-and-scribble doc-tag:id rows ...)
(provide-and-scribble-proc #'doc-tag #'(rows ...))]))
(syntax-parse stx #:literals ()
[(provide-and-scribble doc-tag:id requires rows ...)
(provide-and-scribble-proc #'requires #'doc-tag #'(rows ...))]))
(define-for-syntax (provide-and-scribble-proc doc-tag row*)
(define-for-syntax (provide-and-scribble-proc requires doc-tag row*)
(define-values (add-docs-and-provide provides)
(for/fold ((add-docs-and-provide '()) (provides '())) ((row (syntax->list row*)))
(syntax-parse row #:literals (defproc all-from all-from-except)
@ -76,7 +74,7 @@ tests to run:
add-docs-and-provide)
(cons #`(provide #,@(optional-rename-out name*))
provides))])))
(provide-and-scribble-code doc-tag add-docs-and-provide provides))
(provide-and-scribble-code requires doc-tag add-docs-and-provide provides))
;; Path Identifier Identifier [Listof Identifier] ->* [-> Syntax] Syntax[List]
;; create the require and provide clauses AND
@ -116,13 +114,15 @@ tests to run:
;; generate (module+ doc-tag ...) with the documentation in add-docs-and-provide,
;; the first time it adds functions to (module+ doc-tag ...) that help render the docs
;; export the provides list
(define-for-syntax (provide-and-scribble-code doc-tag add-docs-and-provide provides)
(define-for-syntax (provide-and-scribble-code requires doc-tag add-docs-and-provide provides)
(with-syntax ([(p* ...) (reverse provides)])
(cond
[*add #`(begin p* ... (module+ #,doc-tag #,@(map (lambda (adp) (adp)) (reverse add-docs-and-provide))))]
[else
(set! *add (syntax-local-introduce #'add-sections))
#`(begin (module+ #,doc-tag
(require scribble/manual)
#,requires
;; -----------------------------------------------------------------------
;; Section = [Listof (cons Identifier Doc)]
;; Sections = [Listof (list Title Section)]