[Erp5-report] r31033 nicolas - in /erp5/trunk/products/Formulator: Field.py Widget.py

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Dec 3 15:47:30 CET 2009


Author: nicolas
Date: Thu Dec  3 15:47:28 2009
New Revision: 31033

URL: http://svn.erp5.org?rev=31033&view=rev
Log:
- Add local_name parameter to overload name of odf nodes 'text:p' or 'text:span'
- Customise render_odt for DateTimeWidget and TextAreaWidget

Modified:
    erp5/trunk/products/Formulator/Field.py
    erp5/trunk/products/Formulator/Widget.py

Modified: erp5/trunk/products/Formulator/Field.py
URL: http://svn.erp5.org/erp5/trunk/products/Formulator/Field.py?rev=31033&r1=31032&r2=31033&view=diff
==============================================================================
--- erp5/trunk/products/Formulator/Field.py [utf8] (original)
+++ erp5/trunk/products/Formulator/Field.py [utf8] Thu Dec  3 15:47:28 2009
@@ -280,8 +280,8 @@
                                 render_prefix)
 
     security.declareProtected('View', 'render_odt')
-    def render_odt(self, as_string=False, attr_dict=None):
-      return self.widget.render_odt(self, as_string, attr_dict=attr_dict)
+    def render_odt(self, as_string=False, local_name='p', attr_dict=None):
+      return self.widget.render_odt(self, as_string, local_name, attr_dict=attr_dict)
 
     security.declareProtected('View', 'render_css')
     def render_css(self, REQUEST=None):

Modified: erp5/trunk/products/Formulator/Widget.py
URL: http://svn.erp5.org/erp5/trunk/products/Formulator/Widget.py?rev=31033&r1=31032&r2=31033&view=diff
==============================================================================
--- erp5/trunk/products/Formulator/Widget.py [utf8] (original)
+++ erp5/trunk/products/Formulator/Widget.py [utf8] Thu Dec  3 15:47:28 2009
@@ -8,8 +8,8 @@
 from DocumentTemplate.ustr import ustr
 from urlparse import urljoin
 from lxml import etree
-from lxml.etree import Element
-
+from lxml.etree import Element, SubElement
+import re
 
 
 DRAW_URI = 'urn:oasis:names:tc:opendocument:xmlns:drawing:1.0'
@@ -167,7 +167,7 @@
     """
     return None
 
-  def render_odt(self, field, as_string, attr_dict=None):
+  def render_odt(self, field, as_string, local_name, attr_dict=None):
     """
       Return a field value rendered in odt format.
       - as_string return value as string or as xml object
@@ -175,7 +175,7 @@
     """
     if attr_dict is None:
       attr_dict = {}
-    text_node = Element('{%s}%s' % (TEXT_URI, 'p'), nsmap=NSMAP)
+    text_node = Element('{%s}%s' % (TEXT_URI, local_name), nsmap=NSMAP)
     # get the field value
     text_node.text = field.get_value('default').decode('utf-8')
     text_node.attrib.update(attr_dict)
@@ -428,6 +428,28 @@
         if value is None:
           return ''
         return value
+
+    def render_odt(self, field, as_string, local_name, attr_dict=None):
+        if attr_dict is None:
+            attr_dict = {}
+        text_node = Element('{%s}%s' % (TEXT_URI, local_name), nsmap=NSMAP)
+        value =  field.get_value('default').decode('utf-8')
+        value.replace('\r', '')
+        def replaceCharsByNode(match_object):
+            #global text_node
+            if match_object.group(1) is None:
+                text_node.text = match_object.group(2)
+            if match_object.group(1) == '\n':
+                line_break = SubElement(text_node, '{%s}%s' % (TEXT_URI, 'line-break'))
+                line_break.tail = match_object.group(2)
+            if match_object.group(1) == '\t':
+                line_break = SubElement(text_node, '{%s}%s' % (TEXT_URI, 'tab'))
+                line_break.tail = match_object.group(2)
+        re.sub('([\n\t])?([^\n\t]*)', replaceCharsByNode, value)
+        text_node.attrib.update(attr_dict)
+        if as_string:
+            return etree.tostring(text_node)
+        return text_node
 
 TextAreaWidgetInstance = TextAreaWidget()
 
@@ -1199,7 +1221,7 @@
   def render_pdf(self, field, value, render_prefix=None):
     return self.format_value(field, value, mode='pdf')
 
-  def render_odt(self, field, as_string, attr_dict=None):
+  def render_odt(self, field, as_string, local_name, attr_dict=None):
     """
       Return a field value rendered in odt format.
       - as_string return value as string or as xml object
@@ -1207,7 +1229,7 @@
     """
     if attr_dict is None:
       attr_dict = {}
-    text_node = Element('{%s}%s' % (TEXT_URI, 'p'), nsmap=NSMAP)
+    text_node = Element('{%s}%s' % (TEXT_URI, local_name), nsmap=NSMAP)
     # get the field value
     text_node.text = self.format_value(field, field.get_value('default'), mode='pdf').decode('utf-8')
     text_node.attrib.update(attr_dict)
@@ -1518,6 +1540,17 @@
             'format': format,
             'type': 'float'}
 
+  def render_odt(self, field, as_string, local_name, attr_dict=None):
+    if attr_dict is None:
+      attr_dict = {}
+    text_node = Element('{%s}%s' % (TEXT_URI, local_name), nsmap=NSMAP)
+    # get the field value
+    text_node.text = self.format_value(field, field.get_value('default')).decode('utf-8')
+    text_node.attrib.update(attr_dict)
+    if as_string:
+      return etree.tostring(text_node)
+    return text_node
+
 FloatWidgetInstance = FloatWidget()
 
 class LinkWidget(TextWidget):




More information about the Erp5-report mailing list