qmk_firmware/util/lang_conv.py

66 lines
2.1 KiB
Python

from pathlib import Path
langs = set()
files = Path('quantum/keymap_extras/').glob('keymap_*.h')
for file in files:
langs.add(file.stem.replace('keymap_', ''))
for lang in langs:
try:
file = Path(f'quantum/keymap_extras/keymap_{lang}.h')
print(f'Reading:{file}')
collect = None
out = []
out += ['{']
out += [' "aliases": {']
lines = file.read_text(encoding='utf-8').split('\n')
for line in lines:
if line.startswith("// Row"):
# print(line)
continue
elif line.startswith("/*******************************************************************************"):
raise Exception(f'Skipping:{file}')
elif '/*' in line:
collect = [line]
elif '*/' in line:
collect += [line]
if 'copyright' in collect[0].lower():
collect = None
continue
out += collect
collect = None
elif collect:
collect += [line]
elif '#define' in line:
define = line.split()
while len(define) < 5:
define.append("")
if define[4] == "(backslash)":
define[4] = '\\\\'
define[4] = " ".join(define[4:]).strip()
define[4] = define[4].replace('"', '\\"')
if define[4]:
out += [f' "{define[2]}": {{']
out += [f' "key": "{define[1]}",']
out += [f' "label": "{define[4]}",']
out += [f' }}']
else:
out += [f' "{define[2]}": {{']
out += [f' "key": "{define[1]}"']
out += [f' }}']
out += [' }']
out += ['}']
dump = Path(f'data/constants/keycodes/extras/keycodes_{lang}_0.0.1.hjson')
print(f'Writing:{dump}')
dump.write_text("\n".join(out), encoding='utf-8')
except Exception as e:
print(e)