"""The US keyboard layout, EXTRACTED from the driver bundle.

GENERATED by `python scripts/gen_key_layout.py`. Do not
hand-edit: the `--check` gate rejects a tree where this file
and the bundle no longer agree, and a hand-fixed entry would
be undone on the next regenerate.

Each entry is indexed by `code` (the PHYSICAL key) and
carries `keyCode`, the unshifted `key` and, where it exists,
`shiftKey`. That is what `Page.dispatchKeyEvent` expects:
four fields together, and a wrong one does not fail the
action - it just lies in `event.keyCode`.
"""
from __future__ import annotations

#: 111 entries, indexed by `code`.
LAYOUT = {
    "AltGraph": {
        "key": "AltGraph",
        "keyCode": 225
    },
    "AltLeft": {
        "key": "Alt",
        "keyCode": 164,
        "keyCodeWithoutLocation": 18,
        "location": 1
    },
    "AltRight": {
        "key": "Alt",
        "keyCode": 165,
        "keyCodeWithoutLocation": 18,
        "location": 2
    },
    "ArrowDown": {
        "key": "ArrowDown",
        "keyCode": 40
    },
    "ArrowLeft": {
        "key": "ArrowLeft",
        "keyCode": 37
    },
    "ArrowRight": {
        "key": "ArrowRight",
        "keyCode": 39
    },
    "ArrowUp": {
        "key": "ArrowUp",
        "keyCode": 38
    },
    "AudioVolumeDown": {
        "key": "AudioVolumeDown",
        "keyCode": 174
    },
    "AudioVolumeMute": {
        "key": "AudioVolumeMute",
        "keyCode": 173
    },
    "AudioVolumeUp": {
        "key": "AudioVolumeUp",
        "keyCode": 175
    },
    "Backquote": {
        "key": "`",
        "keyCode": 192,
        "shiftKey": "~"
    },
    "Backslash": {
        "key": "\\",
        "keyCode": 220,
        "shiftKey": "|"
    },
    "Backspace": {
        "key": "Backspace",
        "keyCode": 8
    },
    "BracketLeft": {
        "key": "[",
        "keyCode": 219,
        "shiftKey": "{"
    },
    "BracketRight": {
        "key": "]",
        "keyCode": 221,
        "shiftKey": "}"
    },
    "CapsLock": {
        "key": "CapsLock",
        "keyCode": 20
    },
    "Comma": {
        "key": ",",
        "keyCode": 188,
        "shiftKey": "<"
    },
    "ContextMenu": {
        "key": "ContextMenu",
        "keyCode": 93
    },
    "ControlLeft": {
        "key": "Control",
        "keyCode": 162,
        "keyCodeWithoutLocation": 17,
        "location": 1
    },
    "ControlRight": {
        "key": "Control",
        "keyCode": 163,
        "keyCodeWithoutLocation": 17,
        "location": 2
    },
    "Delete": {
        "key": "Delete",
        "keyCode": 46
    },
    "Digit0": {
        "key": "0",
        "keyCode": 48,
        "shiftKey": ")"
    },
    "Digit1": {
        "key": "1",
        "keyCode": 49,
        "shiftKey": "!"
    },
    "Digit2": {
        "key": "2",
        "keyCode": 50,
        "shiftKey": "@"
    },
    "Digit3": {
        "key": "3",
        "keyCode": 51,
        "shiftKey": "#"
    },
    "Digit4": {
        "key": "4",
        "keyCode": 52,
        "shiftKey": "$"
    },
    "Digit5": {
        "key": "5",
        "keyCode": 53,
        "shiftKey": "%"
    },
    "Digit6": {
        "key": "6",
        "keyCode": 54,
        "shiftKey": "^"
    },
    "Digit7": {
        "key": "7",
        "keyCode": 55,
        "shiftKey": "&"
    },
    "Digit8": {
        "key": "8",
        "keyCode": 56,
        "shiftKey": "*"
    },
    "Digit9": {
        "key": "9",
        "keyCode": 57,
        "shiftKey": "("
    },
    "End": {
        "key": "End",
        "keyCode": 35
    },
    "Enter": {
        "key": "Enter",
        "keyCode": 13,
        "text": "\r"
    },
    "Equal": {
        "key": "=",
        "keyCode": 187,
        "shiftKey": "+"
    },
    "Escape": {
        "key": "Escape",
        "keyCode": 27
    },
    "F1": {
        "key": "F1",
        "keyCode": 112
    },
    "F10": {
        "key": "F10",
        "keyCode": 121
    },
    "F11": {
        "key": "F11",
        "keyCode": 122
    },
    "F12": {
        "key": "F12",
        "keyCode": 123
    },
    "F2": {
        "key": "F2",
        "keyCode": 113
    },
    "F3": {
        "key": "F3",
        "keyCode": 114
    },
    "F4": {
        "key": "F4",
        "keyCode": 115
    },
    "F5": {
        "key": "F5",
        "keyCode": 116
    },
    "F6": {
        "key": "F6",
        "keyCode": 117
    },
    "F7": {
        "key": "F7",
        "keyCode": 118
    },
    "F8": {
        "key": "F8",
        "keyCode": 119
    },
    "F9": {
        "key": "F9",
        "keyCode": 120
    },
    "Home": {
        "key": "Home",
        "keyCode": 36
    },
    "Insert": {
        "key": "Insert",
        "keyCode": 45
    },
    "KeyA": {
        "key": "a",
        "keyCode": 65,
        "shiftKey": "A"
    },
    "KeyB": {
        "key": "b",
        "keyCode": 66,
        "shiftKey": "B"
    },
    "KeyC": {
        "key": "c",
        "keyCode": 67,
        "shiftKey": "C"
    },
    "KeyD": {
        "key": "d",
        "keyCode": 68,
        "shiftKey": "D"
    },
    "KeyE": {
        "key": "e",
        "keyCode": 69,
        "shiftKey": "E"
    },
    "KeyF": {
        "key": "f",
        "keyCode": 70,
        "shiftKey": "F"
    },
    "KeyG": {
        "key": "g",
        "keyCode": 71,
        "shiftKey": "G"
    },
    "KeyH": {
        "key": "h",
        "keyCode": 72,
        "shiftKey": "H"
    },
    "KeyI": {
        "key": "i",
        "keyCode": 73,
        "shiftKey": "I"
    },
    "KeyJ": {
        "key": "j",
        "keyCode": 74,
        "shiftKey": "J"
    },
    "KeyK": {
        "key": "k",
        "keyCode": 75,
        "shiftKey": "K"
    },
    "KeyL": {
        "key": "l",
        "keyCode": 76,
        "shiftKey": "L"
    },
    "KeyM": {
        "key": "m",
        "keyCode": 77,
        "shiftKey": "M"
    },
    "KeyN": {
        "key": "n",
        "keyCode": 78,
        "shiftKey": "N"
    },
    "KeyO": {
        "key": "o",
        "keyCode": 79,
        "shiftKey": "O"
    },
    "KeyP": {
        "key": "p",
        "keyCode": 80,
        "shiftKey": "P"
    },
    "KeyQ": {
        "key": "q",
        "keyCode": 81,
        "shiftKey": "Q"
    },
    "KeyR": {
        "key": "r",
        "keyCode": 82,
        "shiftKey": "R"
    },
    "KeyS": {
        "key": "s",
        "keyCode": 83,
        "shiftKey": "S"
    },
    "KeyT": {
        "key": "t",
        "keyCode": 84,
        "shiftKey": "T"
    },
    "KeyU": {
        "key": "u",
        "keyCode": 85,
        "shiftKey": "U"
    },
    "KeyV": {
        "key": "v",
        "keyCode": 86,
        "shiftKey": "V"
    },
    "KeyW": {
        "key": "w",
        "keyCode": 87,
        "shiftKey": "W"
    },
    "KeyX": {
        "key": "x",
        "keyCode": 88,
        "shiftKey": "X"
    },
    "KeyY": {
        "key": "y",
        "keyCode": 89,
        "shiftKey": "Y"
    },
    "KeyZ": {
        "key": "z",
        "keyCode": 90,
        "shiftKey": "Z"
    },
    "MediaPlayPause": {
        "key": "MediaPlayPause",
        "keyCode": 179
    },
    "MediaTrackNext": {
        "key": "MediaTrackNext",
        "keyCode": 176
    },
    "MediaTrackPrevious": {
        "key": "MediaTrackPrevious",
        "keyCode": 177
    },
    "MetaLeft": {
        "key": "Meta",
        "keyCode": 91,
        "location": 1
    },
    "MetaRight": {
        "key": "Meta",
        "keyCode": 92,
        "location": 2
    },
    "Minus": {
        "key": "-",
        "keyCode": 189,
        "shiftKey": "_"
    },
    "NumLock": {
        "key": "NumLock",
        "keyCode": 144
    },
    "Numpad0": {
        "key": "Insert",
        "keyCode": 45,
        "location": 3,
        "shiftKey": "0",
        "shiftKeyCode": 96
    },
    "Numpad1": {
        "key": "End",
        "keyCode": 35,
        "location": 3,
        "shiftKey": "1",
        "shiftKeyCode": 97
    },
    "Numpad2": {
        "key": "ArrowDown",
        "keyCode": 40,
        "location": 3,
        "shiftKey": "2",
        "shiftKeyCode": 98
    },
    "Numpad3": {
        "key": "PageDown",
        "keyCode": 34,
        "location": 3,
        "shiftKey": "3",
        "shiftKeyCode": 99
    },
    "Numpad4": {
        "key": "ArrowLeft",
        "keyCode": 37,
        "location": 3,
        "shiftKey": "4",
        "shiftKeyCode": 100
    },
    "Numpad5": {
        "key": "Clear",
        "keyCode": 12,
        "location": 3,
        "shiftKey": "5",
        "shiftKeyCode": 101
    },
    "Numpad6": {
        "key": "ArrowRight",
        "keyCode": 39,
        "location": 3,
        "shiftKey": "6",
        "shiftKeyCode": 102
    },
    "Numpad7": {
        "key": "Home",
        "keyCode": 36,
        "location": 3,
        "shiftKey": "7",
        "shiftKeyCode": 103
    },
    "Numpad8": {
        "key": "ArrowUp",
        "keyCode": 38,
        "location": 3,
        "shiftKey": "8",
        "shiftKeyCode": 104
    },
    "Numpad9": {
        "key": "PageUp",
        "keyCode": 33,
        "location": 3,
        "shiftKey": "9",
        "shiftKeyCode": 105
    },
    "NumpadAdd": {
        "key": "+",
        "keyCode": 107,
        "location": 3
    },
    "NumpadDecimal": {
        "key": chr(0),
        "keyCode": 46,
        "location": 3,
        "shiftKey": ".",
        "shiftKeyCode": 110
    },
    "NumpadDivide": {
        "key": "/",
        "keyCode": 111,
        "location": 3
    },
    "NumpadEnter": {
        "key": "Enter",
        "keyCode": 13,
        "location": 3,
        "text": "\r"
    },
    "NumpadMultiply": {
        "key": "*",
        "keyCode": 106,
        "location": 3
    },
    "NumpadSubtract": {
        "key": "-",
        "keyCode": 109,
        "location": 3
    },
    "PageDown": {
        "key": "PageDown",
        "keyCode": 34
    },
    "PageUp": {
        "key": "PageUp",
        "keyCode": 33
    },
    "Pause": {
        "key": "Pause",
        "keyCode": 19
    },
    "Period": {
        "key": ".",
        "keyCode": 190,
        "shiftKey": ">"
    },
    "PrintScreen": {
        "key": "PrintScreen",
        "keyCode": 44
    },
    "Quote": {
        "key": "'",
        "keyCode": 222,
        "shiftKey": "\""
    },
    "ScrollLock": {
        "key": "ScrollLock",
        "keyCode": 145
    },
    "Semicolon": {
        "key": ";",
        "keyCode": 186,
        "shiftKey": ":"
    },
    "ShiftLeft": {
        "key": "Shift",
        "keyCode": 160,
        "keyCodeWithoutLocation": 16,
        "location": 1
    },
    "ShiftRight": {
        "key": "Shift",
        "keyCode": 161,
        "keyCodeWithoutLocation": 16,
        "location": 2
    },
    "Slash": {
        "key": "/",
        "keyCode": 191,
        "shiftKey": "?"
    },
    "Space": {
        "key": " ",
        "keyCode": 32
    },
    "Tab": {
        "key": "Tab",
        "keyCode": 9
    }
}

#: unshifted `key` -> `code`. Used for `press("a")` and for
#: typing: a character is looked up here first, then among
#: the shifted ones.
BY_KEY = {v["key"]: k for k, v in LAYOUT.items() if "key" in v}

#: `shiftKey` -> `code`. `A`, `!`, `{` live here and NOT in
#: BY_KEY.
BY_SHIFTED_KEY = {v["shiftKey"]: k for k, v in LAYOUT.items()
                  if "shiftKey" in v}
