diff --git a/check_layout.output b/check_layout.output index ef5cf8b..a781a83 100644 --- a/check_layout.output +++ b/check_layout.output @@ -61,14 +61,15 @@ Layout doesn't define some important keys, missing: f11_placeholder, f12_placeho 1 warnings # latn_bone Layout includes some ASCII punctuation but not all, missing: $ -Layout redefines the bottom row but some important keys are missing, missing: switch_backward +Layout redefines the bottom row but some important keys are missing, missing: cursor_left, cursor_right, loc end, loc home, loc page_down, loc page_up, loc switch_greekmath, loc voice_typing, switch_backward 2 warnings # latn_colemak 0 warnings # latn_dvorak 0 warnings # latn_neo2 -0 warnings +Layout redefines the bottom row but some important keys are missing, missing: loc end, loc home, loc page_down, loc page_up +1 warnings # latn_qwerty_br 0 warnings # latn_qwerty_cz diff --git a/check_layout.py b/check_layout.py index 23481ad..067098d 100644 --- a/check_layout.py +++ b/check_layout.py @@ -34,6 +34,15 @@ def unexpected_keys(keys, symbols, msg): if len(unexpected) > 0: warn("%s, unexpected: %s" % (msg, key_list_str(unexpected))) +# Write to [keys] and [dup]. +def parse_row_from_et(row, keys, dup): + for key in row: + for attr in key.keys(): + if attr.startswith("key"): + k = key.get(attr).removeprefix("\\") + if k in keys: dup.add(k) + keys.add(k) + def parse_layout(fname): keys = set() dup = set() @@ -41,12 +50,16 @@ def parse_layout(fname): if root.tag != "keyboard": return None for row in root: - for key in row: - for attr in key.keys(): - if attr.startswith("key"): - k = key.get(attr).removeprefix("\\") - if k in keys: dup.add(k) - keys.add(k) + parse_row_from_et(row, keys, dup) + return root, keys, dup + +def parse_row(fname): + keys = set() + dup = set() + root = ET.parse(fname).getroot() + if root.tag != "row": + return None + parse_row_from_et(root, keys, dup) return root, keys, dup def check_layout(layout): @@ -68,11 +81,7 @@ def check_layout(layout): "Layout contains function keys") unexpected_keys(keys, [""], "Layout contains empty strings") - bottom_row_keys = [ - "ctrl", "fn", "switch_numeric", "change_method", "switch_emoji", - "config", "switch_forward", "switch_backward", "enter", "action", - "left", "up", "right", "down", "space" - ] + _, bottom_row_keys, _ = parse_row("res/xml/bottom_row.xml") if root.get("bottom_row") == "false": missing_required(keys, bottom_row_keys,