summaryrefslogtreecommitdiff
path: root/odoo/report/render/html2html
diff options
context:
space:
mode:
authorRaphael Collet <rco@openerp.com>2016-09-02 15:58:39 +0200
committerRaphael Collet <rco@openerp.com>2016-09-02 17:28:12 +0200
commit9e64f9f9514194d74e166b032add8511182f2677 (patch)
tree5086710c04c6b923be18a6d1d97b3f0f3a2a9c4a /odoo/report/render/html2html
parent11812b0b9e82b2b1b9041d8250ce01e7b4a5f7ee (diff)
[REF] openerp: move `openerp` to `odoo`
Diffstat (limited to 'odoo/report/render/html2html')
-rw-r--r--odoo/report/render/html2html/__init__.py4
-rw-r--r--odoo/report/render/html2html/html2html.py76
2 files changed, 80 insertions, 0 deletions
diff --git a/odoo/report/render/html2html/__init__.py b/odoo/report/render/html2html/__init__.py
new file mode 100644
index 00000000000..41fa95cf4a0
--- /dev/null
+++ b/odoo/report/render/html2html/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from .html2html import parseString
diff --git a/odoo/report/render/html2html/html2html.py b/odoo/report/render/html2html/html2html.py
new file mode 100644
index 00000000000..b66d44a5a5f
--- /dev/null
+++ b/odoo/report/render/html2html/html2html.py
@@ -0,0 +1,76 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import base64
+import copy
+import cStringIO
+import re
+
+from reportlab.lib.utils import ImageReader
+
+from openerp.report.render.rml2pdf import utils
+
+_regex = re.compile('\[\[(.+?)\]\]')
+utils._regex = re.compile('\[\[\s*(.+?)\s*\]\]',re.DOTALL)
+class html2html(object):
+ def __init__(self, html, localcontext):
+ self.localcontext = localcontext
+ self.etree = html
+ self._node = None
+
+
+ def render(self):
+ def process_text(node,new_node):
+ if new_node.tag in ['story','tr','section']:
+ new_node.attrib.clear()
+ for child in utils._child_get(node, self):
+ new_child = copy.deepcopy(child)
+ new_node.append(new_child)
+ if len(child):
+ for n in new_child:
+ new_child.text = utils._process_text(self, child.text)
+ new_child.tail = utils._process_text(self, child.tail)
+ new_child.remove(n)
+ process_text(child, new_child)
+ else:
+ if new_child.tag=='img' and new_child.get('name'):
+ if _regex.findall(new_child.get('name')) :
+ src = utils._process_text(self, new_child.get('name'))
+ if src :
+ new_child.set('src','data:image/gif;base64,%s'%src)
+ output = cStringIO.StringIO(base64.decodestring(src))
+ img = ImageReader(output)
+ (width,height) = img.getSize()
+ if not new_child.get('width'):
+ new_child.set('width',str(width))
+ if not new_child.get('height') :
+ new_child.set('height',str(height))
+ else :
+ new_child.getparent().remove(new_child)
+ new_child.text = utils._process_text(self, child.text)
+ new_child.tail = utils._process_text(self, child.tail)
+ self._node = copy.deepcopy(self.etree)
+ for n in self._node:
+ self._node.remove(n)
+ process_text(self.etree, self._node)
+ return self._node
+
+ def url_modify(self,root):
+ for n in root:
+ if (n.text.find('<a ')>=0 or n.text.find('&lt;a')>=0) and n.text.find('href')>=0 and n.text.find('style')<=0 :
+ node = (n.tag=='span' and n.getparent().tag=='u') and n.getparent().getparent() or ((n.tag=='span') and n.getparent()) or n
+ style = node.get('color') and "style='color:%s; text-decoration: none;'"%node.get('color') or ''
+ if n.text.find('&lt;a')>=0:
+ t = '&lt;a '
+ else :
+ t = '<a '
+ href = n.text.split(t)[-1]
+ n.text = ' '.join([t,style,href])
+ self.url_modify(n)
+ return root
+
+def parseString(node, localcontext = {}):
+ r = html2html(node, localcontext)
+ root = r.render()
+ root = r.url_modify(root)
+ return root