check_layout: Warn about duplicate keys

This commit is contained in:
Jules Aguillon 2023-08-06 20:09:53 +02:00
parent 8d7b3efeb1
commit eeae964ae6
2 changed files with 18 additions and 8 deletions

View File

@ -6,8 +6,9 @@ Layout doesn't define some important keys, missing: f11_placeholder, f12_placeho
Layout includes some ASCII punctuation but not all, missing: ", %, ', +, ,, ., :, ;, <, =, >, ?, `, |, ~ Layout includes some ASCII punctuation but not all, missing: ", %, ', +, ,, ., :, ;, <, =, >, ?, `, |, ~
1 warnings 1 warnings
# res/xml/arab_pc_ir.xml # res/xml/arab_pc_ir.xml
Duplicate keys: (, )
Layout includes some ASCII punctuation but not all, missing: ", %, ', ,, /, ;, <, =, >, ?, [, \, ], `, {, |, } Layout includes some ASCII punctuation but not all, missing: ", %, ', ,, /, ;, <, =, >, ?, [, \, ], `, {, |, }
1 warnings 2 warnings
# res/xml/arab_pc.xml # res/xml/arab_pc.xml
Layout includes some ASCII punctuation but not all, missing: !, ', +, ;, ?, \, | Layout includes some ASCII punctuation but not all, missing: !, ', +, ;, ?, \, |
1 warnings 1 warnings
@ -33,11 +34,13 @@ Layout includes some ASCII punctuation but not all, missing: #, $, %, &, ', (, )
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
2 warnings 2 warnings
# res/xml/deva_inscript.xml # res/xml/deva_inscript.xml
Duplicate keys: , ।
Layout includes some ASCII punctuation but not all, missing: ", $, ', ^, _, `, | Layout includes some ASCII punctuation but not all, missing: ", $, ', ^, _, `, |
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
2 warnings 3 warnings
# res/xml/grek_qwerty.xml # res/xml/grek_qwerty.xml
0 warnings Duplicate keys: ;
1 warnings
# res/xml/hang_dubeolsik_kr.xml # res/xml/hang_dubeolsik_kr.xml
0 warnings 0 warnings
# res/xml/hebr_1_il.xml # res/xml/hebr_1_il.xml
@ -57,8 +60,9 @@ Layout redefines the bottom row but some important keys are missing, missing: sw
# res/xml/latn_dvorak.xml # res/xml/latn_dvorak.xml
0 warnings 0 warnings
# res/xml/latn_neo2.xml # res/xml/latn_neo2.xml
Duplicate keys: -
Layout redefines the bottom row but some important keys are missing, missing: switch_forward Layout redefines the bottom row but some important keys are missing, missing: switch_forward
1 warnings 2 warnings
# res/xml/latn_qwerty_br.xml # res/xml/latn_qwerty_br.xml
0 warnings 0 warnings
# res/xml/latn_qwerty_es.xml # res/xml/latn_qwerty_es.xml
@ -74,7 +78,8 @@ Layout redefines the bottom row but some important keys are missing, missing: sw
# res/xml/latn_qwerty_ro.xml # res/xml/latn_qwerty_ro.xml
0 warnings 0 warnings
# res/xml/latn_qwerty_se.xml # res/xml/latn_qwerty_se.xml
0 warnings Duplicate keys: !, ', ,, -, ., ?
1 warnings
# res/xml/latn_qwerty_tr.xml # res/xml/latn_qwerty_tr.xml
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
1 warnings 1 warnings

View File

@ -36,17 +36,22 @@ def unexpected_keys(keys, symbols, msg):
def parse_layout(fname): def parse_layout(fname):
keys = set() keys = set()
dup = set()
root = ET.parse(fname).getroot() root = ET.parse(fname).getroot()
if root.tag != "keyboard": if root.tag != "keyboard":
return None return None
for row in root: for row in root:
for key in row: for key in row:
for attr in key.keys(): for attr in key.keys():
keys.add(key.get(attr).removeprefix("\\")) if attr.startswith("key"):
return root, keys k = key.get(attr).removeprefix("\\")
if k in keys: dup.add(k)
keys.add(k)
return root, keys, dup
def check_layout(layout): def check_layout(layout):
root, keys = layout root, keys, dup = layout
if len(dup) > 0: warn("Duplicate keys: " + key_list_str(dup))
missing_some_of(keys, "~!@#$%^&*(){}`[]=\\-_;:/.,?<>'\"+|", "ASCII punctuation") missing_some_of(keys, "~!@#$%^&*(){}`[]=\\-_;:/.,?<>'\"+|", "ASCII punctuation")
missing_some_of(keys, "0123456789", "digits") missing_some_of(keys, "0123456789", "digits")
missing_required(keys, missing_required(keys,