Adds a #:part option to `chunk', to control how it's displayed.

svn: r13654

original commit: 6c7a0aae5168005ffcd2dbbed22e79cdb64e5ffd
This commit is contained in:
Eli Barzilay 2009-02-16 06:30:41 +00:00
parent e581f8ceb7
commit db690297b7
2 changed files with 16 additions and 4 deletions

View File

@ -13,10 +13,15 @@
;; of the same name
(define chunk-number (make-free-identifier-mapping)))
;; define `chunk' as a macro that typesets the code
;; This is the doc-view implementation of `chunk', see "literate-lang.ss" for
;; the cide-view implementation. Defines `chunk' as a macro that typesets the
;; contained code.
(define-syntax (chunk stx)
(syntax-case stx ()
[(_ name expr ...)
[(_ #:part #f name expr ...)
#'(make-splice (list (bold (scheme name) " ::=")
(schemeblock expr ...)))]
[(_ #:part part-function name expr ...)
(let ([n (add1 (free-identifier-mapping-get
chunk-number #'name (lambda () 0)))])
(free-identifier-mapping-put! chunk-number #'name n)
@ -25,8 +30,9 @@
[(more ...) (if (n . > . 1)
#`((subscript #,(format "~a" n)))
#`())])
#'(make-splice (list (subsection #:tag tag (scheme name) more ...)
(schemeblock expr ...)))))]))
#'(make-splice (list (part-function #:tag tag (scheme name) more ...)
(schemeblock expr ...)))))]
[(_ name expr ...) #'(chunk #:part subsection name expr ...)]))
;; HACK: provide a fake `module', which makes it possible to include a module
;; and get only its code in.

View File

@ -25,8 +25,14 @@
chunks id
`(,@(mapping-get chunks id) ,@(map syntax-local-introduce exprs)))))
;; This is the code-view implementation of `chunk', see
;; "literate-doc-wrapper.ss" for the doc-view implementation. Defines
;; `chunk' as a macro that collects the code to be later reassembled
;; by `tangle'.
(define-syntax (chunk stx)
(syntax-case stx ()
;; no use for the part function here
[(_ #:part part-function name expr ...) (chunk name expr ...)]
[(_ name expr ...)
(cond [(not (identifier? #'name))
(raise-syntax-error #f "expected a chunk name" stx #'name)]