#!/usr/bin/env python
# Quick and dirty script to generate googlecode wiki pages
import codecs
import xml.dom.minidom as dom
import os.path
import re
faqpath = "/Users/arne/oss/ics-openvpn.wiki"
header="""
") return ostr def genPage(javafile, lang): #{R.string.faq_howto_title, R.string.faq_howto}, out ="" out+= header for l in javafile: m = re.search("FAQEntry.*\((.*),(.*), R.string.([a-z_]+),.*R.string.([a-z_]+)\)", l) if m: (ver1, ver2, title, body) = m.groups() verHeader = getVerHeader(ver1.strip(), ver2.strip(), lang) out += "== %s ==\n" % getString(title,lang) if verHeader: out += "_%s_\n" % verHeader out += "%s\n" % getString(body,lang) if body == "faq_system_dialogs_title": out += "%s\n" % getString("faq_system_dialog_xposed",lang) return out def getVerHeader(startVersion, endVersion, lang): if startVersion == "Build.VERSION_CODES.ICE_CREAM_SANDWICH": if endVersion == "-1": return None else: return getString("version_upto", lang) % getVersionString(endVersion) if endVersion == "-1": return getString("version_and_later", lang) % getVersionString(startVersion) startver = getVersionString(startVersion) if endVersion == startVersion: return startver else: return "%s - %s" % (startver, getVersionString(endVersion)) def getVersionString(ver): if ver == "Build.VERSION_CODES.ICE_CREAM_SANDWICH": return "4.0 (Ice Cream Sandwich)" elif ver == "-441": return "4.4.1 (Kit Kat)" elif ver == "-442": return "4.4.2 (Kit Kat)" elif ver == "Build.VERSION_CODES.JELLY_BEAN_MR2": return "4.3 (Jelly Bean MR2)" elif ver == "Build.VERSION_CODES.KITKAT": return "4.4 (Kit Kat)" elif ver == "Build.VERSION_CODES.LOLLIPOP": return "5.0 (Lollipop)" else: return "API " + ver def genPageXML(faqdom,lang): out ="" #out+="#summary %s\n" % getString("faq_summary",lang) out+= header for xmld in faqdom.firstChild.childNodes: for xmle in xmld.childNodes: if xmle.nodeName == "TextView": style = xmle.getAttribute("style") textstyle = None if style == "@style/faqhead": textstyle = "== %s ==\n" elif style == "@style/faqitem": textstyle = "%s\n" atext = xmle.getAttribute("android:text") aid = xmle.getAttribute("android:id") if atext: atextid = atext.replace("@string/","") else: atextid = aid.replace("@+id/","") out += textstyle % getString(atextid,lang) return out strres={} def loadstrres(filename,lang): xmlstr = dom.parse(filename) strres[lang]={} for xmld in xmlstr.childNodes: for xmle in xmld.childNodes: if xmle.nodeName == "string": strname= xmle.getAttribute("name") strdata = xmle.firstChild.data strres[lang][strname]=strdata def main(): loadstrres("src/main/res/values/strings.xml","default") #faqdom = dom.parse("src/main/res/layout/faq.xml") faqdom = open("src/main/java/de/blinkt/openvpn/fragments/FaqFragment.java").readlines() faq= genPage(faqdom,"default") open(faqpath + "/FAQ.wiki","w").write(faq) for directory in os.listdir("src/main/res"): if directory.startswith("values-") and directory.find("-sw")==-1 and not directory.startswith("values-v"): lang = directory.split("-",1)[1] print lang loadstrres("src/main/res/values-%s/strings.xml" % lang,lang) langdir= "%s/%s" %(faqpath,lang) if lang=="zh-rCN": langdir= "%s/%s" %(faqpath,"zh-Hans") elif lang=="zh-rTW": langdir= "%s/%s" %(faqpath,"zh-Hant") if not os.path.exists(langdir): os.mkdir(langdir) faq= genPage(faqdom,lang) open("%s/FAQ.wiki" % langdir,"w").write(faq.encode("utf-8")) checkFormatString(lang) def checkFormatString(lang): for strid in strres["default"]: ostr = getString(strid,"default") tstr = getString(strid,lang) for f in ["%s", "%d", "%f"] + ["%%%d$s" % d for d in range(0,10)] + ["%%%d$d" % d for d in range(0,10)]: ino = ostr.find(f)==-1 int = tstr.find(f)==-1 if ino != int: print "Mismatch StringID(%s): " % lang,strid,"Original String:",ostr,"Translated String:",tstr if __name__=="__main__": main()