mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-05-14 05:52:47 +00:00
add helper script
This commit is contained in:
parent
28098a52c7
commit
0343eaf83c
1 changed files with 111 additions and 0 deletions
111
tools/layout_converter.py
Normal file
111
tools/layout_converter.py
Normal file
|
@ -0,0 +1,111 @@
|
|||
import pathlib
|
||||
import re
|
||||
|
||||
|
||||
def simple(files):
|
||||
mk = []
|
||||
kss = []
|
||||
for file in files:
|
||||
with open(file) as f:
|
||||
ks = []
|
||||
waiting_for_morekeys = None
|
||||
for line in f:
|
||||
if "moreKeys" in line and waiting_for_morekeys is not None:
|
||||
r = re.findall(r"&#x\w{4};", line)
|
||||
for x in r:
|
||||
replacement = x.replace(";", "").replace("&#x", "\\u").encode().decode('unicode-escape')
|
||||
line = line.replace(x, replacement)
|
||||
line = line.split("\"")[1]
|
||||
mk.append(waiting_for_morekeys + " " + line.replace(",", " "))
|
||||
waiting_for_morekeys = None
|
||||
if "keySpec" in line:
|
||||
r = re.findall(r"&#x\w{4};", line)
|
||||
if len(r) != 1:
|
||||
print("something wrong")
|
||||
c = r[0].replace(";", "").replace("&#x", "\\u").encode().decode('unicode-escape')
|
||||
print(c)
|
||||
ks.append(c)
|
||||
waiting_for_morekeys = c
|
||||
print("")
|
||||
kss.append(ks)
|
||||
print("[morekeys]\n")
|
||||
print("\n".join(mk))
|
||||
|
||||
|
||||
def shift(files):
|
||||
mk = []
|
||||
kss = []
|
||||
kss_shift = []
|
||||
for index, file in enumerate(files):
|
||||
with open(file) as f:
|
||||
shift = False
|
||||
ks = []
|
||||
ks_shift = []
|
||||
waiting_for_morekeys = None
|
||||
for line in f:
|
||||
if "alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted" in line:
|
||||
shift = True
|
||||
if "<default>" in line:
|
||||
shift = False
|
||||
if "keySpec" in line:
|
||||
l = line.split("\"")[1]
|
||||
r = re.findall(r"&#x\w{4};", line)
|
||||
for x in r:
|
||||
replacement = x.replace(";", "").replace("&#x", "\\u").encode().decode('unicode-escape')
|
||||
l = l.replace(x, replacement)
|
||||
r = re.findall(r"&#\w{4};", line)
|
||||
for x in r:
|
||||
replacement = int(x.replace(";", "").replace("&#", ""))
|
||||
l = l.replace(x, chr(replacement))
|
||||
c = l
|
||||
if shift:
|
||||
ks_shift.append(c)
|
||||
else:
|
||||
ks.append(c)
|
||||
waiting_for_morekeys = c
|
||||
if "moreKeys" in line and waiting_for_morekeys is not None:
|
||||
l = line.split("\"")[1]
|
||||
r = re.findall(r"&#x\w{4};", line)
|
||||
for x in r:
|
||||
replacement = x.replace(";", "").replace("&#x", "\\u").encode().decode('unicode-escape')
|
||||
l = l.replace(x, replacement)
|
||||
r = re.findall(r"&#\w{4};", l)
|
||||
for x in r:
|
||||
replacement = int(x.replace(";", "").replace("&#", ""))
|
||||
l = l.replace(x, chr(replacement))
|
||||
mk.append(waiting_for_morekeys + " " + l.replace(",", " "))
|
||||
waiting_for_morekeys = None
|
||||
if "/>" in line:
|
||||
waiting_for_morekeys = None
|
||||
kss.append(ks)
|
||||
kss_shift.append(ks_shift)
|
||||
if len(ks) != len(ks_shift):
|
||||
print(f"dammit, {len(ks)}, {len(ks_shift)}")
|
||||
print("[")
|
||||
for i, ks in enumerate(kss):
|
||||
print(" [")
|
||||
for j, k in enumerate(ks):
|
||||
print(" { \"$\": \"shift_state_selector\",")
|
||||
print(" \"manualOrLocked\": { \"label\": \"" + kss_shift[i][j] + "\" },")
|
||||
print(" \"default\": { \"label\": \"" + k + "\" }")
|
||||
print(" },")
|
||||
print(" ],")
|
||||
print("]\n")
|
||||
print("[morekeys]\n")
|
||||
print("\n".join(mk))
|
||||
|
||||
# select layout, run and copy the text for layout and moreKeys (for locale_key_texts)
|
||||
# note that additionalMoreKeys are ignored, these are often symbols (will change to be determined automatically at some point), and numbers (already determined automatically)
|
||||
# json layouts have additional commas in the end of arrays, should be removed manually
|
||||
d = pathlib.Path("../app/src/main/res/xml/")
|
||||
files = []
|
||||
for f in d.iterdir():
|
||||
if f.name.startswith("rowkeys") and "unijoy" in f.name and ("left" in f.name or "right" in f.name):
|
||||
files.append(f)
|
||||
|
||||
# shift for layouts where all keys change when shifted (alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted)
|
||||
# ignores extra attributes like labelFlags
|
||||
shift(files)
|
||||
|
||||
# simple for layouts that have no case switch
|
||||
#simple(files)
|
Loading…
Add table
Add a link
Reference in a new issue