REPORT: fix rml translation, translate before eval
bzr revid: ced-4608d23f742cf83ca3cf7e7d2101eea27d79caeb
This commit is contained in:
parent
3431f6d0b0
commit
58dd97c702
|
@ -167,20 +167,6 @@ class rml_parse(object):
|
||||||
def _parse_text(self, text, level=[]):
|
def _parse_text(self, text, level=[]):
|
||||||
res = self._regex.findall(text)
|
res = self._regex.findall(text)
|
||||||
todo = []
|
todo = []
|
||||||
for key in res:
|
|
||||||
newtext = self._eval(key)
|
|
||||||
for i in range(len(level)):
|
|
||||||
if isinstance(newtext, list):
|
|
||||||
newtext = newtext[level[i]]
|
|
||||||
if isinstance(newtext, list):
|
|
||||||
todo.append((key, newtext))
|
|
||||||
else:
|
|
||||||
if not isinstance(newtext, basestring):
|
|
||||||
newtext = str(newtext)
|
|
||||||
# if there are two [[]] blocks the same, it will replace both
|
|
||||||
# but it's ok because it should evaluate to the same thing
|
|
||||||
# anyway
|
|
||||||
text = text.replace('[['+key+']]', newtext.decode('utf8'))
|
|
||||||
# translate the text
|
# translate the text
|
||||||
# the "split [[]] if not match [[]]" is not very nice, but I
|
# the "split [[]] if not match [[]]" is not very nice, but I
|
||||||
# don't see how I could do it better...
|
# don't see how I could do it better...
|
||||||
|
@ -200,6 +186,20 @@ class rml_parse(object):
|
||||||
if translated_string:
|
if translated_string:
|
||||||
piece_list[pn] = piece_list[pn].replace(source_string, translated_string.decode('utf8'))
|
piece_list[pn] = piece_list[pn].replace(source_string, translated_string.decode('utf8'))
|
||||||
text = ''.join(piece_list)
|
text = ''.join(piece_list)
|
||||||
|
for key in res:
|
||||||
|
newtext = self._eval(key)
|
||||||
|
for i in range(len(level)):
|
||||||
|
if isinstance(newtext, list):
|
||||||
|
newtext = newtext[level[i]]
|
||||||
|
if isinstance(newtext, list):
|
||||||
|
todo.append((key, newtext))
|
||||||
|
else:
|
||||||
|
if not isinstance(newtext, basestring):
|
||||||
|
newtext = str(newtext)
|
||||||
|
# if there are two [[]] blocks the same, it will replace both
|
||||||
|
# but it's ok because it should evaluate to the same thing
|
||||||
|
# anyway
|
||||||
|
text = text.replace('[['+key+']]', newtext.decode('utf8'))
|
||||||
self._node.data = text
|
self._node.data = text
|
||||||
if len(todo):
|
if len(todo):
|
||||||
for key, newtext in todo:
|
for key, newtext in todo:
|
||||||
|
|
Loading…
Reference in New Issue