[Zope3-checkins] SVN: Zope3/branches/ZopeX3-3.0/src/zope/tal/t Fix
for issue 233 in the Zope 3 collector.
Fred L. Drake, Jr.
fred at zope.com
Tue Jul 13 14:44:46 EDT 2004
Log message for revision 26504:
Fix for issue 233 in the Zope 3 collector.
This corresponds to the Hotfix_2004-07-13 product.
Changed:
U Zope3/branches/ZopeX3-3.0/src/zope/tal/taldefs.py
U Zope3/branches/ZopeX3-3.0/src/zope/tal/talgenerator.py
U Zope3/branches/ZopeX3-3.0/src/zope/tal/talinterpreter.py
A Zope3/branches/ZopeX3-3.0/src/zope/tal/tests/input/test36.html
A Zope3/branches/ZopeX3-3.0/src/zope/tal/tests/output/test36.html
U Zope3/branches/ZopeX3-3.0/src/zope/tal/tests/test_htmltalparser.py
U Zope3/branches/ZopeX3-3.0/src/zope/tal/tests/test_talinterpreter.py
-=-
Modified: Zope3/branches/ZopeX3-3.0/src/zope/tal/taldefs.py
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/tal/taldefs.py 2004-07-13 18:17:01 UTC (rev 26503)
+++ Zope3/branches/ZopeX3-3.0/src/zope/tal/taldefs.py 2004-07-13 18:44:46 UTC (rev 26504)
@@ -19,7 +19,7 @@
from zope.tal.interfaces import ITALExpressionErrorInfo
from zope.interface import implements
-TAL_VERSION = "1.4"
+TAL_VERSION = "1.5"
XML_NS = "http://www.w3.org/XML/1998/namespace" # URI for XML namespace
XMLNS_NS = "http://www.w3.org/2000/xmlns/" # URI for XML NS declarations
Modified: Zope3/branches/ZopeX3-3.0/src/zope/tal/talgenerator.py
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/tal/talgenerator.py 2004-07-13 18:17:01 UTC (rev 26503)
+++ Zope3/branches/ZopeX3-3.0/src/zope/tal/talgenerator.py 2004-07-13 18:44:46 UTC (rev 26504)
@@ -339,7 +339,7 @@
m = _name_rx.match(varname)
if m is None or m.group() != varname:
raise TALError("illegal i18n:name: %r" % varname, self.position)
- cexpr = None
+ key = cexpr = None
program = self.popProgram()
if action == I18N_REPLACE:
# This is a tag with an i18n:name and a tal:replace (implicit or
@@ -355,7 +355,8 @@
assert action == I18N_EXPRESSION
key, expr = parseSubstitution(expression)
cexpr = self.compileExpression(expr)
- self.emit('i18nVariable', varname, program, cexpr)
+ self.emit('i18nVariable',
+ varname, program, cexpr, int(key == "structure"))
def emitTranslation(self, msgid, i18ndata):
program = self.popProgram()
@@ -789,7 +790,8 @@
# - I18N_CONTENT for tal:content
# - I18N_EXPRESSION for explicit tal:replace
# o varinfo[2] will be None for the first two actions and the
- # replacement tal expression for the third action.
+ # replacement tal expression for the third action. This
+ # can include a 'text' or 'structure' indicator.
assert (varinfo[1]
in [I18N_REPLACE, I18N_CONTENT, I18N_EXPRESSION])
self.emitI18nVariable(varinfo)
Modified: Zope3/branches/ZopeX3-3.0/src/zope/tal/talinterpreter.py
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/tal/talinterpreter.py 2004-07-13 18:17:01 UTC (rev 26503)
+++ Zope3/branches/ZopeX3-3.0/src/zope/tal/talinterpreter.py 2004-07-13 18:44:46 UTC (rev 26504)
@@ -15,6 +15,7 @@
$Id$
"""
+import cgi
import sys
# Do not use cStringIO here! It's not unicode aware. :(
@@ -468,7 +469,7 @@
bytecode_handlers["insertText"] = do_insertText
def do_i18nVariable(self, stuff):
- varname, program, expression = stuff
+ varname, program, expression, structure = stuff
if expression is None:
# The value is implicitly the contents of this tag, so we have to
# evaluate the mini-program to get the value of the variable.
@@ -486,13 +487,19 @@
else:
# Evaluate the value to be associated with the variable in the
# i18n interpolation dictionary.
- value = self.engine.evaluate(expression)
+ if structure:
+ value = self.engine.evaluateStructure(expression)
+ else:
+ value = self.engine.evaluate(expression)
# evaluate() does not do any I18n, so we do it here.
if isinstance(value, MessageID):
# Translate this now.
value = self.engine.translate(value)
+ if not structure:
+ value = cgi.escape(str(value))
+
# Either the i18n:name tag is nested inside an i18n:translate in which
# case the last item on the stack has the i18n dictionary and string
# representation, or the i18n:name and i18n:translate attributes are
Added: Zope3/branches/ZopeX3-3.0/src/zope/tal/tests/input/test36.html
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/tal/tests/input/test36.html 2004-07-13 18:17:01 UTC (rev 26503)
+++ Zope3/branches/ZopeX3-3.0/src/zope/tal/tests/input/test36.html 2004-07-13 18:44:46 UTC (rev 26504)
@@ -0,0 +1,6 @@
+<span tal:replace="string:<foo>" />
+<span i18n:translate="">
+ <span tal:replace="string:<foo>" i18n:name="name1" />
+ <span tal:replace="structure string:<bar />" i18n:name="name2" />
+ <span i18n:name="name3"><b>some</b> <i>text</i></span>
+</span>
Added: Zope3/branches/ZopeX3-3.0/src/zope/tal/tests/output/test36.html
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/tal/tests/output/test36.html 2004-07-13 18:17:01 UTC (rev 26503)
+++ Zope3/branches/ZopeX3-3.0/src/zope/tal/tests/output/test36.html 2004-07-13 18:44:46 UTC (rev 26504)
@@ -0,0 +1,2 @@
+<foo>
+<span><foo> <bar /> <b>some</b> <i>text</i></span>
Modified: Zope3/branches/ZopeX3-3.0/src/zope/tal/tests/test_htmltalparser.py
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/tal/tests/test_htmltalparser.py 2004-07-13 18:17:01 UTC (rev 26503)
+++ Zope3/branches/ZopeX3-3.0/src/zope/tal/tests/test_htmltalparser.py 2004-07-13 18:44:46 UTC (rev 26504)
@@ -635,7 +635,8 @@
('span',
[('tal:replace', 'str:Lomax', 'tal'),
('i18n:name', 'name', 'i18n')]))],
- '$str:Lomax$')),
+ '$str:Lomax$',
+ 0)),
('rawtextBeginScope',
(' was born in\n ',
2,
@@ -648,7 +649,8 @@
('span',
[('tal:replace', 'str:Antarctica', 'tal'),
('i18n:name', 'country', 'i18n')]))],
- '$str:Antarctica$')),
+ '$str:Antarctica$',
+ 0)),
('endScope', ()),
('rawtextColumn', ('.\n', 0))])),
('endScope', ()),
@@ -679,7 +681,8 @@
('',
[('insertText', ('$bar$', []))])),
('rawtextOffset', ('</span>', 7))],
- None)),
+ None,
+ 0)),
('endScope', ()),
('rawtextOffset', ('.', 1))])),
('endScope', ()),
@@ -702,12 +705,12 @@
[('rawtextBeginScope', ('\n ', 2, (2, 2), 0, {'i18n:name': 'name'})),
('i18nVariable',
('name',
- [('rawtextOffset', ('<b>Jim</b>', 10))], None)),
+ [('rawtextOffset', ('<b>Jim</b>', 10))], None, 0)),
('rawtextBeginScope',
(' was born in\n ', 2, (3, 2), 1, {'i18n:name': 'country'})),
('i18nVariable',
('country',
- [('rawtextOffset', ('the USA', 7))], None)),
+ [('rawtextOffset', ('the USA', 7))], None, 0)),
('endScope', ()),
('rawtextColumn', ('.\n', 0))])),
('endScope', ()),
@@ -822,7 +825,7 @@
[('i18n:data', 'here/currentTime', 'i18n'),
('i18n:translate', 'timefmt', 'i18n'),
('i18n:name', 'time', 'i18n')])),
- ('i18nVariable', ('time', [], None))],
+ ('i18nVariable', ('time', [], None, 0))],
'$here/currentTime$')),
('endScope', ()),
('rawtextOffset', ('... beep!', 9))])),
@@ -857,7 +860,8 @@
('i18n:name', 'jobnum', 'i18n')])),
('rawtextOffset', ('NN', 2)),
('rawtextOffset', ('</span>', 7))],
- '$context/@@object_name$')),
+ '$context/@@object_name$',
+ 0)),
('endScope', ())])),
('endScope', ()),
('rawtextColumn', ('</span>\n', 0))
@@ -901,7 +905,8 @@
[('rawtextOffset', ('user at host.com', 13))])),
('endScope', ()),
('rawtextOffset', ('</a>', 4))],
- None)),
+ None,
+ 0)),
('endScope', ()),
('rawtextColumn', ('\n', 0))])),
('endScope', ()),
@@ -941,7 +946,8 @@
('$request/submitter$',
[('rawtextOffset', ('user at host.com', 13))])),
('rawtextOffset', ('</a>', 4))],
- None)),
+ None,
+ 0)),
('endScope', ()),
('rawtextColumn', ('\n', 0))])),
('endScope', ()),
Modified: Zope3/branches/ZopeX3-3.0/src/zope/tal/tests/test_talinterpreter.py
===================================================================
--- Zope3/branches/ZopeX3-3.0/src/zope/tal/tests/test_talinterpreter.py 2004-07-13 18:17:01 UTC (rev 26503)
+++ Zope3/branches/ZopeX3-3.0/src/zope/tal/tests/test_talinterpreter.py 2004-07-13 18:44:46 UTC (rev 26504)
@@ -155,7 +155,7 @@
'<div>THIS IS TEXT FOR <span>BARVALUE</span>.</div>\n')
def test_translate_static_text_as_dynamic_from_bytecode(self):
- program = [('version', '1.4'),
+ program = [('version', '1.5'),
('mode', 'html'),
('setPosition', (1, 0)),
('beginScope', {'i18n:translate': ''}),
@@ -177,7 +177,8 @@
('',
[('insertText', ('$bar$', []))])),
('rawtextOffset', ('</span>', 7))],
- None)),
+ None,
+ 0)),
('endScope', ()),
('rawtextOffset', ('.', 1))])),
('endScope', ()),
More information about the Zope3-Checkins
mailing list