racket/collects/scribblings/tools/language.scrbl
2011-02-16 15:26:15 -05:00

877 lines
32 KiB
Racket

#lang scribble/doc
@(require "common.rkt")
@(tools-title "language")
@definterface[drracket:language:simple-module-based-language<%> ()]{
This interface represents the bare essentials when defining a module-based
language. Use the
@scheme[drracket:language:simple-module-based-language->module-based-language-mixin]
mixin to construct an implementation of
@scheme[drracket:language:module-based-language<%>] from an implementation of
this interface.
The class @scheme[drracket:language:simple-module-based-language%] provides an
implementation of this interface.
@defmethod[(get-language-numbers)
(cons number (listof number))]{
Returns a list of numbers, whose length must be the same as the result
of
@method[drracket:language:simple-module-based-language<%> get-language-position].
Each number indicates the sorted order of the language positions in
the language dialog.
}
@defmethod[(get-language-position)
(cons string (listof string))]{
This method is the same as
@method[drracket:language:language<%> get-language-position].
}
@defmethod[(get-module)
s-expression]{
This method specifies the module that defines the language.
This method replaces
@method[drracket:language:language<%> front-end/complete-program] and
@method[drracket:language:language<%> front-end/interaction].
The result is expected to be the @scheme[module] (its initial require)
except as value, ie @scheme[quote]d.
}
@defmethod[(get-one-line-summary)
string?]{
The result of this method is shown in the language dialog when the
user selects this language.
}
@defmethod[(get-reader)
(->* () (any/c input-port?) (or/c syntax? eof-object?))]{
This method must return a procedure that is used to read syntax from a
port in the same manner as @scheme[read-syntax]. It is used as the
reader for this language.
}}
@defclass[drracket:language:simple-module-based-language%
object%
(drracket:language:simple-module-based-language<%>)]{
@defconstructor/make[([module s-expression]
[language-position (cons string (listof string))]
[language-numbers (cons number (listof number)) (map (lambda (x) 0) language-position)]
[one-line-summary string? ""]
[documentation-reference (or/c false/c something-else) #f]
[reader (->* () (any/c input-port?) (or/c syntax? eof-object?))]
[language-id string?])]{
The init args are used as the results of the
@method[drracket:language:simple-module-based-language% get-module]
and
@method[drracket:language:simple-module-based-language% get-language-position]
methods.
}
@defmethod[#:mode override
(get-language-numbers)
(cons number (listof number))]{
returns the corresponding init arg.
}
@defmethod[#:mode override
(get-language-position)
s-expression]{
returns the corresponding init arg.
}
@defmethod[#:mode override
(get-module)
(cons string (listof string))]{
returns the corresponding init arg.
}
@defmethod[#:mode override
(get-one-line-summary)
string?]{
returns the corresponding initialization argument.
}
@defmethod[#:mode override
(get-reader)
(->* () (any/c input-port?) (or/c syntax? eof-object?))]{
returns the corresponding init arg.
}}
@defmixin[drracket:language:simple-module-based-language->module-based-language-mixin
(drracket:language:simple-module-based-language<%>)
(drracket:language:module-based-language<%>)]{
@index{drracket:language:simple-settings}
This mixin uses a struct definition for its settings:
@schemeblock[
(define-struct drracket:language:simple-settings
(case-sensitive (code:comment @#,t{boolean?})
printing-style (code:comment @#,t{(symbols 'constructor 'quasiquote 'write 'print)})
fraction-style (code:comment @#,t{(symbols 'mixed-fraction 'mixed-fraction-e})
(code:comment @#,t{ 'repeating-decimal 'repeating-decimal-e)})
show-sharing (code:comment @#,t{boolean?})
insert-newlines (code:comment @#,t{boolean?})
annotations)) (code:comment @#,t{(symbols 'none 'debug 'debug/profile})
(code:comment @#,t{ 'test-coverage)})
]
The settings in this structure reflect the settings show in the language
configuration dialog for languages constructed with this mixin. The
first controls the input for the language. The rest specify printing
controls for the language. The style @scheme['print] is the default
style, as normally used in the Racket REPL. The sharing field
determines if cycles and sharing in values are displayed when the value
is rendered. The insert newlines field determines if values in the repl
are formatted with @scheme[write] style-line printouts, or with
@scheme[pretty-print] multi-line printouts.
@defmethod[#:mode override
(config-panel)
(case-> (-> settings) (settings -> void))]{
Constructs a configuration panel that lets the user configure all of
the settings for this language.
See also
@scheme[drracket:language:simple-module-based-language->module-based-language-mixin]
for details of the simple-settings structure, this mixin's
@scheme[settings] type.
}
@defmethod[#:mode override
(default-settings)
settings]{
The defaults for the settings are
@itemize[
@item{@scheme[case-sensitive] is @scheme[#f]}
@item{@scheme[printing-style] is @scheme['write]}
@item{@scheme[show-sharing] is @scheme[#f]}
@item{@scheme[insert-newlines] is @scheme[#t]}
]
See also
@scheme[drracket:language:simple-module-based-language->module-based-language-mixin]
for details of the simple-settings structure, this mixins
@scheme[settings] type.
}
@defmethod[#:mode override
(default-settings?)
boolean?]{
}
@defmethod[#:mode override
(get-init-code [settings settings])
sexpression]{
Creates an s-expression of a module that sets the
@scheme[current-inspector], @scheme[read-case-sensitive], and
@scheme[error-value->string] parameters. Additionally, it may load
@scheme[errortrace], if debugging is enabled.
}
@defmethod[#:mode override
(get-transformer-module)
s-expression]{
Returns @scheme['mzscheme].
}
@defmethod[#:mode override
(marshall-settings)
writable]{
Constructs a vector from the structure.
See also
@scheme[drracket:language:simple-module-based-language->module-based-language-mixin]
for details of the simple-settings structure, this mixins
@scheme[settings] type.
}
@defmethod[#:mode override
(on-execute)
void?]{
Sets the case sensitivity of the language.
Sets the structure inspector to a new inspector, saving the original
inspector for use during printing.
Sets the @scheme[global-port-print-handler] to print based on the
settings structure, but without any newlines.
If debugging is enabled, it sets the @scheme[current-eval] handler to
one that annotates each evaluated program with debugging annotations.
Additionally, it sets the @scheme[error-display-handler] to show the
debugging annotations when an error is raised.
See also
@scheme[drracket:language:simple-module-based-language->module-based-language-mixin]
for details of the simple-settings structure, this mixin's
@scheme[settings] type.
}
@defmethod[#:mode override
(render-value)
void?]{
Translates the value to a string, based on the settings.
Restores a super struct inspector to render structs properly. (See
also
@method[drracket:language:simple-module-based-language->module-based-language-mixin% on-execute])
See also
@scheme[drracket:language:simple-module-based-language->module-based-language-mixin]
for details of the simple-settings structure, this mixin's
@scheme[settings] type.
}
@defmethod[#:mode override
(render-value/format)
void?]{
Translates the value to a string, based on the settings.
Restores a super struct inspector to render structs properly. (See
also
@method[drracket:language:simple-module-based-language->module-based-language-mixin% on-execute].)
See also
@scheme[drracket:language:simple-module-based-language->module-based-language-mixin]
for details of the simple-settings structure, this mixin's
@scheme[settings] type.
}
@defmethod[#:mode override
(unmarshall-settings)
(or/c false/c settings)]{
Builds a settings structure from the vector, or @scheme[#f] if the
vector doesn't match the types of the structure.
See also
@scheme[drracket:language:simple-module-based-language->module-based-language-mixin]
for details of the simple-settings structure, this mixin's
@scheme[settings] type.
}
@defmethod[#:mode override
(use-mred-launcher)
boolean?]{
Returns @scheme[#t].
}}
@definterface[drracket:language:module-based-language<%> ()]{
This interface is for languages that can be implemented with Racket
@scheme[module]s.
Use the @scheme[drracket:language:module-based-language->language-mixin]
mixin to construct an implementation of
@scheme[drracket:language:language<%>] from an implementation of this
interface.
@defmethod[(config-panel [parent (is-a?/c panel%)])
(case-> (-> settings) (settings -> void))]{
This method is the same as
@method[drracket:language:language<%> config-panel].
}
@defmethod[(default-settings)
settings]{
This method is the same as
@method[drracket:language:language<%> default-settings].
}
@defmethod[(default-settings? [settings settings])
boolean?]{
This method is the same as
@method[drracket:language:language<%> default-settings?].
}
@defmethod[(get-init-code [settings settings])
sexp]{
Returns a module in sexpression form that is used for creating
executables. The module must provide a thunk, called
@scheme[init-code].
When either a stand-alone executable or a launcher is created, the
module is required, and @scheme[init-code] is invoked. This procedure
is expected to set up the environment, based on the settings.
}
@defmethod[(get-language-numbers)
(cons number (listof number))]{
This method is the same as
@method[drracket:language:language<%> get-language-numbers].
}
@defmethod[(get-language-position)
(cons string (listof string))]{
This method is the same as
@method[drracket:language:language<%> get-language-position].
}
@defmethod[(get-module)
s-expression]{
This method specifies the module that defines the language. It is
used to initialize the user's namespace.
The result is expected to be the @scheme[module] (its initial require)
except as value, ie @scheme[quote]d.
See also
@method[drracket:language:module-based-language<%> get-transformer-module].
}
@defmethod[(get-one-line-summary)
string?]{
The result of this method is shown in the language dialog when the
user selects this language.
}
@defmethod[(get-reader)
(->* () (any/c input-port?) (or/c syntax? eof-object?))]{
This method must return a procedure that is used to read syntax from a
port in the same manner as @scheme[read-syntax]. It is used as the
reader for this language.
}
@defmethod[(get-transformer-module)
(or/c quoted-module-path #f)]{
This method specifies the module that defines the transformation
language. It is used to initialize the transformer portion of the
user's namespace.
The result is expected to be the @scheme[module] (its initial require)
except as value, i.e., @scheme[quote]d or @scheme[#f].
If the result is @scheme[#f], no module is required into the
transformer part of the namespace.
See also
@method[drracket:language:module-based-language<%> get-module].
}
@defmethod[(marshall-settings [settings settings])
writable]{
This method is the same as
@method[drracket:language:language<%> marshall-settings].
}
@defmethod[(on-execute [settings settings]
[run-on-user-thread ((-> void) -> void)])
void?]{
This method is the same as
@method[drracket:language:language<%> on-execute].
}
@defmethod[(render-value [value TST]
[settings settings]
[port port])
void?]{
This method is the same as
@method[drracket:language:language<%> render-value].
}
@defmethod[(render-value/format [value TST]
[settings settings]
[port port]
[width (or/c number (symbols 'infinity))])
void?]{
This method is the same as
@method[drracket:language:language<%> render-value/format].
}
@defmethod[(unmarshall-settings [input writable])
(or/c settings false/c)]{
This method is the same as
@method[drracket:language:language<%> unmarshall-settings].
}
@defmethod[(use-mred-launcher)
boolean?]{
This method is called when an executable is created to determine if
the executable should use the GRacket or the Racket binary.
}
@defmethod[(use-namespace-require/copy?)
boolean?]{
@methspec{
The result of this method controls how the module is attached to the
user's namespace. If the method returns @scheme[#t], the Racket
primitive @scheme[namespace-require/copy] is used and if it returns
@scheme[#f], @scheme[namespace-require] is used.
}
@methimpl{
Defaultly returns @scheme[#f].
}}}
@defmixin[drracket:language:module-based-language->language-mixin (drracket:language:module-based-language<%>) (drracket:language:language<%>)]{
@defmethod[#:mode override
(front-end/complete-program)
(-> (or/c sexp/c syntax? eof-object?))]{
Reads a syntax object, from @scheme[input]. Does not use
@scheme[settings].
For languages that use these mixins, there is no difference between
this method and
@method[drracket:language:module-based-language->language-mixin% front-end/interaction].
}
@defmethod[#:mode override
(front-end/interaction)
(-> (or/c sexp/c syntax? eof-object?))]{
Reads a syntax object, from @scheme[input]. Does not use
@scheme[settings].
For languages that use these mixins, there is no difference between
this method and
@method[drracket:language:module-based-language->language-mixin% front-end/complete-program].
}
@defmethod[#:mode override
(get-language-name)
string?]{
Returns the last element of the list returned by
@method[drracket:language:language<%> get-language-position].
}
@defmethod[#:mode override
(on-execute)
void?]{
Calls the super method.
Uses @scheme[namespace-require] to install the result of
@method[drracket:language:module-based-language<%> get-module] and
Uses @scheme[namespace-transformer-require] to install the result of
@method[drracket:language:module-based-language<%>
get-transformer-module] into the user's namespace.
}}
@definterface[drracket:language:language<%> ()]{
Implementations of this interface are languages that DrRacket supports.
See @secref["adding-languages"] for an overview of adding languages to
DrRacket.
@defmethod[(capability-value [key symbol])
any]{
@methspec{
Returns the language-specific value for some capability. See also
@scheme[drracket:language:register-capability].
}
@methimpl{
Defaultly returns the value from:
@scheme[drracket:language:get-capability-default].
}}
@defmethod[(config-panel [parent (is-a?/c panel%)])
(case-> (-> settings) (settings -> void))]{
This method used by the language configuration dialog to construct the
``details'' panel for this language. It accepts a parent panel and
returns a get/set function that either updates the GUI to the argument
or returns the settings for the current GUI.
}
@defmethod[(create-executable [settings settings]
[parent (or/c (is-a?/c dialog%) (is-a?/c frame%))]
[program-filename string?])
void?]{
This method creates an executable in the given language. The
@scheme[program-filename] is the name of the program to store in the
executable and @scheme[executable-filename] is the name of a file
where the executable goes.
See also
@scheme[drracket:language:create-module-based-stand-alone-executable]
and @scheme[drracket:language:create-module-based-launcher].
}
@defmethod[(default-settings)
settings]{
Specifies the default settings for this language.
}
@defmethod[(default-settings? [settings settings])
boolean?]{
Return @scheme[#t] if the input settings matches the default settings
obtained via @method[drracket:language:language<%> default-settings].
}
@defmethod[(first-opened [settings settings]) void?]{
This method is called after the language is initialized, but no
program has yet been run. It is called from the user's eventspace's
main thread.
See also @method[drracket:rep:text% initialize-console].
Calling this method should not escape. DrRacket calls this method in
a @racket[parameterize] where the @racket[error-escape-handler] is set
to an escaping continuation that continues initializing the
interactions window. Thus, raising an exception will report the error
in the user's interactions window as if this were a bug in the user's
program. Escaping in any other way, however, can cause DrRacket to
fail to start up.
Also, IO system will deadlock if the @racket[first-opened] method does
IO on the user's IO ports, so the calling context of
@racket[first-opened] sets the @racket[current-output-port] and
@racket[current-error-port] to ports that just collect all of the IO
that happened and then replay it later in the initialization of the
user's program.
Contrary to the method contract spec, DrRacket will also invoke this
method if it has zero arguments, passing nothing; the zero argument
version is for backwards compatibility and is not recommended.
}
@defmethod[(front-end/complete-program [port port]
[settings settings])
(-> (or/c sexp/c syntax? eof-object?))]{
@scheme[front-end/complete-program] method reads and parses a program
in the language. The @scheme[port] argument contains all of the data
to be read (until eof) and the name of the @scheme[port] (obtained via
@racket[object-name]) is a value representing the source of the
program (typically an editor, but may also be a string naming a file
or some other value). The @scheme[settings] argument is the current
settings for the language.
The @scheme[front-end/complete-program] method is expected to return a
thunk that is called repeatedly to get all of the expressions in the
program. When all expressions have been read, the thunk is expected to
return @scheme[eof].
This method is only called for programs in the definitions
window. Notably, it is not called for programs that are
@scheme[load]ed or @scheme[eval]ed. See @scheme[current-load] and
@scheme[current-eval] for those.
This method is expected to raise an appropriate exception if the
program is malformed, eg an @scheme[exn:syntax] or @scheme[exn:read].
This is called on the user's thread, as is the thunk it returns.
Implementations of this method should not return fully expanded
expressions, since there are two forms of expansion, using either
@scheme[expand] or @scheme[expand-top-level-with-compile-time-evals]
and the use of the expanded code dictates which applies.
See also @method[drracket:language:language<%> front-end/interaction]
and
@method[drracket:language:language<%> front-end/finished-complete-program].
}
@defmethod[(front-end/finished-complete-program [settings settings]) any]{
This method is called when @onscreen{Run} is clicked, but only after
@method[drracket:language:language<%> front-end/complete-program] has
been called. Specifically, @method[drracket:language:language<%>
front-end/complete-program] is first called to get a thunk that reads
from the program. That thunk is called some number of times,
eventually returning @scheme[eof], or raising an exception. Then, this
method is called.
This method is called on the user's main eventspace thread, and
without a prompt or other control delimiter. It must return without
raising an error, or else the DrRacket window will be wedged.
}
@defmethod[(front-end/interaction [port input-port]
[settings settings])
(-> (or/c sexp/c syntax? eof-object?))]{
This method is just like
@method[drracket:language:language<%> front-end/complete-program]
except that it is called with program fragments, for example the
expressions entered in the interactions window. It is also used in
other contexts by tools to expand single expressions.
See also
@method[drracket:language:language<%> front-end/finished-complete-program].
}
@defmethod[(get-comment-character)
(values string? char?)]{
Returns text to be used for the ``Insert Large Letters'' menu item in
DrRacket. The first result is a prefix to be placed at the beginning
of each line and the second result is a character to be used for each
pixel in the letters.
}
@defmethod[(get-language-name)
string?]{
Returns the name of the language, as shown in the REPL when executing
programs in the language and in the bottom left of the DrRacket
window.
}
@defmethod[(get-language-numbers)
(cons number (listof number))]{
This method is used in a manner analogous to
@method[drracket:language:language<%> get-language-position].
Each element in the list indicates how the names at that point in
dialog will be sorted. Names with lower numbers appear first. If two
languages are added to DrRacket with the same strings (as given by the
@method[drracket:language:language<%> get-language-position] method)
the corresponding numbers returned by this method must be the same.
Additionally, no two languages can have the same set of numbers.
(Note: this method should always return the same result, for the same
language.)
}
@defmethod[(get-language-position)
(cons string (listof string))]{
This method returns a list of strings that is used to organize this
language with the other languages. Each entry in that list is a
category or subcategory of the language and the last entry in the list
is the name of the language itself. In the language dialog, each
element in the list except for the last will be a nested turn down
triangle on the left of the dialog. The final entry will be the name
that the user can choose to select this language. Names that are the
same will be combined into the same turndown entry.
For example, if one language's position is:
@schemeblock[
(list "General Category" "Specific Category" "My Language")
]
and another's is:
@schemeblock[
(list "General Category" "Specific Category" "My Other Language")
]
The language dialog will collapse the first two elements in the list,
resulting in only a pair of nested turn-down triangles, not parallel
pairs of nested turn-down triangles.
}
@defmethod[(get-language-url)
(or/c string? false/c)]{
@methspec{
Returns a url for the language.
}
@methimpl{
If the result isn't @scheme[#f], the name of the language is clickable
in the interactions window and clicking takes you to this url.
}}
@defmethod[(get-metadata [modname symbol?] [settings any/c])
string?]{
This method is only called when
@method[drracket:language:language<%> get-reader-module] returns an
sexp.
It is expected to return a string that contains N lines, where N is
the result of calling
@method[drracket:language:language<%> get-metadata-lines].
The string is prefixed to the buffer before the file is saved by
DrRacket, and removed from the buffer after it is opened in DrRacket.
The string is expect to be a prefix to the file that sets up a reader
for files in this language, using @tt{#reader}.
The @scheme[modname] argument's printed form is the same as the file's
name, but without the path, and without an extension. The
@scheme[settings] argument is the current language's settings value.
See also @method[drracket:language:language<%> metadata->settings],
@method[drracket:language:language<%> get-metadata-lines], and
@method[drracket:language:language<%> get-reader-module].
}
@defmethod[(get-metadata-lines)
number]{
This method is only called when
@method[drracket:language:language<%> get-reader-module] returns an
sexp.
The result of the method is a count of the number of lines in the
strings that @method[drracket:language:language<%> get-metadata]
returns. The @method[drracket:language:language<%> get-metadata]
function does not necessarily return the same string each time it is
called (see @method[drracket:language:language<%> metadata->settings])
but it is expected to always return a string with a fixed number of
lines, as indicated by the result of this method.
}
@defmethod[(get-one-line-summary)
string?]{
@methspec{
The result of this method is shown in the language dialog when the
user selects this language.
}
@methimpl{
}}
@defmethod[(get-reader-module)
(or/c sexp-representing-a-require-spec false/c)]{
The result of this method is used when saving or loading files.
If the result is a sexp, saved files get a prefix inserted at the
beginning (the prefix is determined by calling
@method[drracket:language:language<%> get-metadata]). When the file
is then loaded, DrRacket recognizes this prefix and sets the language
back to match the saved file.
See also @method[drracket:language:language<%> metadata->settings],
@method[drracket:language:language<%> get-metadata-lines], and
@method[drracket:language:language<%> get-metadata].
}
@defmethod[(get-style-delta)
(or/c #f (is-a?/c style-delta%) (listof (list/c (is-a?/c style-delta%) number? number?)))]{
The style delta that this method returns is used in the language
dialog and the DrRacket REPL when the language's name is printed.
When it is @scheme[#f], no styling is used.
If the result is a list, each element is expected to be a list of
three items, a style-delta, and two numbers. The style delta will be
applied to the corresponding portion of the name.
}
@defmethod[(extra-repl-information [settings settings] [port output-port?]) void?]{
This method is called on the DrRacket eventspace main thread to insert
extra information into the REPL to reflect the state of the program.
It is used, for example, to print out the ``Teachpack'' lines in the
HtDP languages.
}
@defmethod[(marshall-settings [settings settings])
writable]{
Translates an instance of the settings type into a Racket object that
can be written out to disk.
}
@defmethod[(metadata->settings [metadata string?])
settings]{
This method is only called when
@method[drracket:language:language<%> get-reader-module] returns an
sexp.
When a file is opened in DrRacket, if this language's
@method[drracket:language:language<%> get-reader-module] returns an
sexp, the prefix of the file (the first N lines, where N is the number
returned by @method[drracket:language:language<%> get-metadata-lines])
is scanned for @scheme["#reader"] followed by the result of
@method[drracket:language:language<%> get-reader-module]. If that
pattern is found, the language is set to this language. Also, the
entire prefix is passed, as a string, to this method which returns a
@scheme[settings] value, used as the settings for this language.
}
@defmethod[(on-execute [settings settings]
[run-on-user-thread ((-> any) -> any)])
any]{
The @scheme[on-execute] method is called on DrRacket's eventspace's
main thread before any evaluation happens when the Run button is
clicked. It is also called when a new DrRacket tab (or window) is
created to initialize the empty interactions window.
Use this method to initialize Racket's
@secref[#:doc '(lib "scribblings/reference/reference.scrbl") "parameters"]
for the user. When this function is called, the user's thread has
already been created, as has its custodian. These parameters have
been changed from the defaults in Racket:
@itemize[
@item{@scheme[current-custodian] is set to a new custodian.}
@item{@scheme[current-namespace] has been set to a newly created empty
namespace. This namespace has the following modules copied (with
@scheme[namespace-attach-module]) from DrRacket's original
namespace:
@itemize[
@item{@scheme['mzscheme]}
@item{@scheme['mred]}
]}
@item{@scheme[read-curly-brace-as-paren] is @scheme[#t],}
@item{@scheme[read-square-bracket-as-paren] is @scheme[#t],}
@item{The @scheme[port-write-handler] and @scheme[port-display-handler]
have been set to procedures that call @scheme[pretty-print] and
@scheme[pretty-display] instead of @scheme[write] and
@scheme[display]. When @scheme[pretty-print] and
@scheme[pretty-display] are called by these parameters, the
@scheme[pretty-print-columns] parameter is set to
@scheme['infinity], so the output looks just like @scheme[write] and
@scheme[display]. This is done so that special scheme values can be
displayed as snips.}
@item{The @scheme[current-print-covert-hook] is to a procedure so that
@scheme[snip%]s are just returned directly to be inserted into the
interactions @scheme[text%] object.}
@item{The output and input ports are set to point to the interactions
window with these parameters: @scheme[current-input-port],
@scheme[current-output-port], and @scheme[current-error-port].}
@item{The @scheme[event-dispatch-handler] is set so that DrRacket can
perform some initial setup and close down around the user's code.}
@item{The @scheme[current-directory] and
@scheme[current-load-relative-directory] are set to the directory
where the definitions file is saved, or if it isn't saved, to the
initial directory where DrRacket started up.}
@item{The snip-class-list, returned by @scheme[get-the-snip-class-list]
is initialized with all of the snipclasses in DrRacket's
eventspace's snip-class-list.}
@item{The @scheme[error-print-source-location] parameter is set to
@scheme[#f] and the @scheme[error-display-handler] is set to a
handler that creates an error message from the exception record,
with font and color information and inserts that error message into
the definitions window.}
]
The @scheme[run-on-user-thread] arguments accepts thunks and runs them
on the user's eventspace's main thread. The output ports are not yet
functioning, so print outs should be directed to the original DrRacket
output port, if necessary.
This thunk is wrapped in a @racket[with-handlers] that catches all
exceptions matching @racket[exn:fail?] and then prints out the
exception message to the original output port of the DrRacket process.
}
@defmethod[(order-manuals [manuals (listof bytes?)])
(values (listof bytes?) boolean?)]{
Returns a sublist of its input, that specifies the manuals
(and their order) to search in. The boolean result indicates
if @tt{doc.txt} files should be searched.
}
@defmethod[(render-value [value TST]
[settings settings]
[port port])
void?]{
This method is just like
@method[drracket:language:language<%> render-value/format] except that
it is expected to put the entire value on a single line with no
newline after the value.
}
@defmethod[(render-value/format [value TST]
[settings settings]
[port port]
[width (or/c number (symbols 'infinity))])
void?]{
This method is used to print values into a port, for display to a
user. The final argument is a maximum width to use (in characters)
when formatting the value.
This method is expected to format the value by inserting newlines in
appropriate places and is expected to render a newline after the
value.
See also @method[drracket:language:language<%> render-value].
}
@defmethod[(unmarshall-settings [input writable])
(or/c settings false/c)]{
Translates a Racket value into a settings, returning @scheme[#f] if
that is not possible.
}}
@(tools-include "language")