feat: some clean up and validation of multiboot header
This commit is contained in:
810
generators/scancodes/set1.json
Normal file
810
generators/scancodes/set1.json
Normal file
@@ -0,0 +1,810 @@
|
||||
[
|
||||
[
|
||||
"1",
|
||||
"29/A9",
|
||||
"0E/F0 0E",
|
||||
"0E/F0 0E",
|
||||
"`",
|
||||
"~"
|
||||
],
|
||||
[
|
||||
"2",
|
||||
"02/82",
|
||||
"16/F0 16",
|
||||
"16/F0 16",
|
||||
"1",
|
||||
"!"
|
||||
],
|
||||
[
|
||||
"3",
|
||||
"03/83",
|
||||
"1E/F0 1E",
|
||||
"1E/F0 1E",
|
||||
"2",
|
||||
"@"
|
||||
],
|
||||
[
|
||||
"4",
|
||||
"04/84",
|
||||
"26/F0 26",
|
||||
"26/F0 26",
|
||||
"3",
|
||||
"#"
|
||||
],
|
||||
[
|
||||
"5",
|
||||
"05/85",
|
||||
"25/F0 25",
|
||||
"25/F0 25",
|
||||
"4",
|
||||
"$"
|
||||
],
|
||||
[
|
||||
"6",
|
||||
"06/86",
|
||||
"2E/F0 2E",
|
||||
"2E/F0 2E",
|
||||
"5",
|
||||
"%"
|
||||
],
|
||||
[
|
||||
"7",
|
||||
"07/87",
|
||||
"36/F0 36",
|
||||
"36/F0 36",
|
||||
"6",
|
||||
"^"
|
||||
],
|
||||
[
|
||||
"8",
|
||||
"08/88",
|
||||
"3D/F0 3D",
|
||||
"3D/F0 3D",
|
||||
"7",
|
||||
"&"
|
||||
],
|
||||
[
|
||||
"9",
|
||||
"09/89",
|
||||
"3E/F0 3E",
|
||||
"3E/F0 3E",
|
||||
"8",
|
||||
"*"
|
||||
],
|
||||
[
|
||||
"10",
|
||||
"0A/8A",
|
||||
"46/F0 46",
|
||||
"46/F0 46",
|
||||
"9",
|
||||
"("
|
||||
],
|
||||
[
|
||||
"11",
|
||||
"0B/8B",
|
||||
"45/F0 45",
|
||||
"45/F0 45",
|
||||
"0",
|
||||
")"
|
||||
],
|
||||
[
|
||||
"12",
|
||||
"0C/8C",
|
||||
"4E/F0 4E",
|
||||
"4E/F0 4E",
|
||||
"-",
|
||||
"_"
|
||||
],
|
||||
[
|
||||
"13",
|
||||
"0D/8D",
|
||||
"55/F0 55",
|
||||
"55/F0 55",
|
||||
"=",
|
||||
"+"
|
||||
],
|
||||
[
|
||||
"15",
|
||||
"0E/8E",
|
||||
"66/F0 66",
|
||||
"66/F0 66",
|
||||
"Backspace",
|
||||
""
|
||||
],
|
||||
[
|
||||
"16",
|
||||
"0F/8F",
|
||||
"0D/F0 0D",
|
||||
"0D/F0 0D",
|
||||
"Tab",
|
||||
""
|
||||
],
|
||||
[
|
||||
"17",
|
||||
"10/90",
|
||||
"15/F0 15",
|
||||
"15/F0 15",
|
||||
"q",
|
||||
"Q"
|
||||
],
|
||||
[
|
||||
"18",
|
||||
"11/91",
|
||||
"1D/F0 1D",
|
||||
"1D/F0 1D",
|
||||
"w",
|
||||
"W"
|
||||
],
|
||||
[
|
||||
"19",
|
||||
"12/92",
|
||||
"24/F0 24",
|
||||
"24/F0 24",
|
||||
"e",
|
||||
"E"
|
||||
],
|
||||
[
|
||||
"20",
|
||||
"13/93",
|
||||
"2D/F0 2D",
|
||||
"2D/F0 2D",
|
||||
"r",
|
||||
"R"
|
||||
],
|
||||
[
|
||||
"21",
|
||||
"14/94",
|
||||
"2C/F0 2C",
|
||||
"2C/F0 2C",
|
||||
"t",
|
||||
"T"
|
||||
],
|
||||
[
|
||||
"22",
|
||||
"15/95",
|
||||
"35/F0 35",
|
||||
"35/F0 35",
|
||||
"y",
|
||||
"Y"
|
||||
],
|
||||
[
|
||||
"23",
|
||||
"16/96",
|
||||
"3C/F0 3C",
|
||||
"3C/F0 3C",
|
||||
"u",
|
||||
"U"
|
||||
],
|
||||
[
|
||||
"24",
|
||||
"17/97",
|
||||
"43/F0 43",
|
||||
"43/F0 43",
|
||||
"i",
|
||||
"I"
|
||||
],
|
||||
[
|
||||
"25",
|
||||
"18/98",
|
||||
"44/F0 44",
|
||||
"44/F0 44",
|
||||
"o",
|
||||
"O"
|
||||
],
|
||||
[
|
||||
"26",
|
||||
"19/99",
|
||||
"4D/F0 4D",
|
||||
"4D/F0 4D",
|
||||
"p",
|
||||
"P"
|
||||
],
|
||||
[
|
||||
"27",
|
||||
"1A/9A",
|
||||
"54/F0 54",
|
||||
"54/F0 54",
|
||||
"[",
|
||||
"{"
|
||||
],
|
||||
[
|
||||
"28",
|
||||
"1B/9B",
|
||||
"5B/F0 5B",
|
||||
"5B/F0 5B",
|
||||
"]",
|
||||
"}"
|
||||
],
|
||||
[
|
||||
"30",
|
||||
"3A/BA",
|
||||
"58/F0 58",
|
||||
"58/F0 58",
|
||||
"Caps Lock",
|
||||
""
|
||||
],
|
||||
[
|
||||
"31",
|
||||
"1E/9E",
|
||||
"1C/F0 1C",
|
||||
"1C/F0 1C",
|
||||
"a",
|
||||
"A"
|
||||
],
|
||||
[
|
||||
"32",
|
||||
"1F/9F",
|
||||
"1B/F0 1B",
|
||||
"1B/F0 1B",
|
||||
"s",
|
||||
"S"
|
||||
],
|
||||
[
|
||||
"33",
|
||||
"20/A0",
|
||||
"23/F0 23",
|
||||
"23/F0 23",
|
||||
"d",
|
||||
"D"
|
||||
],
|
||||
[
|
||||
"34",
|
||||
"21/A1",
|
||||
"2B/F0 2B",
|
||||
"2B/F0 2B",
|
||||
"f",
|
||||
"F"
|
||||
],
|
||||
[
|
||||
"35",
|
||||
"22/A2",
|
||||
"34/F0 34",
|
||||
"34/F0 34",
|
||||
"g",
|
||||
"G"
|
||||
],
|
||||
[
|
||||
"36",
|
||||
"23/A3",
|
||||
"33/F0 33",
|
||||
"33/F0 33",
|
||||
"h",
|
||||
"H"
|
||||
],
|
||||
[
|
||||
"37",
|
||||
"24/A4",
|
||||
"3B/F0 3B",
|
||||
"3B/F0 3B",
|
||||
"j",
|
||||
"J"
|
||||
],
|
||||
[
|
||||
"38",
|
||||
"25/A5",
|
||||
"42/F0 42",
|
||||
"42/F0 42",
|
||||
"k",
|
||||
"K"
|
||||
],
|
||||
[
|
||||
"39",
|
||||
"26/A6",
|
||||
"4B/F0 4B",
|
||||
"4B/F0 4B",
|
||||
"l",
|
||||
"L"
|
||||
],
|
||||
[
|
||||
"40",
|
||||
"27/A7",
|
||||
"4C/F0 4C",
|
||||
"4C/F0 4C",
|
||||
";",
|
||||
":"
|
||||
],
|
||||
[
|
||||
"41",
|
||||
"28/A8",
|
||||
"52/F0 52",
|
||||
"52/F0 52",
|
||||
"'",
|
||||
"\""
|
||||
],
|
||||
[
|
||||
"43",
|
||||
"1C/9C",
|
||||
"5A/F0 5A",
|
||||
"5A/F0 5A",
|
||||
"Enter",
|
||||
"Enter"
|
||||
],
|
||||
[
|
||||
"44",
|
||||
"2A/AA",
|
||||
"12/F0 12",
|
||||
"12/F0 12",
|
||||
"Left Shift",
|
||||
""
|
||||
],
|
||||
[
|
||||
"46",
|
||||
"2C/AC",
|
||||
"1A/F0 1A",
|
||||
"1A/F0 1A",
|
||||
"z",
|
||||
"Z"
|
||||
],
|
||||
[
|
||||
"47",
|
||||
"2D/AD",
|
||||
"22/F0 22",
|
||||
"22/F0 22",
|
||||
"x",
|
||||
"X"
|
||||
],
|
||||
[
|
||||
"48",
|
||||
"2E/AE",
|
||||
"21/F0 21",
|
||||
"21/F0 21",
|
||||
"c",
|
||||
"C"
|
||||
],
|
||||
[
|
||||
"49",
|
||||
"2F/AF",
|
||||
"2A/F0 2A",
|
||||
"2A/F0 2A",
|
||||
"v",
|
||||
"V"
|
||||
],
|
||||
[
|
||||
"50",
|
||||
"30/B0",
|
||||
"32/F0 32",
|
||||
"32/F0 32",
|
||||
"b",
|
||||
"B"
|
||||
],
|
||||
[
|
||||
"51",
|
||||
"31/B1",
|
||||
"31/F0 31",
|
||||
"31/F0 31",
|
||||
"n",
|
||||
"N"
|
||||
],
|
||||
[
|
||||
"52",
|
||||
"32/B2",
|
||||
"3A/F0 3A",
|
||||
"3A/F0 3A",
|
||||
"m",
|
||||
"M"
|
||||
],
|
||||
[
|
||||
"53",
|
||||
"33/B3",
|
||||
"41/F0 41",
|
||||
"41/F0 41",
|
||||
",",
|
||||
"<"
|
||||
],
|
||||
[
|
||||
"54",
|
||||
"34/B4",
|
||||
"49/F0 49",
|
||||
"49/F0 49",
|
||||
".",
|
||||
">"
|
||||
],
|
||||
[
|
||||
"55",
|
||||
"35/B5",
|
||||
"4A/F0 4A",
|
||||
"4A/F0 4A",
|
||||
"/",
|
||||
"?"
|
||||
],
|
||||
[
|
||||
"57",
|
||||
"36/B6",
|
||||
"59/F0 59",
|
||||
"59/F0 59",
|
||||
"Right Shift",
|
||||
""
|
||||
],
|
||||
[
|
||||
"58",
|
||||
"1D/9D",
|
||||
"14/F0 14",
|
||||
"11/F0 11",
|
||||
"Left Ctrl",
|
||||
""
|
||||
],
|
||||
[
|
||||
"60",
|
||||
"38/B8",
|
||||
"11/F0 11",
|
||||
"19/F0 19",
|
||||
"Left Alt",
|
||||
""
|
||||
],
|
||||
[
|
||||
"61",
|
||||
"39/B9",
|
||||
"29/F0 29",
|
||||
"29/F0 29",
|
||||
"Spacebar",
|
||||
""
|
||||
],
|
||||
[
|
||||
"62",
|
||||
"E0 38/E0 B8",
|
||||
"E0 11/E0 F0 11",
|
||||
"39/F0 39",
|
||||
"Right Alt",
|
||||
""
|
||||
],
|
||||
[
|
||||
"64",
|
||||
"E0 1D/E0 9D",
|
||||
"E0 14/E0 F0 14",
|
||||
"58/F0 58",
|
||||
"Right Ctrl",
|
||||
""
|
||||
],
|
||||
[
|
||||
"75",
|
||||
"E0 52/E0 D2 (base)",
|
||||
"E0 70/E0 F0 70 (base)",
|
||||
"67/F0 67",
|
||||
"Insert",
|
||||
""
|
||||
],
|
||||
[
|
||||
"76",
|
||||
"E0 4B/E0 CB (base)",
|
||||
"E0 71/E0 F0 71 (base)",
|
||||
"64/F0 64",
|
||||
"Delete",
|
||||
""
|
||||
],
|
||||
[
|
||||
"79",
|
||||
"E0 4B/E0 CB (base)",
|
||||
"E0 6B/E0 F0 6B (base)",
|
||||
"61/F0 61",
|
||||
"Left Arrow",
|
||||
""
|
||||
],
|
||||
[
|
||||
"80",
|
||||
"E0 47/E0 C7 (base)",
|
||||
"E0 6C/E0 F0 6C (base)",
|
||||
"6E/F0 6E",
|
||||
"Home",
|
||||
""
|
||||
],
|
||||
[
|
||||
"81",
|
||||
"E0 4F/E0 CF (base)",
|
||||
"E0 69/E0 F0 69 (base)",
|
||||
"65/F0 65",
|
||||
"End",
|
||||
""
|
||||
],
|
||||
[
|
||||
"83",
|
||||
"E0 48/E0 C8 (base)",
|
||||
"E0 75/E0 F0 75 (base)",
|
||||
"63/F0 63",
|
||||
"Up Arrow",
|
||||
""
|
||||
],
|
||||
[
|
||||
"84",
|
||||
"E0 50/E0 D0 (base)",
|
||||
"E0 72/E0 F0 72 (base)",
|
||||
"60/F0 60",
|
||||
"Down Arrow",
|
||||
""
|
||||
],
|
||||
[
|
||||
"85",
|
||||
"E0 49/E0 C9 (base)",
|
||||
"E0 7D/E0 F0 7D (base)",
|
||||
"6F/F0 6F",
|
||||
"Page Up",
|
||||
""
|
||||
],
|
||||
[
|
||||
"86",
|
||||
"E0 51/E0 D1 (base)",
|
||||
"E0 7A/E0 F0 7A (base)",
|
||||
"6D/F0 6D",
|
||||
"Page Down",
|
||||
""
|
||||
],
|
||||
[
|
||||
"89",
|
||||
"E0 4D/E0 CD (base)",
|
||||
"E0 74/E0 F0 74 (base)",
|
||||
"6A/F0 6A",
|
||||
"Right Arrow",
|
||||
""
|
||||
],
|
||||
[
|
||||
"90",
|
||||
"45/C5",
|
||||
"77/F0 77",
|
||||
"76/F0 76",
|
||||
"Num Lock",
|
||||
""
|
||||
],
|
||||
[
|
||||
"91",
|
||||
"47/C7",
|
||||
"6C/F0 6C",
|
||||
"6C/F0 6C",
|
||||
"Keypad 7",
|
||||
""
|
||||
],
|
||||
[
|
||||
"92",
|
||||
"4B/CB",
|
||||
"6B/F0 6B",
|
||||
"6B/F0 6B",
|
||||
"Keypad 4",
|
||||
""
|
||||
],
|
||||
[
|
||||
"93",
|
||||
"4F/CF",
|
||||
"69/F0 69",
|
||||
"69/F0 69",
|
||||
"Keypad 1",
|
||||
""
|
||||
],
|
||||
[
|
||||
"95",
|
||||
"E0 35/E0 B5 (base)",
|
||||
"E0 4A/E0 F0 4A (base)",
|
||||
"77/F0 77",
|
||||
"Keypad /",
|
||||
""
|
||||
],
|
||||
[
|
||||
"96",
|
||||
"48/C8",
|
||||
"75/F0 75",
|
||||
"75/F0 75",
|
||||
"Keypad 8",
|
||||
""
|
||||
],
|
||||
[
|
||||
"97",
|
||||
"4C/CC",
|
||||
"73/F0 73",
|
||||
"73/F0 73",
|
||||
"Keypad 5",
|
||||
""
|
||||
],
|
||||
[
|
||||
"98",
|
||||
"50/D0",
|
||||
"72/F0 72",
|
||||
"72/F0 72",
|
||||
"Keypad 2",
|
||||
""
|
||||
],
|
||||
[
|
||||
"99",
|
||||
"52/D2",
|
||||
"70/F0 70",
|
||||
"70/F0 70",
|
||||
"Keypad 0",
|
||||
""
|
||||
],
|
||||
[
|
||||
"100",
|
||||
"37/B7",
|
||||
"7C/F0 7C",
|
||||
"7E/F0 7E",
|
||||
"Keypad *",
|
||||
""
|
||||
],
|
||||
[
|
||||
"101",
|
||||
"49/C9",
|
||||
"7D/F0 7D",
|
||||
"7D/F0 7D",
|
||||
"Keypad 9",
|
||||
""
|
||||
],
|
||||
[
|
||||
"102",
|
||||
"4D/CD",
|
||||
"74/F0 74",
|
||||
"74/F0 74",
|
||||
"Keypad 6",
|
||||
""
|
||||
],
|
||||
[
|
||||
"103",
|
||||
"51/D1",
|
||||
"7A/F0 7A",
|
||||
"7A/F0 7A",
|
||||
"Keypad 3",
|
||||
""
|
||||
],
|
||||
[
|
||||
"104",
|
||||
"53/D3",
|
||||
"71/F0 71",
|
||||
"71/F0 71",
|
||||
"Keypad .",
|
||||
""
|
||||
],
|
||||
[
|
||||
"105",
|
||||
"4A/CA",
|
||||
"7B/F0 7B",
|
||||
"84/F0 84",
|
||||
"Keypad -",
|
||||
""
|
||||
],
|
||||
[
|
||||
"106",
|
||||
"4E/CE",
|
||||
"79/F0 79",
|
||||
"7C/F0 7C",
|
||||
"Keypad +",
|
||||
""
|
||||
],
|
||||
[
|
||||
"108",
|
||||
"E0 1C/E0 9C",
|
||||
"E0 5A/E0 F0 5A",
|
||||
"79/F0 79",
|
||||
"Keypad Enter",
|
||||
""
|
||||
],
|
||||
[
|
||||
"110",
|
||||
"01/81",
|
||||
"76/F0 76",
|
||||
"08/F0 08",
|
||||
"Esc",
|
||||
""
|
||||
],
|
||||
[
|
||||
"112",
|
||||
"3B/BB",
|
||||
"05/F0 05",
|
||||
"07/F0 07",
|
||||
"F1",
|
||||
""
|
||||
],
|
||||
[
|
||||
"113",
|
||||
"3C/BC",
|
||||
"06/F0 06",
|
||||
"0F/F0 0F",
|
||||
"F2",
|
||||
""
|
||||
],
|
||||
[
|
||||
"114",
|
||||
"3D/BD",
|
||||
"04/F0 04",
|
||||
"17/F0 17",
|
||||
"F3",
|
||||
""
|
||||
],
|
||||
[
|
||||
"115",
|
||||
"3E/BE",
|
||||
"0C/F0 0C",
|
||||
"1F/F0 1F",
|
||||
"F4",
|
||||
""
|
||||
],
|
||||
[
|
||||
"116",
|
||||
"3F/BF",
|
||||
"03/F0 03",
|
||||
"27/F0 27",
|
||||
"F5",
|
||||
""
|
||||
],
|
||||
[
|
||||
"117",
|
||||
"40/C0",
|
||||
"0B/F0 0B",
|
||||
"2F/F0 2F",
|
||||
"F6",
|
||||
""
|
||||
],
|
||||
[
|
||||
"118",
|
||||
"41/C1",
|
||||
"83/F0 83",
|
||||
"37/F0 37",
|
||||
"F7",
|
||||
""
|
||||
],
|
||||
[
|
||||
"119",
|
||||
"42/C2",
|
||||
"0A/F0 0A",
|
||||
"3F/F0 3F",
|
||||
"F8",
|
||||
""
|
||||
],
|
||||
[
|
||||
"120",
|
||||
"43/C3",
|
||||
"01/F0 01",
|
||||
"47/F0 47",
|
||||
"F9",
|
||||
""
|
||||
],
|
||||
[
|
||||
"121",
|
||||
"44/C4",
|
||||
"09/F0 09",
|
||||
"4F/F0 4F",
|
||||
"F10",
|
||||
""
|
||||
],
|
||||
[
|
||||
"122",
|
||||
"57/D7",
|
||||
"78/F0 78",
|
||||
"56/F0 56",
|
||||
"F11",
|
||||
""
|
||||
],
|
||||
[
|
||||
"123",
|
||||
"58/D8",
|
||||
"07/F0 07",
|
||||
"5E/F0 5E",
|
||||
"F12",
|
||||
""
|
||||
],
|
||||
[
|
||||
"124",
|
||||
"E0 2A E0 37/E0 B7 E0 AA",
|
||||
"E0 12 E0 7C/E0 F0 7C E0 F0 12",
|
||||
"57/F0 57",
|
||||
"Print Screen",
|
||||
""
|
||||
],
|
||||
[
|
||||
"125",
|
||||
"46/C6",
|
||||
"7E/F0 7E",
|
||||
"5F/F0 5F",
|
||||
"Scroll Lock",
|
||||
""
|
||||
],
|
||||
[
|
||||
"126",
|
||||
"E1 1D 45/E1 9D C5",
|
||||
"E1 14 77 E1/F0 14 F0 77",
|
||||
"62/F0 62",
|
||||
"Pause Break",
|
||||
""
|
||||
],
|
||||
[
|
||||
"29 or 42*",
|
||||
"2B/AB",
|
||||
"5D/F0 5D",
|
||||
"5C/F0 5C or 53/F0 53",
|
||||
"\\",
|
||||
"|"
|
||||
]
|
||||
]
|
||||
124
generators/scancodes/transform_scancodes.py
Normal file
124
generators/scancodes/transform_scancodes.py
Normal file
@@ -0,0 +1,124 @@
|
||||
#!/usr/bin/env python3
|
||||
import functools
|
||||
import itertools
|
||||
import json
|
||||
import unicodedata
|
||||
from typing import NamedTuple, List, Optional
|
||||
import pyperclip
|
||||
|
||||
|
||||
class KeyCode(NamedTuple):
|
||||
scan_code: int
|
||||
name_lower: str
|
||||
name_upper: str
|
||||
ascii_lower: Optional[str]
|
||||
ascii_upper: Optional[str]
|
||||
|
||||
|
||||
# scancodes retrieved from https://wiki.osdev.org/PS/2_Keyboard
|
||||
# scancodes transformed with https://www.convertjson.com/html-table-to-json.htm
|
||||
|
||||
|
||||
blacklist_names = {'(zero)'}
|
||||
|
||||
special_map = {
|
||||
'\\': 'forwardSlash',
|
||||
'/': 'backSlash',
|
||||
'[': 'bracketLeft',
|
||||
']': 'bracketRight',
|
||||
';': 'colonPressed',
|
||||
"'": None,
|
||||
'`': None,
|
||||
',': 'comma',
|
||||
'.': 'dot',
|
||||
# todo keypad *
|
||||
'-': 'dash',
|
||||
'=': 'equals',
|
||||
}
|
||||
|
||||
|
||||
def get_unknown(i):
|
||||
return KeyCode(i, f"Unknown{i:02x}Lower", f"Unknown{i:02x}Upper", None, None)
|
||||
|
||||
|
||||
def not_in_blacklist(name: str) -> bool:
|
||||
return name not in blacklist_names
|
||||
|
||||
|
||||
def remove_braces(name: str) -> str:
|
||||
name = name.lstrip('(').rstrip(')')
|
||||
if name in special_map:
|
||||
return special_map[name]
|
||||
return name
|
||||
|
||||
|
||||
def key_name_to_name(names: List[str]) -> str:
|
||||
_names: List[str] = list(filter(lambda i: i is not None, map(remove_braces, filter(not_in_blacklist, names))))
|
||||
_names_cap = itertools.chain([_names[0][0].lower() + _names[0][1:]],
|
||||
map(lambda i: i[0].upper() + i[1:], _names[1:]))
|
||||
return ''.join(_names_cap)
|
||||
|
||||
|
||||
def get_name(item: str):
|
||||
item = item.replace(' ', ' ')
|
||||
if len(item) == 1:
|
||||
item = unicodedata.name(item).title()
|
||||
if item.startswith('Latin'):
|
||||
return 'Letter' + item.split()[-1]
|
||||
return item.replace(' ', '_') if item else None
|
||||
|
||||
|
||||
def transform_set1(path):
|
||||
codes = []
|
||||
with open(path) as f:
|
||||
data = json.load(f)
|
||||
|
||||
for ibm_number, make_break_1, _, _, lower, upper in data:
|
||||
make_code, break_code = make_break_1.split('/')
|
||||
if make_code.startswith('E0') or make_code.startswith('E1'):
|
||||
# skipping multi codes for now
|
||||
continue
|
||||
make_code_i = int(make_code, base=16)
|
||||
break_code_i = int(break_code, base=16)
|
||||
if make_code_i != break_code_i ^ 0x80:
|
||||
raise ValueError("Make/Break not equal" + ibm_number)
|
||||
codes.append(KeyCode(
|
||||
make_code_i,
|
||||
get_name(lower),
|
||||
get_name(upper),
|
||||
lower,
|
||||
upper,
|
||||
))
|
||||
|
||||
codes_map = {}
|
||||
|
||||
for code in codes:
|
||||
if code.scan_code in codes_map:
|
||||
raise ValueError(f"Duplicate code {code!r}")
|
||||
codes_map[code.scan_code] = code
|
||||
|
||||
# max_val = functools.reduce(lambda a, b: max(a, b), map(lambda x: x.scan_code, codes), 0)
|
||||
return codes_map
|
||||
# txts = []
|
||||
# for i in range(max_val):
|
||||
# code = codes_map.get(i) or get_unknown(i)
|
||||
# txts.append(f'{code.scan_code}\t{code.name_lower}\t{code.name_upper}\t{code.ascii_lower or None}\t{code.ascii_upper or None}')
|
||||
# pyperclip.copy('\n'.join(txts))
|
||||
|
||||
|
||||
def get_ascii_val(val: str):
|
||||
if not val:
|
||||
return 'NULL'
|
||||
if len(val) > 1:
|
||||
return 'NULL'
|
||||
if val == "'":
|
||||
return "'\\''"
|
||||
return repr(val)
|
||||
|
||||
|
||||
def main():
|
||||
transform_set1()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user