X-Git-Url: https://git.distorted.org.uk/~mdw/chopwood/blobdiff_plain/acd737d82202ac7874a03568b72f9b680244bfb9..dc190ae1b06450d72f32c14e9a4f2d8114a01af0:/cgi.py diff --git a/cgi.py b/cgi.py index b25d2d2..0ecdfe2 100644 --- a/cgi.py +++ b/cgi.py @@ -238,6 +238,29 @@ class FormatHTML (F.SimpleFormatOperation): else: return htmlescape(arg) FORMATOPS['H'] = FormatHTML +class FormatWrap (F.BaseFormatOperation): + """ + ~<...~@>: wrap enclosed material in another formatting control string. + + The argument is a formatting control. The enclosed material is split into + pieces separated by `~;' markers. The formatting control is performed, and + passed the list of pieces (as compiled formatting operations) in the + keyword argument `wrapped'. + """ + def __init__(me, *args): + super(FormatWrap, me).__init__(*args) + pieces = [] + while True: + piece, delim = F.collect_subformat('>;') + pieces.append(piece) + if delim.char == '>': break + me.pieces = pieces + def _format(me, atp, colonp): + op = F.compile(me.getarg.get()) + with F.FORMAT.bind(argmap = dict(F.FORMAT.argmap, wrapped = me.pieces)): + op.format() +FORMATOPS['<'] = FormatWrap + def format_tmpl(control, **kw): with F.COMPILE.bind(opmaps = [FORMATOPS, F.BASEOPS]): with tmplkw(**kw):