Commit 71f1d9dd authored by Godefroid Chapelle's avatar Godefroid Chapelle

management of i18n:attributes was not similar

in both space and semicolon separated lists
parent 635ce2ab
......@@ -669,8 +669,8 @@ class TALGenerator:
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,7 +678,7 @@ class TALGenerator:
for key, value in repldict.items():
if i18nattrs.get(key, None):
raise I18NError(
("attribute [%s] cannot both be part of tal:attributes"
("attribute [%s] cannot both be part of tal:attributes" +
" and have a msgid in i18n:attributes") % key,
position)
ce = self.compileExpression(value)
......@@ -817,16 +817,26 @@ class TALGenerator:
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,
raise TALError("illegal i18n:attributes specification: %r" % parts,
position)
if len(parts) == 2:
attr, msgid = parts
......@@ -834,39 +844,40 @@ def _parseI18nAttributes(i18nattrs, attrlist, repldict, position, xml):
# 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)):
if (not i18nattrlist[1] in staticattrs) and (not i18nattrlist[1] in repldict):
attr, msgid = i18nattrlist
d[attr] = msgid
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)
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()
t.pushProgram()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment