[Checkins] SVN: Sandbox/malthe/chameleon.zpt/src/chameleon/zpt/expressions.py Only unescape semicolon escapes in string expressions.

Malthe Borch mborch at gmail.com
Mon Sep 22 12:30:05 EDT 2008


Log message for revision 91358:
  Only unescape semicolon escapes in string expressions.

Changed:
  U   Sandbox/malthe/chameleon.zpt/src/chameleon/zpt/expressions.py

-=-
Modified: Sandbox/malthe/chameleon.zpt/src/chameleon/zpt/expressions.py
===================================================================
--- Sandbox/malthe/chameleon.zpt/src/chameleon/zpt/expressions.py	2008-09-22 16:18:21 UTC (rev 91357)
+++ Sandbox/malthe/chameleon.zpt/src/chameleon/zpt/expressions.py	2008-09-22 16:30:04 UTC (rev 91358)
@@ -364,43 +364,8 @@
         return types.parts(parts)
 
     def split(self, string):
-        parts = parsing.interpolate(string, self.translator.tales)
-        if parts is not None:
-            return map(
-                lambda part: isinstance(part, types.expression) and \
-                part or self._unescape(part), parts)    
+        return parsing.interpolate(string, self.translator.tales)
 
-    def _unescape(self, string):
-        """
-        >>> unescape = StringTranslator(None)._unescape
-        
-        >>> unescape('string:Hello World')
-        'string:Hello World'
-        
-        >>> unescape('; string:Hello World')
-        Traceback (most recent call last):
-         ...
-        SyntaxError: Semi-colons in string-expressions must be escaped.
-
-        >>> unescape(';; string:Hello World')
-        '; string:Hello World'
-
-        >>> unescape('string:Hello World;')
-        'string:Hello World;'
-        
-        """
-        
-        i = string.rfind(';')
-        if i < 0 or i == len(string) - 1:
-            return string
-        
-        j = string.rfind(';'+';')
-        if j < 0 or i != j + 1:
-            raise SyntaxError(
-                "Semi-colons in string-expressions must be escaped.")
-        
-        return string.replace(';;', ';')
-
 class PythonTranslator(ExpressionTranslator):
     """Implements Python expression translation."""
     
@@ -437,3 +402,42 @@
             
     def translate(self, string):
         return types.join(self.split(string))            
+
+    def split(self, string):
+        parts = super(StringTranslator, self).split(string)
+        if parts is not None:
+            return map(
+                lambda part: isinstance(part, types.expression) and \
+                part or self._unescape(part), parts)
+
+    def _unescape(self, string):
+        """
+        >>> unescape = StringTranslator(None)._unescape
+        
+        >>> unescape('string:Hello World')
+        'string:Hello World'
+        
+        >>> unescape('; string:Hello World')
+        Traceback (most recent call last):
+         ...
+        SyntaxError: Semi-colons in string-expressions must be escaped.
+
+        >>> unescape(';; string:Hello World')
+        '; string:Hello World'
+
+        >>> unescape('string:Hello World;')
+        'string:Hello World;'
+        
+        """
+        
+        i = string.rfind(';')
+        if i < 0 or i == len(string) - 1:
+            return string
+        
+        j = string.rfind(';'+';')
+        if j < 0 or i != j + 1:
+            raise SyntaxError(
+                "Semi-colons in string-expressions must be escaped.")
+        
+        return string.replace(';;', ';')
+



More information about the Checkins mailing list