mirror of
https://github.com/schwabe/ics-openvpn.git
synced 2024-09-20 12:02:28 +02:00
203 lines
5.9 KiB
Python
Executable File
203 lines
5.9 KiB
Python
Executable File
#!/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
|
|
import HTMLParser
|
|
|
|
faqpath = "/Users/arne/software/icsopenvpn.ghpages"
|
|
|
|
|
|
template = open("misc/header.html").read()
|
|
|
|
def getString(strid,lang):
|
|
ostr=""
|
|
if strid in strres[lang]:
|
|
ostr=strres[lang][strid]
|
|
else:
|
|
ostr=strres["default"][strid]
|
|
|
|
ostr = ostr.replace("<","<")
|
|
ostr = ostr.replace(">",">")
|
|
ostr = ostr.replace("\\\"","\"")
|
|
ostr = ostr.replace("\\'","'")
|
|
ostr = ostr.replace("\\n","<p>")
|
|
ostr= HTMLParser.HTMLParser().unescape(ostr)
|
|
return ostr
|
|
|
|
def genPage(javafile, lang):
|
|
#{R.string.faq_howto_title, R.string.faq_howto},
|
|
out =""
|
|
|
|
notmatched = None
|
|
for l in javafile:
|
|
|
|
m = re.search("FAQEntry.*\((.*),(.*), R.string.([a-z0-9_]+),.*R.string.([a-z0-9_]+)\)", l)
|
|
if m:
|
|
if notmatched and notmatched.strip():
|
|
print "Line did not match: %s" % notmatched
|
|
|
|
notmatched = None
|
|
(ver1, ver2, title, body) = m.groups()
|
|
verHeader = getVerHeader(ver1.strip(), ver2.strip(), lang)
|
|
|
|
section = """<h2>
|
|
<a name="%(titleid)s"></a>
|
|
%(title)s
|
|
<a href="#%(titleid)s" class="section_anchor"> </a>
|
|
</h2>
|
|
%(verinfo)s
|
|
%(content)s
|
|
"""
|
|
|
|
|
|
if verHeader:
|
|
verinfo += "<small><i>%s</i></small> <br/>\n" % verHeader
|
|
else:
|
|
verinfo =""
|
|
|
|
content = "%s\n" % getString(body,lang)
|
|
if body == "faq_system_dialogs_title":
|
|
content += "%s\n" % getString("faq_system_dialog_xposed",lang)
|
|
|
|
|
|
c = {'titleid': title,
|
|
'title': getString(title,lang),
|
|
'verinfo': verinfo,
|
|
'content': content
|
|
}
|
|
|
|
out+=section % c
|
|
|
|
|
|
else:
|
|
notmatched = l
|
|
|
|
|
|
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.html","w").write(template % {'content': 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/FAQ-%s" %(faqpath,lang)
|
|
if lang=="zh-rCN":
|
|
langdir= "%s/FAQ-%s" %(faqpath,"zh-Hans")
|
|
elif lang=="zh-rTW":
|
|
langdir= "%s/FAQ-%s" %(faqpath,"zh-Hant")
|
|
|
|
|
|
if not os.path.exists(langdir):
|
|
os.mkdir(langdir)
|
|
|
|
faq= genPage(faqdom,lang)
|
|
open("%s.html" % 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()
|