format.py: Document `#' as a format parameter.
[chopwood] / format.py
index 7b5d93c..af76c59 100644 (file)
--- a/format.py
+++ b/format.py
@@ -798,7 +798,7 @@ def compile(control):
 
   PARAMS ::= PARAM [`,' PARAMS]
 
-  PARAM ::= EMPTY | INT | `'' CHAR | `v' | `!' ARG
+  PARAM ::= EMPTY | INT | `#' | `'' CHAR | `v' | `!' ARG
 
   FLAGS ::= [[ `@' | `:' ]]*
 
@@ -806,12 +806,13 @@ def compile(control):
   items drawn from the listed alternatives, each appearing at most once.  See
   the function `parse_arg' for the syntax of ARG.)
 
-  An empty PARAM is equivalent to omitting the parameter; `!ARG' reads the
-  parameter value from the argument; `v' is equivalent to `!+', as a
-  convenient abbreviation and for Common Lisp compatibility.  The `=ARG'
-  notation indicates which argument(s) should be processed by the operation:
-  the default is `=+'.
+  An empty PARAM is equivalent to omitting the parameter; `#' is the number
+  of remaining positional arguments; `!ARG' reads the parameter value from
+  the argument; `v' is equivalent to `!+', as a convenient abbreviation and
+  for Common Lisp compatibility.  The `=ARG' notation indicates which
+  argument(s) should be processed by the operation: the default is `=+'
   """
+  if not isinstance(control, basestring): return control
   pp = []
   with COMPILE.bind(control = control, start = 0, end = len(control),
                     delim = ''):
@@ -872,10 +873,7 @@ def format(out, control, *args, **kw):
     raise TypeError, out
 
   ## Turn the control argument into a formatting operation.
-  if isinstance(control, basestring):
-    op = compile(control)
-  else:
-    op = control
+  op = compile(control)
 
   ## Invoke the formatting operation in the correct environment.
   with FORMAT.bind(write = write, pushback = [],
@@ -1260,7 +1258,7 @@ class FormatIteration (BaseFormatOperation):
   then the enclosed directives are applied once even if the argument sequence
   is empty.
 
-  If the formatting directives are empty then a formatting string is fetched
+  If the formatting directives are empty then a formatting control is fetched
   using the argument collector associated with the closing delimiter.
   """
 
@@ -1349,7 +1347,7 @@ class FormatRecursive (BaseFormatOperation):
   """
   ~?: Recursive formatting.
 
-  Without `@', read a pair of arguments: use the first as a format string,
+  Without `@', read a pair of arguments: use the first as a format control,
   and apply it to the arguments extracted from the second (which may be a
   sequence or a map).