87 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#!/usr/bin/env python3
 | 
						|
 | 
						|
import os
 | 
						|
import glob
 | 
						|
import sys
 | 
						|
import csv
 | 
						|
 | 
						|
def get_lang(lang):
 | 
						|
  out = {}
 | 
						|
  for ln in open('./src/lang/%s.rs'%lang, encoding='utf8'):
 | 
						|
    ln = ln.strip()
 | 
						|
    if ln.startswith('("'):
 | 
						|
      k, v = line_split(ln)
 | 
						|
      out[k] = v
 | 
						|
  return out
 | 
						|
 | 
						|
def line_split(line):
 | 
						|
    toks = line.split('", "')
 | 
						|
    if len(toks) != 2:
 | 
						|
        print(line)
 | 
						|
        assert(0)
 | 
						|
    k = toks[0][2:]
 | 
						|
    v = toks[1][:-3]
 | 
						|
    return k, v
 | 
						|
 | 
						|
 | 
						|
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','template']: continue
 | 
						|
    print(lang)
 | 
						|
    dict = get_lang(lang)
 | 
						|
    fw = open("./src/lang/%s.rs"%lang, "wt", encoding='utf8')
 | 
						|
    for line in open('./src/lang/template.rs', encoding='utf8'):
 | 
						|
      line_strip = line.strip()
 | 
						|
      if line_strip.startswith('("'):
 | 
						|
        k, v = line_split(line_strip)
 | 
						|
        if k in dict:
 | 
						|
          # embraced with " to avoid empty v
 | 
						|
          line = line.replace('"%s"'%v, '"%s"'%dict[k])
 | 
						|
        else:
 | 
						|
          line = line.replace(v, "")
 | 
						|
        fw.write(line)
 | 
						|
      else:
 | 
						|
        fw.write(line)
 | 
						|
    fw.close()
 | 
						|
 | 
						|
 | 
						|
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", encoding='utf8')
 | 
						|
    csvwriter = csv.writer(csvfile)
 | 
						|
    for line in open(fn, encoding='utf8'):
 | 
						|
      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", encoding='utf8')
 | 
						|
  fw = open("./src/lang/%s.rs"%lang, "wt", encoding='utf8')
 | 
						|
  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()
 |