defform was updated in 1b40fc8 to allow a single defform to serve as the link target for multiple identifiers, allowing it to document new forms that might create multiple bindings, similar to defstruct.
When a defform's #:id [(id ...) ids-expr] lists identifiers that do not appear in the form datum, they are attached to the first defining instance in the datum. Two visible effects follow:
-
With link targets on, the extra ids are not displayed, but their width is still counted when the following lines of a multi-line form are positioned. Every continuation line is pushed right by the combined length of the hidden ids.
-
With #:link-target? #f, the extra ids are typeset visibly, they all get run together after the first id with no separators.
The single-id mode, and the multi-id mode where every listed id appears in the datum, render correctly.
Given a things.rkt…
#lang racket/base
(provide point point? point-x point-y)
(define-syntax-rule (point . _) (void))
(define (point? v) #t)
(define (point-x p) 0)
(define (point-y p) 0)
…The following mve.scrbl file:
#lang scribble/manual
@(require (for-label racket/base "things.rkt"))
@defmodule["things.rkt" #:packages ()]
@defform[#:link-target? #f
#:id [(point) (list #'point)]
(define-thing point (x
y))]{
Control: every listed id appears in the form. Continuation line is indented
correctly.
}
@defform[#:id [(point point? point-x point-y) (list #'point #'point? #'point-x #'point-y)]
(define-thing point (x
y))]{
Continuation line is indented by an extra 20 characters, the combined length
of @racket[point?], @racket[point-x] and @racket[point-y].
}
@defform[#:link-target? #f
#:id [(point point? point-x point-y) (list #'point #'point? #'point-x #'point-y)]
(define-thing point (x
y))]{
Same as above with @racket[#:link-target? #f]: the ids that do not appear in
the form are typeset visibly, concatenated after the first one.
}
…renders with raco scribble --html mve.scrbl as:
In the first box, y is indented 21 columns. In the second and third boxes it is indented 41. The difference of 20 is point? (6) + point-x (7) + point-y (7).
Racket v9.3, scribble-lib 1.65.
defformwas updated in 1b40fc8 to allow a singledefformto serve as the link target for multiple identifiers, allowing it to document new forms that might create multiple bindings, similar todefstruct.When a
defform's#:id [(id ...) ids-expr]lists identifiers that do not appear in the form datum, they are attached to the first defining instance in the datum. Two visible effects follow:With link targets on, the extra ids are not displayed, but their width is still counted when the following lines of a multi-line form are positioned. Every continuation line is pushed right by the combined length of the hidden ids.
With
#:link-target? #f, the extra ids are typeset visibly, they all get run together after the first id with no separators.The single-id mode, and the multi-id mode where every listed id appears in the datum, render correctly.
Given a
things.rkt……The following
mve.scrblfile:…renders with
raco scribble --html mve.scrblas:In the first box,
yis indented 21 columns. In the second and third boxes it is indented 41. The difference of 20 ispoint?(6) +point-x(7) +point-y(7).Racket v9.3, scribble-lib 1.65.