▼ |  | Slideshow: Figure and Presentation Tools

1 | Creating Slide Presentations
2 | Making Pictures
3 | Making Slides
4 | Typesetting Racket Code
5 | Animations
| Bibliography
| Index

On this page:

typeset-code
code
current-code-font
current-code-tt
current-code-line-sep
current-comment-color
current-keyword-color
current-id-color
current-literal-color
current-const-color
current-base-color
current-reader-forms
code-align
current-keyword-list
current-const-list
current-literal-list
racket/ base-const-list
mzscheme-const-list
code-colorize-enabled
code-colorize-quote-enabled
code-italic-underscore-enabled
code-scripts-enabled
define-code
define-exec-code
define-exec-code/ scale
comment-color
keyword-color
id-color
literal-color
code-pict-bottom-line-pict
pict->code-pict

top← prev up next →

### 4`` Typesetting Racket Code

(require slideshow/code)

The slideshow/code library provides utilities for typesetting Racket code as a pict.

> procedure (typeset-code stx) → pict?
> stx : syntax?

Produces a pict for code in the given syntax object. The source-location information of the syntax object determines the line breaks, line indenting, and space within a row. Empty rows are ignored.

Beware that if you use read-syntax on a file port, you may have to turn on line counting via port-count-lines! for the code to typeset properly. Also beware that when a source file containing a syntax or quote-syntax form is compiled, source location information is omitted from the compiled syntax object.

Normally, typeset-code is used through the code syntactic form, which works properly with compilation, and that escapes to pict-producing code via unsyntax. See also define-code.

Embedded picts within stx are used directly. Row elements are combined using and operator like htl-append, so use code-align (see below) as necessary to add an ascent to ascentless picts. More precisely, creation of a line of code uses pict-last to determine the end point of the element most recently added to a line; the main effect is that closing parentheses are attached in the right place when a multi-line pict is embedded in stx.

An identifier that starts with _ is italicized in the pict, and the _ is dropped, unless the code-italic-underscore-enabled parameter is set to #f. Also, unless code-scripts-enabled is set to #f, _ and ^ in the middle of a word create superscripts and subscripts, respectively (like TeX); for example foo^4_ok is displayed as the identifier foo with a 4 superscript and an ok subscript.

Further, uses of certain identifiers in stx typeset specially:

- code:blank — produces a space.

- (code:comment s ...) — produces a comment block, with each s on its own line, where each s must be a string or a pict.

- (code:line datum ...) — typesets the datum sequence, which is mostly useful for the top-level sequence, since typeset-code accepts only one argument.

- (code:contract datum ...) — like code:line, but every datum is colored as a comment, and a ; is prefixed to every line.

- (code:template datum ...) — like code:line, but a ; is prefixed to every line.

- $ — typesets as a vertical bar (for no particularly good reason).

> syntax (code datum ...)

The macro form of typeset-code. Within a datum, unsyntax can be used to escape to an expression.

For more information, see typeset-code and define-code, since code is defined as

> (define-code code typeset-code)

> parameter (current-code-font) → text-style/c
> (current-code-font style) → void?
> style : text-style/c

Parameter for a base font used to typeset text. The default is `(bold . modern). For even more control, see current-code-tt.

> parameter (current-code-tt) → (string? . -> . pict?)
> (current-code-tt proc) → void?
> proc : (string? . -> . pict?)

Parameter for a one-argument procedure to turn a string into a pict, used to typeset text. The default is

> (lambda (s) (text s (current-code-font) (current-font-size)))

This procedure is not used to typeset subscripts or other items that require font changes, where current-code-font is used directly.

> parameter (current-code-line-sep) → real?
> (current-code-line-sep amt) → void?
> amt : real?

A parameter that determines the spacing between lines of typeset code. The default is 2.

> parameter (current-comment-color) → (or/c string? (is-a?/c color%))
> (current-comment-color color) → void?
> color : (or/c string? (is-a?/c color%))

A parameter for the color of comments.

> parameter (current-keyword-color) → (or/c string? (is-a?/c color%))
> (current-keyword-color color) → void?
> color : (or/c string? (is-a?/c color%))

A parameter for the color of syntactic-form names. See current-keyword-list.

> parameter (current-id-color) → (or/c string? (is-a?/c color%))
> (current-id-color color) → void?
> color : (or/c string? (is-a?/c color%))

A parameter for the color of identifiers that are not syntactic form names or constants.

> parameter (current-literal-color) → (or/c string? (is-a?/c color%))
> (current-literal-color color) → void?
> color : (or/c string? (is-a?/c color%))

A parameter for the color of literal values, such as strings and numbers. See also current-literal-list

> parameter (current-const-color) → (or/c string? (is-a?/c color%))
> (current-const-color color) → void?
> color : (or/c string? (is-a?/c color%))

A parameter for the color of constant names. See current-const-list.

> parameter (current-base-color) → (or/c string? (is-a?/c color%))
> (current-base-color color) → void?
> color : (or/c string? (is-a?/c color%))

A parameter for the color of everything else.

> parameter (current-reader-forms) → (listof symbol?)
> (current-reader-forms syms) → void?
> syms : (listof symbol?)

Parameter for a list of symbols indicating which built-in reader forms should be used. The default is ''quasiquote. Remove a symbol to suppress the corresponding reader output.

> procedure (code-align pict) → pict?
> pict : pict?

Adjusts the ascent of pict so that its bottom aligns with the baseline for text; use this function when pict has no ascent.

> parameter (current-keyword-list) → (listof string?)
> (current-keyword-list names) → void?
> names : (listof string?)

A list of strings to color as syntactic-form names. The default includes all of the forms provided by racket/base and all of the forms provided by mzscheme.

> parameter (current-const-list) → (listof string?)
> (current-const-list names) → void?
> names : (listof string?)

A list of strings to color as constant names. The default is null.

> parameter (current-literal-list) → (listof string?)
> (current-literal-list names) → void?
> names : (listof string?)

A list of strings to color as literals, in addition to literals such as strings. The default is null.

> value racket/base-const-list : (listof string?)

A list of strings that could be used to initialize the current-const-list parameter.

> value mzscheme-const-list : (listof string?)

A list of strings that could be used to initialize the current-const-list parameter.

> parameter (code-colorize-enabled) → boolean?
> (code-colorize-enabled on?) → void?
> on? : any/c

A parameter to enable or disable all code coloring. The default is #t.

> parameter (code-colorize-quote-enabled) → boolean?
> (code-colorize-quote-enabled on?) → void?
> on? : any/c

A parameter to control whether under a quote is colorized as a literal (as in this documentation). The default is #t.

> parameter (code-italic-underscore-enabled) → boolean?
> (code-italic-underscore-enabled on?) → void?
> on? : any/c

A parameter to control whether _-prefixed identifiers are italicized (dropping the _). The default is #t.

> parameter (code-scripts-enabled) → boolean?
> (code-scripts-enabled on?) → void?
> on? : any/c

A parameter to control whether TeX-style subscripts and subscripts are recognized in an identifier.

> syntax (define-code code-id typeset-code-id)
> (define-code code-id typeset-code-id escape-id)

Defines code-id as a macro that uses typeset-code-id, which is a function with the same input as typeset-code. The escape-id form defaults to unsyntax.

The resulting code-id syntactic form takes a sequence of datums:

> (code-id datum ...)

It produces a pict that typesets the sequence. Source-location information for the datum determines the layout of code in the resulting pict. The code-id is expanded in such a way that source location is preserved during compilation (so typeset-code-id receives a syntax object with source locations intact).

If a datum contains (escape-id expr)—perhaps as #,expr when escape-id is unsyntax—then the expr is evaluated and the result datum is spliced in place of the escape-id form in datum. If the result is not a syntax object, it is given the source location of the escape-id form. A pict value intected this way as a datum is rendered as itself.

> > syntax
> > (define-exec-code (pict-id runnable-id string-id)
> > datum ...)

Binds pict-id to the result of (code datum ...), except that if an identifier _ appears anywhere in a datum, then the identifier and the following expression are not included for code.

Meanwhile, runnable-id is bound to a syntax object that wraps the datums in a begin. In this case, _s are removed from the datums, but not the following expression. Thus, an _ identifier is used to comment out an expression from the pict, but have it present in the syntax object for evaluation.

The string-id is bound to a string representation of the code that is in the pict. This string is useful for copying to the clipboard with (send the-clipboard set-clipboard-string string-id 0).

> > syntax
> > (define-exec-code/scale scale-expr (pict-id runnable-id string-id)
> > datum ...)

Like define-exec-code, but with a scale to use via scale/improve-new-text when generating the pict.

> value comment-color : (or/c string? (is-a?/c color%))
> value keyword-color : (or/c string? (is-a?/c color%))
> value id-color : (or/c string? (is-a?/c color%))
> value literal-color : (or/c string? (is-a?/c color%))

For backward compatibility, the default values for current-comment-color, etc.

> procedure (code-pict-bottom-line-pict pict) → (or/c pict? #f)
> pict : pict?

The same as pict-last, provided for backward compatibility.

> procedure (pict->code-pict pict bl-pict) → pict?
> pict : pict?
> bl-pict : (or/c pict? #f)

Mainly for backward compatibility: returns (if bl-pict (use-last pict (or (pict-last bl-pict) bl-pict))).
top← prev up next →