[Erp5-report] r26361 - in /erp5/trunk/products/ERP5OOo: ./ tests/ tests/test_document/

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Apr 9 05:27:49 CEST 2009


Author: tatuya
Date: Thu Apr  9 05:27:48 2009
New Revision: 26361

URL: http://svn.erp5.org?rev=26361&view=rev
Log:
* Fix:
 - point-reference to a paragraph mapping failed non-ascii value
 - the XML could not encoding 'utf-8', but displayes escaped 
   unicode charactor

* Append:
  range-reference to strings mapping

Modified:
    erp5/trunk/products/ERP5OOo/FormPrintout.py
    erp5/trunk/products/ERP5OOo/tests/testFormPrintout.py
    erp5/trunk/products/ERP5OOo/tests/test_document/Foo_001.odt

Modified: erp5/trunk/products/ERP5OOo/FormPrintout.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5OOo/FormPrintout.py?rev=26361&r1=26360&r2=26361&view=diff
==============================================================================
--- erp5/trunk/products/ERP5OOo/FormPrintout.py [utf8] (original)
+++ erp5/trunk/products/ERP5OOo/FormPrintout.py [utf8] Thu Apr  9 05:27:48 2009
@@ -268,10 +268,8 @@
     # mapping ERP5Report report method to ODF
     content_element_tree = self._replaceXmlByReportSection(element_tree=content_element_tree,
                                                            extra_context=extra_context)
-    content_xml = etree.tostring(content_element_tree)
-    if isinstance(content_xml, unicode):
-      content_xml = content_xml.encode('utf-8')
-
+    content_xml = etree.tostring(content_element_tree, encoding='utf-8')
+ 
     # Replace content.xml in master openoffice template
     ooo_builder.replace('content.xml', content_xml)
     return ooo_builder
@@ -289,9 +287,7 @@
                                                  form=form,
                                                  here=here,
                                                  extra_context=extra_context)
-    styles_xml = etree.tostring(styles_element_tree)
-    if isinstance(styles_xml, unicode):
-      styles_xml = styles_xml.encode('utf-8')
+    styles_xml = etree.tostring(styles_element_tree, encoding='utf-8')
 
     ooo_builder.replace('styles.xml', styles_xml)
     return ooo_builder
@@ -334,8 +330,20 @@
     return element_tree
 
   def _replaceNodeViaReference(self, element_tree=None, field=None):
+    """replace nodes (e.g. paragraphs) via ODF reference"""
+    element_tree = self._replaceNodeViaRangeReference(element_tree=element_tree, field=field)
+    element_tree = self._replaceNodeViaPointReference(element_tree=element_tree, field=field)
+    return element_tree
+  
+  def _replaceNodeViaPointReference(self, element_tree=None, field=None):
+    """replace via ODF point reference
+    
+    point reference example:
+     <text:reference-mark text:name="invoice-date"/>
+    """
     field_id = field.id
     field_value = field.get_value('default')
+    value = self._toUnicodeString(field_value)
     # text:reference-mark text:name="invoice-date"
     reference_xpath = '//text:reference-mark[@text:name="%s"]' % field_id
     reference_list = element_tree.xpath(reference_xpath, namespaces=element_tree.nsmap)
@@ -344,9 +352,31 @@
       # remove such a "bbb": <text:p>aaa<br/>bbb</text:p>
       for child in node.getchildren():
         child.tail = ''
-      node.text = field_value
-    return element_tree
-
+      node.text = value
+    return element_tree
+  
+  def _replaceNodeViaRangeReference(self, element_tree=None, field=None):
+    """replace via ODF range reference
+
+    range reference example:
+    <text:reference-mark-start text:name="week"/>Monday<text:reference-mark-end text:name="week"/>
+    """
+    field_value = field.get_value('default')
+    value = self._toUnicodeString(field_value)
+    range_reference_xpath = '//text:reference-mark-start[@text:name="%s"]' % field.id
+    reference_list = element_tree.xpath(range_reference_xpath, namespaces=element_tree.nsmap)
+    if len(reference_list) is 0:
+      return element_tree
+    target_node = reference_list[0]
+    target_node.tail = value
+    for node in target_node.itersiblings():
+      end_tag_name = '{%s}reference-mark-end' % element_tree.nsmap['text']
+      name_attribute = '{%s}name' % element_tree.nsmap['text']
+      if node.tag == end_tag_name and node.get(name_attribute) == field.id:
+         break
+      node.tail = ''
+    return element_tree
+  
   def _replaceXmlByReportSection(self, element_tree=None, extra_context=None):
     if not extra_context.has_key('report_method') or extra_context['report_method'] is None:
       return element_tree
@@ -603,6 +633,12 @@
       column_span_list.append(column_span)
     return column_span_list
 
+  def _toUnicodeString(self, field_value = None):
+    value = ''
+    if field_value is not None:
+      value = unicode(str(field_value), 'utf-8')
+    return value
+
 class ODTStrategy(ODFStrategy):
   """ODTStrategy create a ODT Document from a form and a ODT template"""
   pass

Modified: erp5/trunk/products/ERP5OOo/tests/testFormPrintout.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5OOo/tests/testFormPrintout.py?rev=26361&r1=26360&r2=26361&view=diff
==============================================================================
--- erp5/trunk/products/ERP5OOo/tests/testFormPrintout.py [utf8] (original)
+++ erp5/trunk/products/ERP5OOo/tests/testFormPrintout.py [utf8] Thu Apr  9 05:27:48 2009
@@ -1,5 +1,5 @@
 ##############################################################################
-#
+# -*- coding: utf-8 -*-
 # Copyright (c) 2009 Nexedi KK and Contributors. All Rights Reserved.
 #                    Tatuya Kamada <tatuya at nexedi.com>
 #
@@ -162,6 +162,14 @@
     builder = OOoBuilder(odf_document)
     content_xml = builder.extract("content.xml")
     self.assertTrue(content_xml.find("call!") > 0)
+
+    # 5. Normal case: utf-8 string
+    test1.setTitle("Français")
+    odf_document = foo_printout() 
+    self.assertTrue(odf_document is not None)
+    builder = OOoBuilder(odf_document)
+    content_xml = builder.extract("content.xml")
+    self.assertTrue(content_xml.find("Français") > 0)
     
   def test_02_Table_01_Normal(self, run=run_all_test):
     """To test listbox and ODF table mapping

Modified: erp5/trunk/products/ERP5OOo/tests/test_document/Foo_001.odt
URL: http://svn.erp5.org/erp5/trunk/products/ERP5OOo/tests/test_document/Foo_001.odt?rev=26361&r1=26360&r2=26361&view=diff
==============================================================================
Binary files - no diff available.




More information about the Erp5-report mailing list