4 Typesetting Scheme Code
The slideshow/code library provides utilities for typesetting Scheme code as a pict.
(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: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).
(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)
(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.
(current-code-tt) → (string? . -> . pict?) |
(current-code-tt proc) → void? |
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.
(current-code-line-sep amt) → void? |
amt : real? |
A parameter that determines the spacing between lines of typeset code. The default is 2.
(current-comment-color) → (or/c string? (is-a?/c color%)) |
(current-comment-color color) → void? |
A parameter for the color of comments.
(current-keyword-color) → (or/c string? (is-a?/c color%)) |
(current-keyword-color color) → void? |
A parameter for the color of syntactic-form names. See current-keyword-list.
(current-id-color) → (or/c string? (is-a?/c color%)) |
(current-id-color color) → void? |
A parameter for the color of identifiers that are not syntactic form names or constants.
(current-literal-color) → (or/c string? (is-a?/c color%)) |
(current-literal-color color) → void? |
A parameter for the color of literal values, such as strings and numbers. See also current-literal-list
(current-const-color) → (or/c string? (is-a?/c color%)) |
(current-const-color color) → void? |
A parameter for the color of constant names. See current-const-list.
(current-base-color) → (or/c string? (is-a?/c color%)) |
(current-base-color color) → void? |
A parameter for the color of everything else.
(current-reader-forms syms) → void? |
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.
(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.
(current-keyword-list names) → void? |
A list of strings to color as syntactic-form names. The default includes most of the forms provided by scheme/base.
(current-const-list) → (listof string?) |
(current-const-list names) → void? |
A list of strings to color as constant names. The default is null.
(current-literal-list names) → void? |
A list of strings to color as literals, in addition to literals such as strings. The default is null.
A list of strings that could be used to initialize the current-const-list parameter.
(code-colorize-enabled on?) → void? |
on? : any/c |
A parameter to enable or disable all code coloring. The default is #t.
(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.
(code-italic-underscore-enabled on?) → void? |
on? : any/c |
A parameter to control whether _-prefixed identifiers are italicized (dropping the _). The default is #t.
(code-scripts-enabled on?) → void? |
on? : any/c |
A parameter to control whether TeX-style subscripts and subscripts are recognized in an identifier.
(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.
|
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).
|
Like define-exec-code, but with a scale to use via scale/improve-new-text when generating the pict.
| |
| |
|
For backward compatibility, the default values for current-comment-color, etc.
(code-pict-bottom-line-pict pict) → (or/c pict? false/c) |
pict : pict? |
The same as pict-last, provided for backward compatibility.
(pict->code-pict pict bl-pict) → pict? |
pict : pict? |
Mainly for backward compatibility: returns (if bl-pict (use-last pict (or (pict-last bl-pict) bl-pict))).