[Checkins] SVN: Sandbox/malthe/chameleon.zpt/ Fixed translation pragma issue; fixed string escape issue.
Malthe Borch
mborch at gmail.com
Sun Nov 16 20:57:13 EST 2008
Log message for revision 93030:
Fixed translation pragma issue; fixed string escape issue.
Changed:
U Sandbox/malthe/chameleon.zpt/CHANGES.txt
U Sandbox/malthe/chameleon.zpt/src/chameleon/zpt/expressions.py
-=-
Modified: Sandbox/malthe/chameleon.zpt/CHANGES.txt
===================================================================
--- Sandbox/malthe/chameleon.zpt/CHANGES.txt 2008-11-17 01:34:38 UTC (rev 93029)
+++ Sandbox/malthe/chameleon.zpt/CHANGES.txt 2008-11-17 01:57:13 UTC (rev 93030)
@@ -4,6 +4,11 @@
Head
~~~~
+- Fixed string escape issue. [malthe]
+
+- Fixed issue where translation pragma would be reset if a
+ non-matching pragma was found. [malthe]
+
- Fixed bug that would parse global defines incorrectly. [malthe]
- TAL- and METAL-elements now subclass the XHTML-element class; this
Modified: Sandbox/malthe/chameleon.zpt/src/chameleon/zpt/expressions.py
===================================================================
--- Sandbox/malthe/chameleon.zpt/src/chameleon/zpt/expressions.py 2008-11-17 01:34:38 UTC (rev 93029)
+++ Sandbox/malthe/chameleon.zpt/src/chameleon/zpt/expressions.py 2008-11-17 01:57:13 UTC (rev 93030)
@@ -330,13 +330,12 @@
match = self.re_pragma.match(string[i:])
if match is not None:
pragma = match.group('pragma')
- translator = self.pragma(pragma)
- if translator is not None:
+ new_translator = self.pragma(pragma)
+ if new_translator is not None:
+ translator = new_translator
i += match.end()
continue
- translator = self
-
j = string.find('|', j + 1)
if j == -1:
j = len(string)
@@ -391,13 +390,12 @@
re_interpolation = re.compile(r'(?P<prefix>[^\\]\$|^\$)({((?P<expression>.*)})?|'
'(?P<variable>[A-Za-z][A-Za-z0-9_]*))')
-
+
def __init__(self, translator):
self.translator = translator
def translate(self, string, escape=None):
parts = self.split(string)
-
if escape is not None:
parts = map(
lambda part: isinstance(part, types.expression) and \
@@ -411,25 +409,33 @@
>>> unescape('string:Hello World', ';')
'string:Hello World'
+
+ >>> unescape('string:Hello World;', ';')
+ 'string:Hello World;'
+
+ >>> unescape('string:Hello World;;', ';')
+ 'string:Hello World;'
>>> unescape('; string:Hello World', ';')
Traceback (most recent call last):
...
SyntaxError: Must escape symbol ';'.
+ >>> unescape('; string:Hello World;', ';')
+ Traceback (most recent call last):
+ ...
+ SyntaxError: Must escape symbol ';'.
+
+ >>> unescape('string:Hello; World', ';')
+ Traceback (most recent call last):
+ ...
+ SyntaxError: Must escape symbol ';'.
+
>>> unescape(';; string:Hello World', ';')
'; string:Hello World'
-
- >>> unescape('string:Hello World;', ';')
- 'string:Hello World;'
"""
- i = string.rfind(symbol)
- if i < 0 or i == len(string) - 1:
- return string
-
- j = string.rfind(symbol+symbol)
- if j < 0 or i != j + 1:
+ if re.search("([^%s]|^)%s[^%s]" % (symbol, symbol, symbol), string):
raise SyntaxError(
"Must escape symbol %s." % repr(symbol))
More information about the Checkins
mailing list