| 
									
										
										
										
											2022-05-14 11:46:20 +08:00
										 |  |  | #!/usr/bin/env python3 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-26 01:06:34 +08:00
										 |  |  | import os | 
					
						
							|  |  |  | import glob | 
					
						
							|  |  |  | import sys | 
					
						
							|  |  |  | import csv | 
					
						
							| 
									
										
										
										
											2022-12-25 19:23:03 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | def get_lang(lang): | 
					
						
							|  |  |  |   out = {} | 
					
						
							| 
									
										
										
										
											2022-12-27 22:55:54 +08:00
										 |  |  |   for ln in open('./src/lang/%s.rs'%lang, encoding='utf8'): | 
					
						
							| 
									
										
										
										
											2022-05-14 11:46:20 +08:00
										 |  |  |     ln = ln.strip() | 
					
						
							|  |  |  |     if ln.startswith('("'): | 
					
						
							| 
									
										
										
										
											2022-07-26 01:06:34 +08:00
										 |  |  |       k, v = line_split(ln) | 
					
						
							|  |  |  |       out[k] = v | 
					
						
							| 
									
										
										
										
											2022-12-25 19:23:03 +03:00
										 |  |  |   return out | 
					
						
							| 
									
										
										
										
											2022-05-14 11:46:20 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | def line_split(line): | 
					
						
							| 
									
										
										
										
											2022-12-25 19:23:03 +03:00
										 |  |  |     toks = line.split('", "') | 
					
						
							| 
									
										
										
										
											2022-12-04 18:39:59 +08:00
										 |  |  |     if len(toks) != 2: | 
					
						
							|  |  |  |         print(line) | 
					
						
							|  |  |  |         assert(0) | 
					
						
							| 
									
										
										
										
											2023-05-12 09:43:27 +08:00
										 |  |  |     # Replace fixed position. | 
					
						
							|  |  |  |     # Because toks[1] may be v") or v"), | 
					
						
							|  |  |  |     k = toks[0][toks[0].find('"') + 1:] | 
					
						
							|  |  |  |     v = toks[1][:toks[1].rfind('"')] | 
					
						
							| 
									
										
										
										
											2022-07-26 01:06:34 +08:00
										 |  |  |     return k, v | 
					
						
							| 
									
										
										
										
											2022-05-14 11:46:20 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-26 01:06:34 +08:00
										 |  |  | def main(): | 
					
						
							|  |  |  |   if len(sys.argv) == 1: | 
					
						
							|  |  |  |     expand() | 
					
						
							|  |  |  |   elif sys.argv[1] == '1': | 
					
						
							|  |  |  |     to_csv() | 
					
						
							|  |  |  |   else: | 
					
						
							|  |  |  |     to_rs(sys.argv[1]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def expand(): | 
					
						
							| 
									
										
										
										
											2023-05-18 23:57:48 +08:00
										 |  |  |   for fn in glob.glob('./src/lang/*.rs'): | 
					
						
							| 
									
										
										
										
											2022-12-25 19:23:03 +03:00
										 |  |  |     lang = os.path.basename(fn)[:-3] | 
					
						
							| 
									
										
										
										
											2023-03-01 10:12:10 +09:00
										 |  |  |     if lang in ['en','template']: continue | 
					
						
							| 
									
										
										
										
											2022-12-04 18:39:59 +08:00
										 |  |  |     print(lang) | 
					
						
							| 
									
										
										
										
											2022-05-14 11:46:20 +08:00
										 |  |  |     dict = get_lang(lang) | 
					
						
							| 
									
										
										
										
											2022-12-27 22:55:54 +08:00
										 |  |  |     fw = open("./src/lang/%s.rs"%lang, "wt", encoding='utf8') | 
					
						
							| 
									
										
										
										
											2023-03-01 10:12:10 +09:00
										 |  |  |     for line in open('./src/lang/template.rs', encoding='utf8'): | 
					
						
							| 
									
										
										
										
											2022-05-14 11:46:20 +08:00
										 |  |  |       line_strip = line.strip() | 
					
						
							|  |  |  |       if line_strip.startswith('("'): | 
					
						
							| 
									
										
										
										
											2022-07-26 01:06:34 +08:00
										 |  |  |         k, v = line_split(line_strip) | 
					
						
							| 
									
										
										
										
											2022-05-14 11:46:20 +08:00
										 |  |  |         if k in dict: | 
					
						
							| 
									
										
										
										
											2023-01-09 02:30:25 -05:00
										 |  |  |           # embraced with " to avoid empty v | 
					
						
							| 
									
										
										
										
											2022-12-27 23:26:11 +08:00
										 |  |  |           line = line.replace('"%s"'%v, '"%s"'%dict[k]) | 
					
						
							| 
									
										
										
										
											2022-05-14 11:46:20 +08:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2022-07-26 01:06:34 +08:00
										 |  |  |           line = line.replace(v, "") | 
					
						
							|  |  |  |         fw.write(line) | 
					
						
							| 
									
										
										
										
											2022-05-14 11:46:20 +08:00
										 |  |  |       else: | 
					
						
							| 
									
										
										
										
											2022-07-26 01:06:34 +08:00
										 |  |  |         fw.write(line) | 
					
						
							| 
									
										
										
										
											2022-05-14 11:46:20 +08:00
										 |  |  |     fw.close() | 
					
						
							| 
									
										
										
										
											2022-12-25 19:23:03 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-26 01:06:34 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | def to_csv(): | 
					
						
							| 
									
										
										
										
											2022-12-25 19:23:03 +03:00
										 |  |  |   for fn in glob.glob('./src/lang/*.rs'): | 
					
						
							|  |  |  |     lang = os.path.basename(fn)[:-3] | 
					
						
							| 
									
										
										
										
											2022-12-27 22:55:54 +08:00
										 |  |  |     csvfile = open('./src/lang/%s.csv'%lang, "wt", encoding='utf8') | 
					
						
							| 
									
										
										
										
											2022-07-26 01:06:34 +08:00
										 |  |  |     csvwriter = csv.writer(csvfile) | 
					
						
							| 
									
										
										
										
											2022-12-27 22:55:54 +08:00
										 |  |  |     for line in open(fn, encoding='utf8'): | 
					
						
							| 
									
										
										
										
											2022-07-26 01:06:34 +08:00
										 |  |  |       line_strip = line.strip() | 
					
						
							|  |  |  |       if line_strip.startswith('("'): | 
					
						
							|  |  |  |         k, v = line_split(line_strip) | 
					
						
							|  |  |  |         csvwriter.writerow([k, v]) | 
					
						
							|  |  |  |     csvfile.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def to_rs(lang): | 
					
						
							| 
									
										
										
										
											2022-12-27 22:55:54 +08:00
										 |  |  |   csvfile = open('%s.csv'%lang, "rt", encoding='utf8') | 
					
						
							|  |  |  |   fw = open("./src/lang/%s.rs"%lang, "wt", encoding='utf8') | 
					
						
							| 
									
										
										
										
											2022-07-26 01:06:34 +08:00
										 |  |  |   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() |