[Zope-Checkins] CVS: Zope/lib/python/TAL - TALGenerator.py:1.68

Godefroid Chapelle gotcha at swing.be
Wed Aug 20 18:32:15 EDT 2003


Update of /cvs-repository/Zope/lib/python/TAL
In directory cvs.zope.org:/tmp/cvs-serv32620

Modified Files:
	TALGenerator.py 
Log Message:
management of i18n:attributes was not similar
in both space and semicolon separated lists


=== Zope/lib/python/TAL/TALGenerator.py 1.67 => 1.68 ===
--- Zope/lib/python/TAL/TALGenerator.py:1.67	Mon Aug 18 12:53:08 2003
+++ Zope/lib/python/TAL/TALGenerator.py	Wed Aug 20 17:32:14 2003
@@ -669,8 +669,8 @@
             else:
                 repldict = {}
             if i18nattrs:
-                i18nattrs = _parseI18nAttributes(i18nattrs, attrlist, repldict,
-                                                 self.position, self.xml)
+                i18nattrs = _parseI18nAttributes(i18nattrs, attrlist, repldict, self.position,
+                                                 self.xml, self.source_file)
             else:
                 i18nattrs = {}
             # Convert repldict's name-->expr mapping to a
@@ -678,9 +678,9 @@
             for key, value in repldict.items():
                 if i18nattrs.get(key, None):
                     raise I18NError(
-                        ("attribute [%s] cannot both be part of tal:attributes"
-                         " and have a msgid in i18n:attributes") % key,
-                        position)
+                      ("attribute [%s] cannot both be part of tal:attributes" +
+                      " and have a msgid in i18n:attributes") % key,
+                    position)
                 ce = self.compileExpression(value)
                 repldict[key] = ce, key in i18nattrs, i18nattrs.get(key)
             for key in i18nattrs:
@@ -789,7 +789,7 @@
             self.emitI18nVariable(varname)
         # Do not test for "msgid is not None", i.e. we only want to test for
         # explicit msgids here.  See comment above.
-        if msgid is not None:
+        if msgid is not None: 
             # in case tal:content, i18n:translate and i18n:name in the
             # same tag insertTranslation opcode has already been
             # emitted
@@ -817,55 +817,66 @@
             self.emitDefineMacro(defineMacro)
 
 
-def _parseI18nAttributes(i18nattrs, attrlist, repldict, position, xml):
+def _parseI18nAttributes(i18nattrs, attrlist, repldict, position,
+                         xml, source_file):
+
+    def addAttribute(dic, attr, msgid, position, xml):
+        if not xml:
+            attr = attr.lower()
+        if attr in dic:
+            raise TALError(
+                "attribute may only be specified once in i18n:attributes: %r"
+                % attr,
+                position)
+        dic[attr] = msgid
+
     d = {}
     if ';' in i18nattrs:
         i18nattrlist = i18nattrs.split(';')
-        i18nattrlist = [attr.strip().split()
-                        for attr in i18nattrlist if attr.strip()]
+        i18nattrlist = [attr.strip().split() for attr in i18nattrlist if attr.strip()]
         for parts in i18nattrlist:
             if len(parts) > 2:
-                raise TALError(
-                    "illegal i18n:attributes specification: %r" % spec,
-                    position)
+                raise TALError("illegal i18n:attributes specification: %r" % parts,
+                               position)
             if len(parts) == 2:
                 attr, msgid = parts
             else:
                 # len(parts) == 1
                 attr = parts[0]
                 msgid = None
-            if not xml:
-                attr = attr.lower()
-            if attr in d:
-                raise TALError(
-                    "attribute may only be specified once in i18n:attributes: "
-                    + `attr`,
-                    position)
-            d[attr] = msgid
+            addAttribute(d, attr, msgid, position, xml)
     else:
         i18nattrlist = i18nattrs.split()
         if len(i18nattrlist) == 2:
             staticattrs = [attr[0] for attr in attrlist if len(attr) == 2]
-            if (  (not i18nattrlist[1] in staticattrs)
-                  and (not i18nattrlist[1] in repldict)):
-              attr, msgid = i18nattrlist
-              d[attr] = msgid
+            if (not i18nattrlist[1] in staticattrs) and (not i18nattrlist[1] in repldict):
+                attr, msgid = i18nattrlist
+                addAttribute(d, attr, msgid, position, xml)    
             else:
                 import warnings
-                warnings.warn(I18N_ATTRIBUTES_WARNING, DeprecationWarning)
+                warnings.warn('Space separated attributes in i18n:attributes'
+                + ' are deprecated (i18n:attributes="value title"). Please use'
+                + ' semicolon to separate attributes'
+                + ' (i18n:attributes="value; title").'
+                + '\nFile %s at row, column %s\nAttributes %s'
+                % (source_file, str(position), i18nattrs)
+                , DeprecationWarning)
+                msgid = None
                 for attr in i18nattrlist:
-                    d[attr] = None
-        else:
+                    addAttribute(d, attr, msgid, position, xml)    
+        else:    
             import warnings
-            warnings.warn(I18N_ATTRIBUTES_WARNING, DeprecationWarning)
+            warnings.warn('Space separated attributes in i18n:attributes'
+            + ' are deprecated (i18n:attributes="value title"). Please use'
+            + ' semicolon to separate attributes'
+            + ' (i18n:attributes="value; title").'
+            + '\nFile %s at row, column %s\nAttributes %s'
+            % (source_file, str(position), i18nattrs)
+            , DeprecationWarning)
+            msgid = None
             for attr in i18nattrlist:
-                d[attr] = None
+                addAttribute(d, attr, msgid, position, xml)    
     return d
-
-I18N_ATTRIBUTES_WARNING = (
-    'Space separated attributes in i18n:attributes are deprecated'
-    ' (i18n:attributes="value title"). Please use a semicolon to'
-    ' separate attributes (i18n:attributes="value; title").')
 
 def test():
     t = TALGenerator()




More information about the Zope-Checkins mailing list