Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/mwlib
diff options
context:
space:
mode:
authorChris Ball <cjb@laptop.org>2008-06-02 15:22:22 (GMT)
committer Chris Ball <cjb@laptop.org>2008-06-02 15:22:22 (GMT)
commit6e455a6a18b44bdef6a7fc3f9c4724c36a5ad9ee (patch)
treecb91ffb1a5a349403e06345662e5b94bb464e20f /mwlib
parentdcedb9648d7818bef8e40b68b28b2aa84c4211c5 (diff)
Applied patch from mwlib #151, which fixes math rendering/templates.
Diffstat (limited to 'mwlib')
-rwxr-xr-xmwlib/expander.py47
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]