2 # -*- coding: utf-8 -*-
4 from sortedcontainers import SortedDict
8 # TODO: auto-generate mutex layers
9 # TODO: auto-generate update_tri_layer (_state)
13 length = len(layout.uc_dict)
14 for key, value in layout.uc_dict.items():
17 yield (key, value, False)
19 yield (key, value, True)
23 if re.match("^[0-9]$", s):
24 return ("KC_{0}".format(s), " {0} ".format(s))
25 elif re.match("^[a-z]$", s):
26 return ("KC_{0}".format(s.upper()), " {0} ".format(s))
27 elif re.match("^[A-Z]$", s):
28 return ("S(KC_{0})".format(s), " {0} ".format(s))
29 elif re.match("^F[0-9]{1,2}$", s): # Fn, works from F0 to F99
30 return ("KC_{0}".format(s), "{0:^7}".format(s))
31 elif re.match("^DF[0-9]{1,2}$", s): # DFn, works from DF0 to DF99
32 return ("DF({0})".format(s[2:]), "{0:^7}".format(s))
33 elif re.match("^MO[0-9]{1,2}$", s): # MOn, works from MO0 to MO99
34 return ("MO({0})".format(s[2:]), "{0:^7}".format(s))
35 elif re.match("^OSL[0-9]{1,2}$", s): # OSLn, works from OSL0 to OSL99
36 return ("OSL({0})".format(s[3:]), "{0:^7}".format(s))
37 elif re.match("^TG[0-9]{1,2}$", s): # TGn, works from TG0 to TG99
38 return ("TG({0})".format(s[2:]), "{0:^7}".format(s))
39 elif re.match("^TO[0-9]{1,2}$", s): # Tn, works from TO0 to TO99
40 return ("TO({0})".format(s[2:]), "{0:^7}".format(s))
41 elif re.match("^TT[0-9]{1,2}$", s): # Tn, works from TT0 to TT99
42 return ("TT({0})".format(s[2:]), "{0:^7}".format(s))
43 elif s in layout.uc_dict:
44 return ("X("+s+")", " {0} ".format(chr(int(layout.uc_dict[s], 0))))
45 elif s in layout.qmk_dict:
46 return (layout.qmk_dict[s], "{0:^7}".format(s))
47 elif s == s.upper() and s.startswith("KC_"):
48 return (s, "{0:^7}".format(s[2:]))
50 return ("XXXXXXX", " {0} ".format(chr(128165)))
54 (kc, lgd) = translate(s)
59 (kc, lgd) = translate(s)
63 if __name__ == "__main__":
65 template = open("km_template.txt", mode="r")
66 output = open("keymap.c", mode="w", encoding='utf-8')
72 if line.startswith("//<enum/>"):
74 # output.write(str(layout.uc_dict))
75 for k, v, isLast in gen_uc_iter():
77 output.write(k + "\n")
79 output.write(k + ",\n")
80 if line.startswith("//<uc_map/>"):
82 for k, v, isLast in gen_uc_iter():
84 output.write(u"\t[{0}] = {1} // {2}\n".format(k, v, chr(int(v, 0))))
86 output.write(u"\t[{0}] = {1}, // {2}\n".format(k, v, chr(int(v, 0))))
87 if line.startswith("//<keymaps/>"):
89 counter = len(layout.layers)
92 for L in layout.layers:
95 output.write("/* Layer %d\n" % layer)
96 output.write(" * ------------------------------------------------- -------------------------------------------------\n")
97 output.write(" * |{0}|{1}|{2}|{3}|{4}|{5}| |{6}|{7}|{8}|{9}|{10}|{11}|\n".format(toLgd(L[0][0]), toLgd(L[0][1]), toLgd(L[0][2]), toLgd(L[0][3]), toLgd(L[0][4]), toLgd(L[0][5]), toLgd(L[0][6]), toLgd(L[0][7]), toLgd(L[0][8]), toLgd(L[0][9]), toLgd(L[0][10]), toLgd(L[0][11])))
98 output.write(" * ------------------------------------------------- -------------------------------------------------\n")
99 output.write(" * |{0}|{1}|{2}|{3}|{4}|{5}| |{6}|{7}|{8}|{9}|{10}|{11}|\n".format(toLgd(L[1][0]), toLgd(L[1][1]), toLgd(L[1][2]), toLgd(L[1][3]), toLgd(L[1][4]), toLgd(L[1][5]), toLgd(L[1][6]), toLgd(L[1][7]), toLgd(L[1][8]), toLgd(L[1][9]), toLgd(L[1][10]), toLgd(L[1][11])))
100 output.write(" * ------------------------------------------------- -------------------------------------------------\n")
101 output.write(" * |{0}|{1}|{2}|{3}|{4}|{5}| |{6}|{7}|{8}|{9}|{10}|{11}|\n".format(toLgd(L[2][0]), toLgd(L[2][1]), toLgd(L[2][2]), toLgd(L[2][3]), toLgd(L[2][4]), toLgd(L[2][5]), toLgd(L[2][6]), toLgd(L[2][7]), toLgd(L[2][8]), toLgd(L[2][9]), toLgd(L[2][10]), toLgd(L[2][11])))
102 output.write(" * -----------------------------------------------------------------------------------------------------------------\n")
103 output.write(" * {0} {1} {2} |{3}|{4}|{5}|{6}|{7}|{8}| {9} {10} {11}".format(toLgd(L[3][0]), toLgd(L[3][1]), toLgd(L[3][2]), toLgd(L[3][3]), toLgd(L[3][4]), toLgd(L[3][5]), toLgd(L[3][6]), toLgd(L[3][7]), toLgd(L[3][8]), toLgd(L[3][9]), toLgd(L[3][10]), toLgd(L[3][11])).rstrip()+"\n")
104 output.write(" * -------------------------------------------------\n")
105 output.write(" */\n")
107 l_code = '\tLAYOUT_ortho_4x12(\n'
108 for r in range(r_counter):
112 for c in range(c_counter):
116 l_code += "%s" % toKC(L[r][c])
117 if r_counter or c_counter: