123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435 |
- @menu
- * Format Interface::
- * Format Specification::
- @end menu
- @node Format Interface, Format Specification, Format, Format
- @subsection Format Interface
- @defun format destination format-string . arguments
- An almost complete implementation of Common LISP format description
- according to the CL reference book @cite{Common LISP} from Guy L.
- Steele, Digital Press. Backward compatible to most of the available
- Scheme format implementations.
- Returns @code{#t}, @code{#f} or a string; has side effect of printing
- according to @var{format-string}. If @var{destination} is @code{#t},
- the output is to the current output port and @code{#t} is returned. If
- @var{destination} is @code{#f}, a formatted string is returned as the
- result of the call. NEW: If @var{destination} is a string,
- @var{destination} is regarded as the format string; @var{format-string} is
- then the first argument and the output is returned as a string. If
- @var{destination} is a number, the output is to the current error port
- if available by the implementation. Otherwise @var{destination} must be
- an output port and @code{#t} is returned.@refill
- @var{format-string} must be a string. In case of a formatting error
- format returns @code{#f} and prints a message on the current output or
- error port. Characters are output as if the string were output by the
- @code{display} function with the exception of those prefixed by a tilde
- (~). For a detailed description of the @var{format-string} syntax
- please consult a Common LISP format reference manual. For a test suite
- to verify this format implementation load @file{formatst.scm}. Please
- send bug reports to @code{lutzeb@@cs.tu-berlin.de}.
- Note: @code{format} is not reentrant, i.e. only one @code{format}-call
- may be executed at a time.
- @end defun
- @node Format Specification, , Format Interface, Format
- @subsection Format Specification (Format version 3.0)
- Please consult a Common LISP format reference manual for a detailed
- description of the format string syntax. For a demonstration of the
- implemented directives see @file{formatst.scm}.@refill
- This implementation supports directive parameters and modifiers
- (@code{:} and @code{@@} characters). Multiple parameters must be
- separated by a comma (@code{,}). Parameters can be numerical parameters
- (positive or negative), character parameters (prefixed by a quote
- character (@code{'}), variable parameters (@code{v}), number of rest
- arguments parameter (@code{#}), empty and default parameters. Directive
- characters are case independent. The general form of a directive
- is:@refill
- @noindent
- @var{directive} ::= ~@{@var{directive-parameter},@}[:][@@]@var{directive-character}
- @noindent
- @var{directive-parameter} ::= [ [-|+]@{0-9@}+ | '@var{character} | v | # ]
- @subsubsection Implemented CL Format Control Directives
- Documentation syntax: Uppercase characters represent the corresponding
- control directive characters. Lowercase characters represent control
- directive parameter descriptions.
- @table @asis
- @item @code{~A}
- Any (print as @code{display} does).
- @table @asis
- @item @code{~@@A}
- left pad.
- @item @code{~@var{mincol},@var{colinc},@var{minpad},@var{padchar}A}
- full padding.
- @end table
- @item @code{~S}
- S-expression (print as @code{write} does).
- @table @asis
- @item @code{~@@S}
- left pad.
- @item @code{~@var{mincol},@var{colinc},@var{minpad},@var{padchar}S}
- full padding.
- @end table
- @item @code{~D}
- Decimal.
- @table @asis
- @item @code{~@@D}
- print number sign always.
- @item @code{~:D}
- print comma separated.
- @item @code{~@var{mincol},@var{padchar},@var{commachar}D}
- padding.
- @end table
- @item @code{~X}
- Hexadecimal.
- @table @asis
- @item @code{~@@X}
- print number sign always.
- @item @code{~:X}
- print comma separated.
- @item @code{~@var{mincol},@var{padchar},@var{commachar}X}
- padding.
- @end table
- @item @code{~O}
- Octal.
- @table @asis
- @item @code{~@@O}
- print number sign always.
- @item @code{~:O}
- print comma separated.
- @item @code{~@var{mincol},@var{padchar},@var{commachar}O}
- padding.
- @end table
- @item @code{~B}
- Binary.
- @table @asis
- @item @code{~@@B}
- print number sign always.
- @item @code{~:B}
- print comma separated.
- @item @code{~@var{mincol},@var{padchar},@var{commachar}B}
- padding.
- @end table
- @item @code{~@var{n}R}
- Radix @var{n}.
- @table @asis
- @item @code{~@var{n},@var{mincol},@var{padchar},@var{commachar}R}
- padding.
- @end table
- @item @code{~@@R}
- print a number as a Roman numeral.
- @item @code{~:@@R}
- print a number as an ``old fashioned'' Roman numeral.
- @item @code{~:R}
- print a number as an ordinal English number.
- @item @code{~:@@R}
- print a number as a cardinal English number.
- @item @code{~P}
- Plural.
- @table @asis
- @item @code{~@@P}
- prints @code{y} and @code{ies}.
- @item @code{~:P}
- as @code{~P but jumps 1 argument backward.}
- @item @code{~:@@P}
- as @code{~@@P but jumps 1 argument backward.}
- @end table
- @item @code{~C}
- Character.
- @table @asis
- @item @code{~@@C}
- prints a character as the reader can understand it (i.e. @code{#\} prefixing).
- @item @code{~:C}
- prints a character as emacs does (eg. @code{^C} for ASCII 03).
- @end table
- @item @code{~F}
- Fixed-format floating-point (prints a flonum like @var{mmm.nnn}).
- @table @asis
- @item @code{~@var{width},@var{digits},@var{scale},@var{overflowchar},@var{padchar}F}
- @item @code{~@@F}
- If the number is positive a plus sign is printed.
- @end table
- @item @code{~E}
- Exponential floating-point (prints a flonum like @var{mmm.nnn}@code{E}@var{ee}).
- @table @asis
- @item @code{~@var{width},@var{digits},@var{exponentdigits},@var{scale},@var{overflowchar},@var{padchar},@var{exponentchar}E}
- @item @code{~@@E}
- If the number is positive a plus sign is printed.
- @end table
- @item @code{~G}
- General floating-point (prints a flonum either fixed or exponential).
- @table @asis
- @item @code{~@var{width},@var{digits},@var{exponentdigits},@var{scale},@var{overflowchar},@var{padchar},@var{exponentchar}G}
- @item @code{~@@G}
- If the number is positive a plus sign is printed.
- @end table
- @item @code{~$}
- Dollars floating-point (prints a flonum in fixed with signs separated).
- @table @asis
- @item @code{~@var{digits},@var{scale},@var{width},@var{padchar}$}
- @item @code{~@@$}
- If the number is positive a plus sign is printed.
- @item @code{~:@@$}
- A sign is always printed and appears before the padding.
- @item @code{~:$}
- The sign appears before the padding.
- @end table
- @item @code{~%}
- Newline.
- @table @asis
- @item @code{~@var{n}%}
- print @var{n} newlines.
- @end table
- @item @code{~&}
- print newline if not at the beginning of the output line.
- @table @asis
- @item @code{~@var{n}&}
- prints @code{~&} and then @var{n-1} newlines.
- @end table
- @item @code{~|}
- Page Separator.
- @table @asis
- @item @code{~@var{n}|}
- print @var{n} page separators.
- @end table
- @item @code{~~}
- Tilde.
- @table @asis
- @item @code{~@var{n}~}
- print @var{n} tildes.
- @end table
- @item @code{~}<newline>
- Continuation Line.
- @table @asis
- @item @code{~:}<newline>
- newline is ignored, white space left.
- @item @code{~@@}<newline>
- newline is left, white space ignored.
- @end table
- @item @code{~T}
- Tabulation.
- @table @asis
- @item @code{~@@T}
- relative tabulation.
- @item @code{~@var{colnum,colinc}T}
- full tabulation.
- @end table
- @item @code{~?}
- Indirection (expects indirect arguments as a list).
- @table @asis
- @item @code{~@@?}
- extracts indirect arguments from format arguments.
- @end table
- @item @code{~(@var{str}~)}
- Case conversion (converts by @code{string-downcase}).
- @table @asis
- @item @code{~:(@var{str}~)}
- converts by @code{string-capitalize}.
- @item @code{~@@(@var{str}~)}
- converts by @code{string-capitalize-first}.
- @item @code{~:@@(@var{str}~)}
- converts by @code{string-upcase}.
- @end table
- @item @code{~*}
- Argument Jumping (jumps 1 argument forward).
- @table @asis
- @item @code{~@var{n}*}
- jumps @var{n} arguments forward.
- @item @code{~:*}
- jumps 1 argument backward.
- @item @code{~@var{n}:*}
- jumps @var{n} arguments backward.
- @item @code{~@@*}
- jumps to the 0th argument.
- @item @code{~@var{n}@@*}
- jumps to the @var{n}th argument (beginning from 0)
- @end table
- @item @code{~[@var{str0}~;@var{str1}~;...~;@var{strn}~]}
- Conditional Expression (numerical clause conditional).
- @table @asis
- @item @code{~@var{n}[}
- take argument from @var{n}.
- @item @code{~@@[}
- true test conditional.
- @item @code{~:[}
- if-else-then conditional.
- @item @code{~;}
- clause separator.
- @item @code{~:;}
- default clause follows.
- @end table
- @item @code{~@{@var{str}~@}}
- Iteration (args come from the next argument (a list)).
- @table @asis
- @item @code{~@var{n}@{}
- at most @var{n} iterations.
- @item @code{~:@{}
- args from next arg (a list of lists).
- @item @code{~@@@{}
- args from the rest of arguments.
- @item @code{~:@@@{}
- args from the rest args (lists).
- @end table
- @item @code{~^}
- Up and out.
- @table @asis
- @item @code{~@var{n}^}
- aborts if @var{n} = 0
- @item @code{~@var{n},@var{m}^}
- aborts if @var{n} = @var{m}
- @item @code{~@var{n},@var{m},@var{k}^}
- aborts if @var{n} <= @var{m} <= @var{k}
- @end table
- @end table
- @subsubsection Not Implemented CL Format Control Directives
- @table @asis
- @item @code{~:A}
- print @code{#f} as an empty list (see below).
- @item @code{~:S}
- print @code{#f} as an empty list (see below).
- @item @code{~<~>}
- Justification.
- @item @code{~:^}
- (sorry I don't understand its semantics completely)
- @end table
- @subsubsection Extended, Replaced and Additional Control Directives
- @table @asis
- @item @code{~@var{mincol},@var{padchar},@var{commachar},@var{commawidth}D}
- @item @code{~@var{mincol},@var{padchar},@var{commachar},@var{commawidth}X}
- @item @code{~@var{mincol},@var{padchar},@var{commachar},@var{commawidth}O}
- @item @code{~@var{mincol},@var{padchar},@var{commachar},@var{commawidth}B}
- @item @code{~@var{n},@var{mincol},@var{padchar},@var{commachar},@var{commawidth}R}
- @var{commawidth} is the number of characters between two comma characters.
- @end table
- @table @asis
- @item @code{~I}
- print an R5RS complex number as @code{~F~@@Fi} with passed parameters for
- @code{~F}.
- @item @code{~Y}
- Pretty print formatting of an argument for scheme code lists.
- @item @code{~K}
- Same as @code{~?.}
- @item @code{~!}
- Flushes the output if format @var{destination} is a port.
- @item @code{~_}
- Print a @code{#\space} character
- @table @asis
- @item @code{~@var{n}_}
- print @var{n} @code{#\space} characters.
- @end table
- @item @code{~/}
- Print a @code{#\tab} character
- @table @asis
- @item @code{~@var{n}/}
- print @var{n} @code{#\tab} characters.
- @end table
- @item @code{~@var{n}C}
- Takes @var{n} as an integer representation for a character. No arguments
- are consumed. @var{n} is converted to a character by
- @code{integer->char}. @var{n} must be a positive decimal number.@refill
- @item @code{~:S}
- Print out readproof. Prints out internal objects represented as
- @code{#<...>} as strings @code{"#<...>"} so that the format output can always
- be processed by @code{read}.
- @refill
- @item @code{~:A}
- Print out readproof. Prints out internal objects represented as
- @code{#<...>} as strings @code{"#<...>"} so that the format output can always
- be processed by @code{read}.
- @item @code{~Q}
- Prints information and a copyright notice on the format implementation.
- @table @asis
- @item @code{~:Q}
- prints format version.
- @end table
- @refill
- @item @code{~F, ~E, ~G, ~$}
- may also print number strings, i.e. passing a number as a string and
- format it accordingly.
- @end table
- @subsubsection Configuration Variables
- Format has some configuration variables at the beginning of
- @file{format.scm} to suit the systems and users needs. There should be
- no modification necessary for the configuration that comes with SLIB.
- If modification is desired the variable should be set after the format
- code is loaded. Format detects automatically if the running scheme
- system implements floating point numbers and complex numbers.
- @table @asis
- @item @var{format:symbol-case-conv}
- Symbols are converted by @code{symbol->string} so the case type of the
- printed symbols is implementation dependent.
- @code{format:symbol-case-conv} is a one arg closure which is either
- @code{#f} (no conversion), @code{string-upcase}, @code{string-downcase}
- or @code{string-capitalize}. (default @code{#f})
- @item @var{format:iobj-case-conv}
- As @var{format:symbol-case-conv} but applies for the representation of
- implementation internal objects. (default @code{#f})
- @item @var{format:expch}
- The character prefixing the exponent value in @code{~E} printing. (default
- @code{#\E})
- @end table
- @subsubsection Compatibility With Other Format Implementations
- @table @asis
- @item SLIB format 2.x:
- See @file{format.doc}.
- @item SLIB format 1.4:
- Downward compatible except for padding support and @code{~A}, @code{~S},
- @code{~P}, @code{~X} uppercase printing. SLIB format 1.4 uses C-style
- @code{printf} padding support which is completely replaced by the CL
- @code{format} padding style.
- @item MIT C-Scheme 7.1:
- Downward compatible except for @code{~}, which is not documented
- (ignores all characters inside the format string up to a newline
- character). (7.1 implements @code{~a}, @code{~s},
- ~@var{newline}, @code{~~}, @code{~%}, numerical and variable
- parameters and @code{:/@@} modifiers in the CL sense).@refill
- @item Elk 1.5/2.0:
- Downward compatible except for @code{~A} and @code{~S} which print in
- uppercase. (Elk implements @code{~a}, @code{~s}, @code{~~}, and
- @code{~%} (no directive parameters or modifiers)).@refill
- @item Scheme->C 01nov91:
- Downward compatible except for an optional destination parameter: S2C
- accepts a format call without a destination which returns a formatted
- string. This is equivalent to a #f destination in S2C. (S2C implements
- @code{~a}, @code{~s}, @code{~c}, @code{~%}, and @code{~~} (no directive
- parameters or modifiers)).@refill
- @end table
- This implementation of format is solely useful in the SLIB context
- because it requires other components provided by SLIB.@refill
|