Last active
May 19, 2024 21:09
-
-
Save max-m/452a6ade6473b1deaf079c4f78741aaf to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* See: | |
* - https://w3c.github.io/uievents-code/#key-code-attribute-value | |
* - https://github.com/libsdl-org/SDL/blob/4d32f66fe7a1946384b062cea87f520b75139536/src/video/emscripten/SDL_emscriptenevents.c | |
* - https://chromium.googlesource.com/external/github.com/kripken/emscripten/+/1.38.0/tools/create_dom_pk_codes.py | |
* - https://wiki.libsdl.org/SDL2/SDL_ScancodeAndKeycode | |
*/ | |
function sdl_scancode_to_keyboard_event_code(scancode: number) { | |
// prettier-ignore | |
switch (scancode) { | |
case 0x000: return "" /* SDL_SCANCODE_UNKNOWN */ | |
case 0x004: return "KeyA" /* SDL_SCANCODE_A */ | |
case 0x005: return "KeyB" /* SDL_SCANCODE_B */ | |
case 0x006: return "KeyC" /* SDL_SCANCODE_C */ | |
case 0x007: return "KeyD" /* SDL_SCANCODE_D */ | |
case 0x008: return "KeyE" /* SDL_SCANCODE_E */ | |
case 0x009: return "KeyF" /* SDL_SCANCODE_F */ | |
case 0x00A: return "KeyG" /* SDL_SCANCODE_G */ | |
case 0x00B: return "KeyH" /* SDL_SCANCODE_H */ | |
case 0x00C: return "KeyI" /* SDL_SCANCODE_I */ | |
case 0x00D: return "KeyJ" /* SDL_SCANCODE_J */ | |
case 0x00E: return "KeyK" /* SDL_SCANCODE_K */ | |
case 0x00F: return "KeyL" /* SDL_SCANCODE_L */ | |
case 0x010: return "KeyM" /* SDL_SCANCODE_M */ | |
case 0x011: return "KeyN" /* SDL_SCANCODE_N */ | |
case 0x012: return "KeyO" /* SDL_SCANCODE_O */ | |
case 0x013: return "KeyP" /* SDL_SCANCODE_P */ | |
case 0x014: return "KeyQ" /* SDL_SCANCODE_Q */ | |
case 0x015: return "KeyR" /* SDL_SCANCODE_R */ | |
case 0x016: return "KeyS" /* SDL_SCANCODE_S */ | |
case 0x017: return "KeyT" /* SDL_SCANCODE_T */ | |
case 0x018: return "KeyU" /* SDL_SCANCODE_U */ | |
case 0x019: return "KeyV" /* SDL_SCANCODE_V */ | |
case 0x01A: return "KeyW" /* SDL_SCANCODE_W */ | |
case 0x01B: return "KeyX" /* SDL_SCANCODE_X */ | |
case 0x01C: return "KeyY" /* SDL_SCANCODE_Y */ | |
case 0x01D: return "KeyZ" /* SDL_SCANCODE_Z */ | |
case 0x01E: return "Digit1" /* SDL_SCANCODE_1 */ | |
case 0x01F: return "Digit2" /* SDL_SCANCODE_2 */ | |
case 0x020: return "Digit3" /* SDL_SCANCODE_3 */ | |
case 0x021: return "Digit4" /* SDL_SCANCODE_4 */ | |
case 0x022: return "Digit5" /* SDL_SCANCODE_5 */ | |
case 0x023: return "Digit6" /* SDL_SCANCODE_6 */ | |
case 0x024: return "Digit7" /* SDL_SCANCODE_7 */ | |
case 0x025: return "Digit8" /* SDL_SCANCODE_8 */ | |
case 0x026: return "Digit9" /* SDL_SCANCODE_9 */ | |
case 0x027: return "Digit0" /* SDL_SCANCODE_0 */ | |
case 0x028: return "Enter" /* SDL_SCANCODE_RETURN */ | |
case 0x029: return "Escape" /* SDL_SCANCODE_ESCAPE */ | |
case 0x02A: return "Backspace" /* SDL_SCANCODE_BACKSPACE */ | |
case 0x02B: return "Tab" /* SDL_SCANCODE_TAB */ | |
case 0x02C: return "Space" /* SDL_SCANCODE_SPACE */ | |
case 0x02D: return "Minus" /* SDL_SCANCODE_MINUS */ | |
case 0x02E: return "Equal" /* SDL_SCANCODE_EQUALS */ | |
case 0x02F: return "BracketLeft" /* SDL_SCANCODE_LEFTBRACKET */ | |
case 0x030: return "BracketRight" /* SDL_SCANCODE_RIGHTBRACKET */ | |
case 0x031: return "Backslash" /* SDL_SCANCODE_BACKSLASH */ | |
case 0x032: return "Backslash" /* SDL_SCANCODE_NONUSHASH */ | |
case 0x033: return "Semicolon" /* SDL_SCANCODE_SEMICOLON */ | |
case 0x034: return "Quote" /* SDL_SCANCODE_APOSTROPHE */ | |
case 0x035: return "Backquote" /* SDL_SCANCODE_GRAVE */ | |
case 0x036: return "Comma" /* SDL_SCANCODE_COMMA */ | |
case 0x037: return "Period" /* SDL_SCANCODE_PERIOD */ | |
case 0x038: return "Slash" /* SDL_SCANCODE_SLASH */ | |
case 0x039: return "CapsLock" /* SDL_SCANCODE_CAPSLOCK */ | |
case 0x03A: return "F1" /* SDL_SCANCODE_F1 */ | |
case 0x03B: return "F2" /* SDL_SCANCODE_F2 */ | |
case 0x03C: return "F3" /* SDL_SCANCODE_F3 */ | |
case 0x03D: return "F4" /* SDL_SCANCODE_F4 */ | |
case 0x03E: return "F5" /* SDL_SCANCODE_F5 */ | |
case 0x03F: return "F6" /* SDL_SCANCODE_F6 */ | |
case 0x040: return "F7" /* SDL_SCANCODE_F7 */ | |
case 0x041: return "F8" /* SDL_SCANCODE_F8 */ | |
case 0x042: return "F9" /* SDL_SCANCODE_F9 */ | |
case 0x043: return "F10" /* SDL_SCANCODE_F10 */ | |
case 0x044: return "F11" /* SDL_SCANCODE_F11 */ | |
case 0x045: return "F12" /* SDL_SCANCODE_F12 */ | |
case 0x046: return "PrintScreen" /* SDL_SCANCODE_PRINTSCREEN */ | |
case 0x047: return "ScrollLock" /* SDL_SCANCODE_SCROLLLOCK */ | |
case 0x048: return "Pause" /* SDL_SCANCODE_PAUSE */ | |
case 0x049: return "Insert" /* SDL_SCANCODE_INSERT */ | |
case 0x04A: return "Home" /* SDL_SCANCODE_HOME */ | |
case 0x04B: return "PageUp" /* SDL_SCANCODE_PAGEUP */ | |
case 0x04C: return "Delete" /* SDL_SCANCODE_DELETE */ | |
case 0x04D: return "End" /* SDL_SCANCODE_END */ | |
case 0x04E: return "PageDown" /* SDL_SCANCODE_PAGEDOWN */ | |
case 0x04F: return "ArrowRight" /* SDL_SCANCODE_RIGHT */ | |
case 0x050: return "ArrowLeft" /* SDL_SCANCODE_LEFT */ | |
case 0x051: return "ArrowDown" /* SDL_SCANCODE_DOWN */ | |
case 0x052: return "ArrowUp" /* SDL_SCANCODE_UP */ | |
case 0x053: return "NumLock" /* SDL_SCANCODE_NUMLOCKCLEAR */ | |
case 0x054: return "NumpadDivide" /* SDL_SCANCODE_KP_DIVIDE */ | |
case 0x055: return "NumpadMultiply" /* SDL_SCANCODE_KP_MULTIPLY */ | |
case 0x056: return "NumpadSubtract" /* SDL_SCANCODE_KP_MINUS */ | |
case 0x057: return "NumpadAdd" /* SDL_SCANCODE_KP_PLUS */ | |
case 0x058: return "NumpadEnter" /* SDL_SCANCODE_KP_ENTER */ | |
case 0x059: return "Numpad1" /* SDL_SCANCODE_KP_1 */ | |
case 0x05A: return "Numpad2" /* SDL_SCANCODE_KP_2 */ | |
case 0x05B: return "Numpad3" /* SDL_SCANCODE_KP_3 */ | |
case 0x05C: return "Numpad4" /* SDL_SCANCODE_KP_4 */ | |
case 0x05D: return "Numpad5" /* SDL_SCANCODE_KP_5 */ | |
case 0x05E: return "Numpad6" /* SDL_SCANCODE_KP_6 */ | |
case 0x05F: return "Numpad7" /* SDL_SCANCODE_KP_7 */ | |
case 0x060: return "Numpad8" /* SDL_SCANCODE_KP_8 */ | |
case 0x061: return "Numpad9" /* SDL_SCANCODE_KP_9 */ | |
case 0x062: return "Numpad0" /* SDL_SCANCODE_KP_0 */ | |
case 0x063: return "NumpadDecimal" /* SDL_SCANCODE_KP_PERIOD */ | |
case 0x064: return "IntlBackslash" /* SDL_SCANCODE_NONUSBACKSLASH */ | |
case 0x065: return "ContextMenu" /* SDL_SCANCODE_APPLICATION */ | |
case 0x066: return "Power" /* SDL_SCANCODE_POWER */ | |
case 0x067: return "NumpadEqual" /* SDL_SCANCODE_KP_EQUALS */ | |
case 0x068: return "F13" /* SDL_SCANCODE_F13 */ | |
case 0x069: return "F14" /* SDL_SCANCODE_F14 */ | |
case 0x06A: return "F15" /* SDL_SCANCODE_F15 */ | |
case 0x06B: return "F16" /* SDL_SCANCODE_F16 */ | |
case 0x06C: return "F17" /* SDL_SCANCODE_F17 */ | |
case 0x06D: return "F18" /* SDL_SCANCODE_F18 */ | |
case 0x06E: return "F19" /* SDL_SCANCODE_F19 */ | |
case 0x06F: return "F20" /* SDL_SCANCODE_F20 */ | |
case 0x070: return "F21" /* SDL_SCANCODE_F21 */ | |
case 0x071: return "F22" /* SDL_SCANCODE_F22 */ | |
case 0x072: return "F23" /* SDL_SCANCODE_F23 */ | |
case 0x073: return "F24" /* SDL_SCANCODE_F24 */ | |
case 0x074: return "" /* SDL_SCANCODE_EXECUTE */ | |
case 0x075: return "Help" /* SDL_SCANCODE_HELP */ | |
case 0x076: return "" /* SDL_SCANCODE_MENU */ | |
case 0x077: return "Select" /* SDL_SCANCODE_SELECT */ | |
case 0x078: return "" /* SDL_SCANCODE_STOP */ | |
case 0x079: return "Again" /* SDL_SCANCODE_AGAIN */ | |
case 0x07A: return "Undo" /* SDL_SCANCODE_UNDO */ | |
case 0x07B: return "Cut" /* SDL_SCANCODE_CUT */ | |
case 0x07C: return "Copy" /* SDL_SCANCODE_COPY */ | |
case 0x07D: return "Paste" /* SDL_SCANCODE_PASTE */ | |
case 0x07E: return "Find" /* SDL_SCANCODE_FIND */ | |
case 0x07F: return "AudioVolumeMute" /* SDL_SCANCODE_MUTE */ | |
case 0x080: return "AudioVolumeUp" /* SDL_SCANCODE_VOLUMEUP */ | |
case 0x081: return "AudioVolumeDown" /* SDL_SCANCODE_VOLUMEDOWN */ | |
case 0x085: return "NumpadComma" /* SDL_SCANCODE_KP_COMMA */ | |
case 0x086: return "" /* SDL_SCANCODE_KP_EQUALSAS400 */ | |
case 0x087: return "IntlRo" /* SDL_SCANCODE_INTERNATIONAL1 */ | |
case 0x088: return "KanaMode" /* SDL_SCANCODE_INTERNATIONAL2 */ | |
case 0x089: return "IntlYen" /* SDL_SCANCODE_INTERNATIONAL3 */ | |
case 0x08A: return "Convert" /* SDL_SCANCODE_INTERNATIONAL4 */ | |
case 0x08B: return "NonConvert" /* SDL_SCANCODE_INTERNATIONAL5 */ | |
case 0x08C: return "" /* SDL_SCANCODE_INTERNATIONAL6 */ | |
case 0x08D: return "" /* SDL_SCANCODE_INTERNATIONAL7 */ | |
case 0x08E: return "" /* SDL_SCANCODE_INTERNATIONAL8 */ | |
case 0x08F: return "" /* SDL_SCANCODE_INTERNATIONAL9 */ | |
case 0x090: return "Lang1" /* SDL_SCANCODE_LANG1 */ | |
case 0x091: return "Lang2" /* SDL_SCANCODE_LANG2 */ | |
case 0x092: return "Lang3" /* SDL_SCANCODE_LANG3 */ | |
case 0x093: return "Lang4" /* SDL_SCANCODE_LANG4 */ | |
case 0x094: return "Lang5" /* SDL_SCANCODE_LANG5 */ | |
case 0x095: return "Lang6" /* SDL_SCANCODE_LANG6 */ | |
case 0x096: return "Lang7" /* SDL_SCANCODE_LANG7 */ | |
case 0x097: return "Lang8" /* SDL_SCANCODE_LANG8 */ | |
case 0x098: return "Lang9" /* SDL_SCANCODE_LANG9 */ | |
case 0x099: return "" /* SDL_SCANCODE_ALTERASE */ | |
case 0x09A: return "" /* SDL_SCANCODE_SYSREQ */ | |
case 0x09B: return "" /* SDL_SCANCODE_CANCEL */ | |
case 0x09C: return "" /* SDL_SCANCODE_CLEAR */ | |
case 0x09D: return "" /* SDL_SCANCODE_PRIOR */ | |
case 0x09E: return "Enter" /* SDL_SCANCODE_RETURN2 */ | |
case 0x09F: return "" /* SDL_SCANCODE_SEPARATOR */ | |
case 0x0A0: return "" /* SDL_SCANCODE_OUT */ | |
case 0x0A1: return "" /* SDL_SCANCODE_OPER */ | |
case 0x0A2: return "" /* SDL_SCANCODE_CLEARAGAIN */ | |
case 0x0A3: return "" /* SDL_SCANCODE_CRSEL */ | |
case 0x0A4: return "" /* SDL_SCANCODE_EXSEL */ | |
case 0x0B0: return "" /* SDL_SCANCODE_KP_00 */ | |
case 0x0B1: return "" /* SDL_SCANCODE_KP_000 */ | |
case 0x0B2: return "NumpadComma" /* SDL_SCANCODE_THOUSANDSSEPARATOR */ | |
case 0x0B3: return "NumpadDecimal" /* SDL_SCANCODE_DECIMALSEPARATOR */ | |
case 0x0B4: return "" /* SDL_SCANCODE_CURRENCYUNIT */ | |
case 0x0B5: return "" /* SDL_SCANCODE_CURRENCYSUBUNIT */ | |
case 0x0B6: return "NumpadParenLeft" /* SDL_SCANCODE_KP_LEFTPAREN */ | |
case 0x0B7: return "NumpadParenRight" /* SDL_SCANCODE_KP_RIGHTPAREN */ | |
case 0x0B8: return "" /* SDL_SCANCODE_KP_LEFTBRACE */ | |
case 0x0B9: return "" /* SDL_SCANCODE_KP_RIGHTBRACE */ | |
case 0x0BA: return "" /* SDL_SCANCODE_KP_TAB */ | |
case 0x0BB: return "NumpadBackspace" /* SDL_SCANCODE_KP_BACKSPACE */ | |
case 0x0BC: return "" /* SDL_SCANCODE_KP_A */ | |
case 0x0BD: return "" /* SDL_SCANCODE_KP_B */ | |
case 0x0BE: return "" /* SDL_SCANCODE_KP_C */ | |
case 0x0BF: return "" /* SDL_SCANCODE_KP_D */ | |
case 0x0C0: return "" /* SDL_SCANCODE_KP_E */ | |
case 0x0C1: return "" /* SDL_SCANCODE_KP_F */ | |
case 0x0C2: return "" /* SDL_SCANCODE_KP_XOR */ | |
case 0x0C3: return "" /* SDL_SCANCODE_KP_POWER */ | |
case 0x0C4: return "" /* SDL_SCANCODE_KP_PERCENT */ | |
case 0x0C5: return "" /* SDL_SCANCODE_KP_LESS */ | |
case 0x0C6: return "" /* SDL_SCANCODE_KP_GREATER */ | |
case 0x0C7: return "" /* SDL_SCANCODE_KP_AMPERSAND */ | |
case 0x0C8: return "" /* SDL_SCANCODE_KP_DBLAMPERSAND */ | |
case 0x0C9: return "" /* SDL_SCANCODE_KP_VERTICALBAR */ | |
case 0x0CA: return "" /* SDL_SCANCODE_KP_DBLVERTICALBAR */ | |
case 0x0CB: return "" /* SDL_SCANCODE_KP_COLON */ | |
case 0x0CC: return "NumpadHash" /* SDL_SCANCODE_KP_HASH */ | |
case 0x0CD: return "" /* SDL_SCANCODE_KP_SPACE */ | |
case 0x0CE: return "" /* SDL_SCANCODE_KP_AT */ | |
case 0x0CF: return "" /* SDL_SCANCODE_KP_EXCLAM */ | |
case 0x0D0: return "NumpadMemoryStore" /* SDL_SCANCODE_KP_MEMSTORE */ | |
case 0x0D1: return "NumpadMemoryRecall" /* SDL_SCANCODE_KP_MEMRECALL */ | |
case 0x0D2: return "NumpadMemoryClear" /* SDL_SCANCODE_KP_MEMCLEAR */ | |
case 0x0D3: return "NumpadMemoryAdd" /* SDL_SCANCODE_KP_MEMADD */ | |
case 0x0D4: return "NumpadMemorySubtract" /* SDL_SCANCODE_KP_MEMSUBTRACT */ | |
case 0x0D5: return "" /* SDL_SCANCODE_KP_MEMMULTIPLY */ | |
case 0x0D6: return "" /* SDL_SCANCODE_KP_MEMDIVIDE */ | |
case 0x0D7: return "" /* SDL_SCANCODE_KP_PLUSMINUS */ | |
case 0x0D8: return "" /* SDL_SCANCODE_KP_CLEAR */ | |
case 0x0D9: return "NumpadClearEntry" /* SDL_SCANCODE_KP_CLEARENTRY */ | |
case 0x0DA: return "" /* SDL_SCANCODE_KP_BINARY */ | |
case 0x0DB: return "" /* SDL_SCANCODE_KP_OCTAL */ | |
case 0x0DC: return "" /* SDL_SCANCODE_KP_DECIMAL */ | |
case 0x0DD: return "" /* SDL_SCANCODE_KP_HEXADECIMAL */ | |
case 0x0E0: return "ControlLeft" /* SDL_SCANCODE_LCTRL */ | |
case 0x0E1: return "ShiftLeft" /* SDL_SCANCODE_LSHIFT */ | |
case 0x0E2: return "AltLeft" /* SDL_SCANCODE_LALT */ | |
case 0x0E3: return "MetaLeft" /* SDL_SCANCODE_LGUI */ | |
case 0x0E4: return "ControlRight" /* SDL_SCANCODE_RCTRL */ | |
case 0x0E5: return "ShiftRight" /* SDL_SCANCODE_RSHIFT */ | |
case 0x0E6: return "AltRight" /* SDL_SCANCODE_RALT */ | |
case 0x0E7: return "MetaRight" /* SDL_SCANCODE_RGUI */ | |
case 0x101: return "" /* SDL_SCANCODE_MODE */ | |
case 0x102: return "MediaTrackNext" /* SDL_SCANCODE_AUDIONEXT */ | |
case 0x103: return "MediaTrackPrevious" /* SDL_SCANCODE_AUDIOPREV */ | |
case 0x104: return "MediaStop" /* SDL_SCANCODE_AUDIOSTOP */ | |
case 0x105: return "MediaPlayPause" /* SDL_SCANCODE_AUDIOPLAY */ | |
case 0x106: return "AudioVolumeMute" /* SDL_SCANCODE_AUDIOMUTE */ | |
case 0x107: return "MediaSelect" /* SDL_SCANCODE_MEDIASELECT */ | |
case 0x108: return "" /* SDL_SCANCODE_WWW */ | |
case 0x109: return "LaunchMail" /* SDL_SCANCODE_MAIL */ | |
case 0x10A: return "LaunchApp2" /* SDL_SCANCODE_CALCULATOR */ | |
case 0x10B: return "LaunchApp1" /* SDL_SCANCODE_COMPUTER */ | |
case 0x10C: return "" /* SDL_SCANCODE_AC_SEARCH */ | |
case 0x10D: return "" /* SDL_SCANCODE_AC_HOME */ | |
case 0x10E: return "" /* SDL_SCANCODE_AC_BACK */ | |
case 0x10F: return "" /* SDL_SCANCODE_AC_FORWARD */ | |
case 0x110: return "" /* SDL_SCANCODE_AC_STOP */ | |
case 0x111: return "" /* SDL_SCANCODE_AC_REFRESH */ | |
case 0x112: return "" /* SDL_SCANCODE_AC_BOOKMARKS */ | |
case 0x113: return "" /* SDL_SCANCODE_BRIGHTNESSDOWN */ | |
case 0x114: return "" /* SDL_SCANCODE_BRIGHTNESSUP */ | |
case 0x115: return "" /* SDL_SCANCODE_DISPLAYSWITCH */ | |
case 0x116: return "" /* SDL_SCANCODE_KBDILLUMTOGGLE */ | |
case 0x117: return "" /* SDL_SCANCODE_KBDILLUMDOWN */ | |
case 0x118: return "" /* SDL_SCANCODE_KBDILLUMUP */ | |
case 0x119: return "Eject" /* SDL_SCANCODE_EJECT */ | |
case 0x11A: return "Sleep" /* SDL_SCANCODE_SLEEP */ | |
case 0x11B: return "LaunchApp1" /* SDL_SCANCODE_APP1 */ | |
case 0x11C: return "LaunchApp2" /* SDL_SCANCODE_APP2 */ | |
} | |
return ""; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment