[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