91 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.4 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
 | |
|     # Replace fixed position.
 | |
|     # Because toks[1] may be v") or v"),
 | |
|     k = toks[0][toks[0].find('"') + 1:]
 | |
|     v = toks[1][:toks[1].rfind('"')]
 | |
|     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/*.rs'):
 | |
|         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()
 |