Fixed keyboard lang struct generation

* Fixed length hex strings
* Fill in missing elements with last valid
This commit is contained in:
Armin Novak 2020-02-24 12:12:26 +01:00
parent 30275e7ac3
commit 967bb471c7
1 changed files with 26 additions and 8 deletions

View File

@ -7,6 +7,7 @@ import os
import sys import sys
import requests import requests
import numpy as np import numpy as np
import traceback
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
from bs4 import element from bs4 import element
@ -50,7 +51,11 @@ def is_base(num, base):
except ValueError: except ValueError:
return False return False
def write_struct(fp, struct, name, url, base, typemap = None): def padhexa(v):
s = hex(v)
return '0x' + s[2:].zfill(8)
def write_struct(fp, struct, name, url, base, inv = False, typemap = None):
li = requests.get(url) li = requests.get(url)
if li.status_code != requests.codes.ok: if li.status_code != requests.codes.ok:
print('Could not fetch ' + str(url) + ', reponse code ' + str(li.status_code)) print('Could not fetch ' + str(url) + ', reponse code ' + str(li.status_code))
@ -65,6 +70,7 @@ def write_struct(fp, struct, name, url, base, typemap = None):
fp.write(h) fp.write(h)
fp.write(']\t') fp.write(']\t')
fp.write('*/\n') fp.write('*/\n')
last = [None] * 32
for language in languages: for language in languages:
fp.write('\t{ ') fp.write('\t{ ')
line = '' line = ''
@ -73,18 +79,29 @@ def write_struct(fp, struct, name, url, base, typemap = None):
try: try:
v = int(e, base=base) v = int(e, base=base)
switcher = { switcher = {
0: hex(v), 0: padhexa(v),
2: bin(v), 2: bin(v),
8: oct(v), 8: oct(v),
10: str(v), 10: str(v),
16: hex(v) 16: padhexa(v)
} }
line += switcher.get(base) + ', ' h = str(switcher.get(base))
if h != "None":
last[pos] = h
if inv:
line = h + ', ' + line
else:
line += h + ', '
except ValueError: except ValueError:
if typemap and typemap[pos] != str: if typemap and typemap[pos] != str:
line += 'xxxxxx,\t' line += str(last[pos]) + ',\t'
else: else:
line += '"' + e + '",\t' if e == "":
line += '"' + str(last[pos]) + '",\t'
else:
line += '"' + e + '",\t'
if e != "None":
last[pos] = str(e)
pos = pos + 1 pos = pos + 1
fp.write(line[:-2] + '},\n') fp.write(line[:-2] + '},\n')
fp.write('};\n') fp.write('};\n')
@ -92,14 +109,14 @@ def write_struct(fp, struct, name, url, base, typemap = None):
def update_lang_identifiers(fp): def update_lang_identifiers(fp):
# [Language identifier] [Primary language] [Prim. lang. identifier] [Prim. lang. symbol] [Sublanguage] [Sublang. identifier] [Sublang. symbol] # [Language identifier] [Primary language] [Prim. lang. identifier] [Prim. lang. symbol] [Sublanguage] [Sublang. identifier] [Sublang. symbol]
write_struct(fp, 'LanguageIdentifier', 'language_identifiers', 'https://docs.microsoft.com/en-us/windows/win32/intl/language-identifier-constants-and-strings', 16, [int, str, int, str, str, int, str]) write_struct(fp, 'LanguageIdentifier', 'language_identifiers', 'https://docs.microsoft.com/en-us/windows/win32/intl/language-identifier-constants-and-strings', 16, False, [int, str, int, str, str, int, str])
def update_code_pages(fp): def update_code_pages(fp):
write_struct(fp, 'CodePage', 'code_pages', 'https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers', 10) write_struct(fp, 'CodePage', 'code_pages', 'https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers', 10)
def update_input_locales(fp): def update_input_locales(fp):
write_struct(fp, 'KeyboardIdentifier', 'keyboard_identifiers', 'https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-vista/cc766503(v=ws.10)', 0) write_struct(fp, 'KeyboardIdentifier', 'keyboard_identifiers', 'https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-vista/cc766503(v=ws.10)', 0)
write_struct(fp, 'KeyboardIdentifier', 'keyboard_identifiers', 'https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-language-pack-default-values', 16) write_struct(fp, 'RDP_KEYBOARD_LAYOUT', 'RDP_KEYBOARD_LAYOUT_TABLE', 'https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-language-pack-default-values', 16, True)
try: try:
with open('language_identifiers.c', 'w') as fp: with open('language_identifiers.c', 'w') as fp:
@ -109,3 +126,4 @@ try:
update_input_locales(fp) update_input_locales(fp)
except: except:
print('exception cought') print('exception cought')
traceback.print_exc()