Package translate :: Package storage :: Module odf

[hide private]
[frames] | no frames]

# Source Code for Module translate.storage.odf

     1  #!/usr/bin/env python
     2  # -*- coding: utf-8 -*-
     3  #
     4  # Copyright 2007 Zuza Software Foundation
     5  #
     6  # This file is part of translate.
     7  #
     8  # translate is free software; you can redistribute it and/or modify
     9  # it under the terms of the GNU General Public License as published by
    10  # the Free Software Foundation; either version 2 of the License, or
    11  # (at your option) any later version.
    12  #
    13  # translate is distributed in the hope that it will be useful,
    14  # but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    16  # GNU General Public License for more details.
    17  #
    18  # You should have received a copy of the GNU General Public License
    19  # along with translate; if not, write to the Free Software
    20  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    21
    22  """This class implements the functionality for handling OpenDocument files.
    23  """
    24
    25  from translate.misc import xmlwrapper
    26  from translate.storage import base
    27  import zipfile
    28
    29 -class ODFUnit(base.TranslationUnit):
    30      """This class represents an OpenDocument translatable snippet"""
    31
    32 -class ODFFile(base.TranslationStore, xmlwrapper.XMLWrapper):
    33      """This class represents an OpenDocument file"""
    34      UnitClass = ODFUnit
    35 -    def __init__(self, inputfile):
    36          base.TranslationStore.__init__(self, unitclass=self.UnitClass)
    37          self.filename = getattr(inputfile, 'name', '')
    38          try:
    39              z = zipfile.ZipFile(self.filename, 'r')
    40              contents = z.read("content.xml")
    41          except (ValueError, zipfile.BadZipfile):
    42              contents = open(self.filename, 'r').read()
    43          root = xmlwrapper.BuildTree(contents)
    44          xmlwrapper.XMLWrapper.__init__(self, root)
    45          if self.tag != "document-content": raise ValueError("root %r != 'document-content'" % self.tag)
    46          self.body = self.getchild("body")
    47
    48 -    def excludeiterator(self, obj, excludetags):
    49          nodes = []
    50          for node in obj._children:
    51              if xmlwrapper.splitnamespace(node.tag)[1] not in excludetags:
    52                  nodes.append(node)
    53                  nodes.extend(self.excludeiterator(node, excludetags))
    54          return nodes
    55
    56 -    def getunits(self):
    57          nodes = self.excludeiterator(self.body.obj, ["tracked-changes"])
    58          paragraphs = []
    59          for node in nodes:
    60              childns, childtag = xmlwrapper.splitnamespace(node.tag)
    61              if childtag == "p" or childtag == "h":
    62                  paragraphs.append(xmlwrapper.XMLWrapper(node))
    63          for child in paragraphs:
    64              text = child.gettexts().strip()
    65              self.addsourceunit(text)
    66          return self.units
    67