diff options
Diffstat (limited to 'old')
| -rw-r--r-- | old/__init__.py | 0 | ||||
| -rw-r--r-- | old/ooo_replace.py | 249 | ||||
| -rw-r--r-- | old/ooo_translation.py | 38 | 
3 files changed, 0 insertions, 287 deletions
| diff --git a/old/__init__.py b/old/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/old/__init__.py +++ /dev/null diff --git a/old/ooo_replace.py b/old/ooo_replace.py deleted file mode 100644 index cff5c2acc..000000000 --- a/old/ooo_replace.py +++ /dev/null @@ -1,249 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# Copyright (C) 2013-2015 Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet> - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -# GNU Affero General Public License for more details. - -# You should have received a copy of the GNU Affero General Public License -# along with this program.  If not, see <http://www.gnu.org/licenses/>. - -# See the file COPYING for details. - -import locale -import re -from zipfile import ZipFile, ZIP_DEFLATED -from cStringIO import StringIO -from xml.etree.cElementTree import ElementTree, fromstring, register_namespace - -from django.conf import settings -from ooo_translation import ooo_translation - - -def translate_context(context, locale): -    if locale not in ooo_translation: -        return context -    new_context = {} -    for k in context: -        new_key = k -        if k in ooo_translation[locale]: -            new_key = ooo_translation[locale][k] -        new_context[new_key] = context[k] -    return new_context - -OOO_MAIN_NS = "{urn:oasis:names:tc:opendocument:xmlns:text:1.0}" - -OOO_NS = { -    "office": "urn:oasis:names:tc:opendocument:xmlns:office:1.0", -    "style": "urn:oasis:names:tc:opendocument:xmlns:style:1.0", -    "text": "urn:oasis:names:tc:opendocument:xmlns:text:1.0", -    "table": "urn:oasis:names:tc:opendocument:xmlns:table:1.0", -    "draw": "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0", -    "fo": "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0", -    "xlink": "http://www.w3.org/1999/xlink", -    "dc": "http://purl.org/dc/elements/1.1/", -    "meta": "urn:oasis:names:tc:opendocument:xmlns:meta:1.0", -    "number": "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0", -    "svg": "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0", -    "chart": "urn:oasis:names:tc:opendocument:xmlns:chart:1.0", -    "dr3d": "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0", -    "math": "http://www.w3.org/1998/Math/MathML", -    "form": "urn:oasis:names:tc:opendocument:xmlns:form:1.0", -    "script": "urn:oasis:names:tc:opendocument:xmlns:script:1.0", -    "ooo": "http://openoffice.org/2004/office", -    "ooow": "http://openoffice.org/2004/writer", -    "oooc": "http://openoffice.org/2004/calc", -    "dom": "http://www.w3.org/2001/xml-events", -    "rpt": "http://openoffice.org/2005/report", -    "of": "urn:oasis:names:tc:opendocument:xmlns:of:1.2", -    "xhtml": "http://www.w3.org/1999/xhtml", -    "grddl": "http://www.w3.org/2003/g/data-view#", -    "tableooo": "http://openoffice.org/2009/table", -    "css3t": "http://www.w3.org/TR/css3-text/", -} - - -def _set_value_from_formula(value, context, default_value): -    value = value.strip() -    if value.startswith("ooow:") and len(value) >= 5: -        value = value[5:] -    if value.startswith('"') and value.endswith('"') and len(value) > 1: -        value = value[1:-1] -    elif value in context: -        value = _format_value(context[value], default_value) -    else: -        value = None -    return value - - -def _parse_condition(condition, context, default_value): -    # parse only == and != operator -    operator = "" -    if "!=" in condition: -        operator = "!=" -    elif "==" in condition: -        operator = "==" -    else: -        return -    var1, var2 = condition.split(operator) -    var1 = _set_value_from_formula(var1, context, default_value) -    var2 = _set_value_from_formula(var2, context, default_value) -    res = var1 == var2 -    if operator == '!=': -        res = not res -    return res - - -def _format_value(value, default_value): -    if hasattr(value, 'strftime'): -        c_locale = settings.LANGUAGE_CODE.split('-') -        if len(c_locale) == 2: -            c_locale[1] = c_locale[1].upper() -        c_locale = "_".join(c_locale) -        if locale.getlocale()[0] != c_locale: -            for loc in (c_locale, c_locale + '.utf8'): -                try: -                    locale.setlocale(locale.LC_ALL, loc) -                    break -                except: -                    pass -        try: -            if settings.DATE_FORMAT: -                value = value.strftime(settings.DATE_FORMAT).lower() -            else: -                value = value.strftime('%x') -        except ValueError: -            value = unicode(value) -        if locale.getlocale()[1]: -            value = value.decode(locale.getlocale()[1]) -    value = unicode(value) if value else default_value -    return value - -VAR_EXPR = u"###%sVAR %s###" -WHOLE_KEY_FILTER = u"((?:(?: )*(?:<[^#>]*>)*(?: )*(?:[-a-zA-Z0-9_])*(?: )*)*)" -WHOLE_KEY_FILTER = u"([^#]*)" -RE_VAR = re.compile(VAR_EXPR % (WHOLE_KEY_FILTER, WHOLE_KEY_FILTER)) -IF_EXPR = u"###%sIF %s###(.*)###ENDIF###" -RE_IF = re.compile(IF_EXPR % (WHOLE_KEY_FILTER, WHOLE_KEY_FILTER)) -TAG_FILTER = re.compile(u"(<[^<^>]*>)") -KEY_FILTER = re.compile(u"([-a-zA-Z0-9_]*)") - - -def _filter_key(base_key): -    # return (key, extra_marker) -    # manage strange key such as: -    # test_<text:span text:style-name="T1">date</text:span> -    key = base_key[:] -    key = key.strip() -    tags, new_key = '', key[:] -    for tag in TAG_FILTER.findall(key): -        tags += tag -        new_key = new_key.replace(tag, '') -    full_key = '' -    for k in KEY_FILTER.findall(new_key): -        if not k: -            continue -        full_key += k -    return full_key, tags - - -def _custom_parsing(context, value, default_value=''): -    """ -    ###VAR nom_var### for displaying a variable name -    ###IF nom_var### ###ENDIF### for conditionnal display -    Be carreful nested condition are not yet managed! -    """ -    for regexp, sub_exp, if_cond in ((RE_IF, IF_EXPR, True), -                                     (RE_VAR, VAR_EXPR, False)): -        for base_key in regexp.findall(value[:]): -            v, val = "", None -            if if_cond:  # the value inside the if is parsed -                pre_tag, base_key, val = base_key -            else: -                pre_tag, base_key = base_key -            key, extra_markers = _filter_key(base_key) -            v = '' -            if pre_tag: -                v = pre_tag -            if key in context and context[key]: -                if if_cond: -                    v += _custom_parsing(context, val, default_value) -                else: -                    v += _format_value(context[key], default_value) -            # to preserve a consistent OOO file put extra_markers -            if extra_markers: -                v += extra_markers -            value = re.sub(sub_exp % (pre_tag, base_key), v, value) -    return value - - -def _ooo_replace(content, context, missing_keys, default_value=''): - -    # regular ooo parsing -    for xp in ('variable-set', 'variable-get'): -        for p in content.findall(".//" + OOO_MAIN_NS + xp): -            name = p.get(OOO_MAIN_NS + "name") -            if name in context: -                value = context[name] -                p.text = _format_value(value, default_value) -            else: -                if default_value is not None: -                    p.text = default_value -                missing_keys.add(name) -    for p in content.findall(".//" + OOO_MAIN_NS + "conditional-text"): -        condition = p.get(OOO_MAIN_NS + "condition") -        res = 'true' if _parse_condition(condition, context, default_value) \ -              else 'false' -        value = p.get(OOO_MAIN_NS + 'string-value-if-' + res) -        value = _format_value(value, default_value) -        if value.strip() in context: -            value = context[value.strip()] -        p.text = value - -    # raw content parsing -    str_io = StringIO() -    content.write(str_io) -    value = str_io.getvalue() -    value = _custom_parsing(context, value, default_value).encode('utf-8') -    return value - - -def ooo_replace(infile, outfile, context, default_value=''): -    inzip = ZipFile(infile, 'r', ZIP_DEFLATED) -    outzip = ZipFile(outfile, 'w', ZIP_DEFLATED) - -    values = {} -    missing_keys = set() -    for k in OOO_NS: -        register_namespace(k, OOO_NS[k]) -    for xml_file in ('content.xml', 'styles.xml'): -        content = ElementTree(fromstring(inzip.read(xml_file))) -        values[xml_file] = _ooo_replace(content, context, missing_keys, -                                        default_value) - -    for f in inzip.infolist(): -        if f.filename in values: -            outzip.writestr(f.filename, values[f.filename]) -        else: -            outzip.writestr(f, inzip.read(f.filename)) - -    inzip.close() -    outzip.close() -    return missing_keys - -if __name__ == '__main__': -    infile = "../archaeological_files/tests/"\ -             "AR_dossier_DRAC_modele_ishtar_1-MOD.odt" -    outfile = "../archaeological_files/tests/"\ -              "AR_dossier_DRAC_modele_ishtar-test.odt" -    rep = {"file_incharge_surname": u"Yann", -           "file_incharge_name": u"Le Jeune", -           "fileact_ref": u"ref"} -    ooo_replace(infile, outfile, rep, default_value="") diff --git a/old/ooo_translation.py b/old/ooo_translation.py deleted file mode 100644 index 5a3d4cb84..000000000 --- a/old/ooo_translation.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# Copyright (C) 2013-2016 Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet> - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -# GNU Affero General Public License for more details. - -# You should have received a copy of the GNU Affero General Public License -# along with this program.  If not, see <http://www.gnu.org/licenses/>. - -# See the file COPYING for details. - -from django.conf import settings -from django.utils import translation -# from django.utils.translation import pgettext_lazy - -# [('study', pgettext_lazy('ooo key', u'study')),] - -TRANSLATION_STRINGS = [] - -ooo_translation = {} -cur_language = translation.get_language() - -try: -    for language, lbl in settings.LANGUAGES: -        translation.activate(language) -        ooo_translation[language] = {} -        for k, v in TRANSLATION_STRINGS: -            ooo_translation[language][k] = unicode(v) -finally: -    translation.activate(cur_language) | 
