Kawa has a number of useful tools for controlling input and output:
A programmable reader.
A powerful pretty-printer.
The --output-format (or --format) command-line switch
can be used to override the default format for how values are
printed on the standard output. This format is used for values printed
by the read-eval-print interactive interface. It is also used to
control how values are printed when Kawa evaluates a file named on the
command line (using the -f flag or a just a script name).
(It also effects applications compiled with the --main flag.)
It currently effects how values are printed by a load,
though that may change.
The default format depends on the current programming language.
For Scheme, the default is scheme for read-eval-print
interaction, and ignore for files that are loaded.
The formats currently supported include the following:
schemeValues are printed in a format matching the Scheme programming language, as if using
display. "Groups" or "elements" are written as lists.readable-schemeLike
scheme, as if usingwrite: Values are generally printed in a way that they can be read back by a Scheme reader. For example, strings have quotation marks, and character values are written like ‘#\A’.elispValues are printed in a format matching the Emacs Lisp programming language. Mostly the same as
scheme.readable-elispLike
elisp, but values are generally printed in a way that they can be read back by an Emacs Lisp reader. For example, strings have quotation marks, and character values are written like ‘?A’.clispcommonlispValues are printed in a format matching the Common Lisp programming language, as if written by
princ. Mostly the same asscheme.readable-clispreadable-commonlispLike
clisp, but as if written byprin1: values are generally printed in a way that they can be read back by a Common Lisp reader. For example, strings have quotation marks, and character values are written like ‘#\A’.xmlxhtmlhtmlValues are printed in XML, XHTML, or HTML format. This is discussed in more detail in the section called “Formatting XML”.
cgiThe output should be a follow the CGI standards. I.e. assume that this script is invoked by a web server as a CGI script/program, and that the output should start with some response header, followed by the actual response data. To generate the response headers, use the
response-headerfunction. If theContent-typeresponse header has not been specified, and it is required by the CGI standard, Kawa will attempt to infer an appropriateContent-typedepending on the following value.ignoreTop-level values are ignored, instead of printed.
A Path is the name of a file or some other resource.
The path mechanism provides a layer of abstraction, so you can
use the same functions on either a filename or a URL/URI.
Functions that in standard Scheme take a filename
have been generalized to take a path or a path string,
as if using the path function below. For example:
(open-input-file "http://www.gnu.org/index.html") (open-input-file (URI "ftp://ftp.gnu.org/README"))
A general path, which can be a
filenameor aURI. It can be either afilenameor aURI. Represented using the abstract Java classgnu.kawa.io.Path.Coercing a value to a
Pathis equivalent to calling thepathconstructor documented below.
Coerces the
argto apath. Ifargis already apath, it is returned unchanged. Ifargis ajava.net.URI, or ajava.net.URLthen aURIvalue is returned. Ifargis ajava.io.File, afilepathvalue is returned. Otherwise,argcan be a string. AURIvalue is returned if the string starts with a URI scheme (such as"http:"), and afilepathvalue is returned otherwise.
The name of a local file. Represented using the Java class
gnu.kawa.io.FilePath, which is a wrapper aroundjava.io.File.
A Uniform Resource Indicator, which is a generalization of the more familiar URL. The general format is specified by RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax. Represented using the Java class
gnu.kawa.io.URIPath, which is a wrapper aroundjava.net.URI. A URI can be a URL, or it be a relative URI.
A Uniform Resource Locator - a subtype of
URI. Represented using the Java classgnu.kawa.io.URLPath, which is a wrapper around ajava.net.URL, in addition to extendinggnu.kawa.io.URIPath.
Returns the “URI scheme” of
arg(coerced to apath) if it is defined, or#fotherwise. The URI scheme of afilepathis"file"if thefilepathis absolute, and#fotherwise.(path-scheme "http://gnu.org/") ⇒ "http"
Returns the authority part of
arg(coerced to apath) if it is defined, or#fotherwise. The “authority” is usually the hostname, but may also include user-info or a port-number.(path-authority "http://me@localhost:8000/home") ⇒ "me@localhost:8000"
Returns the name name part of
arg(coerced to apath) if it is defined, or#fotherwise.(path-host "http://me@localhost:8000/home") ⇒ "localhost"
Returns the “user info” of
arg(coerced to apath) if it is specified, or#fotherwise.(path-host "http://me@localhost:8000/home") ⇒ "me"
Returns the port number of
arg(coerced to apath) if it is specified, or-1otherwise. Even if there is a default port associated with a URI scheme (such as 80 forhttp), the value -1 is returned unless the port number is explictly specified.(path-host "http://me@localhost:8000/home") ⇒ 8000 (path-host "http://me@localhost/home") ⇒ -1
Returns the “path component” of the
arg(coerced to apath). (The namepath-pathmight be more logical, but it is obviously a bit awkward.) The path component of a file name is the file name itself. For a URI, it is the main hierarchical part of the URI, without schema, authority, query, or fragment.(path-file "http://gnu.org/home/me.html?add-bug#body") ⇒ "/home/me.html"
If
arg(coerced to apath) is directory, returnarg; otherwise return the “parent” path, without the final component.(path-directory "http://gnu.org/home/me/index.html#body") ⇒ (path "http://gnu.org/home/me/") (path-directory "http://gnu.org/home/me/") ⇒ (path "http://gnu.org/home/me/")
(path-directory "./dir")⇒(path "./dir")ifdiris a directory, and(path ".")otherwise.
Returns the “parent directory” of
arg(coerced to apath). Ifargis not a directory, same aspath-directory.arg(path-parent "a/b/c") ⇒ (path "a/b") (path-parent "file:/a/b/c") ⇒ (path "file:/a/b/c") (path-parent "file:/a/b/c/") ⇒ (path "file:/a/b/")
The last component of path component of
arg(coerced to apath). Returns a substring of(path-file. If that string ends with ‘arg)/’ or the path separator, that last character is ignored. Returns the tail of the path-string, following the last (non-final) ‘/’ or path separator.(path-last "http:/a/b/c") ⇒ "c" (path-last "http:/a/b/c/") ⇒ "c" (path-last "a/b/c") ⇒ "c"
Returns the “extension” of the
arg(coerced to apath).(path-extension "http://gnu.org/home/me.html?add-bug#body") ⇒ "html" (path-extension "/home/.init") ⇒ #f
Returns the query part of
arg(coerced to apath) if it is defined, or#fotherwise. The query part of a URI is the part after ‘?’.(path-query "http://gnu.org/home?add-bug") ⇒ "add-bug"
Returns the fragment part of
arg(coerced to apath) if it is defined, or#fotherwise. The fragment of a URI is the part of after ‘#’.(path-query "http://gnu.org/home#top") ⇒ "top"
A resource is a file or other fixed data that an application may access. Resources are part of the application and are shipped with it, but are stored in external files. Examples are images, sounds, and translation (localization) of messages. In the Java world a resource is commonly bundled in the same jar file as the application itself.
Returns a
URLPathyou can use as aURL, or you can pass to itopen-input-fileto read the resource data. Theresource-nameis a string which is passed to theClassLoaderof the containing module. If the module class is in a jar file, things will magically work if the resource is in the same jar file, andresource-nameis a filename relative to the module class in the jar. If the module is immediately evaluated, theresource-nameis resolved against the location of the module source file.
Evaluates to a special URI that can be used to access resources relative to the class of the containing module. The URI has the form
"class-resource://in compiled code, to allow moving the classes/jars. The currentCurrentClass/"ClassLoaderis associated with the URI, so accessing resources using the URI will use thatClassLoader. Therefore you should not create a"class-resource:"URI except by using this function orresolve-uri, since that might try to use the wrongClassLoader.The macro
resource-urlworks by usingmodule-uriand resolving that to a normalURL.
Returns true iff the file named
filenameactually exists. This function is defined on arbitrarypathvalues: for URI values we open aURLConnectionand invokegetLastModified().
Returns true iff the file named
filenameactually exists and is a directory. This function is defined on arbitrarypathvalues; the default implementation for non-file objects is to return#tiff the path string ends with the character ‘/’.
Returns true iff the file named
filenameactually exists and can be read from.
Returns true iff the file named
filenameactually exists and can be writen to. (Undefined if thefilenamedoes not exist, but the file can be created in the directory.)
copy-file oldname newname-from path-to
Copy the file named
oldnametonewname. The return value is unspecified.
Create a new directory named
dirname. Unspecified what happens on error (such as exiting file with the same name). (Currently returns#fon error, but may change to be more compatible with scsh.)
Return a file with a name that does not match any existing file. Use
format(which defaults to"kawa~d.tmp") to generate a unique filename in(system-tmpdir). The current implementation is not safe from race conditions; this will be fixed in a future release (using Java2 features).
Ports represent input and output devices. An input port is a Scheme object that can deliver data upon command, while an output port is a Scheme object that can accept data.
Different port types operate on different data:
A textual port supports reading or writing of individual characters from or to a backing store containing characters using
read-charandwrite-charbelow, and it supports operations defined in terms of characters, such asreadandwrite.-
A binary port supports reading or writing of individual bytes from or to a backing store containing bytes using
read-u8andwrite-u8below, as well as operations defined in terms of bytes (integers in the range 0 to 255).All Kawa binary ports created by procedures documented here are also textual ports. Thus you can either read/write bytes as described above, or read/write characters whose scalar value is in the range 0 to 255 (i.e. the Latin-1 character set), using
read-charandwrite-char.A native binary port is a
java.io.InputStreamorjava.io.OutputStreaminstance. These are not textual ports. You can use methodsread-u8andwrite-u8, but notread-charandwrite-charon native binary ports. (The functionsinput-port?,output-port?,binary-port?, andport?all currently return false on native binary ports, but that may change.)
The
call-with-portprocedure callsprocwith port as an argument. Ifprocreturns, then the port is closed automatically and the values yielded by the proc are returned.If
procdoes not return, then the port must not be closed automatically unless it is possible to prove that the port will never again be used for a read or write operation.As a Kawa extension,
portmay be any object that implementsjava.io.Closeable. It is an error ifprocdoes not accept one argument.
call-with-input-file path proc
call-with-output-file path proc
These procedures obtain a textual port obtained by opening the named file for input or output as if by
open-input-fileoropen-output-file. The port andprocare then passed to a procedure equivalent tocall-with-port.It is an error if
procdoes not accept one argument.
These procedures return
#tif obj is an input port, output port, textual port, binary port, or any kind of port, respectively. Otherwise they return#f.These procedures currently return
#fon a native Java streams (java.io.InputStreamorjava.io.OutputStream), a native reader (ajava.io.Readerthat is not angnu.mapping.Inport), or a native writer (ajava.io.Writerthat is not angnu.mapping.Outport). This may change if conversions between native ports and Scheme ports becomes more seamless.
Returns
#tifportis still open and capable of performing input or output, respectively, and#fotherwise. (Not supported for native binary ports - i.e.java.io.InputStteamorjava.io.OutputStream.)
Returns the current default input port, output port, or error port (an output port), respectively. (The error port is the the port to which errors and warnings should be sent - the standard error in Unix and C terminology.) These procedures are parameter objects, which can be overridden with
parameterize. The initial bindings for these are implementation-defined textual ports.
with-input-from-file path thunk
with-output-to-file path thunk
The file is opened for input or output as if by
open-input-fileoropen-output-file, and the new port is made to be the value returned bycurrent-input-portorcurrent-output-port(as used by(read),(write, and so forth). The thunk is then called with no arguments. When theobj)thunkreturns, the port is closed and the previous default is restored. It is an error ifthunkdoes not accept zero arguments. Both procedures return the values yielded bythunk. If an escape procedure is used to escape from the continuation of these procedures, they behave exactly as if the current input or output port had been bound dynamically withparameterize.
Takes a
pathnaming an existing file and returns a textual input port or binary input port that is capable of delivering data from the file.The procedure
open-input-filechecks the fluid variableport-char-encodingto determine how bytes are decoded into characters. The procedureopen-binary-input-fileis equivalent to callingopen-input-filewithport-char-encodingset to#f.
Takes a
pathnaming an output file to be created and returns respectively a textual output port or binary output port that is capable of writing data to a new file by that name. If a file with the given name already exists, the effect is unspecified.The procedure
open-output-filechecks the fluid variableport-char-encodingto determine how characters are encoded as bytes. The procedureopen-binary-output-fileis equivalent to callingopen-output-filewithport-char-encodingset to#f.
Closes the resource associated with
port, rendering the port incapable of delivering or accepting data. It is an error to apply the last two procedures to a port which is not an input or output port, respectively. (Specifically,close-input-portrequires ajava.io.Reader, whileclose-output-portrequires ajava.io.Writer. In contrastclose-portaccepts any object whose class implementsjava.io.Closeable.)These routines have no effect if the port has already been closed.
Takes a string and returns a text input port that delivers characters from the string. The port can be closed by
close-input-port, though its storage will be reclaimed by the garbage collector if it becomes inaccessible.(define p (open-input-string "(a . (b c . ())) 34")) (input-port? p) ⇒ #t (read p) ⇒ (a b c) (read p) ⇒ 34 (eof-object? (peek-char p)) ⇒ #t
Returns an textual output port that will accumulate characters for retrieval by
get-output-string. The port can be closed by the procedureclose-output-port, though its storage will be reclaimed by the garbage collector if it becomes inaccessible.(let ((q (open-output-string)) (x '(a b c))) (write (car x) q) (write (cdr x) q) (get-output-string q)) ⇒ "a(b c)"
Given an output port created by
open-output-string, returns a string consisting of the characters that have been output to the port so far in the order they were output. If the result string is modified, the effect is unspecified.(parameterize ((current-output-port (open-output-string))) (display "piece") (display " by piece ") (display "by piece.") (newline) (get-output-string (current-output-port))) ⇒ "piece by piece by piece.\n"
call-with-input-string string proc
Create an input port that gets its data from
string, callprocwith that port as its one argument, and return the result from the call ofproc
Create an output port that writes its data to a
string, and callprocwith that port as its one argument. Return a string consisting of the data written to the port.
open-input-bytevector bytevector
Takes a bytevector and returns a binary input port that delivers bytes from the bytevector.
Returns a binary output port that will accumulate bytes for retrieval by
get-output-bytevector.
If port is omitted from any input procedure, it defaults
to the value returned by (current-input-port). It is an
error to attempt an input operation on a closed port.
The
readprocedure converts external representations of Scheme objects into the objects themselves. That is, it is a parser for the non-terminaldatum. It returns the next object parsable from the given textual input port, updating port to point to the first character past the end of the external representation of the object.If an end of file is encountered in the input before any characters are found that can begin an object, then an end-of-file object is returned. The port remains open, and further attempts to read will also return an end-of-file object. If an end of file is encountered after the beginning of an object’s external representation, but the external repre- sentation is incomplete and therefore not parsable, an error is signaled.
Returns the next character available from the textual input
port, updating the port to point to the following character. If no more characters are available, an end-of-file value is returned.The result type is
character-or-eof.
Returns the next character available from the textual input
port, but without updating the port to point to the following character. If no more characters are available, an end-of-file value is returned.The result type is
character-or-eof.Note: The value returned by a call to
peek-charis the same as the value that would have been returned by a call toread-charwith the sameport. The only difference is that the very next call toread-charorpeek-charon thatportwill return the value returned by the preceding call topeek-char. In particular, a call topeek-charon an interactive port will hang waiting for input whenever a call toread-charwould have hung.
read-line [port [handle-newline]]
Reads a line of input from the textual input
port. Thehandle-newlineparameter determines what is done with terminating end-of-line delimiter. The default,'trim, ignores the delimiter;'peekleaves the delimiter in the input stream;'concatappends the delimiter to the returned value; and'splitreturns the delimiter as a second value. You can use the last three options to tell if the string was terminated by end-or-line or by end-of-file. If an end of file is encountered before any end of line is read, but some characters have been read, a string containing those characters is returned. (In this case,'trim,'peek, and'concathave the same result and effect. The'splitcase returns two values: The characters read, and the delimiter is an empty string.) If an end of file is encountered before any characters are read, an end-of-file object is returned. For the purpose of this procedure, an end of line consists of either a linefeed character, a carriage return character, or a sequence of a carriage return character followed by a linefeed character.
Returns
#tifobjis an end-of-file object, otherwise returns#f.
Performance note: Ifobjhas typecharacter-or-eof, this is compiled as anintcomparison with -1.
Returns
#tif a character is ready on the textual inputportand returns#fotherwise. If char-ready returns#tthen the nextread-charoperation on the givenportis guaranteed not to hang. If the port is at end of file thenchar-ready?returns#t.Rationale: The
char-ready?procedure exists to make it possible for a program to accept characters from interactive ports without getting stuck waiting for input. Any input editors as- sociated with such ports must ensure that characters whose existence has been asserted bychar-ready?cannot be removed from the input. Ifchar-ready?were to return#fat end of file, a port at end-of-file would be indistinguishable from an interactive port that has no ready characters.
Reads the next
kcharacters, or as many as are available before the end of file, from the textual inputportinto a newly allocated string in left-to-right order and returns the string. If no characters are available before the end of file, an end-of-file object is returned.
Returns the next byte available from the binary input
port, updating theportto point to the following byte. If no more bytes are available, an end-of-file object is returned.
Returns the next byte available from the binary input
port, but without updating theportto point to the following byte. If no more bytes are available, an end-of-file object is returned.
Returns
#tif a byte is ready on the binary inputportand returns#fotherwise. Ifu8-ready?returns#tthen the nextread-u8operation on the given port is guaranteed not to hang. If the port is at end of file thenu8-ready?returns#t.
Reads the next
kbytes, or as many as are available before the end of file, from the binary inputportinto a newly allocated bytevector in left-to-right order and returns the bytevector. If no bytes are available before the end of file, an end-of-file object is returned.
read-bytevector! bytevector [start [end [port]]]
Reads the next
end−startbytes, or as many as are available before the end of file, from the binary inputportintobytevectorin left-to-right order beginning at thestartposition. Ifendis not supplied, reads until the end ofbytevectorhas been reached. Ifstartis not supplied, reads beginning at position 0. Returns the number of bytes read. If no bytes are available, an end-of-file object is returned.
If port is omitted from any output procedure, it defaults
to the value returned by (current-output-port). It is an
error to attempt an output operation on a closed port.
The return type of these methods is void.
Writes a representation of
objto the given textual outputport. Strings that appear in the written representation are enclosed in quotation marks, and within those strings backslash and quotation mark characters are escaped by backslashes. Symbols that contain non-ASCII characters are escaped with vertical lines. Character objects are written using the#\notation.If
objcontains cycles which would cause an infinite loop using the normal written representation, then at least the objects that form part of the cycle must be represented using ???. Datum labels must not be used if there are no cycles.
The
write-sharedprocedure is the same aswrite, except that shared structure must be represented using datum labels for all pairs and vectors that appear more than once in the output.
The
write-simpleprocedure is the same aswrite, except that shared structure is never represented using datum labels. This can cause write-simple not to terminate ifobjcontains circular structure.
Writes a representation of
objto the given textual output port. Strings that appear in the written representation are output as if bywrite-stringinstead of bywrite. Symbols are not escaped. Character objects appear in the representation as if written bywrite-charinstead of bywrite. Thedisplayrepresentation of other objects is unspecified.
Writes an end of line to textual output
port. This is done using theprintlnmethod of the Java classjava.io.PrintWriter.
Writes the character
char(not an external representation of the character) to the given textual outputport.
write-string string [port [start [end]]]
Writes the characters of
stringfromstarttoendin left-to-right order to the textual outputport.
write-bytevector bytevector [port [start [end]]]
Writes the bytes of
bytevectorfromstarttoendin left-to-right order to the binary outputport.
Forces any pending output on
portto be delivered to the output file or device and returns an unspecified value. If theportargument is omitted it defaults to the value returned by(current-output-port). (The nameforce-outputis older, while R6RS addedflush-output-port. They have the same effect.)
An interactive input port has a prompt procedure associated with it. The prompt procedure is called before a new line is read. It is passed the port as an argument, and returns a string, which gets printed as a prompt.
set-input-port-prompter! port prompter
Set the prompt procedure associated with
porttoprompter, which must be a one-argument procedure taking an input port, and returning a string.
The default prompt procedure. It returns
"#|kawa:, whereL|# "Lis the current line number ofport. When reading a continuation line, the result is"#|, whereC---:L|# "Cis the character returned by(input-port-read-state. The prompt has the form of a comment to make it easier to cut-and-paste.port)
Return the current column number or line number of
input-port, using the current input port if none is specified. If the number is unknown, the result is#f. Otherwise, the result is a 0-origin integer - i.e. the first character of the first line is line 0, column 0. (However, when you display a file position, for example in an error message, we recommend you add 1 to get 1-origin integers. This is because lines and column numbers traditionally start with 1, and that is what non-programmers will find most natural.)
Get the line number of the current line of
port, which must be a (non-binary) input port. The initial line is line 1. Deprecated; replaced by(+ 1 (port-line.port))
set-input-port-line-number! port num
Set line number of the current line of
porttonum. Deprecated; replaced by(set-port-line!.port(-num1))
Get the column number of the current line of
port, which must be a (non-binary) input port. The initial column is column 1. Deprecated; replaced by(+ 1 (port-column.port))
Returns a character indicating the current
readstate of theport. Returns#\Returnif not current doing aread,#\"if reading a string;#\|if reading a comment;#\(if inside a list; and#\Spacewhen otherwise in aread. The result is intended for use by prompt prcedures, and is not necessarily correct except when reading a new-line.
A symbol that controls how
readhandles letters when reading a symbol. If the first letter is ‘U’, then letters in symbols are upper-cased. If the first letter is ‘D’ or ‘L’, then letters in symbols are down-cased. If the first letter is ‘I’, then the case of letters in symbols is inverted. Otherwise (the default), the letter is not changed. (Letters following a ‘\’ are always unchanged.) The value ofsymbol-read-caseonly checked when a reader is created, not each time a symbol is read.
Controls how bytes in external files are converted to/from internal Unicode characters. Can be either a symbol or a boolean. If
port-char-encodingis#f, the file is assumed to be a binary file and no conversion is done. Otherwise, the file is a text file. The default is#t, which uses a locale-dependent conversion. Ifport-char-encodingis a symbol, it must be the name of a character encoding known to Java. For all text files (that is ifport-char-encodingis not#f), on input a#\Returncharacter or a#\Returnfollowed by#\Newlineare converted into plain#\Newline.This variable is checked when the file is opened; not when actually reading or writing. Here is an example of how you can safely change the encoding temporarily:
(define (open-binary-input-file name) (fluid-let ((port-char-encoding #f)) (open-input-file name)))
The number base (radix) to use by default when printing rational numbers. Must be an integer between 2 and 36, and the default is of course 10. For example setting
*print-base*to 16 produces hexadecimal output.
If true, prints an indicator of the radix used when printing rational numbers. If
*print-base*is respectively 2, 8, or 16, then#b,#oor#xis written before the number; otherwise#is written, whereNris the base. An exception is whenN*print-base*is 10, in which case a period is written after the number, to match Common Lisp; this may be inappropriate for Scheme, so is likely to change.
If this an integer, and the available width is less or equal to this value, then the pretty printer switch to the more miser compact style.
When writing to XML, controls pretty-printing and indentation. If the value is
'alwaysor'yesforce each element to start on a new suitably-indented line. If the value is'prettyonly force new lines for elements that won't fit completely on a line. The the value is'noor unset, don't add extra whitespace.
format destination fmt . arguments
An almost complete implementation of Common LISP format description according to the CL reference book Common LISP from Guy L. Steele, Digital Press. Backward compatible to most of the available Scheme format implementations.
Returns
#t,#for a string; has side effect of printing according tofmt. Ifdestinationis#t, the output is to the current output port and#!voidis returned. Ifdestinationis#f, a formatted string is returned as the result of the call. Ifdestinationis a string,destinationis regarded as the format string;fmtis then the first argument and the output is returned as a string. Ifdestinationis a number, the output is to the current error port if available by the implementation. Otherwisedestinationmust be an output port and#!voidis returned.
fmtmust be a string or an instance ofgnu.text.MessageFormatorjava.text.MessageFormat. Iffmtis a string, it is parsed as if byparse-format.
Parses
format-string, which is a string of the form of a Common LISP format description. Returns an instance ofgnu.text.ReportFormat, which can be passed to theformatfunction.
A format string passed to format or parse-format
consists of format directives (that start with ‘~’),
and regular characters (that are written directly to the destination).
Most of the Common Lisp (and Slib) format directives are implemented.
Neither justification, nor pretty-printing are supported yet.
Plus of course, we need documentation for format!
Documentation syntax: Uppercase characters represent the corresponding control directive characters. Lowercase characters represent control directive parameter descriptions.
~A-
Any (print as
displaydoes).~@Aleft pad.
~mincol,colinc,minpad,padcharAfull padding.
~S-
S-expression (print as
writedoes).~@Sleft pad.
~mincol,colinc,minpad,padcharSfull padding.
~C-
Character.
~@Cprints a character as the reader can understand it (i.e.
#\prefixing).~:Cprints a character as emacs does (eg.
^Cfor ASCII 03).
~D-
Decimal.
~@Dprint number sign always.
~:Dprint comma separated.
~mincol,padchar,commachar,commawidthDpadding.
~X-
Hexadecimal.
~@Xprint number sign always.
~:Xprint comma separated.
~mincol,padchar,commachar,commawidthXpadding.
~O-
Octal.
~@Oprint number sign always.
~:Oprint comma separated.
~mincol,padchar,commachar,commawidthOpadding.
~B-
Binary.
~@Bprint number sign always.
~:Bprint comma separated.
~mincol,padchar,commachar,commawidthBpadding.
~nR-
Radix
n.~n,mincol,padchar,commachar,commawidthRpadding.
~@Rprint a number as a Roman numeral.
~:@Rprint a number as an “old fashioned” Roman numeral.
~:Rprint a number as an ordinal English number.
~R~P-
Plural.
~@Pprints
yandies.~:Pas
~P but jumps 1 argument backward.~:@Pas
~@P but jumps 1 argument backward.
commawidth is the number of characters between two comma characters.
~F-
Fixed-format floating-point (prints a flonum like
mmm.nnn).~width,digits,scale,overflowchar,padcharF~@FIf the number is positive a plus sign is printed.
~E-
Exponential floating-point (prints a flonum like
mmm.nnnEee)~width,digits,exponentdigits,scale,overflowchar,padchar,exponentcharE~@EIf the number is positive a plus sign is printed.
~G-
General floating-point (prints a flonum either fixed or exponential).
~width,digits,exponentdigits,scale,overflowchar,padchar,exponentcharG~@GIf the number is positive a plus sign is printed.
A slight difference from Common Lisp: If the number is printed in fixed form and the fraction is zero, then a zero digit is printed for the fraction, if allowed by the
widthanddigitsis unspecified.
~%-
Newline.
~n%print
nnewlines.
~&-
print newline if not at the beginning of the output line.
~n&prints
~&and thenn-1newlines.
~|-
Page Separator.
~n|print
npage separators.
~~-
Tilde.
~n~print
ntildes.
-
~<newline> -
Continuation Line.
-
~:<newline> newline is ignored, white space left.
-
~@<newline> newline is left, white space ignored.
-
~T-
Tabulation.
~@Trelative tabulation.
~colnum,colincTfull tabulation.
~?-
Indirection (expects indirect arguments as a list).
~@?extracts indirect arguments from format arguments.
~(str~)-
Case conversion (converts by
string-downcase).~:(str~)converts by
string-capitalize.~@(str~)converts by
string-capitalize-first.~:@(str~)converts by
string-upcase.
~*-
Argument Jumping (jumps 1 argument forward).
~n*jumps
narguments forward.~:*jumps 1 argument backward.
~n:*jumps
narguments backward.~@*jumps to the 0th argument.
~n@*jumps to the
nth argument (beginning from 0)
~[str0~;str1~;...~;strn~]-
Conditional Expression (numerical clause conditional).
~{str~}-
Iteration (args come from the next argument (a list)).
~^-
Up and out.
~n^aborts if
n= 0~n,m^aborts if
n=m~n,m,k^aborts if
n<=m<=k
~:Aprint
#fas an empty list (see below).~:Sprint
#fas an empty list (see below).~<~>Justification.
~:^
These are not necesasrily implemented in Kawa!
~Iprint a R4RS complex number as
~F~@Fiwith passed parameters for~F.~YPretty print formatting of an argument for scheme code lists.
~KSame as
~?.~!Flushes the output if format
destinationis a port.~_-
Print a
#\spacecharacter~n_print
n#\spacecharacters.
~nCTakes
nas an integer representation for a character. No arguments are consumed.nis converted to a character byinteger->char.nmust be a positive decimal number.~:SPrint out readproof. Prints out internal objects represented as
#<...>as strings"#<...>"so that the format output can always be processed byread.~:APrint out readproof. Prints out internal objects represented as
#<...>as strings"#<...>"so that the format output can always be processed byread.~F, ~E, ~G, ~$may also print number strings, i.e. passing a number as a string and format it accordingly.
