diff options
Diffstat (limited to 'ishtar_common/ooo_replace.py')
| -rw-r--r-- | ishtar_common/ooo_replace.py | 35 | 
1 files changed, 28 insertions, 7 deletions
| diff --git a/ishtar_common/ooo_replace.py b/ishtar_common/ooo_replace.py index 4c487dd17..54ecfced4 100644 --- a/ishtar_common/ooo_replace.py +++ b/ishtar_common/ooo_replace.py @@ -23,6 +23,18 @@ from cStringIO import StringIO  from xml.etree.cElementTree import ElementTree, fromstring  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_NS = "{urn:oasis:names:tc:opendocument:xmlns:text:1.0}" @@ -135,13 +147,9 @@ def _custom_parsing(context, value, default_value=''):              value = re.sub(sub_exp % (pre_tag, base_key), v, value)      return value -def ooo_replace(infile, outfile, context, default_value=''): -    inzip = ZipFile(infile, 'r', ZIP_DEFLATED) -    outzip = ZipFile(outfile, 'w', ZIP_DEFLATED) +def _ooo_replace(content, context, missing_keys, default_value=''):      # regular ooo parsing -    content = ElementTree(fromstring(inzip.read('content.xml'))) -    missing_keys = set()      for xp in ('variable-set', 'variable-get'):          for p in content.findall(".//"+OOO_NS+xp):              name = p.get(OOO_NS+"name") @@ -167,12 +175,25 @@ def ooo_replace(infile, outfile, context, default_value=''):      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 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 == 'content.xml': -            outzip.writestr('content.xml', value) +        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 | 
