summaryrefslogtreecommitdiff
path: root/l10ntools
diff options
context:
space:
mode:
authorIvo Hinkelmann <ihi@openoffice.org>2010-07-13 18:00:06 +0200
committerIvo Hinkelmann <ihi@openoffice.org>2010-07-13 18:00:06 +0200
commit81864751ef5e6e51906d5bae7de39cf19505e868 (patch)
treec0f0e77aa424371f6599fda32ef039ee142faa68 /l10ntools
parenta25f2a7a55a7611b75dc6721fa52426c466d4be0 (diff)
txtl10n: #i113008# #i113125# Support of help tree files and single txt files in the L10N process
Diffstat (limited to 'l10ntools')
-rw-r--r--l10ntools/scripts/l10ntool.py188
-rw-r--r--l10ntools/scripts/sdf.py238
-rwxr-xr-x[-rw-r--r--]l10ntools/scripts/xhtex (renamed from l10ntools/scripts/const.py)26
-rw-r--r--l10ntools/scripts/xtxex.py107
4 files changed, 17 insertions, 542 deletions
diff --git a/l10ntools/scripts/l10ntool.py b/l10ntools/scripts/l10ntool.py
deleted file mode 100644
index e98a8189e9b7..000000000000
--- a/l10ntools/scripts/l10ntool.py
+++ /dev/null
@@ -1,188 +0,0 @@
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# This file is part of OpenOffice.org.
-#
-# OpenOffice.org is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License version 3
-# only, as published by the Free Software Foundation.
-#
-# OpenOffice.org 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 Lesser General Public License version 3 for more details
-# (a copy is included in the LICENSE file that accompanied this code).
-#
-# You should have received a copy of the GNU Lesser General Public License
-# version 3 along with OpenOffice.org. If not, see
-# <http://www.openoffice.org/license.html>
-# for a copy of the LGPLv3 License.
-#
-#*************************************************************************
-
-from optparse import OptionParser
-from sdf import SdfData
-import sys , os
-
-class abstractL10nTool:
- _options = {}
- _args = ""
- _resource_type = ""
- _source_language = "en-US"
-
- ##### Implement these abstract methods
-
- ##### Nameing scheme for the output files
- def get_outputfile_format_str(self):
- # filename,fileNoExt,language,extension,pathPrefix,pathPostFix,path
- return "{path}/{fileNoExt}_{language}.{extension}"
-
- ################################# Merge single files ###########################################
-
- ##### Merge a single file
- def merge_file(self, inputfilename, outputfilename, parsed_file_ref, lang, is_forced_lang, sdfdata):
- pass
-
- ##### Helper for parse-once-use-often like parsing a xml file is needed implement it here
- def parse_file(self, filename):
- return None
-
- ################### Merge one big file containing all strings in all languages #################
- def merge_one_big_file(self, inputfile, outputfilename, parsed_file_ref, lang, sdfdata):
- pass
-
- ################### Extract a single File ######################################################
- def extract_file(self, inputfile):
- pass
-
- ################################################################################################
-
- def format_outputfile(self, filename, language):
- extension = filename[filename.rfind('.')+1:]
- file = filename[:filename.rfind('.')]
- return self.get_outputfile_format_str().format(
- filename=filename, fileNoExt=file, language=language, extension=extension, path_prefix=self._options.path_prefix,
- path_postfix=self._options.path_postfix, path=self.get_path())
-
- def get_path(self):
- if self._options.outputfile.find('/') == -1:
- return ""
- else:
- return self._options.outputfile[:self._options.outputfile.rfind('/')]
-
- def merge(self, sdfdata):
- langset,forcedset, foundset = set(), set() , set()
-
- if self._options.languages: langset = set(self._options.languages)
- if self._options.forcedlanguages: forcedset = set(self._options.forcedlanguages)
- if sdfdata.get_languages_found_in_sdf(): foundset = sdfdata.get_languages_found_in_sdf()
-
- if self.has_multi_inputfiles():
- filelist = self.read_inputfile_list()
- else:
- filelist = self._options.inputfile
-
- for inputfile in filelist:
- ref = self.parse_file(inputfile)
- # Don't write that files if there is no l10n present
- if ((langset & foundset) - forcedset): # all langs given and found in sdf without enforced
- [self.merge_file(inputfile,self.format_outputfile(inputfile, lang), ref, lang, False, sdfdata) for lang in ((langset & foundset) - forcedset)]
- # Always write those files even if there is no l10n available
- if forcedset: # all enforced langs
- [self.merge_file(inputfile, self.format_outputfile(inputfile, lang), ref, lang, True, sdfdata) for lang in forcedset]
- # In case a big file have to be written
- if ((langset & foundset) | forcedset): # all langs given ,found in sdf and enforced ones
- self.merge_one_big_file(inputfile, self.format_outputfile(inputfile, lang), ref, ((langset & foundset) | forcedset), sdfdata)
-
- def has_multi_inputfiles(self):
- return self._options.inputfile[0] == '@'
-
- def extract(self):
- try:
- f = open(self._options.outputfile, "w+")
- f.write(self.extract_file(self._options.inputfile))
- except IOError:
- print "ERROR: Can not write file " + self._options.outputfile
- else:
- f.close()
-
- # Parse the common options
- def parse_options(self):
- parser = OptionParser()
- parser.add_option("-i", "--inputfile", dest="inputfile", metavar="FILE", help="resource file to read" )
- parser.add_option("-o", "--outputfile", dest="outputfile", metavar="FILE", help="extracted sdf or merged file" )
- parser.add_option("-m", "--inputsdffile", dest="input_sdf_file", metavar="FILE", help="merge this sdf file" )
- parser.add_option("-x", "--pathprefix", dest="path_prefix", metavar="PATH", help="" )
- parser.add_option("-y", "--pathpostfix", dest="path_postfix", metavar="PATH", help="" )
- parser.add_option("-p", "--projectname", dest="project_name", metavar="NAME", help="" )
- parser.add_option("-r", "--projectroot", dest="project_root", metavar="PATH", help="" )
- parser.add_option("-f", "--forcedlanguages", dest="forcedlanguages", metavar="ISOCODE[,ISOCODE]", help="Always merge those langs even if no l10n is available for those langs" )
- parser.add_option("-l", "--languages", dest="languages", metavar="ISOCODE[,ISOCODE]", help="Merge those langs if l10n is found for each")
- parser.add_option("-q", "--quiet", action="store_true", dest="quietmode", help="",default=False)
- (self._options, self.args) = parser.parse_args()
-
- # -l "de,pr,pt-BR" => [ "de" , "pt" , "pt-BR" ]
- parse_complex_arg = lambda arg: arg.split(",")
- if self._options.forcedlanguages: self._options.forcedlanguages = parse_complex_arg(self._options.forcedlanguages)
- if self._options.languages: self._options.languages = parse_complex_arg(self._options.languages)
- self.test_options()
-
- def __init__(self):
- self.parse_options()
- if self._options.input_sdf_file != None and len(self._options.input_sdf_file):
- sdfdata = SdfData(self._options.input_sdf_file)
- sdfdata.read()
- self.merge(sdfdata)
- else:
- self.extract()
-
- def make_dirs(self, filename):
- dir = filename[:filename.rfind('/')]
- if os.path.exists(dir):
- if os.path.isfile(dir):
- print "ERROR: There is a file '"+dir+"' where I want create a directory"
- sys.exit(-1)
- else:
- return
- else:
- try:
- print "DBG: make_dir " + str(dir)
- os.makedirs(dir)
- except IOError:
- print "Error: Can not create dir " + dir
- sys.exit(-1)
-
- def test_options(self):
- opt = self._options
- is_valid = lambda x: x != None and len(x) > 0
- return is_valid(opt.project_root) and is_valid(opt.project_name) and is_valid(opt.languages) and \
- ( is_valid(opt.inputfile) and (( is_valid(opt.path_prefix) and is_valid(opt.path_postfix) ) or is_valid(opt.outputfile)) and \
- ( ( is_valid(opt.input_sdf_file) and ( is_valid(opt.outputfile) or ( is_valid(opt.path_prefix) and is_valid(opt.path_postfix) ) or \
- ( is_valid(opt.inputfile) and is_valid(opt.outputFile)) ))))
- print "Strange options ..."
- sys.exit( -1 )
-
-
- def read_inputfile_list(self):
- if self.has_multi_inputfiles():
- lines = []
- try:
- f = open(self._options.inputfile[1:], "r")
- lines = [line.strip('\n') for line in f.readlines()]
- except IOError:
- print "ERROR: Can not read file list " + self._options.inputfile[2:]
- sys.exit(-1)
- else:
- f.close()
- return lines
-
- def get_filename_string(self, inputfile):
- absfile = os.path.realpath(os.path.abspath(inputfile))
- absroot = os.path.realpath(os.path.abspath(self._options.project_root))
- return absfile[len(absroot)+1:].replace('/','\\')
-
diff --git a/l10ntools/scripts/sdf.py b/l10ntools/scripts/sdf.py
deleted file mode 100644
index 1d7cc27f0733..000000000000
--- a/l10ntools/scripts/sdf.py
+++ /dev/null
@@ -1,238 +0,0 @@
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# This file is part of OpenOffice.org.
-#
-# OpenOffice.org is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License version 3
-# only, as published by the Free Software Foundation.
-#
-# OpenOffice.org 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 Lesser General Public License version 3 for more details
-# (a copy is included in the LICENSE file that accompanied this code).
-#
-# You should have received a copy of the GNU Lesser General Public License
-# version 3 along with OpenOffice.org. If not, see
-# <http://www.openoffice.org/license.html>
-# for a copy of the LGPLv3 License.
-#
-#*************************************************************************
-
-class MyOrderedDict(dict):
- _keylist = []
- _valuelist = []
-
- #correct?!?
- def __init__(self, defaults={}):
- dict.__init__(self)
- for n,v in defaults.items():
- self[n] = v
- #def __getitem__(self):
- # pass
-
- def __setitem__(self, key, value):
- self._keylist.append(key)
- self._valuelist.append(value)
- return dict.__setitem__(self, key, value)
-
- def __delattr__(self, key):
- self._keylist.__delattr__(key)
- self._valuelist.__delattr__(dict[key])
- return dict.__delattr__(self, key)
-
- def __delitem__(self, key):
- self._keylist.__delitem__(key)
- self._valuelist.__delitem__(dict[key])
- return dict.__delitem__(self, key)
-
- def __iter(self):
- return zip(self._keylist, self._valuelist)
-
- def __iterkeys__(self):
- return self._keylist
-
- def __iteritems__(self):
- return self._valuelist
-
- def items(self):
- return zip(self._keylist,self._valuelist)
-
- def keys(self):
- return self._keylist
-
- def __keysattr__(self):
- return self._keylist
-
- def pop(self, key):
- self._keylist.pop(key)
- self._valuelist.pop(key)
- return dict.__pop__(self, key)
-
- def popitem(self):
- raise NotImplementedError("popitem")
-
- def clear(self):
- self._keylist.clear()
- self._valuelist.clear()
- return dict.clear()
-
- def copy(self):
- # correct?!?
- newobj = MyOrderedDict(self)
- newobj._keylist = self._keylist
- newobj._valuelist = self._valuelist
- return newobj
-
-class SdfData:
- _filename = "";
- _dict = MyOrderedDict()
- #_dict = {}
- _languages_found = [];
-
- def __init__ (self, filename=""):
- self._filename = filename
-
- def __getitem__(self, key):
- if self._dict.has_key(key):
- return self._dict[key]
- else:
- return None
-
- def has_key(self, key):
- return self._dict.has_key(key)
-
- def __setitem__(self, key, value):
- self._dict[key] = value
-
- def get_languages_found_in_sdf(self):
- return set(self._languages_found)
-
- def read(self):
- try:
- f = open(self._filename, "r")
- lines = [line.rstrip('\n') for line in f.readlines()]
- except IOError:
- print "ERROR: Trying to read "+ self._filename
- raise
- else:
- f.close()
- for line in lines:
- entity = SdfEntity()
- entity.set_properties(line)
- self._dict[entity.get_id()] = entity
- self._languages_found.append(entity.langid)
-
- def write(self, filename):
- try:
- f = open(filename, "w+")
- for value in self._dict.itervalues():
- #f.write( repr(value)+"\n" )
- f.write(value + "\n")
- except IOError:
- print "ERROR: Trying to write " + filename
- raise
- else:
- f.close()
-
-
-
-import sys
-class SdfEntity:
- # Sdf format columns
- project = ""
- source_file = ""
- dummy1 = ""
- resource_type = ""
- gid = ""
- lid = ""
- helpid = ""
- platform = ""
- dummy2 = ""
- langid = ""
- text = ""
- helptext = ""
- quickhelptext = ""
- title = ""
- date = ""
-
- import const
- const._PROJECT_POS = 0
- const._SOURCE_FILE_POS = 1
- const._DUMMY1_POS = 2
- const._RESOURCE_TYPE_POS = 3
- const._GID_POS = 4
- const._LID_POS = 5
- const._HELPID_POS = 6
- const._PLATFORM_POS = 7
- const._DUMMY2_POS = 8
- const._LANGID_POS = 9
- const._TEXT_POS = 10
- const._HELPTEXT_POS = 11
- const._QUICKHELPTEXT_POS = 12
- const._TITLE_POS = 13
- const._DATE_POS = 14
-
-
-
- def __init__(self, project="", source_file="", dummy1="", resource_type="", gid="", lid="", helpid="", platform="", dummy2="", langid="",
- text="", helptext="", quickhelptext="", title="", date="2002-02-02 02:02:02"):
- self.project = project;
- self.source_file = source_file;
- self.dummy1 = dummy1;
- self.resource_type = resource_type;
- self.gid = gid;
- self.lid = lid;
- self.helpid = helpid;
- self.platform = platform;
- self.dummy2 = dummy2;
- self.langid = langid;
- self.text = text;
- self.helptext = helptext;
- self.quickhelptext = quickhelptext;
- self.title = title;
- self.date = date;
-
- def set_properties(self, line):
- splitted = line.split("\t")
- if len(splitted) == 15:
- self.project = splitted[ self.const._PROJECT_POS ]
- self.source_file = splitted[ self.const._SOURCE_FILE_POS ]
- self.dummy1 = splitted[ self.const._DUMMY1_POS ]
- self.resource_type = splitted[ self.const._RESOURCE_TYPE_POS ]
- self.gid = splitted[ self.const._GID_POS ]
- self.lid = splitted[ self.const._LID_POS ]
- self.helpid = splitted[ self.const._HELPID_POS ]
- self.platform = splitted[ self.const._PLATFORM_POS ]
- self.dummy2 = splitted[ self.const._DUMMY2_POS ]
- self.langid = splitted[ self.const._LANGID_POS ]
- self.text = splitted[ self.const._TEXT_POS ]
- self.helptext = splitted[ self.const._HELPTEXT_POS ]
- self.quickhelptext = splitted[ self.const._QUICKHELPTEXT_POS ]
- self.title = splitted[ self.const._TITLE_POS ]
- self.date = splitted[ self.const._DATE_POS ]
- #else:
- # print "Offending line '"+line+"'"
- # print "ERROR: Something is broken here! Line has {0} tabs".format( len(splitted) )
- # sys.exit( -1 )
-
- def get_file_id(self):
- return self.project + "\\" + self.source_file
-
- def get_resource_path(self):
- return self.source_file[0:self.source_file.rfind( "\\" )-1]
-
- #def __repr__(self):
- def __str__(self):
- return ''.join([self.project, "\t", self.source_file, "\t", self.dummy1, "\t", self.resource_type, "\t" ,
- self.gid, "\t", self.lid, "\t", self.helpid, "\t", self.platform, "\t", self.dummy2, "\t" , self.langid,
- "\t", self.text, "\t", self.helptext, "\t", self.quickhelptext, "\t" , self.title, "\t", self.date ])
-
- def get_id(self):
- return ''.join([self.project, self.gid, self.lid, self.source_file, self.resource_type, self.platform, self.helpid, self.langid])
diff --git a/l10ntools/scripts/const.py b/l10ntools/scripts/xhtex
index 2d514eabdab6..e6f7cf9f2003 100644..100755
--- a/l10ntools/scripts/const.py
+++ b/l10ntools/scripts/xhtex
@@ -1,3 +1,4 @@
+#!/bin/sh
#*************************************************************************
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -25,15 +26,22 @@
#
#*************************************************************************
-# Pseudo const
-class _const:
- class ConstError(TypeError): pass
- def __setattr__(self, name, value):
- if self.__dict__.has_key(name):
- raise self.ConstError, "Can't rebind const(%s)"%name
- self.__dict__[name] = value
+if [ x${SOLARENV}x = xx ]; then
+ echo No environment found, please use 'setsolar'
+exit 1
+fi
-import sys
-sys.modules[__name__] = _const()
+# localize.pl calls localize_sl in solver bin directory which depends on dynamic
+# libraries in solver lib directory but has no correct RPATH (or equivalent):
+if [ "${OS?}" = MACOSX ]; then
+ export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH+${DYLD_LIBRARY_PATH}:}${SOLARVERSION?}/${INPATH?}/lib${UPDMINOREXT}
+else
+ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH+${LD_LIBRARY_PATH}:}${SOLARVERSION?}/${INPATH?}/lib${UPDMINOREXT}
+fi
+if [ x${SOLARVER}x = xx -o x${UPDMINOREXT}x = xx ]; then
+ exec python $SOLARVERSION/$INPATH/bin/xhtex.py "$@"
+else
+ exec python $SOLARVERSION/$INPATH/bin$UPDMINOREXT/xhtex.py "$@"
+fi
diff --git a/l10ntools/scripts/xtxex.py b/l10ntools/scripts/xtxex.py
deleted file mode 100644
index a8677b10bf86..000000000000
--- a/l10ntools/scripts/xtxex.py
+++ /dev/null
@@ -1,107 +0,0 @@
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# This file is part of OpenOffice.org.
-#
-# OpenOffice.org is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License version 3
-# only, as published by the Free Software Foundation.
-#
-# OpenOffice.org 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 Lesser General Public License version 3 for more details
-# (a copy is included in the LICENSE file that accompanied this code).
-#
-# You should have received a copy of the GNU Lesser General Public License
-# version 3 along with OpenOffice.org. If not, see
-# <http://www.openoffice.org/license.html>
-# for a copy of the LGPLv3 License.
-#
-#*************************************************************************
-
-from l10ntool import abstractL10nTool
-from sdf import SdfEntity
-import sys
-import shutil
-
-class xtxex(abstractL10nTool):
- _resourceType = "xtx"
-
- def __init__(self):
- abstractL10nTool.__init__(self)
-
- def merge_file(self, inputfilename, outputfilename, parsed_file_ref, lang, is_forced_lang, sdfdata):
- # Special handling for en-US files
- if lang == "en-US":
- mod_outputfilename = outputfilename.replace("_en-US",'')
- #print "DBG: merge_file lang " + lang +" file " + mod_outputfilename
- self.copy_file(inputfilename, mod_outputfilename)
- return
-
- # merge usual lang
- sdfline = self.prepare_sdf_line(inputfilename,lang)
- if sdfdata.has_key(sdfline.get_id()):
- line = sdfdata[sdfline.get_id()].text.replace("\\n", '\n')
- self.make_dirs(outputfilename)
- try:
- #print "DBG: merge_file lang " + lang +" file " + outputfilename
- f = open(outputfilename, "w+")
- f.write(line)
- except IOError:
- print "ERROR: Can not write file " + outputfilename
- sys.exit(-1)
- else:
- f.close()
- return
-
- # no sdf data found then copy en-US source file
- if is_forced_lang:
- #print "DBG: merge_file lang " + lang +" file " + outputfilename
- self.copy_file(inputfilename, outputfilename)
-
- def copy_file(self, inputfilename, outputfilename):
- try:
- #print "DBG: copy " + inputfilename + " to " + outputfilename
- shutil.copy(inputfilename, outputfilename)
- except IOError:
- print "ERROR: Can not copy file '" + inputfilename + "' to " + "'" + outputfilename + "'"
- sys.exit(-1)
-
- ##### Extract a single File
- def extract_file(self, inputfile):
- lines = []
- try:
- f = open(inputfile, "r")
- lines = f.readlines()
- except IOError:
- print "ERROR: Can not open file " + inputfile
- sys.exit(-1)
- else:
- f.close()
- # remove legal header
- lines = [line for line in lines if len(line) > 0 and not line[0] == '#']
- # escape all returns
- lines = [line.replace('\n', "\\n") for line in lines]
- line = ''.join(lines)
- sdf_entity = self.prepare_sdf_line(inputfile);
- sdf_entity.text = line
- return str(sdf_entity)
-
- ##### Nameing scheme for the output files
- def get_outputfile_format_str(self):
- # filename,fileNoExt,language,extension,pathPrefix,pathPostFix,path
- return "{path}/{fileNoExt}_{language}.{extension}"
-
- def prepare_sdf_line(self, inputfile="", lang=""):
- if lang == "":
- lang = self._source_language
- return SdfEntity(project=self._options.project_name, source_file=self.get_filename_string(inputfile),
- resource_type=self._resource_type, gid="none", lid="none", langid=lang,text="")
-
-run = xtxex()