From: Ian B. <ia...@co...> - 2001-04-08 23:33:13
|
Mike Orr <ir...@se...> wrote: > > I want to change the sprintf backend to a compiled python > > code backend similar to PSP's. > > The percent operator is nice and fast, but its rigidity in accepting > only one delimeter syntax is a pain. If we had a C function > substitute(template, dic, left="{", right="}", escape=None) > that would give us the benefits of the percent operator without the > dilemma of either translating to "%(key)s" or using a Python loop for > the substitution. Are there any C programmers who want something to do? > Maybe HTMLgen.StringTemplate and the string module would also want it. Well, if you have a parsing stage (which presumably doesn't need to be as efficient) you don't have to parse into a string. The parsed result could be a list of string contants and expressions to substitute. I don't understand all of TemplateFiller, but here's how I imagine a (potentially quick) version of the parser might work. This is completely untested and doesn't do much of what TemplateFiller does (escapes, the actual evaluation, etc.) # placeholderRE should be a regex that matches so that # group 1 is the expression. rawPage is a string. # The parsed template is a list of strings, where the # even-number-indexes are string constants, and the # odd-number are expressions. def parseTemplate(rawPage, placeholderRE): parsedTemplate = [] position = [0,] def subber(match, parsedTemplate=parsedTemplate, position=position, rawPage=rawPage): parsedTemplate.append(rawPage[position[0]:match.start()]) position[0] = rawmatch.end() parsedTemplate.append(match.group(1)) placeholderRE.sub(subber, rawPage) parsedTemplate.append(rawPage[position:]) return parsedTemplate # executer is a function that understands how interpret the # placeholders, returning a string. def substituteParsedTemplate(parsedTemplate, executer): isConstant = 1 result = StringIO() for piece in parsedTemplate: if isConstant: result.write(piece) isConstant = 0 else: result.write(executer(piece)) isConstant = 1 return result.getvalue() -- Ian Bicking Colorstudy Web Design ia...@co... http://www.colorstudy.com homepage: http://www.colorstudy.com/ianb 4769 N Talman Ave, Chicago, IL 60625 / (773) 275-7241 |