This commit is contained in:
Christopher Ramírez 2014-08-17 19:32:33 -06:00
parent 8f1bde4035
commit d76c1d1360

View file

@ -297,14 +297,13 @@ class Renderer(object):
return xml_text return xml_text
def _encode_escape_chars(self, xml_text): def _encode_escape_chars(self, xml_text):
encode_rules = { # Replace line feed and/or tabs within text span entities.
'(?i)(<text:(?:[ahp]|ruby-base|span|meta|meta-field)>.*)(\n)(.*</text:(?:[ahp]|ruby-base|span|meta|meta-field)>)': r'\1<text:line-break/>\3', find_pattern = r'(?is)<text:([\S]+?)>([^>]*?([\n|\t])[^<]*?)</text:\1>'
'(?i)(<text:(?:[ahp]|ruby-base|span|meta|meta-field)>.*)(\u0009)(.*</text:(?:[ahp]|ruby-base|span|meta|meta-field)>)': r'\1<text:tab>\3', for m in re.findall(find_pattern, xml_text):
'(?i)[\u0009|\u000d|\u000a](?:(?![</?|>]))': '<text:s/>' print(m[1])
} replacement = m[1].replace('\n', '<text:line-break/>')
replacement = replacement.replace('\t', '<text:tab/>')
for p, r in encode_rules.items(): xml_text = xml_text.replace(m[1], replacement)
xml_text = re.sub(p, r, xml_text)
return xml_text return xml_text
@ -320,13 +319,17 @@ class Renderer(object):
result = jinja_template.render(**kwargs) result = jinja_template.render(**kwargs)
result = self._encode_escape_chars(result) result = self._encode_escape_chars(result)
try:
return parseString(result.encode('ascii', 'xmlcharrefreplace')) return parseString(result.encode('ascii', 'xmlcharrefreplace'))
except: except:
self.log.debug('Error rendering template:\n%s', self.log.error('Error parsing XML result:\n%s', result,
xml_document.toprettyxml()) exc_info=True)
raise raise
except:
self.log.error('Error rendering template:\n%s',
xml_document.toprettyxml(), exc_info=True)
raise
finally: finally:
self.log.debug('Rendering xml object finished') self.log.debug('Rendering xml object finished')