Implemented that stripping the whitespace in a template is now optional.
[philipp/winterrodeln/wrpylib.git] / wrpylib / mwmarkup.py
index 2f8faea2850cf8a7a7dd42a03a2b15b460fce4b7..b121f08dcfb5532a1628feda885dc8f3c4deb57d 100644 (file)
@@ -50,6 +50,10 @@ def find_template(wikitext, template_title):
 
 
 class TemplateValidator(formencode.FancyValidator):
+    def __init__(self, strip=True):
+        """If strip is True, the title, and the parameter keys and values are stripped in to_python."""
+        self.strip = (lambda s: s.strip()) if strip else (lambda s: s)
+
     def to_python(self, value, state=None):
         """Takes a template, like u'{{Color|red|text=Any text}}' and translates it to a Python tuple
         (title, anonym_params, named_params) where title is the template title,
@@ -62,7 +66,7 @@ class TemplateValidator(formencode.FancyValidator):
         parts = value[2:-2].split(u'|')
 
         # template name
-        title = parts[0].strip()
+        title = self.strip(parts[0])
         if len(title) == 0:
             raise formencode.Invalid(u'Empty template tilte.', value, state)
         del parts[0]
@@ -72,7 +76,7 @@ class TemplateValidator(formencode.FancyValidator):
         while len(parts) > 0:
             equalsign_pos = parts[0].find(u'=')
             if equalsign_pos >= 0: break # named parameter
-            anonym_params.append(parts[0].strip())
+            anonym_params.append(self.strip(parts[0]))
             del parts[0]
 
         # named or numbered parameters
@@ -82,12 +86,12 @@ class TemplateValidator(formencode.FancyValidator):
             if equalsign_pos < 0:
                 raise formencode.Invalid(u'Anonymous parameter after named parameter.', value, state)
             key, sep, value = parts[0].partition(u'=')
-            key = key.strip()
+            key = self.strip(key)
             if len(key) == 0:
                 raise formencode.Invalid(u'Empty key.', value, state)
             if named_params.has_key(key):
                 raise formencode.Invalid(u'Duplicate key: "{0}"'.format(key), value, state)
-            named_params[key] = value.strip()
+            named_params[key] = self.strip(value)
             del parts[0]
 
         return title, anonym_params, named_params