#************************************************************** # # 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()