Package translate :: Package convert :: Module odf2xliff
[hide private]
[frames] | no frames]

Source Code for Module translate.convert.odf2xliff

  1  #!/usr/bin/env python 
  2  # -*- coding: utf-8 -*- 
  3  # 
  4  # Copyright 2004-2006 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   
 23  """convert OpenDocument (ODF) files to XLIFF localization files""" 
 24   
 25  from translate.storage import factory 
 26  from translate.misc.contextlib import contextmanager 
 27  from translate.misc.context import with_ 
 28  from translate.storage import odf_io 
29 30 31 -def convertodf(inputfile, outputfile, templates, engine='toolkit'):
32 """reads in stdin using fromfileclass, converts using convertorclass, 33 writes to stdout 34 """ 35 36 def translate_toolkit_implementation(store): 37 import cStringIO 38 import zipfile 39 40 from translate.storage.xml_extract import extract 41 from translate.storage import odf_shared 42 43 contents = odf_io.open_odf(inputfile) 44 for data in contents.values(): 45 parse_state = extract.ParseState(odf_shared.no_translate_content_elements, 46 odf_shared.inline_elements) 47 extract.build_store(cStringIO.StringIO(data), store, parse_state)
48 49 def itools_implementation(store): 50 from itools.handlers import get_handler 51 from itools.gettext.po import encode_source 52 import itools.odf 53 54 filename = getattr(inputfile, 'name', 'unkown') 55 handler = get_handler(filename) 56 57 try: 58 get_units = handler.get_units 59 except AttributeError: 60 raise AttributeError('error: the file "%s" could not be processed' % filename) 61 62 # Make the XLIFF file 63 for source, context, line in get_units(): 64 source = encode_source(source) 65 unit = store.UnitClass(source) 66 store.addunit(unit) 67 68 @contextmanager 69 def store_context(): 70 store = factory.getobject(outputfile) 71 try: 72 store.setfilename(store.getfilenode('NoName'), inputfile.name) 73 except: 74 print "couldn't set origin filename" 75 yield store 76 store.save() 77 78 def with_block(store): 79 if engine == "toolkit": 80 translate_toolkit_implementation(store) 81 else: 82 itools_implementation(store) 83 84 # Since the convertoptionsparser will give us an open file, we risk that 85 # it could have been opened in non-binary mode on Windows, and then we'll 86 # have problems, so let's make sure we have what we want. 87 inputfile.close() 88 inputfile = file(inputfile.name, mode='rb') 89 with_(store_context(), with_block) 90 return True 91 92 93 # For formats see OpenDocument 1.2 draft 7 Appendix C 94 formats = { 95 "sxw": ("xlf", convertodf), 96 "odt": ("xlf", convertodf), # Text 97 "ods": ("xlf", convertodf), # Spreadsheet 98 "odp": ("xlf", convertodf), # Presentation 99 "odg": ("xlf", convertodf), # Drawing 100 "odc": ("xlf", convertodf), # Chart 101 "odf": ("xlf", convertodf), # Formula 102 "odi": ("xlf", convertodf), # Image 103 "odm": ("xlf", convertodf), # Master Document 104 "ott": ("xlf", convertodf), # Text template 105 "ots": ("xlf", convertodf), # Spreadsheet template 106 "otp": ("xlf", convertodf), # Presentation template 107 "otg": ("xlf", convertodf), # Drawing template 108 "otc": ("xlf", convertodf), # Chart template 109 "otf": ("xlf", convertodf), # Formula template 110 "oti": ("xlf", convertodf), # Image template 111 "oth": ("xlf", convertodf), # Web page template 112 }
113 114 115 -def main(argv=None):
116 117 def add_options(parser): 118 parser.add_option("", "--engine", dest="engine", default="toolkit", 119 type="choice", choices=["toolkit", "itools"], 120 help="""Choose whether itools (--engine=itools) or the translate toolkit (--engine=toolkit) 121 should be used as the engine to convert an ODF file to an XLIFF file.""") 122 parser.passthrough = ['engine'] 123 return parser
124 125 from translate.convert import convert 126 parser = convert.ConvertOptionParser(formats, description=__doc__) 127 add_options(parser) 128 parser.run(argv) 129 130 131 if __name__ == '__main__': 132 main() 133