
to avoid duplicate code between the drracket support for printing and for write/display; also add a special case for 2htdp/image images because they can be trusted across the boundary between DrRacket's implementation and the user's program (as there is no way to embed arbitrary code into a 2htdp/image image)
59 lines
1.8 KiB
Racket
59 lines
1.8 KiB
Racket
#lang scribble/doc
|
|
@(require "common.rkt" (for-label mrlib/interactive-value-port scheme/pretty))
|
|
|
|
@title{Interactive Value Port}
|
|
|
|
@defmodule[mrlib/interactive-value-port]
|
|
|
|
|
|
@defproc[(set-interactive-display-handler
|
|
[port output-port?]
|
|
[#:snip-handler snip-handler
|
|
(or/c #f (-> (is-a?/c snip%) output-port? any))
|
|
#f])
|
|
void?]{
|
|
|
|
Sets @racket[port]'s display handler (via
|
|
@racket[port-display-handler]) so that when it encounters
|
|
these values:
|
|
@itemize[@item{syntax objects}
|
|
@item{snips}]
|
|
|
|
it uses @racket[write-special] to send snips to the port
|
|
and uses @racketmodname[mrlib/syntax-browser] to turn
|
|
syntax object into snips and then uses
|
|
@racket[write-special] with the result to send it to the
|
|
port. Otherwise, it behaves like the default handler.
|
|
|
|
If @racket[snip-handler] is not @racket[#f], then
|
|
@racket[set-interactive-display-handler] passes any snips
|
|
to it (not those it creates by
|
|
@racketmodname[mrlib/syntax-browser]) instead of calling
|
|
@racket[write-special].
|
|
|
|
To show values embedded in lists and other compound object,
|
|
it uses @racket[pretty-display].
|
|
}
|
|
|
|
|
|
@defproc[(set-interactive-write-handler
|
|
[port output-port?]
|
|
[#:snip-handler snip-handler
|
|
(or/c #f (-> (is-a?/c snip%) output-port? any))
|
|
#f])
|
|
void?]{
|
|
|
|
Like @racket[set-interactive-display-handler], but sets the
|
|
@racket[port-write-handler] and uses @racket[pretty-write].}
|
|
|
|
|
|
@defproc[(set-interactive-print-handler
|
|
[port output-port?]
|
|
[#:snip-handler snip-handler
|
|
(or/c #f (-> (is-a?/c snip%) output-port? any))
|
|
#f])
|
|
void?]{
|
|
|
|
Like @racket[set-interactive-display-handler], but sets the
|
|
@racket[port-print-handler] and uses @racket[pretty-print].}
|