-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgen_lang.py
executable file
·82 lines (75 loc) · 2.84 KB
/
gen_lang.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/python3
import sys, getopt, csv
import itertools
def ranges(i):
for a, b in itertools.groupby(enumerate(i), lambda pair: pair[1] - pair[0]):
b = list(b)
yield b[0][1]
yield b[-1][1]
def cencode(str):
return str.encode("utf-8").decode("latin-1").encode("unicode-escape").decode("ascii")
def main(argv):
language_names = []
languages = []
ids = []
codepoints = []
def addcodes(s):
for ch in s:
code = ord(ch)
if code > 127 and code not in codepoints:
codepoints.append(code)
with open(argv[0], newline='') as csvfile:
langreader = csv.reader(csvfile)
row1 = next(langreader)
for lang in row1[1:]:
language_names.append(lang.split('|')[0])
addcodes(lang.split('|')[0])
languages.append({
"id": lang.split('|')[1],
"strings": []
})
for row in langreader:
ids.append(row[0].replace(' ','_'))
langidx = 0
for translated in row[1:]:
addcodes(translated)
languages[langidx]["strings"].append(translated)
langidx += 1
codepoints.sort()
with open(argv[1], "w") as csource:
csource.write("//Automatically generated\n")
csource.write("#define LANGUAGE_COUNT (%d)\n" % len(languages))
csource.write("static const char* language_names[] = {\n")
for lang in language_names:
csource.write(" \"%s\",\n" % cencode(lang))
csource.write("};\n")
csource.write("static const char* language_codes[] = {\n")
for lang in languages:
csource.write(" \"%s\",\n" % cencode(lang["id"]))
csource.write("};\n")
for lang in languages:
csource.write("static const char* language_%s[] = {\n" % lang["id"])
for translated in lang["strings"]:
csource.write(" \"%s\",\n" % cencode(translated))
csource.write("};\n")
csource.write("static const char** current_language = language_EN;\n")
csource.write("static const char** languages[] = {\n")
for lang in languages:
csource.write(" language_%s,\n" % lang["id"])
csource.write("};\n")
csource.write("static ImWchar lang_ranges[] = {\n 32, 127, ")
k = 0
for r in ranges(codepoints):
k += 1
if k > 16:
csource.write("\n ")
k = 0
csource.write("0x%x, " % r)
csource.write("0\n};\n")
ids_index = 0
for id in ids:
csource.write("#define STR_%s (current_language[%d])\n" % (id, ids_index))
ids_index += 1
csource.write("#define STR_ID_COUNT (%s)\n" % ids_index)
if __name__ == "__main__":
main(sys.argv[1:])