From: Mark Wooding Date: Sat, 16 Mar 2013 17:28:37 +0000 (+0000) Subject: format.py: Allow general format controls more widely. X-Git-Tag: 1.0.0~12 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/chopwood/commitdiff_plain/77bef10fa6bce063445df4feb9ac5f678b71cb99?ds=sidebyside format.py: Allow general format controls more widely. In particular, allow them as inputs to `compile', and to the `~{~}' and `~?' directives. --- diff --git a/format.py b/format.py index 7b5d93c..d6eb896 100644 --- a/format.py +++ b/format.py @@ -812,6 +812,7 @@ def compile(control): 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).