[MERGE] Fix for bug 885299: properly manage XML chars escaping in reports in all cases

bzr revid: odo@openerp.com-20111104164222-315uq7my7oa42v8d
This commit is contained in:
Olivier Dony 2011-11-04 17:42:22 +01:00
commit ce558209ab
2 changed files with 14 additions and 7 deletions

View File

@ -610,11 +610,10 @@ class _rml_flowable(object):
for key in txt_n.attrib.keys():
if key in ('rml_except', 'rml_loop', 'rml_tag'):
del txt_n.attrib[key]
if True or not self._textual(n).isspace():
if not n.tag == 'bullet':
txt_n.text = utils.xml2str(self._textual(n))
txt_n.tail = n.tail and utils._process_text(self, n.tail.replace('\n','')) or ''
rc1 += etree.tostring(txt_n)
if not n.tag == 'bullet':
txt_n.text = utils.xml2str(self._textual(n))
txt_n.tail = n.tail and utils.xml2str(utils._process_text(self, n.tail.replace('\n',''))) or ''
rc1 += etree.tostring(txt_n)
return rc1
def _table(self, node):

View File

@ -110,6 +110,14 @@ def _child_get(node, self=None, tagname=None):
yield n
def _process_text(self, txt):
"""Translate ``txt`` according to the language in the local context,
replace dynamic ``[[expr]]`` with their real value, then escape
the result for XML.
:param str txt: original text to translate (must NOT be XML-escaped)
:return: translated text, with dynamic expressions evaluated and
with special XML characters escaped (``&,<,>``).
"""
if not self.localcontext:
return str2xml(txt)
if not txt:
@ -130,10 +138,10 @@ def _process_text(self, txt):
except Exception:
pass
if isinstance(txt, basestring):
result += str2xml(txt)
result += txt
elif txt and (txt is not None) and (txt is not False):
result += ustr(txt)
return result
return str2xml(result)
def text_get(node):
return ''.join([ustr(n.text) for n in node])