master
John Lauer rust: Phase 2 part 1 (tabs, input, dialogs, viewport, history, fetch, render_html, maximize; event pump; recovery + hea… 6da4234 2mo ago
//! US keyboard layout for Input.dispatchKeyEvent (generated by tools/gen-keys.py from puppeteer-core's USKeyboardLayout.js, Apache-2.0).

pub struct KeyDef { pub key: &'static str, pub code: &'static str, pub key_code: u32, pub text: Option<&'static str>, pub shift_key: Option<&'static str>, pub shift_key_code: Option<u32>, pub location: u32 }

pub static KEYS: &[(&str, KeyDef)] = &[
    ("0", KeyDef { key: "0", code: "Digit0", key_code: 48, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("1", KeyDef { key: "1", code: "Digit1", key_code: 49, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("2", KeyDef { key: "2", code: "Digit2", key_code: 50, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("3", KeyDef { key: "3", code: "Digit3", key_code: 51, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("4", KeyDef { key: "4", code: "Digit4", key_code: 52, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("5", KeyDef { key: "5", code: "Digit5", key_code: 53, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("6", KeyDef { key: "6", code: "Digit6", key_code: 54, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("7", KeyDef { key: "7", code: "Digit7", key_code: 55, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("8", KeyDef { key: "8", code: "Digit8", key_code: 56, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("9", KeyDef { key: "9", code: "Digit9", key_code: 57, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Power", KeyDef { key: "Power", code: "Power", key_code: 0, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Eject", KeyDef { key: "Eject", code: "Eject", key_code: 0, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Abort", KeyDef { key: "Cancel", code: "Abort", key_code: 3, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Help", KeyDef { key: "Help", code: "Help", key_code: 6, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Backspace", KeyDef { key: "Backspace", code: "Backspace", key_code: 8, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Tab", KeyDef { key: "Tab", code: "Tab", key_code: 9, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Numpad5", KeyDef { key: "Clear", code: "Numpad5", key_code: 12, text: None, shift_key: Some("5"), shift_key_code: Some(101), location: 3 }),
    ("NumpadEnter", KeyDef { key: "Enter", code: "NumpadEnter", key_code: 13, text: Some("\u{d}"), shift_key: None, shift_key_code: None, location: 3 }),
    ("Enter", KeyDef { key: "Enter", code: "Enter", key_code: 13, text: Some("\u{d}"), shift_key: None, shift_key_code: None, location: 0 }),
    ("\\r", KeyDef { key: "Enter", code: "Enter", key_code: 13, text: Some("\u{d}"), shift_key: None, shift_key_code: None, location: 0 }),
    ("\\n", KeyDef { key: "Enter", code: "Enter", key_code: 13, text: Some("\u{d}"), shift_key: None, shift_key_code: None, location: 0 }),
    ("ShiftLeft", KeyDef { key: "Shift", code: "ShiftLeft", key_code: 16, text: None, shift_key: None, shift_key_code: None, location: 1 }),
    ("ShiftRight", KeyDef { key: "Shift", code: "ShiftRight", key_code: 16, text: None, shift_key: None, shift_key_code: None, location: 2 }),
    ("ControlLeft", KeyDef { key: "Control", code: "ControlLeft", key_code: 17, text: None, shift_key: None, shift_key_code: None, location: 1 }),
    ("ControlRight", KeyDef { key: "Control", code: "ControlRight", key_code: 17, text: None, shift_key: None, shift_key_code: None, location: 2 }),
    ("AltLeft", KeyDef { key: "Alt", code: "AltLeft", key_code: 18, text: None, shift_key: None, shift_key_code: None, location: 1 }),
    ("AltRight", KeyDef { key: "Alt", code: "AltRight", key_code: 18, text: None, shift_key: None, shift_key_code: None, location: 2 }),
    ("Pause", KeyDef { key: "Pause", code: "Pause", key_code: 19, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("CapsLock", KeyDef { key: "CapsLock", code: "CapsLock", key_code: 20, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Escape", KeyDef { key: "Escape", code: "Escape", key_code: 27, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Convert", KeyDef { key: "Convert", code: "Convert", key_code: 28, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("NonConvert", KeyDef { key: "NonConvert", code: "NonConvert", key_code: 29, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Space", KeyDef { key: " ", code: "Space", key_code: 32, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Numpad9", KeyDef { key: "PageUp", code: "Numpad9", key_code: 33, text: None, shift_key: Some("9"), shift_key_code: Some(105), location: 3 }),
    ("PageUp", KeyDef { key: "PageUp", code: "PageUp", key_code: 33, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Numpad3", KeyDef { key: "PageDown", code: "Numpad3", key_code: 34, text: None, shift_key: Some("3"), shift_key_code: Some(99), location: 3 }),
    ("PageDown", KeyDef { key: "PageDown", code: "PageDown", key_code: 34, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("End", KeyDef { key: "End", code: "End", key_code: 35, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Numpad1", KeyDef { key: "End", code: "Numpad1", key_code: 35, text: None, shift_key: Some("1"), shift_key_code: Some(97), location: 3 }),
    ("Home", KeyDef { key: "Home", code: "Home", key_code: 36, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Numpad7", KeyDef { key: "Home", code: "Numpad7", key_code: 36, text: None, shift_key: Some("7"), shift_key_code: Some(103), location: 3 }),
    ("ArrowLeft", KeyDef { key: "ArrowLeft", code: "ArrowLeft", key_code: 37, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Numpad4", KeyDef { key: "ArrowLeft", code: "Numpad4", key_code: 37, text: None, shift_key: Some("4"), shift_key_code: Some(100), location: 3 }),
    ("Numpad8", KeyDef { key: "ArrowUp", code: "Numpad8", key_code: 38, text: None, shift_key: Some("8"), shift_key_code: Some(104), location: 3 }),
    ("ArrowUp", KeyDef { key: "ArrowUp", code: "ArrowUp", key_code: 38, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("ArrowRight", KeyDef { key: "ArrowRight", code: "ArrowRight", key_code: 39, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Numpad6", KeyDef { key: "ArrowRight", code: "Numpad6", key_code: 39, text: None, shift_key: Some("6"), shift_key_code: Some(102), location: 3 }),
    ("Numpad2", KeyDef { key: "ArrowDown", code: "Numpad2", key_code: 40, text: None, shift_key: Some("2"), shift_key_code: Some(98), location: 3 }),
    ("ArrowDown", KeyDef { key: "ArrowDown", code: "ArrowDown", key_code: 40, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Select", KeyDef { key: "Select", code: "Select", key_code: 41, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Open", KeyDef { key: "Execute", code: "Open", key_code: 43, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("PrintScreen", KeyDef { key: "PrintScreen", code: "PrintScreen", key_code: 44, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Insert", KeyDef { key: "Insert", code: "Insert", key_code: 45, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Numpad0", KeyDef { key: "Insert", code: "Numpad0", key_code: 45, text: None, shift_key: Some("0"), shift_key_code: Some(96), location: 3 }),
    ("Delete", KeyDef { key: "Delete", code: "Delete", key_code: 46, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("NumpadDecimal", KeyDef { key: "\u{0}", code: "NumpadDecimal", key_code: 46, text: None, shift_key: Some("."), shift_key_code: Some(110), location: 3 }),
    ("Digit0", KeyDef { key: "0", code: "Digit0", key_code: 48, text: None, shift_key: Some(")"), shift_key_code: None, location: 0 }),
    ("Digit1", KeyDef { key: "1", code: "Digit1", key_code: 49, text: None, shift_key: Some("!"), shift_key_code: None, location: 0 }),
    ("Digit2", KeyDef { key: "2", code: "Digit2", key_code: 50, text: None, shift_key: Some("@"), shift_key_code: None, location: 0 }),
    ("Digit3", KeyDef { key: "3", code: "Digit3", key_code: 51, text: None, shift_key: Some("#"), shift_key_code: None, location: 0 }),
    ("Digit4", KeyDef { key: "4", code: "Digit4", key_code: 52, text: None, shift_key: Some("$"), shift_key_code: None, location: 0 }),
    ("Digit5", KeyDef { key: "5", code: "Digit5", key_code: 53, text: None, shift_key: Some("%"), shift_key_code: None, location: 0 }),
    ("Digit6", KeyDef { key: "6", code: "Digit6", key_code: 54, text: None, shift_key: Some("^"), shift_key_code: None, location: 0 }),
    ("Digit7", KeyDef { key: "7", code: "Digit7", key_code: 55, text: None, shift_key: Some("&"), shift_key_code: None, location: 0 }),
    ("Digit8", KeyDef { key: "8", code: "Digit8", key_code: 56, text: None, shift_key: Some("*"), shift_key_code: None, location: 0 }),
    ("Digit9", KeyDef { key: "9", code: "Digit9", key_code: 57, text: None, shift_key: Some("("), shift_key_code: None, location: 0 }),
    ("KeyA", KeyDef { key: "a", code: "KeyA", key_code: 65, text: None, shift_key: Some("A"), shift_key_code: None, location: 0 }),
    ("KeyB", KeyDef { key: "b", code: "KeyB", key_code: 66, text: None, shift_key: Some("B"), shift_key_code: None, location: 0 }),
    ("KeyC", KeyDef { key: "c", code: "KeyC", key_code: 67, text: None, shift_key: Some("C"), shift_key_code: None, location: 0 }),
    ("KeyD", KeyDef { key: "d", code: "KeyD", key_code: 68, text: None, shift_key: Some("D"), shift_key_code: None, location: 0 }),
    ("KeyE", KeyDef { key: "e", code: "KeyE", key_code: 69, text: None, shift_key: Some("E"), shift_key_code: None, location: 0 }),
    ("KeyF", KeyDef { key: "f", code: "KeyF", key_code: 70, text: None, shift_key: Some("F"), shift_key_code: None, location: 0 }),
    ("KeyG", KeyDef { key: "g", code: "KeyG", key_code: 71, text: None, shift_key: Some("G"), shift_key_code: None, location: 0 }),
    ("KeyH", KeyDef { key: "h", code: "KeyH", key_code: 72, text: None, shift_key: Some("H"), shift_key_code: None, location: 0 }),
    ("KeyI", KeyDef { key: "i", code: "KeyI", key_code: 73, text: None, shift_key: Some("I"), shift_key_code: None, location: 0 }),
    ("KeyJ", KeyDef { key: "j", code: "KeyJ", key_code: 74, text: None, shift_key: Some("J"), shift_key_code: None, location: 0 }),
    ("KeyK", KeyDef { key: "k", code: "KeyK", key_code: 75, text: None, shift_key: Some("K"), shift_key_code: None, location: 0 }),
    ("KeyL", KeyDef { key: "l", code: "KeyL", key_code: 76, text: None, shift_key: Some("L"), shift_key_code: None, location: 0 }),
    ("KeyM", KeyDef { key: "m", code: "KeyM", key_code: 77, text: None, shift_key: Some("M"), shift_key_code: None, location: 0 }),
    ("KeyN", KeyDef { key: "n", code: "KeyN", key_code: 78, text: None, shift_key: Some("N"), shift_key_code: None, location: 0 }),
    ("KeyO", KeyDef { key: "o", code: "KeyO", key_code: 79, text: None, shift_key: Some("O"), shift_key_code: None, location: 0 }),
    ("KeyP", KeyDef { key: "p", code: "KeyP", key_code: 80, text: None, shift_key: Some("P"), shift_key_code: None, location: 0 }),
    ("KeyQ", KeyDef { key: "q", code: "KeyQ", key_code: 81, text: None, shift_key: Some("Q"), shift_key_code: None, location: 0 }),
    ("KeyR", KeyDef { key: "r", code: "KeyR", key_code: 82, text: None, shift_key: Some("R"), shift_key_code: None, location: 0 }),
    ("KeyS", KeyDef { key: "s", code: "KeyS", key_code: 83, text: None, shift_key: Some("S"), shift_key_code: None, location: 0 }),
    ("KeyT", KeyDef { key: "t", code: "KeyT", key_code: 84, text: None, shift_key: Some("T"), shift_key_code: None, location: 0 }),
    ("KeyU", KeyDef { key: "u", code: "KeyU", key_code: 85, text: None, shift_key: Some("U"), shift_key_code: None, location: 0 }),
    ("KeyV", KeyDef { key: "v", code: "KeyV", key_code: 86, text: None, shift_key: Some("V"), shift_key_code: None, location: 0 }),
    ("KeyW", KeyDef { key: "w", code: "KeyW", key_code: 87, text: None, shift_key: Some("W"), shift_key_code: None, location: 0 }),
    ("KeyX", KeyDef { key: "x", code: "KeyX", key_code: 88, text: None, shift_key: Some("X"), shift_key_code: None, location: 0 }),
    ("KeyY", KeyDef { key: "y", code: "KeyY", key_code: 89, text: None, shift_key: Some("Y"), shift_key_code: None, location: 0 }),
    ("KeyZ", KeyDef { key: "z", code: "KeyZ", key_code: 90, text: None, shift_key: Some("Z"), shift_key_code: None, location: 0 }),
    ("MetaLeft", KeyDef { key: "Meta", code: "MetaLeft", key_code: 91, text: None, shift_key: None, shift_key_code: None, location: 1 }),
    ("MetaRight", KeyDef { key: "Meta", code: "MetaRight", key_code: 92, text: None, shift_key: None, shift_key_code: None, location: 2 }),
    ("ContextMenu", KeyDef { key: "ContextMenu", code: "ContextMenu", key_code: 93, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("NumpadMultiply", KeyDef { key: "*", code: "NumpadMultiply", key_code: 106, text: None, shift_key: None, shift_key_code: None, location: 3 }),
    ("NumpadAdd", KeyDef { key: "+", code: "NumpadAdd", key_code: 107, text: None, shift_key: None, shift_key_code: None, location: 3 }),
    ("NumpadSubtract", KeyDef { key: "-", code: "NumpadSubtract", key_code: 109, text: None, shift_key: None, shift_key_code: None, location: 3 }),
    ("NumpadDivide", KeyDef { key: "/", code: "NumpadDivide", key_code: 111, text: None, shift_key: None, shift_key_code: None, location: 3 }),
    ("F1", KeyDef { key: "F1", code: "F1", key_code: 112, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F2", KeyDef { key: "F2", code: "F2", key_code: 113, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F3", KeyDef { key: "F3", code: "F3", key_code: 114, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F4", KeyDef { key: "F4", code: "F4", key_code: 115, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F5", KeyDef { key: "F5", code: "F5", key_code: 116, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F6", KeyDef { key: "F6", code: "F6", key_code: 117, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F7", KeyDef { key: "F7", code: "F7", key_code: 118, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F8", KeyDef { key: "F8", code: "F8", key_code: 119, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F9", KeyDef { key: "F9", code: "F9", key_code: 120, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F10", KeyDef { key: "F10", code: "F10", key_code: 121, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F11", KeyDef { key: "F11", code: "F11", key_code: 122, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F12", KeyDef { key: "F12", code: "F12", key_code: 123, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F13", KeyDef { key: "F13", code: "F13", key_code: 124, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F14", KeyDef { key: "F14", code: "F14", key_code: 125, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F15", KeyDef { key: "F15", code: "F15", key_code: 126, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F16", KeyDef { key: "F16", code: "F16", key_code: 127, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F17", KeyDef { key: "F17", code: "F17", key_code: 128, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F18", KeyDef { key: "F18", code: "F18", key_code: 129, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F19", KeyDef { key: "F19", code: "F19", key_code: 130, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F20", KeyDef { key: "F20", code: "F20", key_code: 131, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F21", KeyDef { key: "F21", code: "F21", key_code: 132, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F22", KeyDef { key: "F22", code: "F22", key_code: 133, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F23", KeyDef { key: "F23", code: "F23", key_code: 134, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F24", KeyDef { key: "F24", code: "F24", key_code: 135, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("NumLock", KeyDef { key: "NumLock", code: "NumLock", key_code: 144, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("ScrollLock", KeyDef { key: "ScrollLock", code: "ScrollLock", key_code: 145, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("AudioVolumeMute", KeyDef { key: "AudioVolumeMute", code: "AudioVolumeMute", key_code: 173, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("AudioVolumeDown", KeyDef { key: "AudioVolumeDown", code: "AudioVolumeDown", key_code: 174, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("AudioVolumeUp", KeyDef { key: "AudioVolumeUp", code: "AudioVolumeUp", key_code: 175, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("MediaTrackNext", KeyDef { key: "MediaTrackNext", code: "MediaTrackNext", key_code: 176, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("MediaTrackPrevious", KeyDef { key: "MediaTrackPrevious", code: "MediaTrackPrevious", key_code: 177, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("MediaStop", KeyDef { key: "MediaStop", code: "MediaStop", key_code: 178, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("MediaPlayPause", KeyDef { key: "MediaPlayPause", code: "MediaPlayPause", key_code: 179, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Semicolon", KeyDef { key: ";", code: "Semicolon", key_code: 186, text: None, shift_key: Some(":"), shift_key_code: None, location: 0 }),
    ("Equal", KeyDef { key: "=", code: "Equal", key_code: 187, text: None, shift_key: Some("+"), shift_key_code: None, location: 0 }),
    ("NumpadEqual", KeyDef { key: "=", code: "NumpadEqual", key_code: 187, text: None, shift_key: None, shift_key_code: None, location: 3 }),
    ("Comma", KeyDef { key: ",", code: "Comma", key_code: 188, text: None, shift_key: Some("<"), shift_key_code: None, location: 0 }),
    ("Minus", KeyDef { key: "-", code: "Minus", key_code: 189, text: None, shift_key: Some("_"), shift_key_code: None, location: 0 }),
    ("Period", KeyDef { key: ".", code: "Period", key_code: 190, text: None, shift_key: Some(">"), shift_key_code: None, location: 0 }),
    ("Slash", KeyDef { key: "/", code: "Slash", key_code: 191, text: None, shift_key: Some("?"), shift_key_code: None, location: 0 }),
    ("Backquote", KeyDef { key: "`", code: "Backquote", key_code: 192, text: None, shift_key: Some("~"), shift_key_code: None, location: 0 }),
    ("BracketLeft", KeyDef { key: "[", code: "BracketLeft", key_code: 219, text: None, shift_key: Some("{"), shift_key_code: None, location: 0 }),
    ("Backslash", KeyDef { key: "\\", code: "Backslash", key_code: 220, text: None, shift_key: Some("|"), shift_key_code: None, location: 0 }),
    ("BracketRight", KeyDef { key: "BracketRight", code: "BracketRight", key_code: 221, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Quote", KeyDef { key: "Quote", code: "Quote", key_code: 222, text: None, shift_key: Some("\""), shift_key_code: None, location: 0 }),
    ("AltGraph", KeyDef { key: "AltGraph", code: "AltGraph", key_code: 225, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Props", KeyDef { key: "CrSel", code: "Props", key_code: 247, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Cancel", KeyDef { key: "Cancel", code: "Abort", key_code: 3, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Clear", KeyDef { key: "Clear", code: "Numpad5", key_code: 12, text: None, shift_key: None, shift_key_code: None, location: 3 }),
    ("Shift", KeyDef { key: "Shift", code: "ShiftLeft", key_code: 16, text: None, shift_key: None, shift_key_code: None, location: 1 }),
    ("Control", KeyDef { key: "Control", code: "ControlLeft", key_code: 17, text: None, shift_key: None, shift_key_code: None, location: 1 }),
    ("Alt", KeyDef { key: "Alt", code: "AltLeft", key_code: 18, text: None, shift_key: None, shift_key_code: None, location: 1 }),
    ("Accept", KeyDef { key: "Accept", code: "", key_code: 30, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("ModeChange", KeyDef { key: "ModeChange", code: "", key_code: 31, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    (" ", KeyDef { key: " ", code: "Space", key_code: 32, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Print", KeyDef { key: "Print", code: "", key_code: 42, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Execute", KeyDef { key: "Execute", code: "Open", key_code: 43, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("\\u0000", KeyDef { key: "\u{0}", code: "NumpadDecimal", key_code: 46, text: None, shift_key: None, shift_key_code: None, location: 3 }),
    ("a", KeyDef { key: "a", code: "KeyA", key_code: 65, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("b", KeyDef { key: "b", code: "KeyB", key_code: 66, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("c", KeyDef { key: "c", code: "KeyC", key_code: 67, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("d", KeyDef { key: "d", code: "KeyD", key_code: 68, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("e", KeyDef { key: "e", code: "KeyE", key_code: 69, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("f", KeyDef { key: "f", code: "KeyF", key_code: 70, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("g", KeyDef { key: "g", code: "KeyG", key_code: 71, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("h", KeyDef { key: "h", code: "KeyH", key_code: 72, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("i", KeyDef { key: "i", code: "KeyI", key_code: 73, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("j", KeyDef { key: "j", code: "KeyJ", key_code: 74, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("k", KeyDef { key: "k", code: "KeyK", key_code: 75, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("l", KeyDef { key: "l", code: "KeyL", key_code: 76, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("m", KeyDef { key: "m", code: "KeyM", key_code: 77, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("n", KeyDef { key: "n", code: "KeyN", key_code: 78, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("o", KeyDef { key: "o", code: "KeyO", key_code: 79, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("p", KeyDef { key: "p", code: "KeyP", key_code: 80, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("q", KeyDef { key: "q", code: "KeyQ", key_code: 81, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("r", KeyDef { key: "r", code: "KeyR", key_code: 82, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("s", KeyDef { key: "s", code: "KeyS", key_code: 83, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("t", KeyDef { key: "t", code: "KeyT", key_code: 84, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("u", KeyDef { key: "u", code: "KeyU", key_code: 85, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("v", KeyDef { key: "v", code: "KeyV", key_code: 86, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("w", KeyDef { key: "w", code: "KeyW", key_code: 87, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("x", KeyDef { key: "x", code: "KeyX", key_code: 88, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("y", KeyDef { key: "y", code: "KeyY", key_code: 89, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("z", KeyDef { key: "z", code: "KeyZ", key_code: 90, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Meta", KeyDef { key: "Meta", code: "MetaLeft", key_code: 91, text: None, shift_key: None, shift_key_code: None, location: 1 }),
    ("*", KeyDef { key: "*", code: "NumpadMultiply", key_code: 106, text: None, shift_key: None, shift_key_code: None, location: 3 }),
    ("+", KeyDef { key: "+", code: "NumpadAdd", key_code: 107, text: None, shift_key: None, shift_key_code: None, location: 3 }),
    ("-", KeyDef { key: "-", code: "NumpadSubtract", key_code: 109, text: None, shift_key: None, shift_key_code: None, location: 3 }),
    ("/", KeyDef { key: "/", code: "NumpadDivide", key_code: 111, text: None, shift_key: None, shift_key_code: None, location: 3 }),
    (";", KeyDef { key: ";", code: "Semicolon", key_code: 186, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("=", KeyDef { key: "=", code: "Equal", key_code: 187, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    (",", KeyDef { key: ",", code: "Comma", key_code: 188, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    (".", KeyDef { key: ".", code: "Period", key_code: 190, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("`", KeyDef { key: "`", code: "Backquote", key_code: 192, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("[", KeyDef { key: "[", code: "BracketLeft", key_code: 219, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("\\\\", KeyDef { key: "\\", code: "Backslash", key_code: 220, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("]", KeyDef { key: "]", code: "BracketRight", key_code: 221, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Attn", KeyDef { key: "Attn", code: "", key_code: 246, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("CrSel", KeyDef { key: "CrSel", code: "Props", key_code: 247, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("ExSel", KeyDef { key: "ExSel", code: "", key_code: 248, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("EraseEof", KeyDef { key: "EraseEof", code: "", key_code: 249, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Play", KeyDef { key: "Play", code: "", key_code: 250, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("ZoomOut", KeyDef { key: "ZoomOut", code: "", key_code: 251, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    (")", KeyDef { key: ")", code: "Digit0", key_code: 48, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("!", KeyDef { key: "!", code: "Digit1", key_code: 49, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("@", KeyDef { key: "@", code: "Digit2", key_code: 50, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("#", KeyDef { key: "#", code: "Digit3", key_code: 51, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("%", KeyDef { key: "%", code: "Digit5", key_code: 53, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("^", KeyDef { key: "^", code: "Digit6", key_code: 54, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("&", KeyDef { key: "&", code: "Digit7", key_code: 55, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("(", KeyDef { key: "(", code: "Digit9", key_code: 57, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("A", KeyDef { key: "A", code: "KeyA", key_code: 65, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("B", KeyDef { key: "B", code: "KeyB", key_code: 66, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("C", KeyDef { key: "C", code: "KeyC", key_code: 67, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("D", KeyDef { key: "D", code: "KeyD", key_code: 68, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("E", KeyDef { key: "E", code: "KeyE", key_code: 69, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("F", KeyDef { key: "F", code: "KeyF", key_code: 70, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("G", KeyDef { key: "G", code: "KeyG", key_code: 71, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("H", KeyDef { key: "H", code: "KeyH", key_code: 72, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("I", KeyDef { key: "I", code: "KeyI", key_code: 73, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("J", KeyDef { key: "J", code: "KeyJ", key_code: 74, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("K", KeyDef { key: "K", code: "KeyK", key_code: 75, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("L", KeyDef { key: "L", code: "KeyL", key_code: 76, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("M", KeyDef { key: "M", code: "KeyM", key_code: 77, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("N", KeyDef { key: "N", code: "KeyN", key_code: 78, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("O", KeyDef { key: "O", code: "KeyO", key_code: 79, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("P", KeyDef { key: "P", code: "KeyP", key_code: 80, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Q", KeyDef { key: "Q", code: "KeyQ", key_code: 81, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("R", KeyDef { key: "R", code: "KeyR", key_code: 82, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("S", KeyDef { key: "S", code: "KeyS", key_code: 83, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("T", KeyDef { key: "T", code: "KeyT", key_code: 84, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("U", KeyDef { key: "U", code: "KeyU", key_code: 85, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("V", KeyDef { key: "V", code: "KeyV", key_code: 86, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("W", KeyDef { key: "W", code: "KeyW", key_code: 87, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("X", KeyDef { key: "X", code: "KeyX", key_code: 88, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Y", KeyDef { key: "Y", code: "KeyY", key_code: 89, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("Z", KeyDef { key: "Z", code: "KeyZ", key_code: 90, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    (":", KeyDef { key: ":", code: "Semicolon", key_code: 186, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("<", KeyDef { key: "<", code: "Comma", key_code: 188, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("_", KeyDef { key: "_", code: "Minus", key_code: 189, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    (">", KeyDef { key: ">", code: "Period", key_code: 190, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("?", KeyDef { key: "?", code: "Slash", key_code: 191, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("~", KeyDef { key: "~", code: "Backquote", key_code: 192, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("{", KeyDef { key: "{", code: "BracketLeft", key_code: 219, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("|", KeyDef { key: "|", code: "Backslash", key_code: 220, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("}", KeyDef { key: "}", code: "", key_code: 221, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("\"", KeyDef { key: "\"", code: "Quote", key_code: 222, text: None, shift_key: None, shift_key_code: None, location: 0 }),
    ("SoftLeft", KeyDef { key: "SoftLeft", code: "SoftLeft", key_code: 0, text: None, shift_key: None, shift_key_code: None, location: 4 }),
    ("SoftRight", KeyDef { key: "SoftRight", code: "SoftRight", key_code: 0, text: None, shift_key: None, shift_key_code: None, location: 4 }),
    ("Camera", KeyDef { key: "Camera", code: "Camera", key_code: 44, text: None, shift_key: None, shift_key_code: None, location: 4 }),
    ("Call", KeyDef { key: "Call", code: "Call", key_code: 0, text: None, shift_key: None, shift_key_code: None, location: 4 }),
    ("EndCall", KeyDef { key: "EndCall", code: "EndCall", key_code: 95, text: None, shift_key: None, shift_key_code: None, location: 4 }),
    ("VolumeDown", KeyDef { key: "VolumeDown", code: "VolumeDown", key_code: 182, text: None, shift_key: None, shift_key_code: None, location: 4 }),
    ("VolumeUp", KeyDef { key: "VolumeUp", code: "VolumeUp", key_code: 183, text: None, shift_key: None, shift_key_code: None, location: 4 }),
];

pub fn lookup(name: &str) -> Option<&'static KeyDef> { KEYS.iter().find(|(n, _)| *n == name).map(|(_, d)| d) }