diff options
| author | Raphael Collet <rco@openerp.com> | 2016-09-02 15:58:39 +0200 |
|---|---|---|
| committer | Raphael Collet <rco@openerp.com> | 2016-09-02 17:28:12 +0200 |
| commit | 9e64f9f9514194d74e166b032add8511182f2677 (patch) | |
| tree | 5086710c04c6b923be18a6d1d97b3f0f3a2a9c4a /odoo/report/render/html2html | |
| parent | 11812b0b9e82b2b1b9041d8250ce01e7b4a5f7ee (diff) | |
[REF] openerp: move `openerp` to `odoo`
Diffstat (limited to 'odoo/report/render/html2html')
| -rw-r--r-- | odoo/report/render/html2html/__init__.py | 4 | ||||
| -rw-r--r-- | odoo/report/render/html2html/html2html.py | 76 |
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('<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('<a')>=0: + t = '<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 |
