commit python-relatorio for openSUSE:Factory
Hello community, here is the log from the commit of package python-relatorio for openSUSE:Factory checked in at 2017-08-02 11:27:53 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-relatorio (Old) and /work/SRC/openSUSE:Factory/.python-relatorio.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "python-relatorio" Wed Aug 2 11:27:53 2017 rev:3 rq:513733 version:0.7.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-relatorio/python-relatorio.changes 2017-04-20 20:48:56.724971168 +0200 +++ /work/SRC/openSUSE:Factory/.python-relatorio.new/python-relatorio.changes 2017-08-02 11:27:54.172428201 +0200 @@ -1,0 +2,8 @@ +Sun Jul 30 18:53:12 UTC 2017 - axel.braun@gmx.de + +- Version 0.7.0 + * Replace hard-coded extensions by mimetypes guess + * Add more guess types: 'boolean', 'date', 'time' and 'void' + * Add support for Flat OpenDocument + +------------------------------------------------------------------- Old: ---- relatorio-0.6.4.tar.gz New: ---- relatorio-0.7.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-relatorio.spec ++++++ --- /var/tmp/diff_new_pack.eHgWlA/_old 2017-08-02 11:27:54.840333775 +0200 +++ /var/tmp/diff_new_pack.eHgWlA/_new 2017-08-02 11:27:54.844333209 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-relatorio # -# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # Copyright (c) 2016 Dr. Axel Braun # # All modifications and additions to the file contributed by third parties @@ -16,21 +16,22 @@ # Please submit bugfixes or comments via http://bugs.opensuse.org/ # + %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define mod_name relatorio Name: python-relatorio -Version: 0.6.4 +Version: 0.7.0 Release: 0 Summary: Python module to create reports from Python objects License: GPL-3.0+ Group: Productivity/Office/Management Url: https://pypi.python.org/pypi/relatorio Source: https://pypi.io/packages/source/r/%{mod_name}/%{mod_name}-%{version}.tar.gz -BuildRequires: python-rpm-macros BuildRequires: %{python_module Genshi} BuildRequires: %{python_module lxml} BuildRequires: %{python_module setuptools} +BuildRequires: python-rpm-macros Requires: python-PyYAML Requires: python-pycha BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -56,3 +57,4 @@ %doc README AUTHORS LICENSE %{python_sitelib}/* +%changelog ++++++ relatorio-0.6.4.tar.gz -> relatorio-0.7.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/relatorio-0.6.4/CHANGES new/relatorio-0.7.0/CHANGES --- old/relatorio-0.6.4/CHANGES 2016-12-18 14:32:18.000000000 +0100 +++ new/relatorio-0.7.0/CHANGES 2017-07-29 18:57:56.000000000 +0200 @@ -1,3 +1,8 @@ +0.7.0 - 20170729 +* Replace hard-coded extensions by mimetypes guess +* Add more guess types: 'boolean', 'date', 'time' and 'void' +* Add support for Flat OpenDocument + 0.6.4 - 20161218 * Use StringIO instead of BytesIO for TextSerializer result diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/relatorio-0.6.4/PKG-INFO new/relatorio-0.7.0/PKG-INFO --- old/relatorio-0.6.4/PKG-INFO 2016-12-18 14:33:43.000000000 +0100 +++ new/relatorio-0.7.0/PKG-INFO 2017-07-29 19:00:04.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: relatorio -Version: 0.6.4 +Version: 0.7.0 Summary: A templating library able to output odt and pdf files Home-page: http://relatorio.tryton.org/ Author: Cedric Krier diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/relatorio-0.6.4/doc/conf.py new/relatorio-0.7.0/doc/conf.py --- old/relatorio-0.6.4/doc/conf.py 2015-06-24 12:26:14.000000000 +0200 +++ new/relatorio-0.7.0/doc/conf.py 2017-07-13 17:27:10.000000000 +0200 @@ -48,9 +48,9 @@ # built documents. # # The short X.Y version. -version = '0.6' +version = '0.7' # The full version, including alpha/beta/rc tags. -release = '0.6.2' +release = '0.7.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/relatorio-0.6.4/doc/indepthexample.rst new/relatorio-0.7.0/doc/indepthexample.rst --- old/relatorio-0.6.4/doc/indepthexample.rst 2015-06-24 13:25:53.000000000 +0200 +++ new/relatorio-0.7.0/doc/indepthexample.rst 2017-07-13 17:27:10.000000000 +0200 @@ -25,7 +25,7 @@ from relatorio.templates.opendocument import Template - basic = Template(source=None, filepath='basic.odt') + basic = Template(source='', filepath='basic.odt') file('bonham_basic.odt', 'wb').write(basic.generate(o=inv).render().getvalue()) Notice that the dictionary passed to `generate` is used to bind names to make diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/relatorio-0.6.4/doc/quickexample.rst new/relatorio-0.7.0/doc/quickexample.rst --- old/relatorio-0.6.4/doc/quickexample.rst 2015-06-24 13:27:53.000000000 +0200 +++ new/relatorio-0.7.0/doc/quickexample.rst 2017-07-13 17:27:10.000000000 +0200 @@ -35,7 +35,7 @@ from relatorio.templates.opendocument import Template from data import bonham_invoice - basic = Template(source=None, filepath='basic.odt') + basic = Template(source='', filepath='basic.odt') basic_generated = basic.generate(o=bonham_invoice).render() file('bonham_basic.odt', 'wb').write(basic_generated.getvalue()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/relatorio-0.6.4/relatorio/__init__.py new/relatorio-0.7.0/relatorio/__init__.py --- old/relatorio-0.6.4/relatorio/__init__.py 2016-06-29 23:16:51.000000000 +0200 +++ new/relatorio-0.7.0/relatorio/__init__.py 2017-07-13 17:27:10.000000000 +0200 @@ -12,5 +12,5 @@ from .reporting import MIMETemplateLoader, ReportRepository, Report from . import templates -__version__ = '0.6.4' +__version__ = '0.7.0' __all__ = ['MIMETemplateLoader', 'ReportRepository', 'Report', 'templates'] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/relatorio-0.6.4/relatorio/templates/opendocument.py new/relatorio-0.7.0/relatorio/templates/opendocument.py --- old/relatorio-0.6.4/relatorio/templates/opendocument.py 2016-08-25 11:41:32.000000000 +0200 +++ new/relatorio-0.7.0/relatorio/templates/opendocument.py 2017-07-13 17:32:06.000000000 +0200 @@ -1,6 +1,6 @@ ############################################################################### # -# Copyright (c) 2009-2014 Cedric Krier. +# Copyright (c) 2009-2017 Cedric Krier. # Copyright (c) 2007, 2008 OpenHex SPRL. (http://openhex.com) All Rights # Reserved. # @@ -28,6 +28,8 @@ except ImportError: from md5 import md5 +import base64 +import mimetypes import time import urllib import zipfile @@ -74,14 +76,6 @@ 'with', ] -EXTENSIONS = {'image/png': 'png', - 'image/jpeg': 'jpg', - 'image/bmp': 'bmp', - 'image/gif': 'gif', - 'image/tiff': 'tif', - 'image/xbm': 'xbm', - } - RELATORIO_URI = 'relatorio' GENSHI_URI = 'http://genshi.edgewall.org/' MANIFEST = 'META-INF/manifest.xml' @@ -109,12 +103,6 @@ # parent node defines it. Unfortunately, lxml doesn't support this: # the nsmap attribute of Element objects is (currently) readonly. -def guess_type(val): - if isinstance(val, (str, unicode)): - return 'string' - elif isinstance(val, (int, float, long, Decimal)): - return 'float' - class OOTemplateError(genshi.template.base.TemplateSyntaxError): "Error to raise when there is a SyntaxError in the genshi template" @@ -139,7 +127,8 @@ bitstream.seek(0) file_content = bitstream.read() name = md5(file_content).hexdigest() - path = 'Pictures/%s.%s' % (name, EXTENSIONS[mimetype]) + path = 'Pictures/%s%s' % ( + name, mimetypes.guess_extension(mimetype)) if path not in self.zip.namelist(): self.zip.writestr(path, file_content) self.manifest.add_file_entry(path, mimetype) @@ -266,7 +255,7 @@ source = self.filepath self._source = source self.filepath = None # Prevent zip content in traceback - zf = zipfile.ZipFile(source) + zf = get_zip_file(source) content = zf.read('content.xml') styles = zf.read('styles.xml') @@ -408,13 +397,6 @@ table_row_tag = '{%s}table-row' % table_namespace table_cell_tag = '{%s}table-cell' % table_namespace - office_name = '{%s}value' % self.namespaces['office'] - office_valuetype = '{%s}value-type' % self.namespaces['office'] - if 'calcext' in self.namespaces: - calcext_valuetype = '{%s}value-type' % self.namespaces['calcext'] - else: - calcext_valuetype = None - py_replace = '{%s}replace' % GENSHI_URI r_statements, closing_tags = self._relatorio_statements(tree) @@ -492,8 +474,12 @@ r_node.getparent().remove(r_node) else: # It's not a genshi statement it's a python expression - parent = r_node.getparent().getparent() - if parent is None or parent.tag != table_cell_tag: + parent = r_node.getparent() + grand_parent = parent.getparent() + # Guess type only if it is the only value in the cell + if (grand_parent is None + or grand_parent.tag != table_cell_tag + ) or len(parent) != 1: r_node.attrib[py_replace] = expr continue @@ -502,20 +488,9 @@ cache_id) # The grand-parent tag is a table cell we should set the # correct value and type for this cell. - dico = ("{'%s': __relatorio_store_cache(%s, %s), " - "'%s': __relatorio_guess_type(" - "__relatorio_get_cache(%s))}") - update_py_attrs(parent, dico % - (office_name, cache_id, expr, office_valuetype, - cache_id)) - parent.attrib.pop(office_valuetype, None) - parent.attrib.pop(office_name, None) - if (calcext_valuetype and - parent.attrib.pop(calcext_valuetype, None)): - update_py_attrs(parent, - "{'%s': __relatorio_guess_type(" - "__relatorio_get_cache(%s))}" % - (calcext_valuetype, cache_id)) + dico = ('__relatorio_guess_type(' + '__relatorio_store_cache(%s, %s))') + update_py_attrs(parent, dico % (cache_id, expr)) def _handle_column_loops(self, statement, ancestor, opening, outer_o_node, outer_c_node): @@ -741,6 +716,41 @@ if element.text: element.text = element.text.replace(PREFIX, PREFIX * 2) + def _guess_type(self, val): + office_namespace = self.namespaces['office'] + types = {'boolean': '{%s}boolean-value' % office_namespace, + 'currency': '{%s}currency' % office_namespace, + 'date': '{%s}date-value' % office_namespace, + 'float': '{%s}value' % office_namespace, + 'percentage': '{%s}value' % office_namespace, + 'string': '{%s}string-value' % office_namespace, + 'time': '{%s}time-value' % office_namespace, + 'void': '{%s}value' % office_namespace, + } + attrs = dict.fromkeys(types) + # Missing base type for currency and percentage + if isinstance(val, bool): + type_ = 'boolean' + val = str(val).lower() + elif isinstance(val, datetime.date): + type_ = 'date' + val = val.date() + elif isinstance(val, (int, float, long, Decimal)): + type_ = 'float' + elif isinstance(val, basestring): + type_ = 'string' + elif isinstance(val, datetime.timedelta): + type_ = 'time' + val = 'P%sD%sS' % (val.days, val.seconds) + else: + type_ = 'void' + val = None + attrs[types[type_]] = val + attrs['{%s}value-type' % office_namespace] = type_ + if 'calcext' in self.namespaces: + attrs['{%s}value-type' % self.namespaces['calcext']] = type_ + return attrs + def generate(self, *args, **kwargs): "creates the RelatorioStream." serializer = OOSerializer(self._source) @@ -748,7 +758,7 @@ serializer.manifest, kwargs) kwargs['__relatorio_make_dimension'] = ImageDimension(self.namespaces) - kwargs['__relatorio_guess_type'] = guess_type + kwargs['__relatorio_guess_type'] = self._guess_type counter = ColumnCounter() kwargs['__relatorio_reset_col_count'] = counter.reset @@ -800,6 +810,85 @@ yield mark, (kind, data, pos) +def get_zip_file(source): + try: + return zipfile.ZipFile(source) + except zipfile.BadZipfile: + # ZipFile modify the position + if hasattr(source, 'seek'): + source.seek(0) + return zipfile.ZipFile(fod2od(source)) + + +def fod2od(source): + "Convert Flat OpenDocument to OpenDocument" + odt_io = BytesIO() + odt_zip = zipfile.ZipFile(odt_io, mode='w') + fodt_tree = lxml.etree.parse(source) + fodt_root = fodt_tree.getroot() + office_ns = fodt_root.nsmap['office'] + tag2files = { + '{%s}meta' % office_ns: ['meta'], + '{%s}settings' % office_ns: ['settings'], + '{%s}scripts' % office_ns: ['content'], + '{%s}font-face-decls' % office_ns: ['content', 'styles'], + '{%s}styles' % office_ns: ['styles'], + '{%s}automatic-styles' % office_ns: ['content', 'styles'], + '{%s}master-styles' % office_ns: ['styles'], + '{%s}body' % office_ns: ['content'], + } + mimetype = fodt_root.attrib['{%s}mimetype' % office_ns] + documents = {} + images = [] + for child in fodt_root: + for fname in tag2files[child.tag]: + document = documents.get(fname) + if document is None: + document = lxml.etree.Element( + '{%s}document-%s' % (office_ns, fname), + nsmap=fodt_root.nsmap) + documents[fname] = document + child = deepcopy(child) + images.extend(extract_images( + child, fodt_root.nsmap, start=len(images))) + document.append(child) + manifest = Manifest(b'''<?xml version="1.0" encoding="UTF-8"?> + <manifest:manifest + xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"/> + ''') + manifest.add_file_entry('/', mimetype) + for fname, document in documents.iteritems(): + document_string = lxml.etree.tostring(document, encoding='UTF-8', + xml_declaration=True) + odt_zip.writestr('%s.xml' % fname, document_string) + manifest.add_file_entry('%s.xml' % fname, 'text/xml') + for fname, data, mime_type in images: + odt_zip.writestr(fname, data) + manifest.add_file_entry(fname, mime_type) + odt_zip.writestr(MANIFEST, str(manifest)) + odt_zip.writestr('mimetype', mimetype) + return odt_io + + +def extract_images(child, namespaces, start=0): + "Extract draw:image with binary-data and replace by href" + import magic + images = [] + for i, image in enumerate( + child.xpath('//draw:image', namespaces=namespaces), start): + binary_data, = image.xpath( + './office:binary-data', namespaces=namespaces) + data = base64.b64decode(binary_data.text) + mime_type = magic.from_buffer(data, mime=True) + name = 'Pictures/image%s%s' % ( + i, mimetypes.guess_extension(mime_type)) + image.remove(binary_data) + xlink_ns = namespaces['xlink'] + image.attrib['{%s}href' % xlink_ns] = name + images.append((name, data, mime_type)) + return images + + class Manifest(object): def __init__(self, content): @@ -882,7 +971,7 @@ class OOSerializer: def __init__(self, source): - self.inzip = zipfile.ZipFile(source) + self.inzip = get_zip_file(source) self.manifest = Manifest(self.inzip.read(MANIFEST)) self.meta = Meta(self.inzip.read(META)) self.new_oo = BytesIO() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/relatorio-0.6.4/relatorio/tests/test.fodt new/relatorio-0.7.0/relatorio/tests/test.fodt --- old/relatorio-0.6.4/relatorio/tests/test.fodt 1970-01-01 01:00:00.000000000 +0100 +++ new/relatorio-0.7.0/relatorio/tests/test.fodt 2017-07-13 17:27:10.000000000 +0200 @@ -0,0 +1,744 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text"> + <office:meta> + <meta:generator>LibreOffice/5.1.4.2$OpenBSD_X86_64 LibreOffice_project/10m0$Build-2</meta:generator> + <meta:creation-date>2007-10-29T16:21:35</meta:creation-date> + + <dc:date>2016-11-01T21:50:57.076430449</dc:date> + <dc:language>en-US</dc:language> + <meta:editing-cycles>45</meta:editing-cycles> + <meta:editing-duration>PT1H1M</meta:editing-duration> + + + + + + <meta:document-statistic meta:table-count="1" meta:image-count="1" meta:object-count="0" meta:page-count="1" meta:paragraph-count="24" meta:word-count="77" meta:character-count="406" meta:non-whitespace-character-count="361"/><meta:user-defined meta:name="Info 1"/><meta:user-defined meta:name="Info 2"/><meta:user-defined meta:name="Info 3"/><meta:user-defined meta:name="Info 4"/></office:meta> + <office:settings> + <config:config-item-set config:name="ooo:view-settings"> + <config:config-item config:name="ViewAreaTop" config:type="long">6985</config:config-item> + <config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item> + <config:config-item config:name="ViewAreaWidth" config:type="long">33842</config:config-item> + <config:config-item config:name="ViewAreaHeight" config:type="long">15665</config:config-item> + <config:config-item config:name="ShowRedlineChanges" config:type="boolean">false</config:config-item> + <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item> + <config:config-item-map-indexed config:name="Views"> + <config:config-item-map-entry> + <config:config-item config:name="ViewId" config:type="string">view2</config:config-item> + <config:config-item config:name="ViewLeft" config:type="long">15404</config:config-item> + <config:config-item config:name="ViewTop" config:type="long">15139</config:config-item> + <config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item> + <config:config-item config:name="VisibleTop" config:type="long">6985</config:config-item> + <config:config-item config:name="VisibleRight" config:type="long">33840</config:config-item> + <config:config-item config:name="VisibleBottom" config:type="long">22648</config:config-item> + <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> + <config:config-item config:name="ViewLayoutColumns" config:type="short">1</config:config-item> + <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item> + <config:config-item config:name="ZoomFactor" config:type="short">100</config:config-item> + <config:config-item config:name="IsSelectedFrame" config:type="boolean">true</config:config-item> + </config:config-item-map-entry> + </config:config-item-map-indexed> + </config:config-item-set> + <config:config-item-set config:name="ooo:configuration-settings"> + <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item> + <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintFaxName" config:type="string"/> + <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintTextPlaceholder" config:type="boolean">false</config:config-item> + <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item> + <config:config-item config:name="TabOverMargin" config:type="boolean">false</config:config-item> + <config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item> + <config:config-item config:name="SurroundTextWrapSmall" config:type="boolean">false</config:config-item> + <config:config-item config:name="BackgroundParaOverDrawings" config:type="boolean">false</config:config-item> + <config:config-item config:name="ClippedPictures" config:type="boolean">false</config:config-item> + <config:config-item config:name="FloattableNomargins" config:type="boolean">false</config:config-item> + <config:config-item config:name="UnbreakableNumberings" config:type="boolean">false</config:config-item> + <config:config-item config:name="EmbedSystemFonts" config:type="boolean">false</config:config-item> + <config:config-item config:name="TabOverflow" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item> + <config:config-item config:name="SmallCapsPercentage66" config:type="boolean">true</config:config-item> + <config:config-item config:name="CollapseEmptyCellPara" config:type="boolean">true</config:config-item> + <config:config-item config:name="MathBaselineAlignment" config:type="boolean">false</config:config-item> + <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item> + <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrinterName" config:type="string"/> + <config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item> + <config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item> + <config:config-item config:name="UpdateFromTemplate" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item> + <config:config-item config:name="TableRowKeep" config:type="boolean">false</config:config-item> + <config:config-item config:name="EmbeddedDatabaseName" config:type="string"/> + <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" config:type="boolean">false</config:config-item> + <config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">false</config:config-item> + <config:config-item config:name="InvertBorderSpacing" config:type="boolean">false</config:config-item> + <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item> + <config:config-item config:name="TabsRelativeToIndent" config:type="boolean">true</config:config-item> + <config:config-item config:name="Rsid" config:type="int">1812695</config:config-item> + <config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintEmptyPages" config:type="boolean">true</config:config-item> + <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintHiddenText" config:type="boolean">false</config:config-item> + <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item> + <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item> + <config:config-item config:name="UseOldNumbering" config:type="boolean">false</config:config-item> + <config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item> + <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item> + <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item> + <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrinterIndependentLayout" config:type="string">high-resolution</config:config-item> + <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item> + <config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item> + <config:config-item config:name="AddVerticalFrameOffsets" config:type="boolean">false</config:config-item> + <config:config-item config:name="SubtractFlysAnchoredAtFlys" config:type="boolean">true</config:config-item> + <config:config-item config:name="AddParaSpacingToTableCells" config:type="boolean">true</config:config-item> + <config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item> + <config:config-item config:name="CurrentDatabaseDataSource" config:type="string"/> + <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item> + <config:config-item config:name="ProtectForm" config:type="boolean">false</config:config-item> + <config:config-item config:name="UseFormerLineSpacing" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item> + <config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item> + <config:config-item config:name="UnxForceZeroExtLeading" config:type="boolean">false</config:config-item> + <config:config-item config:name="TabAtLeftIndentForParagraphsInList" config:type="boolean">false</config:config-item> + <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/> + <config:config-item config:name="PropLineSpacingShrinksFirstLine" config:type="boolean">false</config:config-item> + <config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item> + <config:config-item config:name="RsidRoot" config:type="int">1812695</config:config-item> + <config:config-item config:name="StylesNoDefault" config:type="boolean">false</config:config-item> + <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item> + <config:config-item config:name="AlignTabStopPosition" config:type="boolean">true</config:config-item> + <config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item> + <config:config-item config:name="DoNotResetParaAttrsForNumFont" config:type="boolean">false</config:config-item> + <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item> + <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item> + <config:config-item config:name="DoNotCaptureDrawObjsOnPage" config:type="boolean">false</config:config-item> + <config:config-item config:name="CurrentDatabaseCommand" config:type="string"/> + <config:config-item config:name="PrinterSetup" config:type="base64Binary"/> + <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" config:type="boolean">false</config:config-item> + </config:config-item-set> + </office:settings> + <office:scripts> + <office:script script:language="ooo:Basic"> + <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/> + </office:script> + </office:scripts> + <office:font-face-decls> + <style:font-face style:name="StarSymbol" svg:font-family="StarSymbol"/> + <style:font-face style:name="Noto Sans Devanagari1" svg:font-family="'Noto Sans Devanagari'" style:font-family-generic="swiss"/> + <style:font-face style:name="Bitstream Vera Sans" svg:font-family="'Bitstream Vera Sans'" style:font-family-generic="roman" style:font-pitch="variable"/> + <style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/> + <style:font-face style:name="Bitstream Vera Sans1" svg:font-family="'Bitstream Vera Sans'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="DejaVu Sans" svg:font-family="'DejaVu Sans'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Noto Sans Devanagari" svg:font-family="'Noto Sans Devanagari'" style:font-family-generic="system" style:font-pitch="variable"/> + </office:font-face-decls> + <office:styles> + <style:default-style style:family="graphic"> + <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="3mm" draw:shadow-offset-y="3mm" draw:start-line-spacing-horizontal="2.83mm" draw:start-line-spacing-vertical="2.83mm" draw:end-line-spacing-horizontal="2.83mm" draw:end-line-spacing-vertical="2.83mm" style:flow-with-text="true"/> + <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false"> + <style:tab-stops/> + </style:paragraph-properties> + <style:text-properties fo:color="#000000" style:font-name="Bitstream Vera Sans" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Bitstream Vera Sans1" style:font-size-asian="12pt" style:language-asian="en" style:country-asian="US" style:font-name-complex="Bitstream Vera Sans1" style:font-size-complex="12pt" style:language-complex="en" style:country-complex="US"/> + </style:default-style> + <style:default-style style:family="paragraph"> + <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="20mm" style:writing-mode="lr-tb"/> + <style:text-properties fo:color="#000000" style:font-name="Bitstream Vera Sans" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Bitstream Vera Sans1" style:font-size-asian="12pt" style:language-asian="en" style:country-asian="US" style:font-name-complex="Bitstream Vera Sans1" style:font-size-complex="12pt" style:language-complex="en" style:country-complex="US" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/> + </style:default-style> + <style:default-style style:family="table"> + <style:table-properties table:border-model="separating"/> + </style:default-style> + <style:default-style style:family="table-row"> + <style:table-row-properties fo:keep-together="auto"/> + </style:default-style> + <style:style style:name="Standard" style:family="paragraph" style:class="text"/> + <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text"> + <style:paragraph-properties fo:margin-top="4.23mm" fo:margin-bottom="2.12mm" loext:contextual-spacing="false" fo:keep-with-next="always"/> + <style:text-properties style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="14pt" style:font-name-asian="DejaVu Sans" style:font-family-asian="'DejaVu Sans'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="14pt" style:font-name-complex="Noto Sans Devanagari" style:font-family-complex="'Noto Sans Devanagari'" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="14pt"/> + </style:style> + <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text"> + <style:paragraph-properties fo:margin-top="0mm" fo:margin-bottom="2.12mm" loext:contextual-spacing="false"/> + </style:style> + <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list"> + <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Noto Sans Devanagari1" style:font-family-complex="'Noto Sans Devanagari'" style:font-family-generic-complex="swiss"/> + </style:style> + <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties fo:margin-top="2.12mm" fo:margin-bottom="2.12mm" loext:contextual-spacing="false" text:number-lines="false" text:line-number="0"/> + <style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-name-complex="Noto Sans Devanagari1" style:font-family-complex="'Noto Sans Devanagari'" style:font-family-generic-complex="swiss" style:font-size-complex="12pt" style:font-style-complex="italic"/> + </style:style> + <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index"> + <style:paragraph-properties text:number-lines="false" text:line-number="0"/> + <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Noto Sans Devanagari1" style:font-family-complex="'Noto Sans Devanagari'" style:font-family-generic-complex="swiss"/> + </style:style> + <style:style style:name="Table_20_Contents" style:display-name="Table Contents" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties text:number-lines="false" text:line-number="0"/> + </style:style> + <style:style style:name="Table_20_Heading" style:display-name="Table Heading" style:family="paragraph" style:parent-style-name="Table_20_Contents" style:class="extra"> + <style:paragraph-properties fo:text-align="center" style:justify-single-word="false" text:number-lines="false" text:line-number="0"/> + <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="Footer" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> + <style:paragraph-properties text:number-lines="false" text:line-number="0"> + <style:tab-stops> + <style:tab-stop style:position="-20.02mm" style:type="right"/> + <style:tab-stop style:position="-9.98mm" style:type="center"/> + </style:tab-stops> + </style:paragraph-properties> + </style:style> + <style:style style:name="Frame_20_contents" style:display-name="Frame contents" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="extra"/> + <style:style style:name="Numbering_20_Symbols" style:display-name="Numbering Symbols" style:family="text"/> + <style:style style:name="Bullet_20_Symbols" style:display-name="Bullet Symbols" style:family="text"> + <style:text-properties style:font-name="StarSymbol" fo:font-family="StarSymbol" fo:font-size="9pt" style:font-name-asian="StarSymbol" style:font-family-asian="StarSymbol" style:font-size-asian="9pt" style:font-name-complex="StarSymbol" style:font-family-complex="StarSymbol" style:font-size-complex="9pt"/> + </style:style> + <style:style style:name="Placeholder" style:family="text"> + <style:text-properties fo:font-variant="small-caps" fo:color="#008080" style:text-underline-style="dotted" style:text-underline-width="auto" style:text-underline-color="font-color"/> + </style:style> + <style:style style:name="Internet_20_link" style:display-name="Internet link" style:family="text"> + <style:text-properties fo:color="#000080" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color"/> + </style:style> + <style:style style:name="Frame" style:family="graphic"> + <style:graphic-properties text:anchor-type="paragraph" svg:x="0mm" svg:y="0mm" fo:margin-left="2.01mm" fo:margin-right="2.01mm" fo:margin-top="2.01mm" fo:margin-bottom="2.01mm" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="paragraph-content" style:horizontal-pos="center" style:horizontal-rel="paragraph-content" fo:padding="1.5mm" fo:border="0.06pt solid #000000"/> + </style:style> + <style:style style:name="Graphics" style:family="graphic"> + <style:graphic-properties text:anchor-type="paragraph" svg:x="0mm" svg:y="0mm" style:wrap="dynamic" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph"/> + </style:style> + <text:outline-style style:name="Outline"> + <text:outline-level-style text:level="1" style:num-format=""> + <style:list-level-properties text:min-label-distance="3.81mm"/> + </text:outline-level-style> + <text:outline-level-style text:level="2" style:num-format=""> + <style:list-level-properties text:min-label-distance="3.81mm"/> + </text:outline-level-style> + <text:outline-level-style text:level="3" style:num-format=""> + <style:list-level-properties text:min-label-distance="3.81mm"/> + </text:outline-level-style> + <text:outline-level-style text:level="4" style:num-format=""> + <style:list-level-properties text:min-label-distance="3.81mm"/> + </text:outline-level-style> + <text:outline-level-style text:level="5" style:num-format=""> + <style:list-level-properties text:min-label-distance="3.81mm"/> + </text:outline-level-style> + <text:outline-level-style text:level="6" style:num-format=""> + <style:list-level-properties text:min-label-distance="3.81mm"/> + </text:outline-level-style> + <text:outline-level-style text:level="7" style:num-format=""> + <style:list-level-properties text:min-label-distance="3.81mm"/> + </text:outline-level-style> + <text:outline-level-style text:level="8" style:num-format=""> + <style:list-level-properties text:min-label-distance="3.81mm"/> + </text:outline-level-style> + <text:outline-level-style text:level="9" style:num-format=""> + <style:list-level-properties text:min-label-distance="3.81mm"/> + </text:outline-level-style> + <text:outline-level-style text:level="10" style:num-format=""> + <style:list-level-properties text:min-label-distance="3.81mm"/> + </text:outline-level-style> + </text:outline-style> + <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/> + <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/> + <text:linenumbering-configuration text:number-lines="false" text:offset="4.99mm" style:num-format="1" text:number-position="left" text:increment="5"/> + </office:styles> + <office:automatic-styles> + <style:style style:name="Table1" style:family="table"> + <style:table-properties style:width="103.21mm" table:align="center"/> + </style:style> + <style:style style:name="Table1.A" style:family="table-column"> + <style:table-column-properties style:column-width="50.82mm"/> + </style:style> + <style:style style:name="Table1.B" style:family="table-column"> + <style:table-column-properties style:column-width="52.39mm"/> + </style:style> + <style:style style:name="Table1.A1" style:family="table-cell"> + <style:table-cell-properties fo:padding="0.97mm" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="0.05pt solid #000000" fo:border-bottom="0.05pt solid #000000"/> + </style:style> + <style:style style:name="Table1.B1" style:family="table-cell"> + <style:table-cell-properties fo:padding="0.97mm" fo:border="0.05pt solid #000000"/> + </style:style> + <style:style style:name="Table1.A2" style:family="table-cell"> + <style:table-cell-properties fo:padding="0.97mm" fo:border-left="0.05pt solid #000000" fo:border-right="0.05pt solid #000000" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/> + </style:style> + <style:style style:name="Table1.A3" style:family="table-cell"> + <style:table-cell-properties fo:padding="0.97mm" fo:border-left="0.05pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.05pt solid #000000"/> + </style:style> + <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard"> + <style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/> + </style:style> + <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Frame_20_contents"> + <style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/> + </style:style> + <style:style style:name="P3" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="L1"> + <style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/> + </style:style> + <style:style style:name="P4" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="L2"> + <style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/> + </style:style> + <style:style style:name="P5" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="L3"> + <style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/> + </style:style> + <style:style style:name="T1" style:family="text"/> + <style:style style:name="T2" style:family="text"> + <style:text-properties fo:font-weight="normal" style:font-weight-asian="normal" style:font-weight-complex="normal"/> + </style:style> + <style:style style:name="T3" style:family="text"> + <style:text-properties fo:font-style="normal" fo:font-weight="normal" fo:background-color="transparent" loext:char-shading-value="0" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-style-complex="normal" style:font-weight-complex="normal"/> + </style:style> + <style:style style:name="fr1" style:family="graphic" style:parent-style-name="Frame"> + <style:graphic-properties style:vertical-pos="top" style:vertical-rel="paragraph-content" style:horizontal-pos="center" style:horizontal-rel="paragraph"/> + </style:style> + <style:style style:name="fr2" style:family="graphic" style:parent-style-name="Frame"> + <style:graphic-properties style:vertical-pos="top" style:vertical-rel="baseline" style:horizontal-pos="center" style:horizontal-rel="paragraph"/> + </style:style> + <style:style style:name="fr3" style:family="graphic" style:parent-style-name="Graphics"> + <style:graphic-properties style:wrap="none" style:horizontal-pos="center" style:horizontal-rel="paragraph" style:mirror="none" fo:clip="rect(0mm, 0mm, 0mm, 0mm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="100%" draw:color-inversion="false" draw:image-opacity="100%" draw:color-mode="standard"/> + </style:style> + <text:list-style style:name="L1"> + <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" text:bullet-char="●"> + <style:list-level-properties text:space-before="6.35mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + <text:list-level-style-bullet text:level="2" text:style-name="Bullet_20_Symbols" text:bullet-char="○"> + <style:list-level-properties text:space-before="12.7mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + <text:list-level-style-bullet text:level="3" text:style-name="Bullet_20_Symbols" text:bullet-char="■"> + <style:list-level-properties text:space-before="19.05mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + <text:list-level-style-bullet text:level="4" text:style-name="Bullet_20_Symbols" text:bullet-char="●"> + <style:list-level-properties text:space-before="25.4mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + <text:list-level-style-bullet text:level="5" text:style-name="Bullet_20_Symbols" text:bullet-char="○"> + <style:list-level-properties text:space-before="31.75mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + <text:list-level-style-bullet text:level="6" text:style-name="Bullet_20_Symbols" text:bullet-char="■"> + <style:list-level-properties text:space-before="38.1mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + <text:list-level-style-bullet text:level="7" text:style-name="Bullet_20_Symbols" text:bullet-char="●"> + <style:list-level-properties text:space-before="44.45mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + <text:list-level-style-bullet text:level="8" text:style-name="Bullet_20_Symbols" text:bullet-char="○"> + <style:list-level-properties text:space-before="50.8mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + <text:list-level-style-bullet text:level="9" text:style-name="Bullet_20_Symbols" text:bullet-char="■"> + <style:list-level-properties text:space-before="57.15mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + <text:list-level-style-bullet text:level="10" text:style-name="Bullet_20_Symbols" text:bullet-char="●"> + <style:list-level-properties text:space-before="63.5mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + </text:list-style> + <text:list-style style:name="L2"> + <text:list-level-style-number text:level="1" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="6.35mm" text:min-label-width="6.35mm"/> + </text:list-level-style-number> + <text:list-level-style-number text:level="2" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="12.7mm" text:min-label-width="6.35mm"/> + </text:list-level-style-number> + <text:list-level-style-number text:level="3" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="19.05mm" text:min-label-width="6.35mm"/> + </text:list-level-style-number> + <text:list-level-style-number text:level="4" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="25.4mm" text:min-label-width="6.35mm"/> + </text:list-level-style-number> + <text:list-level-style-number text:level="5" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="31.75mm" text:min-label-width="6.35mm"/> + </text:list-level-style-number> + <text:list-level-style-number text:level="6" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="38.1mm" text:min-label-width="6.35mm"/> + </text:list-level-style-number> + <text:list-level-style-number text:level="7" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="44.45mm" text:min-label-width="6.35mm"/> + </text:list-level-style-number> + <text:list-level-style-number text:level="8" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="50.8mm" text:min-label-width="6.35mm"/> + </text:list-level-style-number> + <text:list-level-style-number text:level="9" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="57.15mm" text:min-label-width="6.35mm"/> + </text:list-level-style-number> + <text:list-level-style-number text:level="10" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1"> + <style:list-level-properties text:space-before="63.5mm" text:min-label-width="6.35mm"/> + </text:list-level-style-number> + </text:list-style> + <text:list-style style:name="L3"> + <text:list-level-style-bullet text:level="1" text:style-name="Bullet_20_Symbols" text:bullet-char="●"> + <style:list-level-properties text:space-before="6.35mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + <text:list-level-style-bullet text:level="2" text:style-name="Bullet_20_Symbols" text:bullet-char="○"> + <style:list-level-properties text:space-before="12.7mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + <text:list-level-style-bullet text:level="3" text:style-name="Bullet_20_Symbols" text:bullet-char="■"> + <style:list-level-properties text:space-before="19.05mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + <text:list-level-style-bullet text:level="4" text:style-name="Bullet_20_Symbols" text:bullet-char="●"> + <style:list-level-properties text:space-before="25.4mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + <text:list-level-style-bullet text:level="5" text:style-name="Bullet_20_Symbols" text:bullet-char="○"> + <style:list-level-properties text:space-before="31.75mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + <text:list-level-style-bullet text:level="6" text:style-name="Bullet_20_Symbols" text:bullet-char="■"> + <style:list-level-properties text:space-before="38.1mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + <text:list-level-style-bullet text:level="7" text:style-name="Bullet_20_Symbols" text:bullet-char="●"> + <style:list-level-properties text:space-before="44.45mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + <text:list-level-style-bullet text:level="8" text:style-name="Bullet_20_Symbols" text:bullet-char="○"> + <style:list-level-properties text:space-before="50.8mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + <text:list-level-style-bullet text:level="9" text:style-name="Bullet_20_Symbols" text:bullet-char="■"> + <style:list-level-properties text:space-before="57.15mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + <text:list-level-style-bullet text:level="10" text:style-name="Bullet_20_Symbols" text:bullet-char="●"> + <style:list-level-properties text:space-before="63.5mm" text:min-label-width="6.35mm"/> + <style:text-properties style:font-name="StarSymbol"/> + </text:list-level-style-bullet> + </text:list-style> + <style:page-layout style:name="pm1"> + <style:page-layout-properties fo:page-width="209.99mm" fo:page-height="296.99mm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="20mm" fo:margin-bottom="20mm" fo:margin-left="20mm" fo:margin-right="20mm" style:writing-mode="lr-tb" style:footnote-max-height="0mm"> + <style:footnote-sep style:width="0.18mm" style:distance-before-sep="1.01mm" style:distance-after-sep="1.01mm" style:line-style="none" style:adjustment="left" style:rel-width="25%" style:color="#000000"/> + </style:page-layout-properties> + <style:header-style/> + <style:footer-style> + <style:header-footer-properties fo:min-height="4.99mm" fo:margin-left="0mm" fo:margin-right="0mm" fo:margin-top="0mm"/> + </style:footer-style> + </style:page-layout> + </office:automatic-styles> + <office:master-styles> + <style:master-page style:name="Standard" style:page-layout-name="pm1"> + <style:footer> + <text:p text:style-name="Footer"><text:a xlink:type="simple" xlink:href="relatorio://footer" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">footer</text:a></text:p> + </style:footer> + </style:master-page> + </office:master-styles> + <office:body> + <office:text> + <office:forms form:automatic-focus="false" form:apply-design-mode="false"/> + <text:sequence-decls> + <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/> + <text:sequence-decl text:display-outline-level="0" text:name="Table"/> + <text:sequence-decl text:display-outline-level="0" text:name="Text"/> + <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/> + </text:sequence-decls> + <text:p text:style-name="Standard">Bonjour,</text:p> + <text:p text:style-name="Standard">Je suis un test de templating en odt.</text:p> + <text:p text:style-name="Standard">Je m'appelle : <text:a xlink:type="simple" xlink:href="relatorio://first_name" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link"><text:span text:style-name="T3">first_name</text:span></text:a><text:span text:style-name="T3"> </text:span><text:span text:style-name="T3"><text:placeholder text:placeholder-type="text"><last_name></text:placeholder></text:span><text:span text:style-name="T2">. J'habite à </text:span><text:span text:style-name="T2"><text:placeholder text:placeholder-type="text"><ville></text:placeholder></text:span><text:span text:style-name="T2">.</text:span></text:p> + <text:p text:style-name="Standard"/> + <text:p text:style-name="Standard">Mes collègues sont:</text:p> + <table:table table:name="Table1" table:style-name="Table1"> + <table:table-column table:style-name="Table1.A"/> + <table:table-column table:style-name="Table1.B"/> + <table:table-header-rows> + <table:table-row> + <table:table-cell table:style-name="Table1.A1" office:value-type="string"> + <text:p text:style-name="Table_20_Heading">Prénom</text:p> + </table:table-cell> + <table:table-cell table:style-name="Table1.B1" office:value-type="string"> + <text:p text:style-name="Table_20_Heading">Nom</text:p> + </table:table-cell> + </table:table-row> + </table:table-header-rows> + <table:table-row> + <table:table-cell table:style-name="Table1.A2" table:number-columns-spanned="2" office:value-type="string"> + <text:p text:style-name="Standard"><text:a xlink:type="simple" xlink:href="relatorio://for%20each=%22f%20in%20friends%22" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">for each="f in friends"</text:a></text:p> + </table:table-cell> + <table:covered-table-cell/> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Table1.A3" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"><text:a xlink:type="simple" xlink:href="relatorio://f.first_name" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">f.first_name</text:a></text:p> + </table:table-cell> + <table:table-cell table:style-name="Table1.A2" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"><text:placeholder text:placeholder-type="text"><f.last_name></text:placeholder></text:p> + </table:table-cell> + </table:table-row> + <table:table-row> + <table:table-cell table:style-name="Table1.A2" table:number-columns-spanned="2" office:value-type="string"> + <text:p text:style-name="Table_20_Contents"><text:a xlink:type="simple" xlink:href="relatorio:///for" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">/for</text:a></text:p> + </table:table-cell> + <table:covered-table-cell/> + </table:table-row> + </table:table> + <text:p text:style-name="P1"/> + <text:p text:style-name="P1">J'ai aussi des hobbies:</text:p> + <text:list xml:id="list7886922533460062764" text:style-name="L1"> + <text:list-item> + <text:p text:style-name="P3"><text:a xlink:type="simple" xlink:href="relatorio://for%20each=%22h%20in%20hobbies%22" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">for each="h in hobbies"</text:a></text:p> + </text:list-item> + <text:list-item> + <text:p text:style-name="P3"><text:a xlink:type="simple" xlink:href="relatorio://h" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">h</text:a></text:p> + </text:list-item> + <text:list-item> + <text:p text:style-name="P3"><text:a xlink:type="simple" xlink:href="relatorio:///for" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">/for</text:a></text:p> + </text:list-item> + </text:list> + <text:p text:style-name="P1"/> + <text:p text:style-name="P1">Et j'ai même des animaux :</text:p> + <text:list xml:id="list8457721859695998066" text:style-name="L2"> + <text:list-item> + <text:p text:style-name="P4"><text:a xlink:type="simple" xlink:href="relatorio://for%20each=%22animal%20in%20animals%22" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">for each="animal in animals"</text:a></text:p> + </text:list-item> + <text:list-item> + <text:p text:style-name="P4"><text:placeholder text:placeholder-type="text"><animal></text:placeholder></text:p> + </text:list-item> + <text:list-item> + <text:p text:style-name="P4"><text:a xlink:type="simple" xlink:href="relatorio:///for" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">/for</text:a></text:p> + </text:list-item> + </text:list> + <text:p text:style-name="P1"/> + <text:p text:style-name="P1">On peut aussi afficher des images:</text:p> + <text:p text:style-name="P1"/> + <text:p text:style-name="P1"><draw:frame draw:style-name="fr1" draw:name="image: (oeuf, 'image/png')" text:anchor-type="paragraph" svg:width="20mm" draw:z-index="1"> + <draw:text-box fo:min-height="4.99mm"> + <text:p text:style-name="P2"/> + </draw:text-box> + </draw:frame></text:p> + <text:p text:style-name="P1"/> + <text:p text:style-name="P1"><draw:frame draw:style-name="fr3" draw:name="Image1" text:anchor-type="paragraph" svg:width="30.32mm" svg:height="44.43mm" draw:z-index="2"><draw:image> + <office:binary-data>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 + </office:binary-data> + </draw:image> + </draw:frame></text:p> + <text:p text:style-name="P1">Et aussi dans des boucles:</text:p> + <text:list xml:id="list985105091880368092" text:style-name="L3"> + <text:list-item> + <text:p text:style-name="P5"><text:a xlink:type="simple" xlink:href="relatorio://for%20each=%22img%20in%20images%22" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">for each="img in images"</text:a></text:p> + </text:list-item> + <text:list-item> + <text:p text:style-name="P5"><draw:frame draw:style-name="fr2" draw:name="image: img" text:anchor-type="as-char" svg:width="17.32mm" svg:height="15.13mm" draw:z-index="0"> + <draw:text-box> + <text:p text:style-name="P2"/> + </draw:text-box> + </draw:frame></text:p> + </text:list-item> + <text:list-item> + <text:p text:style-name="P5"><text:a xlink:type="simple" xlink:href="relatorio:///for" text:style-name="Internet_20_link" text:visited-style-name="Visited_20_Internet_20_Link">/for</text:a></text:p> + </text:list-item> + </text:list> + </office:text> + </office:body> +</office:document> \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/relatorio-0.6.4/relatorio/tests/test_odt.py new/relatorio-0.7.0/relatorio/tests/test_odt.py --- old/relatorio-0.6.4/relatorio/tests/test_odt.py 2015-05-08 12:00:11.000000000 +0200 +++ new/relatorio-0.7.0/relatorio/tests/test_odt.py 2017-07-13 17:27:10.000000000 +0200 @@ -1,7 +1,7 @@ # -*- encoding: utf-8 -*- ############################################################################### # -# Copyright (c) 2014 Cedric Krier. +# Copyright (c) 2014-2017 Cedric Krier. # Copyright (c) 2007, 2008 OpenHex SPRL. (http://openhex.com) All Rights # Reserved. # @@ -31,7 +31,7 @@ from genshi.template.eval import UndefinedError from relatorio.templates.opendocument import Template, GENSHI_EXPR,\ - GENSHI_URI, RELATORIO_URI + GENSHI_URI, RELATORIO_URI, fod2od OO_TABLE_NS = "urn:oasis:names:tc:opendocument:xmlns:table:1.0" @@ -59,7 +59,8 @@ def setUp(self): thisdir = os.path.dirname(__file__) filepath = os.path.join(thisdir, 'test.odt') - self.oot = Template(open(filepath, mode='rb')) + self._source = open(filepath, mode='rb') + self.oot = Template(self._source) self.data = {'first_name': u'Trente', 'last_name': u'Møller', 'ville': u'Liège', @@ -76,6 +77,12 @@ 'oeuf': open(os.path.join(thisdir, 'egg.jpg'), 'rb'), 'footer': u'We sell stuff'} + def tearDown(self): + self._source.close() + for image in self.data['images']: + image[0].close() + self.data['oeuf'].close() + def test_init(self): "Testing the correct handling of the styles.xml and content.xml files" self.assertTrue(isinstance(self.oot.stream, list)) @@ -318,3 +325,17 @@ # another non matching expr group = GENSHI_EXPR.match('formatLang("en")').groups() self.assertEqual(group, (None, None, None, None)) + + def test_fodt2odt(self): + "Testing converter fodt to odt" + thisdir = os.path.dirname(__file__) + filepath = os.path.join(thisdir, 'test.fodt') + fod2od(filepath) + + def test_generate_fod(self): + "Testing generate fod" + thisdir = os.path.dirname(__file__) + filepath = os.path.join(thisdir, 'test.fodt') + with open(filepath, mode='rb') as source: + oot = Template(source) + oot.generate(**self.data) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/relatorio-0.6.4/relatorio.egg-info/PKG-INFO new/relatorio-0.7.0/relatorio.egg-info/PKG-INFO --- old/relatorio-0.6.4/relatorio.egg-info/PKG-INFO 2016-12-18 14:33:38.000000000 +0100 +++ new/relatorio-0.7.0/relatorio.egg-info/PKG-INFO 2017-07-29 19:00:00.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: relatorio -Version: 0.6.4 +Version: 0.7.0 Summary: A templating library able to output odt and pdf files Home-page: http://relatorio.tryton.org/ Author: Cedric Krier diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/relatorio-0.6.4/relatorio.egg-info/SOURCES.txt new/relatorio-0.7.0/relatorio.egg-info/SOURCES.txt --- old/relatorio-0.6.4/relatorio.egg-info/SOURCES.txt 2016-12-18 14:33:39.000000000 +0100 +++ new/relatorio-0.7.0/relatorio.egg-info/SOURCES.txt 2017-07-29 19:00:00.000000000 +0200 @@ -37,6 +37,7 @@ relatorio/tests/__init__.py relatorio/tests/egg.jpg relatorio/tests/one.jpg +relatorio/tests/test.fodt relatorio/tests/test.odt relatorio/tests/test_api.py relatorio/tests/test_odt.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/relatorio-0.6.4/relatorio.egg-info/requires.txt new/relatorio-0.7.0/relatorio.egg-info/requires.txt --- old/relatorio-0.6.4/relatorio.egg-info/requires.txt 2016-12-18 14:33:38.000000000 +0100 +++ new/relatorio-0.7.0/relatorio.egg-info/requires.txt 2017-07-29 19:00:00.000000000 +0200 @@ -4,3 +4,6 @@ [chart] pycha >= 0.4.0 pyyaml + +[fodt] +python-magic diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/relatorio-0.6.4/setup.cfg new/relatorio-0.7.0/setup.cfg --- old/relatorio-0.6.4/setup.cfg 2016-12-18 14:33:43.000000000 +0100 +++ new/relatorio-0.7.0/setup.cfg 2017-07-29 19:00:04.000000000 +0200 @@ -1,5 +1,4 @@ [egg_info] tag_build = tag_date = 0 -tag_svn_revision = 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/relatorio-0.6.4/setup.py new/relatorio-0.7.0/setup.py --- old/relatorio-0.6.4/setup.py 2016-06-14 11:45:28.000000000 +0200 +++ new/relatorio-0.7.0/setup.py 2017-07-13 17:27:10.000000000 +0200 @@ -3,6 +3,7 @@ import codecs from setuptools import setup, find_packages + def read(fname): return codecs.open( os.path.join(os.path.dirname(__file__), fname), 'r', 'utf-8').read() @@ -26,7 +27,8 @@ version=get_version(), packages=find_packages(exclude=['examples']), package_data={ - 'relatorio.tests': ['*.jpg', '*.odt', '*.png', 'templates/*.tmpl'], + 'relatorio.tests': [ + '*.jpg', '*.odt', '*.fodt', '*.png', 'templates/*.tmpl'], }, install_requires=[ "Genshi >= 0.5", @@ -34,6 +36,7 @@ ], extras_require={ 'chart': ['pycha >= 0.4.0', 'pyyaml'], # pycairo + 'fodt': ['python-magic'], }, classifiers=[ "Development Status :: 4 - Beta", @@ -46,4 +49,5 @@ "Topic :: Text Processing", ], test_suite="relatorio.tests", + tests_require=['python-magic'], use_2to3=True)
participants (1)
-
root@hilbert.suse.de