From 3f479a055652a2abd54b550ff9134c420e1021eb Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 10 Jul 2012 15:55:18 -0600 Subject: [PATCH] *SL: avoid run-time dependency on Scribble Instead, move the Scribble dependencies into generated documentation submodules. --- collects/lang/htdp-advanced.rkt | 1 + collects/lang/htdp-beginner-abbr.rkt | 1 + collects/lang/htdp-beginner.rkt | 1 + collects/lang/htdp-intermediate-lambda.rkt | 3 +- collects/lang/htdp-intermediate.rkt | 1 + collects/lang/private/advanced-funs.rkt | 68 ++++++++++--------- collects/lang/private/beginner-funs.rkt | 59 ++++++++-------- collects/lang/private/intermediate-funs.rkt | 25 ++++--- .../lang/private/provide-and-scribble.rkt | 32 ++++----- 9 files changed, 101 insertions(+), 90 deletions(-) diff --git a/collects/lang/htdp-advanced.rkt b/collects/lang/htdp-advanced.rkt index 9496ac785c..359ab19091 100644 --- a/collects/lang/htdp-advanced.rkt +++ b/collects/lang/htdp-advanced.rkt @@ -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)) diff --git a/collects/lang/htdp-beginner-abbr.rkt b/collects/lang/htdp-beginner-abbr.rkt index 7285fd1b33..18403d6480 100644 --- a/collects/lang/htdp-beginner-abbr.rkt +++ b/collects/lang/htdp-beginner-abbr.rkt @@ -56,4 +56,5 @@ ;; procedures: (provide-and-scribble procedures + (begin) (all-from beginner: (submod lang/private/beginner-funs with-wrapper) procedures)) diff --git a/collects/lang/htdp-beginner.rkt b/collects/lang/htdp-beginner.rkt index 64537ce9ee..67ef998814 100644 --- a/collects/lang/htdp-beginner.rkt +++ b/collects/lang/htdp-beginner.rkt @@ -61,4 +61,5 @@ ;; procedures: (provide-and-scribble procedures + (begin) (all-from beginner: (submod lang/private/beginner-funs with-wrapper) procedures)) diff --git a/collects/lang/htdp-intermediate-lambda.rkt b/collects/lang/htdp-intermediate-lambda.rkt index de07b720c9..65442ab2ec 100644 --- a/collects/lang/htdp-intermediate-lambda.rkt +++ b/collects/lang/htdp-intermediate-lambda.rkt @@ -61,6 +61,5 @@ ;; procedures: (provide-and-scribble procedures + (begin) (all-from intermediate: lang/private/intermediate-funs procedures)) - - diff --git a/collects/lang/htdp-intermediate.rkt b/collects/lang/htdp-intermediate.rkt index cbdbc06d95..f2c18951f7 100644 --- a/collects/lang/htdp-intermediate.rkt +++ b/collects/lang/htdp-intermediate.rkt @@ -62,6 +62,7 @@ (provide-and-scribble procedures + (begin) (all-from beginner: lang/private/intermediate-funs procedures)) (provide diff --git a/collects/lang/private/advanced-funs.rkt b/collects/lang/private/advanced-funs.rkt index 728d8bcbb2..656483110d 100644 --- a/collects/lang/private/advanced-funs.rkt +++ b/collects/lang/private/advanced-funs.rkt @@ -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]{ diff --git a/collects/lang/private/beginner-funs.rkt b/collects/lang/private/beginner-funs.rkt index 165855f727..f518a1c3a5 100644 --- a/collects/lang/private/beginner-funs.rkt +++ b/collects/lang/private/beginner-funs.rkt @@ -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?]{ diff --git a/collects/lang/private/intermediate-funs.rkt b/collects/lang/private/intermediate-funs.rkt index 2a7e59fafc..adbacf6d86 100644 --- a/collects/lang/private/intermediate-funs.rkt +++ b/collects/lang/private/intermediate-funs.rkt @@ -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)" diff --git a/collects/lang/private/provide-and-scribble.rkt b/collects/lang/private/provide-and-scribble.rkt index db8241d190..42abd70132 100644 --- a/collects/lang/private/provide-and-scribble.rkt +++ b/collects/lang/private/provide-and-scribble.rkt @@ -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)]