class KeyTextData { constructor(normalText, shiftText) { this.normalText = normalText; this.shiftText = shiftText; } } class KeyMapper { constructor() { this.keyboardKeyMap = {}; this.inputKeyMap = {}; this.registerFunctionKey(); this.registerEnglishKey(); this.registerKoreanKey(); } registerFunctionKey() { this.registerKeyTextData("Backquote", "`", "~"); this.registerKeyTextData("Digit1", "1", "!"); this.registerKeyTextData("Digit2", "2", "@"); this.registerKeyTextData("Digit3", "3", "#"); this.registerKeyTextData("Digit4", "4", "$"); this.registerKeyTextData("Digit5", "5", "%"); this.registerKeyTextData("Digit6", "6", "^"); this.registerKeyTextData("Digit7", "7", "&"); this.registerKeyTextData("Digit8", "8", "*"); this.registerKeyTextData("Digit9", "9", "("); this.registerKeyTextData("Digit0", "0", ")"); this.registerKeyTextData("Minus", "-", "_"); this.registerKeyTextData("Equal", "=", "+"); this.registerKeyTextData("Backspace", "backspace", "backspace"); this.registerKeyTextData("Tab", "tab", "tab"); this.registerKeyTextData("BracketLeft", "[", "{"); this.registerKeyTextData("BracketRight", "]", "}"); this.registerKeyTextData("Backslash", "\\", "|"); this.registerKeyTextData("CapsLock", "caps lock", "caps lock"); this.registerKeyTextData("Semicolon", ";", ":"); this.registerKeyTextData("Quote", "'", "\""); this.registerKeyTextData("Enter", "enter", "enter"); this.registerKeyTextData("ShiftLeft", "left_shift", "left_shift"); this.registerKeyTextData("ShiftRight", "right_shift", "right_shift"); this.registerKeyTextData("Comma", ",", "<"); this.registerKeyTextData("Period", ".", ">"); this.registerKeyTextData("Slash", "/", "?"); this.registerKeyTextData("ControlLeft", "ctrl", "ctrl"); this.registerKeyTextData("window", "window", "window"); this.registerKeyTextData("AltLeft", "alt", "alt"); this.registerKeyTextData("chinese", "한자", "한자"); this.registerKeyTextData("Space", "space", "space"); this.registerKeyTextData("korean_english", "한/영", "한/영"); this.registerKeyTextData("AltRight", "alt", "alt"); this.registerKeyTextData("ControlRight", "ctrl", "ctrl"); } registerEnglishKey() { this.registerKeyTextData("KeyQ", "q", "Q"); this.registerKeyTextData("KeyW", "w", "W"); this.registerKeyTextData("KeyE", "e", "E"); this.registerKeyTextData("KeyR", "r", "R"); this.registerKeyTextData("KeyT", "t", "T"); this.registerKeyTextData("KeyY", "y", "Y"); this.registerKeyTextData("KeyU", "u", "U"); this.registerKeyTextData("KeyI", "i", "I"); this.registerKeyTextData("KeyO", "o", "O"); this.registerKeyTextData("KeyP", "p", "P"); this.registerKeyTextData("KeyA", "a", "A"); this.registerKeyTextData("KeyS", "s", "S"); this.registerKeyTextData("KeyD", "d", "D"); this.registerKeyTextData("KeyF", "f", "F"); this.registerKeyTextData("KeyG", "g", "G"); this.registerKeyTextData("KeyH", "h", "H"); this.registerKeyTextData("KeyJ", "j", "J"); this.registerKeyTextData("KeyK", "k", "K"); this.registerKeyTextData("KeyL", "l", "L"); this.registerKeyTextData("KeyZ", "z", "Z"); this.registerKeyTextData("KeyX", "x", "X"); this.registerKeyTextData("KeyC", "c", "C"); this.registerKeyTextData("KeyV", "v", "V"); this.registerKeyTextData("KeyB", "b", "B"); this.registerKeyTextData("KeyN", "n", "N"); this.registerKeyTextData("KeyM", "m", "M"); } registerKoreanKey() { this.registerKeyTextData("KeyQ", "ㅂ", "ㅃ"); this.registerKeyTextData("KeyW", "ㅈ", "ㅉ"); this.registerKeyTextData("KeyE", "ㄷ", "ㄸ"); this.registerKeyTextData("KeyR", "ㄱ", "ㄲ"); this.registerKeyTextData("KeyT", "ㅅ", "ㅆ"); this.registerKeyTextData("KeyY", "ㅛ", "ㅛ"); this.registerKeyTextData("KeyU", "ㅕ", "ㅕ"); this.registerKeyTextData("KeyI", "ㅑ", "ㅑ"); this.registerKeyTextData("KeyO", "ㅐ", "ㅒ"); this.registerKeyTextData("KeyP", "ㅔ", "ㅖ"); this.registerKeyTextData("KeyA", "ㅁ", "ㅁ"); this.registerKeyTextData("KeyS", "ㄴ", "ㄴ"); this.registerKeyTextData("KeyD", "ㅇ", "ㅇ"); this.registerKeyTextData("KeyF", "ㄹ", "ㄹ"); this.registerKeyTextData("KeyG", "ㅎ", "ㅎ"); this.registerKeyTextData("KeyH", "ㅗ", "ㅗ"); this.registerKeyTextData("KeyJ", "ㅓ", "ㅓ"); this.registerKeyTextData("KeyK", "ㅏ", "ㅏ"); this.registerKeyTextData("KeyL", "ㅣ", "ㅣ"); this.registerKeyTextData("KeyZ", "ㅋ", "ㅋ"); this.registerKeyTextData("KeyX", "ㅌ", "ㅌ"); this.registerKeyTextData("KeyC", "ㅊ", "ㅊ"); this.registerKeyTextData("KeyV", "ㅍ", "ㅍ"); this.registerKeyTextData("KeyB", "ㅠ", "ㅠ"); this.registerKeyTextData("KeyN", "ㅜ", "ㅜ"); this.registerKeyTextData("KeyM", "ㅡ", "ㅡ"); } registerKeyTextData(keyID, normalText, shiftText) { this.keyboardKeyMap[keyID] = new KeyTextData(normalText, shiftText); if(this.inputKeyMap[keyID] === undefined) this.inputKeyMap[keyID] = keyID; if(this.inputKeyMap[normalText] === undefined) this.inputKeyMap[normalText] = keyID; if(this.inputKeyMap[shiftText] === undefined) this.inputKeyMap[shiftText] = keyID; } getNormalText(keyID) { if(this.keyboardKeyMap[keyID] === undefined) { console.log(keyID); return "?"; } return this.keyboardKeyMap[keyID].normalText; } getShiftText(keyID) { if(this.keyboardKeyMap[keyID] === undefined) { console.log(keyID); return "?"; } return this.keyboardKeyMap[keyID].shiftText; } getKeyIDOfText(text) { return this.inputKeyMap[text]; } isShiftText(text) { let keyID = this.getKeyIDOfText(text); let keyTextData = this.keyboardKeyMap[keyID]; if(keyTextData.normalText === text) return false; return true; } }