diff options
author | Chris Ball <cjb@laptop.org> | 2008-06-02 15:22:22 (GMT) |
---|---|---|
committer | Chris Ball <cjb@laptop.org> | 2008-06-02 15:22:22 (GMT) |
commit | 6e455a6a18b44bdef6a7fc3f9c4724c36a5ad9ee (patch) | |
tree | cb91ffb1a5a349403e06345662e5b94bb464e20f /mwlib | |
parent | dcedb9648d7818bef8e40b68b28b2aa84c4211c5 (diff) |
Applied patch from mwlib #151, which fixes math rendering/templates.
Diffstat (limited to 'mwlib')
-rwxr-xr-x | mwlib/expander.py | 47 |
1 files changed, 40 insertions, 7 deletions
diff --git a/mwlib/expander.py b/mwlib/expander.py index b0bdc38..6298c7f 100755 --- a/mwlib/expander.py +++ b/mwlib/expander.py @@ -27,8 +27,9 @@ splitpattern = """ |(?:<gallery[^<>]*>.*?</gallery>) |(?:<source[^<>]*>.*?</source>) |(?:<pre.*?>.*?</pre>) +|(?:=) |(?:[:\[\]\|{}<]) # all special characters -|(?:[^\[\]\|:{}<]*)) # all others +|(?:[^=\[\]\|:{}<]*)) # all others """ splitrx = re.compile(splitpattern, re.VERBOSE | re.DOTALL | re.IGNORECASE) @@ -302,9 +303,42 @@ class LazyArgument(object): self.expander = expander self._flatten = None self.variables = variables + self._splitflatten = None + + def _flattennode(self, n): + arg=[] + self.expander.flatten(n, arg, self.variables) + arg = u"".join(arg) + + if len(arg)>256*1024: + raise MemoryLimitError("template argument too long: %s bytes" % (len(arg),)) + return arg + + def splitflatten(self): + if self._splitflatten is None: + try: + idx = self.node.children.index(u'=') + except ValueError: + name = None + val = self.node + else: + name = self.node + val = Node() + val.children[:] = self.node.children[idx+1:] + oldchildren = self.node.children[:] + del self.node.children[idx:] + + name = self._flattennode(name) + self.node.children = oldchildren + + val = self._flattennode(val) + + self._splitflatten = name, val + return self._splitflatten def flatten(self): - if self._flatten is None: + if self._flatten is None: + self._flatten = self._flattennode(self.node).strip() arg=[] self.expander.flatten(self.node, arg, self.variables) @@ -353,9 +387,8 @@ class ArgumentList(object): varcount=1 if n not in self.namedargs: for x in self.args: - f=x.flatten() - if u"=" in f: - name, val = f.split(u"=", 1) + name, val = x.splitflatten() + if name is not None: name = name.strip() val = val.strip() self.namedargs[name] = val @@ -364,10 +397,10 @@ class ArgumentList(object): else: name = str(varcount) varcount+=1 - self.namedargs[name] = f + self.namedargs[name] = val if n==name: - return f + return val self.namedargs[n] = u'' val = self.namedargs[n] |