Next: Standard Formatted I/O, Previous: Precedence Parsing, Up: Textual Conversion Packages [Contents][Index]
(require 'format) or (require 'srfi-28)
Next: Format Specification (Format version 3.1), Previous: Format (version 3.1), Up: Format (version 3.1) [Contents][Index]
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, #f or a string; has side effect of printing
according to format-string. If destination is #t,
the output is to the current output port and #t is returned. If
destination is #f, a formatted string is returned as the
result of the call. NEW: If destination is a string,
destination is regarded as the format string; format-string is
then the first argument and the output is returned as a string. If
destination is a number, the output is to the current error port
if available by the implementation. Otherwise destination must be
an output port and #t is returned.
format-string must be a string. In case of a formatting error
format returns #f and prints a message on the current output or
error port. Characters are output as if the string were output by the
display function with the exception of those prefixed by a tilde
(~). For a detailed description of the format-string syntax
please consult a Common LISP format reference manual. For a test suite
to verify this format implementation load formatst.scm.
Previous: Format Interface, Up: Format (version 3.1) [Contents][Index]
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 formatst.scm.
This implementation supports directive parameters and modifiers
(: and @ characters). Multiple parameters must be
separated by a comma (,). Parameters can be numerical parameters
(positive or negative), character parameters (prefixed by a quote
character ('), variable parameters (v), number of rest
arguments parameter (#), empty and default parameters. Directive
characters are case independent. The general form of a directive
is:
directive ::= ~{directive-parameter,}[:][@]directive-character
directive-parameter ::= [ [-|+]{0-9}+ | ’character | v | # ]
Documentation syntax: Uppercase characters represent the corresponding control directive characters. Lowercase characters represent control directive parameter descriptions.
~AAny (print as display does).
~@Aleft pad.
~mincol,colinc,minpad,padcharAfull padding.
~SS-expression (print as write does).
~@Sleft pad.
~mincol,colinc,minpad,padcharSfull padding.
~DDecimal.
~@Dprint number sign always.
~:Dprint comma separated.
~mincol,padchar,commacharDpadding.
~XHexadecimal.
~@Xprint number sign always.
~:Xprint comma separated.
~mincol,padchar,commacharXpadding.
~OOctal.
~@Oprint number sign always.
~:Oprint comma separated.
~mincol,padchar,commacharOpadding.
~BBinary.
~@Bprint number sign always.
~:Bprint comma separated.
~mincol,padchar,commacharBpadding.
~nRRadix n.
~n,mincol,padchar,commacharRpadding.
~@Rprint a number as a Roman numeral.
~:@Rprint a number as an “old fashioned” Roman numeral.
~:Rprint a number as an ordinal English number.
~Rprint a number as a cardinal English number.
~PPlural.
~@Pprints y and ies.
~:Pas ~P but jumps 1 argument backward.
~:@Pas ~@P but jumps 1 argument backward.
~CCharacter.
~@Cprints a character as the reader can understand it (i.e. #\ prefixing).
~:Cprints a character as emacs does (eg. ^C for ASCII 03).
~FFixed-format floating-point (prints a flonum like mmm.nnn).
~width,digits,scale,overflowchar,padcharF~@FIf the number is positive a plus sign is printed.
~EExponential 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.
~GGeneral 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.
~$Dollars floating-point (prints a flonum in fixed with signs separated).
~digits,scale,width,padchar$~@$If the number is positive a plus sign is printed.
~:@$A sign is always printed and appears before the padding.
~:$The sign appears before the padding.
~%Newline.
~n%print n newlines.
~&print newline if not at the beginning of the output line.
~n&prints ~& and then n-1 newlines.
~|Page Separator.
~n|print n page separators.
~~Tilde.
~n~print n tildes.
~<newline>Continuation Line.
~:<newline>newline is ignored, white space left.
~@<newline>newline is left, white space ignored.
~TTabulation.
~@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 n arguments forward.
~:*jumps 1 argument backward.
~n:*jumps n arguments backward.
~@*jumps to the 0th argument.
~n@*jumps to the nth argument (beginning from 0)
~[str0~;str1~;...~;strn~]Conditional Expression (numerical clause conditional).
~n[take argument from n.
~@[true test conditional.
~:[if-else-then conditional.
~;clause separator.
~:;default clause follows.
~{str~}Iteration (args come from the next argument (a list)). Iteration bounding is controlled by configuration variables format:iteration-bounded and format:max-iterations. With both variables default, a maximum of 100 iterations will be performed.
~n{at most n iterations.
~:{args from next arg (a list of lists).
~@{args from the rest of arguments.
~:@{args from the rest args (lists).
~^Up and out.
~n^aborts if n = 0
~n,m^aborts if n = m
~n,m,k^aborts if n <= m <= k
~:Aprint #f as an empty list (see below).
~:Sprint #f as an empty list (see below).
~<~>Justification.
~:^(sorry I don’t understand its semantics completely)
~mincol,padchar,commachar,commawidthD~mincol,padchar,commachar,commawidthX~mincol,padchar,commachar,commawidthO~mincol,padchar,commachar,commawidthB~n,mincol,padchar,commachar,commawidthRcommawidth is the number of characters between two comma characters.
~Iprint a R4RS complex number as ~F~@Fi with passed parameters for
~F.
~YPretty print formatting of an argument for scheme code lists.
~KSame as ~?.
~!Flushes the output if format destination is a port.
~_Print a #\space character
~n_print n #\space characters.
~/Print a #\tab character
~n/print n #\tab characters.
~nCTakes n as an integer representation for a character. No arguments
are consumed. n is converted to a character by
integer->char. n must 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 by read.
~:APrint out readproof. Prints out internal objects represented as
#<...> as strings "#<...>" so that the format output can always
be processed by read.
~QPrints information and a copyright notice on the format implementation.
~:Qprints format version.
~F, ~E, ~G, ~$may also print number strings, i.e. passing a number as a string and format it accordingly.
Format has some configuration variables at the beginning of 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.
Symbols are converted by symbol->string so the case type of the
printed symbols is implementation dependent.
format:symbol-case-conv is a one arg closure which is either
#f (no conversion), string-upcase, string-downcase
or string-capitalize. (default #f)
As format:symbol-case-conv but applies for the representation of
implementation internal objects. (default #f)
The character prefixing the exponent value in ~E printing. (default
#\E)
When #t, a ~{...~} control will iterate no more than the
number of times specified by format:max-iterations regardless of
the number of iterations implied by modifiers and arguments.
When #f, a ~{...~} control will iterate the number of
times implied by modifiers and arguments, unless termination is forced
by language or system limitations. (default #t)
The maximum number of iterations performed by a ~{...~} control.
Has effect only when format:iteration-bounded is #t.
(default 100)
See format.doc.
Downward compatible except for padding support and ~A, ~S,
~P, ~X uppercase printing. SLIB format 1.4 uses C-style
printf padding support which is completely replaced by the CL
format padding style.
Downward compatible except for ~, which is not documented
(ignores all characters inside the format string up to a newline
character). (7.1 implements ~a, ~s,
~newline, ~~, ~%, numerical and variable
parameters and :/@ modifiers in the CL sense).
Downward compatible except for ~A and ~S which print in
uppercase. (Elk implements ~a, ~s, ~~, and
~% (no directive parameters or modifiers)).
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
~a, ~s, ~c, ~%, and ~~ (no directive
parameters or modifiers)).
This implementation of format is solely useful in the SLIB context because it requires other components provided by SLIB.
Next: Standard Formatted I/O, Previous: Precedence Parsing, Up: Textual Conversion Packages [Contents][Index]