diff --git a/secretary.py b/secretary.py index 4e1a60e..ffad3d5 100644 --- a/secretary.py +++ b/secretary.py @@ -776,6 +776,22 @@ class Renderer(object): if (tag=='li' and html_node.childNodes[0].localName != 'p'): container = xml_object.createElement('text:p') odt_node.appendChild(container) + elif tag=='code': + def traverse_preformated(node): + if node.hasChildNodes(): + for n in node.childNodes: + traverse_preformated(n) + else: + container = xml_object.createElement('text:span') + for text in re.split('(\n)', node.nodeValue.lstrip('\n')): + if text == '\n': + container.appendChild(xml_object.createElement('text:line-break')) + else: + container.appendChild(xml_object.createTextNode(text)) + + node.parentNode.replaceChild(container, node) + traverse_preformated(html_node) + container = odt_node else: container = odt_node @@ -814,19 +830,7 @@ class Renderer(object): html_node.parentNode.replaceChild(odt_node, html_node) def node_to_string(node): - result = node.toxml() - - # linebreaks in preformated nodes should be converted to - if (node.__class__.__name__ != 'Text') and \ - (node.getAttribute('text:style-name') == 'Preformatted_20_Text'): - result = result.replace('\n', '') - - # All double linebreak should be replaced with an empty paragraph - # and all linebreaks should be converted to - return (result - .replace('\n\n', '') - .replace('\n', '')) - + return node.toxml() ODTText = ''.join(node_as_str for node_as_str in map(node_to_string, xml_object.getElementsByTagName('html')[0].childNodes))