add an #:escape' clause to all schemeblock'-like forms

This commit is contained in:
Matthew Flatt 2011-08-15 18:54:32 -06:00
parent 4c56a94eb1
commit a1eaecb337
6 changed files with 211 additions and 193 deletions

View File

@ -386,45 +386,48 @@
(define-syntax racketinput*
(syntax-rules (eval:alts code:comment)
[(_ (code:comment . rest)) (racketblock0 (code:comment . rest))]
[(_ (eval:alts a b)) (racketinput* a)]
[(_ e) (racketinput0 e)]))
[(_ #:escape id (code:comment . rest)) (racketblock0 #:escape id (code:comment . rest))]
[(_ #:escape id (eval:alts a b)) (racketinput* #:escape id a)]
[(_ #:escape id e) (racketinput0 #:escape id e)]))
(define-code racketblock0+line (to-paragraph/prefix "" "" (list " ")))
(define-syntax (racketdefinput* stx)
(syntax-case stx (define define-values define-struct)
[(_ (define . rest))
[(_ #:escape id (define . rest))
(syntax-case stx ()
[(_ e) #'(racketblock0+line e)])]
[(_ (define-values . rest))
[(_ #:escape _ e) #'(racketblock0+line #:escape id e)])]
[(_ #:escape id (define-values . rest))
(syntax-case stx ()
[(_ e) #'(racketblock0+line e)])]
[(_ (define-struct . rest))
[(_ #:escape _ e) #'(racketblock0+line #:escape id e)])]
[(_ #:escape id (define-struct . rest))
(syntax-case stx ()
[(_ e) #'(racketblock0+line e)])]
[(_ (code:line (define . rest) . rest2))
[(_ #:escape _ e) #'(racketblock0+line #:escape id e)])]
[(_ #:escape id (code:line (define . rest) . rest2))
(syntax-case stx ()
[(_ e) #'(racketblock0+line e)])]
[(_ e) #'(racketinput* e)]))
[(_ #:escape _ e) #'(racketblock0+line #:escape id e)])]
[(_ #:escape id e) #'(racketinput* #:escape id e)]))
(define (do-titled-interaction who inset? ev t shows evals)
(interleave inset? t shows (map (do-eval ev who) evals)))
(define-syntax titled-interaction
(syntax-rules ()
[(_ who inset? #:eval ev t racketinput* e ...)
[(_ who inset? t racketinput* #:eval ev #:escape unsyntax-id e ...)
(do-titled-interaction
'who inset? ev t (list (racketinput* e) ...) (list (quote-expr e) ...))]
'who inset? ev t (list (racketinput* #:escape unsyntax-id e) ...) (list (quote-expr e) ...))]
[(_ who inset? t racketinput* #:eval ev e ...)
(titled-interaction
who inset? t racketinput* #:eval ev #:escape unsyntax e ...)]
[(_ who inset? t racketinput* #:escape unsyntax-id e ...)
(titled-interaction
who inset? t racketinput* #:eval (make-base-eval) #:escape unsyntax-id e ...)]
[(_ who inset? t racketinput* e ...)
(titled-interaction
who inset? #:eval (make-base-eval) t racketinput* e ...)]))
who inset? t racketinput* #:eval (make-base-eval) e ...)]))
(define-syntax (-interaction stx)
(syntax-case stx ()
[(_ who #:eval ev e ...)
(syntax/loc stx
(titled-interaction who #f #:eval ev #f racketinput* e ...))]
[(_ who e ...)
(syntax/loc stx
(titled-interaction who #f #f racketinput* e ...))]))
@ -437,57 +440,70 @@
(syntax-case stx ()
[(H e ...) (syntax/loc stx (-interaction H e ...))]))
(define-syntax racketblock+eval
(define-syntax racketblockX+eval
(syntax-rules ()
[(_ #:eval ev e ...)
[(_ racketblock #:eval ev #:escape unsyntax-id e ...)
(let ([eva ev])
(#%expression
(begin (interaction-eval #:eval eva e) ...
(racketblock e ...))))]
(racketblock #:escape unsyntax-id e ...))))]
[(_ racketblock #:eval ev e ...)
(racketblockX+eval racketblock #:eval ev #:escape unsyntax e ...)]
[(_ racketblock #:escape unsyntax-id e ...)
(racketblockX+eval racketblock #:eval (make-base-eval) #:escape unsyntax-id e ...)]
[(_ racketblock e ...)
(racketblockX+eval racketblock #:eval (make-base-eval) #:escape unsyntax e ...)]))
(define-syntax racketblock+eval
(syntax-rules ()
[(_ e ...)
(racketblock+eval #:eval (make-base-eval) e ...)]))
(racketblockX+eval racketblock e ...)]))
(define-syntax racketblock0+eval
(syntax-rules ()
[(_ #:eval ev e ...)
(let ([eva ev])
(#%expression (begin (interaction-eval #:eval eva e) ...
(racketblock0 e ...))))]
[(_ e ...)
(racketblock0+eval #:eval (make-base-eval) e ...)]))
(racketblockX+eval racketblock0 e ...)]))
(define-syntax racketmod+eval
(syntax-rules ()
[(_ #:eval ev name e ...)
[(_ #:eval ev #:escape unsyntax-id name e ...)
(let ([eva ev])
(#%expression
(begin (interaction-eval #:eval eva e) ...
(racketmod name e ...))))]
(racketmod #:escape unsyntax-id name e ...))))]
[(_ #:eval ev name e ...)
(racketmod+eval #:eval ev #:escape unsyntax name e ...)]
[(_ #:escape unsyntax-id name e ...)
(racketmod+eval #:eval (make-base-eval) #:escape unsyntax-id name e ...)]
[(_ name e ...)
(racketmod+eval #:eval (make-base-eval) name e ...)]))
(define-syntax (def+int stx)
(syntax-case stx ()
[(H #:eval ev def e ...)
(syntax/loc stx
(let ([eva ev])
(column (list (racketblock0+eval #:eval eva def)
blank-line
(-interaction H #:eval eva e ...)))))]
[(_ def e ...)
(syntax/loc stx (def+int #:eval (make-base-eval) def e ...))]))
(racketmod+eval #:eval (make-base-eval) #:escape unsyntax name e ...)]))
(define-syntax (defs+int stx)
(syntax-case stx ()
[(H #:eval ev [def ...] e ...)
[(H #:eval ev #:escape unsyntax-id [def ...] e ...)
(syntax/loc stx
(let ([eva ev])
(column (list (racketblock0+eval #:eval eva def ...)
(column (list (racketblock0+eval #:eval eva #:escape unsyntax-id def ...)
blank-line
(-interaction H #:eval eva e ...)))))]
(-interaction H #:eval eva #:escape unsyntax-id e ...)))))]
[(H #:eval ev [def ...] e ...)
(syntax/loc stx (defs+int #:eval ev #:escape unsyntax [def ...] e ...))]
[(_ #:escape unsyntax-id [def ...] e ...)
(syntax/loc stx (defs+int #:eval (make-base-eval) #:escape unsyntax-id [def ...] e ...))]
[(_ [def ...] e ...)
(syntax/loc stx (defs+int #:eval (make-base-eval) [def ...] e ...))]))
(define-syntax def+int
(syntax-rules ()
[(H #:eval ev #:escape unsyntax-id def e ...)
(defs+int #:eval ev #:escape unsyntax-id [def] e ...)]
[(H #:eval ev def e ...)
(defs+int #:eval ev [def] e ...)]
[(H #:escape unsyntax-id def e ...)
(defs+int #:escape unsyntax-id [def] e ...)]
[(H def e ...)
(defs+int [def] e ...)]))
(define example-title
(make-paragraph (list "Example:")))
(define examples-title
@ -500,37 +516,23 @@
(define-syntax (examples stx)
(syntax-case stx ()
[(H #:eval ev e ...)
(syntax/loc stx
(titled-interaction
H #t #:eval ev (pick-example-title e ...) racketinput* e ...))]
[(H e ...)
(syntax/loc stx
(titled-interaction
H #t (pick-example-title e ...) racketinput* e ...))]))
(define-syntax (examples* stx)
(syntax-case stx ()
[(H #:eval ev example-title e ...)
(syntax/loc stx
(titled-interaction H #t #:eval ev example-title racketinput* e ...))]
[(H example-title e ...)
(syntax/loc stx
(titled-interaction H #t example-title racketinput* e ...))]))
(define-syntax (defexamples stx)
(syntax-case stx ()
[(H #:eval ev e ...)
(syntax/loc stx
(titled-interaction
H #t #:eval ev (pick-example-title e ...) racketdefinput* e ...))]
[(H e ...)
(syntax/loc stx
(titled-interaction
H #t (pick-example-title e ...) racketdefinput* e ...))]))
(define-syntax (defexamples* stx)
(syntax-case stx ()
[(H #:eval ev example-title e ...)
(syntax/loc stx
(titled-interaction H #t #:eval ev example-title racketdefinput* e ...))]
[(H example-title e ...)
(syntax/loc stx
(titled-interaction H #t example-title racketdefinput* e ...))]))

View File

@ -89,7 +89,7 @@
(define-syntax (racketmod0 stx)
(syntax-case stx ()
[(_ #:file filename lang rest ...)
[(_ #:file filename #:escape unsyntax-id lang rest ...)
(with-syntax ([modtag (datum->syntax
#'here
`(unsyntax (make-element
@ -106,8 +106,10 @@
(quasisyntax/loc stx
(filebox
filename
#,(syntax/loc stx (racketblock0 modtag rest ...))))
(syntax/loc stx (racketblock0 modtag rest ...))))]
#,(syntax/loc stx (racketblock0 #:escape unsyntax-id modtag rest ...))))
(syntax/loc stx (racketblock0 #:escape unsyntax-id modtag rest ...))))]
[(_ #:file filename lang rest ...)
(syntax/loc stx (racketmod0 #:file #f #:escape unsyntax lang rest ...))]
[(_ lang rest ...)
(syntax/loc stx (racketmod0 #:file #f lang rest ...))]))

View File

@ -914,56 +914,64 @@
,(syntax-column v)
,(syntax-position v)
,(syntax-span v))))
(define (stx->loc-s-expr v)
(let ([slv (and (identifier? v)
(syntax-local-value v (lambda () #f)))])
(cond
[(variable-id? slv)
(wrap-loc v #f `(,#'make-var-id ',(variable-id-sym slv)))]
[(element-id-transformer? slv)
(wrap-loc v #f ((element-id-transformer-proc slv) v))]
[(syntax? v)
(let ([mk (wrap-loc
v
`(quote-syntax ,(datum->syntax v 'defcode))
(syntax-case v (uncode)
[(uncode e) #'e]
[else (stx->loc-s-expr (syntax-e v))]))])
(let ([prop (syntax-property v 'paren-shape)])
(if prop
`(,#'stx-prop ,mk 'paren-shape ,prop)
mk)))]
[(null? v) 'null]
[(list? v) `(list . ,(map stx->loc-s-expr v))]
[(pair? v) `(cons ,(stx->loc-s-expr (car v))
,(stx->loc-s-expr (cdr v)))]
[(vector? v) `(vector ,@(map
stx->loc-s-expr
(vector->list v)))]
[(and (struct? v) (prefab-struct-key v))
`(make-prefab-struct (quote ,(prefab-struct-key v))
,@(map
stx->loc-s-expr
(cdr (vector->list (struct->vector v)))))]
[(box? v) `(box ,(stx->loc-s-expr (unbox v)))]
[(hash? v) `(,(cond
[(hash-eq? v) 'make-immutable-hasheq]
[(hash-eqv? v) 'make-immutable-hasheqv]
[else 'make-immutable-hash])
(list
,@(hash-map
v
(lambda (k v)
`(cons (quote ,k)
,(stx->loc-s-expr v))))))]
[else `(quote ,v)])))
(define (cvt s)
(datum->syntax #'here (stx->loc-s-expr s) #f))
(define (stx->loc-s-expr/esc v uncode-id)
(define (stx->loc-s-expr v)
(let ([slv (and (identifier? v)
(syntax-local-value v (lambda () #f)))])
(cond
[(variable-id? slv)
(wrap-loc v #f `(,#'make-var-id ',(variable-id-sym slv)))]
[(element-id-transformer? slv)
(wrap-loc v #f ((element-id-transformer-proc slv) v))]
[(syntax? v)
(let ([mk (wrap-loc
v
`(quote-syntax ,(datum->syntax v 'defcode))
(syntax-case v ()
[(esc e)
(and (identifier? #'esc)
(free-identifier=? #'esc uncode-id))
#'e]
[else (stx->loc-s-expr (syntax-e v))]))])
(let ([prop (syntax-property v 'paren-shape)])
(if prop
`(,#'stx-prop ,mk 'paren-shape ,prop)
mk)))]
[(null? v) 'null]
[(list? v) `(list . ,(map stx->loc-s-expr v))]
[(pair? v) `(cons ,(stx->loc-s-expr (car v))
,(stx->loc-s-expr (cdr v)))]
[(vector? v) `(vector ,@(map
stx->loc-s-expr
(vector->list v)))]
[(and (struct? v) (prefab-struct-key v))
`(make-prefab-struct (quote ,(prefab-struct-key v))
,@(map
stx->loc-s-expr
(cdr (vector->list (struct->vector v)))))]
[(box? v) `(box ,(stx->loc-s-expr (unbox v)))]
[(hash? v) `(,(cond
[(hash-eq? v) 'make-immutable-hasheq]
[(hash-eqv? v) 'make-immutable-hasheqv]
[else 'make-immutable-hash])
(list
,@(hash-map
v
(lambda (k v)
`(cons (quote ,k)
,(stx->loc-s-expr v))))))]
[else `(quote ,v)])))
(stx->loc-s-expr v))
(define (cvt s uncode-id)
(datum->syntax #'here (stx->loc-s-expr/esc s uncode-id) #f))
(if (eq? (syntax-local-context) 'expression)
(syntax-case stx ()
[(_ expr) #`(typeset-code #,(cvt #'expr))]
[(_ #:escape uncode-id expr) #`(typeset-code #,(cvt #'expr #'uncode-id))]
[(_ expr) #`(typeset-code #,(cvt #'expr #'uncode))]
[(_ #:escape uncode-id expr (... ...))
#`(typeset-code #,(cvt #'(code:line expr (... ...)) #'uncode-id))]
[(_ expr (... ...))
#`(typeset-code #,(cvt #'(code:line expr (... ...))))])
#`(typeset-code #,(cvt #'(code:line expr (... ...)) #'uncode))])
(quasisyntax/loc stx
(#%expression #,stx)))))]
[(_ code typeset-code uncode d->s)

View File

@ -8,8 +8,11 @@ utilities for evaluating code at document-build time and incorporating
the results in the document, especially to show example uses of
defined procedures and syntax.}
@defform*[[(interaction datum ...)
(interaction #:eval eval-expr datum ...)]]{
@defform/subs[(interaction maybe-eval maybe-escape datum ...)
([maybe-eval code:blank
(code:line #:eval eval-expr)]
[maybe-escape code:blank
(code:line #:escape escape-id)])]{
Like @racket[racketinput], except that the result for each input
@racket[datum] is shown on the next line. The result is determined by
@ -19,28 +22,10 @@ evaluator produced by @racket[eval-expr], if provided.
The @racket[eval-expr] must produce a sandbox evaluator via
@racket[make-evaluator] or @racket[make-module-evaluator] with the
@racket[sandbox-output] and @racket[sandbox-error-output] parameters
set to @racket['string]. If @racket[eval] is not provided, an
set to @racket['string]. If @racket[eval-expr] is not provided, an
evaluator is created using @racket[make-base-eval]. See also
@racket[make-eval-factory].
As an example,
@codeblock|{
#lang scribble/manual
@(require racket/sandbox
scribble/eval)
@(define my-evaluator
(parameterize ([sandbox-output 'string]
[sandbox-error-output 'string])
(make-evaluator 'typed/racket/base)))
@interaction[#:eval my-evaluator
(: my-sqr (Real -> Real))
(define (my-sqr x)
(* x x))
(my-sqr 42)]
}|
uses an evaluator whose language is @racketmodname[typed/racket/base].
If the value of @racket[current-print] in the sandbox is changed from
its default value, or if @racket[print-as-expression] in the sandbox
is set to @racket[#f], then each evaluation result is formatted to a
@ -61,67 +46,77 @@ typeset, while @svar[eval-datum] is evaluated.
If a @racket[datum] has the form
@racket[(@#,indexed-racket[eval:check] #,(svar eval-datum) #,(svar
expect-datum))], then both @svar[eval-datum] and @svar[check-datum]
are evaluated, and an error is raised if they are not @racket[equal?].}
are evaluated, and an error is raised if they are not @racket[equal?].
@defform*[[(interaction0 datum ...)
(interaction0 #:eval eval-expr datum ...)]]{
As an example,
@codeblock|{
#lang scribble/manual
@(require racket/sandbox
scribble/eval)
@(define my-evaluator
(parameterize ([sandbox-output 'string]
[sandbox-error-output 'string])
(make-evaluator 'typed/racket/base)))
@interaction[#:eval my-evaluator
(: my-sqr (Real -> Real))
(define (my-sqr x)
(* x x))
(my-sqr 42)]
}|
uses an evaluator whose language is @racketmodname[typed/racket/base].}
@defform[(interaction0 maybe-eval maybe-escape datum ...)]{
Like @racket[interaction], but without insetting the code via
@racket[nested].}
@defform*[[(interaction-eval datum)
(interaction-eval #:eval eval-expr datum)]]{
@defform[(interaction-eval maybe-eval maybe-escape datum)]{
Like @racket[interaction], evaluates the @racket[quote]d form of
@racket[datum], but returns the empty string.}
@defform*[[(interaction-eval-show datum)
(interaction-eval-show #:eval eval-expr datum)]]{
@defform[(interaction-eval-show maybe-eval maybe-escape datum)]{
Like @racket[interaction-eval], but produces an element representing
the printed form of the evaluation result.}
@defform*[[(racketblock+eval datum ...)
(racketblock+eval #:eval eval-expr datum ...)]]{
@defform[(racketblock+eval maybe-eval maybe-escape datum ...)]{
Combines @racket[racketblock] and @racket[interaction-eval].}
@defform*[[(racketblock0+eval datum ...)
(racketblock0+eval #:eval eval-expr datum ...)]]{
@defform[(racketblock0+eval maybe-eval maybe-escape datum ...)]{
Combines @racket[racketblock0] and @racket[interaction-eval].}
@defform*[[(racketmod+eval name datum ...)
(racketmod+eval #:eval eval-expr name datum ...)]]{
@defform[(racketmod+eval maybe-eval maybe-escape name datum ...)]{
Combines @racket[racketmod] and @racket[interaction-eval].}
@defform*[[(def+int defn-datum expr-datum ...)
(def+int #:eval eval-expr defn-datum expr-datum ...)]]{
@defform[(def+int maybe-eval maybe-escape defn-datum expr-datum ...)]{
Like @racket[interaction], except the @racket[defn-datum] is
typeset as for @racket[racketblock] (i.e., no prompt) and a line of
space is inserted before the @racket[expr-datum]s.}
@defform*[[(defs+int (defn-datum ...) expr-datum ...)
(defs+int #:eval eval-expr (defn-datum ...) expr-datum ...)]]{
@defform[(defs+int maybe-eval maybe-escape (defn-datum ...) expr-datum ...)]{
Like @racket[def+int], but for multiple leading definitions.}
@defform*[[(examples datum ...)
(examples #:eval eval-expr datum ...)]]{
@defform[(examples maybe-eval maybe-escape datum ...)]{
Like @racket[interaction], but with an ``Examples:'' label prefixed.}
@defform*[[(defexamples datum ...)
(defexamples #:eval eval-expr datum ...)]]{
@defform[(defexamples maybe-eval maybe-escape datum ...)]{
Like @racket[examples], but each definition using @racket[define] or
@racket[define-struct] among the @racket[datum]s is typeset without a

View File

@ -97,7 +97,9 @@ produces the typeset result
}
@defform[(racketblock datum ...)]{
@defform/subs[(racketblock maybe-escape datum ...)
([maybe-escape code:blank
(code:line #:escape escape-id)])]{
Typesets the @racket[datum] sequence as a table of Racket code inset
inset via @racket[nested] with the style @racket['code-inset]. The
@ -120,20 +122,25 @@ produces the output
with the @racket[(loop (not x))] indented under @racket[define],
because that's the way it is idented the use of @racket[racketblock].
Furthermore, @racket[define] is typeset as a keyword (bold and black)
Furthermore, @racket[define] is typeset as a keyword (in black)
and as a hyperlink to @racket[define]'s definition in the reference
manual, because this document was built using a for-label binding of
@racket[define] (in the source) that matches a definition in the
reference manual. Similarly, @racket[not] is a hyperlink to the its
definition in the reference manual.
Use @racket[unsyntax] to escape back to an expression that produces an
@racket[element]. For example,
Like other forms defined via @racket[define-code],
@racket[racketblock] expands identifiers that are bound as
@tech{element transformers}.
@let[([unsyntax #f])
An @racket[#:escape] clause specifies an identifier to escape back to
an expression that produces produces an @racket[element]. But default,
the escape identifier is @racket[unsyntax]. For example,
@racketblock[
#:escape nonesuch
(racketblock
(racketblock
(+ 1 (unsyntax (elem (racket x) (subscript "2"))))))
(+ 1 (unsyntax (elem (racket x) (subscript "2")))))
]
produces
@ -142,9 +149,8 @@ produces
(+ 1 (unsyntax (elem (racket x) (subscript "2"))))
]
The @racket[unsyntax] form is regonized via
@racket[free-identifier=?], so if you want to typeset code that
includes @racket[unsyntax], you can simply hide the usual binding:
The @racket[escape-id] that defaults to @racket[unsyntax] is regonized via
@racket[free-identifier=?], so a binding can hide the escape behavior:
@RACKETBLOCK[
(racketblock
@ -153,7 +159,7 @@ includes @racket[unsyntax], you can simply hide the usual binding:
(syntax (+ 1 (unsyntax x))))))
]
Or use @racket[RACKETBLOCK], whose escape form is @racket[UNSYNTAX]
The @racket[RACKETBLOCK] form's default escape is @racket[UNSYNTAX]
instead of @racket[unsyntax].
A few other escapes are recognized symbolically:
@ -199,41 +205,43 @@ A few other escapes are recognized symbolically:
See also @racketmodname[scribble/comment-reader].
}
@defform[(RACKETBLOCK datum ...)]{Like @racket[racketblock], but with
the expression escape @racket[UNSYNTAX] instead of @racket[unsyntax].}
@defform[(RACKETBLOCK maybe-escape datum ...)]{Like @racket[racketblock], but with
the default expression escape @racket[UNSYNTAX] instead of @racket[unsyntax].}
@defform[(racketblock0 datum ...)]{Like @racket[racketblock], but
@defform[(racketblock0 maybe-escape datum ...)]{Like @racket[racketblock], but
without insetting the code via @racket[nested].}
@defform[(RACKETBLOCK0 datum ...)]{Like @racket[RACKETBLOCK], but
@defform[(RACKETBLOCK0 maybe-escape datum ...)]{Like @racket[RACKETBLOCK], but
without insetting the code via @racket[nested].}
@deftogether[(
@defform[(racketresultblock datum ...)]
@defform[(racketresultblock0 datum ...)]
@defform[(RACKETRESULTBLOCK datum ...)]
@defform[(RACKETRESULTBLOCK0 datum ...)]
@defform[(racketresultblock maybe-escape datum ...)]
@defform[(racketresultblock0 maybe-escape datum ...)]
@defform[(RACKETRESULTBLOCK maybe-escape datum ...)]
@defform[(RACKETRESULTBLOCK0 maybe-escape datum ...)]
)]{
Like @racket[racketblock], etc., but colors the typeset text as a
result (i.e., a single color with no hyperlinks) instead of code.}
@deftogether[(
@defform[(racketinput datum ...)]
@defform[(RACKETINPUT datum ...)]
@defform[(racketinput maybe-escape datum ...)]
@defform[(RACKETINPUT maybe-escape datum ...)]
)]{Like @racket[racketblock] and @racket[RACKETBLOCK], but the
@racket[datum]s are typeset after a prompt representing a REPL.}
@deftogether[(
@defform[(racketinput0 datum ...)]
@defform[(RACKETINPUT0 datum ...)]
@defform[(racketinput0 maybe-escape datum ...)]
@defform[(RACKETINPUT0 maybe-escape datum ...)]
)]{
Like @racket[racketinput] and @racket[RACKETINPUT], but
without insetting the code via @racket[nested].}
@defform/subs[(racketmod maybe-file lang datum ...)
@defform/subs[(racketmod maybe-file maybe-escape lang datum ...)
([maybe-file code:blank
(code:line #:file filename-expr)])]{
(code:line #:file filename-expr)]
[maybe-escape code:blank
(code:line #:escape escape-id)])]{
Like @racket[racketblock], but the @racket[datum] are typeset inside a
@racketmodfont{#lang}-form module whose language is @racket[lang].
@ -247,21 +255,21 @@ If @racket[#:file] is provided, then the code block is typeset using
@racket[filebox] with @racket[filename-expr] as the filename
argument.}
@defform[(racketmod0 maybe-file lang datum ...)]{
@defform[(racketmod0 maybe-file maybe-escape lang datum ...)]{
Like @racket[racketmod], but
without insetting the code via @racket[nested].}
@defform[(racket datum ...)]{Like @racket[racketblock], but typeset on
@defform[(racket maybe-escape datum ...)]{Like @racket[racketblock], but typeset on
a single line and wrapped with its enclosing paragraph, independent of
the formatting of @racket[datum].}
@defform[(RACKET datum ...)]{Like @racket[racket], but with the
@defform[(RACKET maybe-escape datum ...)]{Like @racket[racket], but with the
@racket[UNSYNTAX] escape like @racket[racketblock].}
@defform[(racketresult datum ...)]{Like @racket[racket], but typeset
@defform[(racketresult maybe-escape datum ...)]{Like @racket[racket], but typeset
as a result (i.e., a single color with no hyperlinks).}
@defform[(racketid datum ...)]{Like @racket[racket], but typeset
@defform[(racketid maybe-escape datum ...)]{Like @racket[racket], but typeset
as an unbound identifier (i.e., no coloring or hyperlinks).}
@defform*[((racketmodname datum)
@ -333,15 +341,15 @@ procedure, but use @racket[var] if that cannot work for some reason.}
in a form definition.}
@deftogether[(
@defform[(schemeblock datum ...)]
@defform[(SCHEMEBLOCK datum ...)]
@defform[(schemeblock0 datum ...)]
@defform[(SCHEMEBLOCK0 datum ...)]
@defform[(schemeinput datum ...)]
@defform[(schememod lang datum ...)]
@defform[(scheme datum ...)]
@defform[(SCHEME datum ...)]
@defform[(schemeresult datum ...)]
@defform[(schemeblock maybe-escape datum ...)]
@defform[(SCHEMEBLOCK maybe-escape datum ...)]
@defform[(schemeblock0 maybe-escape datum ...)]
@defform[(SCHEMEBLOCK0 maybe-escape datum ...)]
@defform[(schemeinput maybe-escape datum ...)]
@defform[(schememod lang maybe-escape datum ...)]
@defform[(scheme maybe-escape datum ...)]
@defform[(SCHEME maybe-escape datum ...)]
@defform[(schemeresult maybe-escape datum ...)]
@defform[(schemeid datum ...)]
@defform*[((schememodname datum)
(schememodname ((unsyntax (racket unsyntax)) expr)))]

View File

@ -17,8 +17,8 @@ interface.}
Binds @racket[id] to a form similar to @racket[racket] or
@racket[racketblock] for typesetting code. The form generated by
@racket[define-code] handles source-location information, escapes via
@racket[unquote], preservation of binding and property information,
and @tech{element transformers}.
@racket[unquote] by default, preserves binding and property information,
and supports @tech{element transformers}.
The supplied @racket[typeset-expr] expression should produce a
procedure that performs the actual typesetting. This expression is
@ -26,8 +26,11 @@ normally @racket[to-element] or @racket[to-paragraph]. The argument
supplied to @racket[typeset-expr] is normally a syntax object, but
more generally it is the result of applying @racket[d->s-expr].
The optional @racket[uncode-id] specifies the escape from literal code
to be recognized by @racket[id]. The default is @racket[unsyntax].
The optional @racket[uncode-id] specifies the default escape from
literal code to be recognized by @racket[id], and the default for
@racket[uncode-id] is @racket[unsyntax]. A use of the @racket[id] form
can specify an alternate escape via @racket[#:escape], as in
@racket[racketblock] and @racket[racket].
The optional @racket[d->s-expr] should produce a procedure that
accepts three arguments suitable for @racket[datum->syntax]: a syntax