blob: b6cdcdac73e08527fc7a41da39f65a3f3f06230e [file] [log] [blame]
#**************************************************************
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
#**************************************************************
from l10ntool import AbstractL10nTool
from sdf import SdfEntity
import sys
import xml.dom.minidom
class Xhtex(AbstractL10nTool):
_resource_type = "xht"
_sdfdata = ()
_lang = ""
# Extract methods
def extract_topic(self, list, inputfile):
topics = []
for elem in list:
if elem.childNodes[0].nodeType == elem.TEXT_NODE and len(elem.childNodes[0].data.strip()):
topics.append(self.prepare_sdf_line(id=elem.getAttribute("id").strip(), text=elem.childNodes[0].data, inputfile=inputfile))
return topics
def extract_title(self, list, inputfile):
titles = []
for elem in list:
if len(elem.getAttribute("title").strip()):
titles.append(self.prepare_sdf_line(id=elem.getAttribute("id").strip(), text=elem.getAttribute("title").strip(), inputfile=inputfile))
return titles
# Merge methods
def merge_topic(self, list, sdfdata, lang, inputfilename, dom):
for elem in list:
if elem.childNodes[0].nodeType == elem.TEXT_NODE and elem.getAttribute("id").strip():
obj = self.prepare_sdf_line(inputfile=inputfilename, lang=lang, id=elem.getAttribute("id").strip())
if sdfdata[obj.get_id()]:
elem.childNodes[0].data = unicode(str(sdfdata[obj.get_id()].text),"utf8")
def merge_title(self, list, sdfdata, lang, inputfilename):
for elem in list:
obj = self.prepare_sdf_line(inputfile=inputfilename, lang=lang, id=elem.getAttribute("id").strip())
if elem.getAttribute("id").strip() and sdfdata[obj.get_id()]:
elem.setAttribute("title", unicode(str(sdfdata[obj.get_id()].text),"utf8"))
# L10N tool
def __init__(self):
AbstractL10nTool.__init__(self)
def parse_file(self, filename):
document = ""
try:
f = open(filename, "r+")
document = f.read()
except IOError:
print "ERROR: Can not read file " + filename
sys.exit(-1)
else:
f.close()
return xml.dom.minidom.parseString(document)
def merge_file(self, inputfilename, outputfilename, parsed_file_ref, lang,is_forced_lang, sdfdata):
if lang == "en-US":
mod_outputfilename = outputfilename.replace("_en-US",'')
self.make_dirs(mod_outputfilename)
self.copy_file(inputfilename, mod_outputfilename)
return
dom = parsed_file_ref.cloneNode(True)
#dom = self.parse_file(inputfilename) # in case cloneNode is buggy just parse it always
self.merge_topic(dom.getElementsByTagName("topic"), sdfdata, lang, inputfilename, dom)
self.merge_title(dom.getElementsByTagName("node"), sdfdata, lang, inputfilename)
self.merge_title(dom.getElementsByTagName("help_section"), sdfdata, lang, inputfilename)
self.make_dirs(outputfilename)
try:
f = open(outputfilename, "w+")
str = dom.toxml()
f.write(str.encode("utf-8"))
except IOError:
print "ERROR: Can not write file " + outputfilename
sys.exit(-1)
else:
f.close()
##### Helper for parse-once-use-often like parsing a xml file is needed implement it here
def parse_file(self, filename):
document = ""
try:
f = open(filename,"r")
document = f.read()
except IOError:
print "ERROR: Can not read file " + filename
else:
f.close()
return xml.dom.minidom.parseString(document)
##### Extract a single File
def extract_file(self, inputfile):
sdf_data = []
dom = self.parse_file(inputfile)
sdf_data.extend(self.extract_topic(dom.getElementsByTagName("topic"), inputfile))
sdf_data.extend(self.extract_title(dom.getElementsByTagName("help_section"), inputfile))
sdf_data.extend(self.extract_title(dom.getElementsByTagName("node"), inputfile))
return ''.join([str(line)+"\n" for line in sdf_data])
def prepare_sdf_line(self, inputfile="", lang="" , id="" , text=""):
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=id, lid="", langid=lang,text=text)
run = Xhtex()