diff --git a/lang.py b/lang.py index aff87d411..c7fa8d8d0 100644 --- a/lang.py +++ b/lang.py @@ -2,16 +2,18 @@ # Based on 'cn.rs', generate entries that are not completed in other languages -import os -import glob +import os +import glob +import sys +import csv -def get_lang(lang): +def get_lang(lang): out = {} - for ln in open('./src/lang/%s.rs'%lang): + for ln in open('./src/lang/%s.rs'%lang): ln = ln.strip() if ln.startswith('("'): - k,v = line_split(ln) - out[k] = v + k, v = line_split(ln) + out[k] = v return out def line_split(line): @@ -19,28 +21,64 @@ def line_split(line): assert(len(toks) == 2) k = toks[0][2:] v = toks[1][:-3] - return k,v + return k, v -def main(): +def main(): + if len(sys.argv) == 1: + expand() + elif sys.argv[1] == '1': + to_csv() + else: + to_rs(sys.argv[1]) + + +def expand(): for fn in glob.glob('./src/lang/*'): lang = os.path.basename(fn)[:-3] if lang in ['en','cn']: continue - fw = open("%s.rs.gen"%lang, "wb+") dict = get_lang(lang) + fw = open("%s.rs"%lang, "wt") for line in open('./src/lang/cn.rs'): line_strip = line.strip() if line_strip.startswith('("'): - k,v = line_split(line_strip) + k, v = line_split(line_strip) if k in dict: - line = line.replace(v, dict[k]) + line = line.replace(v, dict[k]) else: - line = line.replace(v, "") - fw.write(line.encode()) + line = line.replace(v, "") + fw.write(line) else: - fw.write(line.encode()) + fw.write(line) fw.close() - os.remove("./src/lang/%s.rs"%lang) - os.rename(fw.name, "./src/lang/%s.rs"%lang) - -main() \ No newline at end of file + + +def to_csv(): + for fn in glob.glob('./src/lang/*.rs'): + lang = os.path.basename(fn)[:-3] + csvfile = open('./src/lang/%s.csv'%lang, "wt") + csvwriter = csv.writer(csvfile) + for line in open(fn): + line_strip = line.strip() + if line_strip.startswith('("'): + k, v = line_split(line_strip) + csvwriter.writerow([k, v]) + csvfile.close() + + +def to_rs(lang): + csvfile = open('%s.csv'%lang, "rt") + fw = open("./src/lang/%s.rs"%lang, "wt") + fw.write('''lazy_static::lazy_static! { +pub static ref T: std::collections::HashMap<&'static str, &'static str> = + [ +''') + for row in csv.reader(csvfile): + fw.write(' ("%s", "%s"),\n'%(row[0].replace('"', '\"'), row[1].replace('"', '\"'))) + fw.write(''' ].iter().cloned().collect(); +} +''') + fw.close() + + +main()