WIP: Support control characters in odf syles
if for some reason an ERP5 document has some control characters in title of description and is exported in ODS/ODT, the export will fail with an etree error like this:
Exception:
Module Products.CMFActivity.ActivityTool, line 356, in __call__
result = method(*self.args, **self.kw)
Module Products.ERP5Type.patches.PythonScript, line 179, in __call__
return self._orig_bindAndExec(args, kw, None)
Module Shared.DC.Scripts.Bindings, line 359, in _bindAndExec
return self._exec(bound_data, args, kw)
Module Products.PythonScripts.PythonScript, line 344, in _exec
result = f(*args, **kw)
Module script, line 15, in Base_renderSimpleView
- <PythonScript at /erp5/Base_renderSimpleView used for /erp5/sale_packing_list_module>
- Line 15
report_data = getattr(context, deferred_style_dialog_method)(**params)
Module AccessControl.ZopeGuards, line 369, in guarded_apply
return builtin_guarded_apply(func, args, kws)
Module AccessControl.ZopeGuards, line 391, in builtin_guarded_apply
return func(*arglist, **argdict)
Module Products.ERP5Form.Form, line 705, in __call__
return pt.pt_render(extra_context=extra_context)
Module Products.ERP5OOo.OOoTemplate, line 484, in pt_render
extra_context, request)
Module Products.ERP5OOo.OOoTemplate, line 422, in renderIncludes
xml_doc = etree.XML(text)
Module lxml.etree, line 3192, in lxml.etree.XML (src/lxml/lxml.etree.c:78763)
Module lxml.etree, line 1848, in lxml.etree._parseMemoryDocument (src/lxml/lxml.etree.c:118341)
Module lxml.etree, line 1736, in lxml.etree._parseDoc (src/lxml/lxml.etree.c:117021)
Module lxml.etree, line 1102, in lxml.etree._BaseParser._parseDoc (src/lxml/lxml.etree.c:111265)
Module lxml.etree, line 595, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:105109)
Module lxml.etree, line 706, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:106817)
Module lxml.etree, line 635, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:105671)
XMLSyntaxError: PCDATA invalid Char value 20, line 228761, column 21 (line 228761)
This is because XML does not accept the full range of characters, there are a few characters that are not allowed.
The approach here is to make ods and odt style rely more on field to build the ODF fragments, rather than doing everything in the page template. This way we can do the "sanitization" in a central place.