-- | Contains the SDL keyboard mappings.
module Helm.Engine.SDL.Keyboard (mapKey) where

import qualified SDL.Input.Keyboard.Codes as Codes

import           Helm.Engine (Key(..))

-- | Map an SDL keycode to a Helm key.
mapKey :: Codes.Keycode -> Key
mapKey Codes.KeycodeReturn = ReturnKey
mapKey Codes.KeycodeEscape = EscapeKey
mapKey Codes.KeycodeBackspace = BackspaceKey
mapKey Codes.KeycodeTab = TabKey
mapKey Codes.KeycodeSpace = SpaceKey
mapKey Codes.KeycodeExclaim = ExclaimKey
mapKey Codes.KeycodeQuoteDbl = QuoteDblKey
mapKey Codes.KeycodeHash = HashKey
mapKey Codes.KeycodePercent = PercentKey
mapKey Codes.KeycodeDollar = DollarKey
mapKey Codes.KeycodeAmpersand = AmpersandKey
mapKey Codes.KeycodeQuote = QuoteKey
mapKey Codes.KeycodeLeftParen = LeftParenKey
mapKey Codes.KeycodeRightParen = RightParenKey
mapKey Codes.KeycodeAsterisk = AsteriskKey
mapKey Codes.KeycodePlus = PlusKey
mapKey Codes.KeycodeComma = CommaKey
mapKey Codes.KeycodeMinus = MinusKey
mapKey Codes.KeycodePeriod = PeriodKey
mapKey Codes.KeycodeSlash = SlashKey
mapKey Codes.Keycode0 = Number0Key
mapKey Codes.Keycode1 = Number1Key
mapKey Codes.Keycode2 = Number2Key
mapKey Codes.Keycode3 = Number3Key
mapKey Codes.Keycode4 = Number4Key
mapKey Codes.Keycode5 = Number5Key
mapKey Codes.Keycode6 = Number6Key
mapKey Codes.Keycode7 = Number7Key
mapKey Codes.Keycode8 = Number8Key
mapKey Codes.Keycode9 = Number9Key
mapKey Codes.KeycodeColon = ColonKey
mapKey Codes.KeycodeSemicolon = SemicolonKey
mapKey Codes.KeycodeLess = LessKey
mapKey Codes.KeycodeEquals = EqualsKey
mapKey Codes.KeycodeGreater = GreaterKey
mapKey Codes.KeycodeQuestion = QuestionKey
mapKey Codes.KeycodeAt = AtKey
mapKey Codes.KeycodeLeftBracket = LeftKey
mapKey Codes.KeycodeBackslash = BackslashKey
mapKey Codes.KeycodeRightBracket = RightBracketKey
mapKey Codes.KeycodeCaret = CaretKey
mapKey Codes.KeycodeUnderscore = UnderscoreKey
mapKey Codes.KeycodeBackquote = BackquoteKey
mapKey Codes.KeycodeA = AKey
mapKey Codes.KeycodeB = BKey
mapKey Codes.KeycodeC = CKey
mapKey Codes.KeycodeD = DKey
mapKey Codes.KeycodeE = EKey
mapKey Codes.KeycodeF = FKey
mapKey Codes.KeycodeG = GKey
mapKey Codes.KeycodeH = HKey
mapKey Codes.KeycodeI = IKey
mapKey Codes.KeycodeJ = JKey
mapKey Codes.KeycodeK = KKey
mapKey Codes.KeycodeL = LKey
mapKey Codes.KeycodeM = MKey
mapKey Codes.KeycodeN = NKey
mapKey Codes.KeycodeO = OKey
mapKey Codes.KeycodeP = PKey
mapKey Codes.KeycodeQ = QKey
mapKey Codes.KeycodeR = RKey
mapKey Codes.KeycodeS = SKey
mapKey Codes.KeycodeT = TKey
mapKey Codes.KeycodeU = UKey
mapKey Codes.KeycodeV = VKey
mapKey Codes.KeycodeW = WKey
mapKey Codes.KeycodeX = XKey
mapKey Codes.KeycodeY = YKey
mapKey Codes.KeycodeZ = ZKey
mapKey Codes.KeycodeCapsLock = CapsLockKey
mapKey Codes.KeycodeF1 = F1Key
mapKey Codes.KeycodeF2 = F2Key
mapKey Codes.KeycodeF3 = F3Key
mapKey Codes.KeycodeF4 = F4Key
mapKey Codes.KeycodeF5 = F5Key
mapKey Codes.KeycodeF6 = F6Key
mapKey Codes.KeycodeF7 = F7Key
mapKey Codes.KeycodeF8 = F8Key
mapKey Codes.KeycodeF9 = F9Key
mapKey Codes.KeycodeF10 = F10Key
mapKey Codes.KeycodeF11 = F11Key
mapKey Codes.KeycodeF12 = F12Key
mapKey Codes.KeycodePrintScreen = PrintScreenKey
mapKey Codes.KeycodeScrollLock = ScrollLockKey
mapKey Codes.KeycodePause = PauseKey
mapKey Codes.KeycodeInsert = InsertKey
mapKey Codes.KeycodeHome = HomeKey
mapKey Codes.KeycodePageUp = PageUpKey
mapKey Codes.KeycodeDelete = DeleteKey
mapKey Codes.KeycodeEnd = EndKey
mapKey Codes.KeycodePageDown = PageDownKey
mapKey Codes.KeycodeRight = RightKey
mapKey Codes.KeycodeLeft = LeftKey
mapKey Codes.KeycodeDown = DownKey
mapKey Codes.KeycodeUp = UpKey
mapKey Codes.KeycodeNumLockClear = NumLockClearKey
mapKey Codes.KeycodeKPDivide = KeypadDivideKey
mapKey Codes.KeycodeKPMultiply = KeypadMultiplyKey
mapKey Codes.KeycodeKPMinus = KeypadMinusKey
mapKey Codes.KeycodeKPPlus = KeypadPlusKey
mapKey Codes.KeycodeKPEnter = KeypadEnterKey
mapKey Codes.KeycodeKP1 = KeypadNumber1Key
mapKey Codes.KeycodeKP2 = KeypadNumber2Key
mapKey Codes.KeycodeKP3 = KeypadNumber3Key
mapKey Codes.KeycodeKP4 = KeypadNumber4Key
mapKey Codes.KeycodeKP5 = KeypadNumber5Key
mapKey Codes.KeycodeKP6 = KeypadNumber6Key
mapKey Codes.KeycodeKP7 = KeypadNumber7Key
mapKey Codes.KeycodeKP8 = KeypadNumber8Key
mapKey Codes.KeycodeKP9 = KeypadNumber9Key
mapKey Codes.KeycodeKP0 = KeypadNumber0Key
mapKey Codes.KeycodeKPPeriod = KeypadPeriodKey
mapKey Codes.KeycodeApplication = ApplicationKey
mapKey Codes.KeycodePower = PowerKey
mapKey Codes.KeycodeKPEquals = KeypadEqualsKey
mapKey Codes.KeycodeF13 = F13Key
mapKey Codes.KeycodeF14 = F14Key
mapKey Codes.KeycodeF15 = F15Key
mapKey Codes.KeycodeF16 = F16Key
mapKey Codes.KeycodeF17 = F17Key
mapKey Codes.KeycodeF18 = F18Key
mapKey Codes.KeycodeF19 = F19Key
mapKey Codes.KeycodeF20 = F20Key
mapKey Codes.KeycodeF21 = F21Key
mapKey Codes.KeycodeF22 = F22Key
mapKey Codes.KeycodeF23 = F23Key
mapKey Codes.KeycodeF24 = F24Key
mapKey Codes.KeycodeExecute = ExecuteKey
mapKey Codes.KeycodeHelp = HelpKey
mapKey Codes.KeycodeMenu = MenuKey
mapKey Codes.KeycodeSelect = SelectKey
mapKey Codes.KeycodeStop = StopKey
mapKey Codes.KeycodeAgain = AgainKey
mapKey Codes.KeycodeUndo = UndoKey
mapKey Codes.KeycodeCut = CutKey
mapKey Codes.KeycodeCopy = CopyKey
mapKey Codes.KeycodePaste = PasteKey
mapKey Codes.KeycodeFind = FindKey
mapKey Codes.KeycodeMute = MuteKey
mapKey Codes.KeycodeVolumeUp = VolumeUpKey
mapKey Codes.KeycodeVolumeDown = VolumeDownKey
mapKey Codes.KeycodeKPComma = KeypadCommaKey
mapKey Codes.KeycodeKPEqualsAS400 = KeypadEqualsAS400Key
mapKey Codes.KeycodeAltErase = AltEraseKey
mapKey Codes.KeycodeSysReq = SysReqKey
mapKey Codes.KeycodeCancel = CancelKey
mapKey Codes.KeycodeClear = ClearKey
mapKey Codes.KeycodePrior = PriorKey
mapKey Codes.KeycodeReturn2 = Return2Key
mapKey Codes.KeycodeSeparator = SeparatorKey
mapKey Codes.KeycodeOut = OutKey
mapKey Codes.KeycodeOper = OperKey
mapKey Codes.KeycodeClearAgain = ClearAgainKey
mapKey Codes.KeycodeCrSel = CrSelKey
mapKey Codes.KeycodeExSel = ExSelKey
mapKey Codes.KeycodeKP00 = Keypad00Key
mapKey Codes.KeycodeKP000 = Keypad000Key
mapKey Codes.KeycodeThousandsSeparator = ThousandsSeparatorKey
mapKey Codes.KeycodeDecimalSeparator = DecimalSeparatorKey
mapKey Codes.KeycodeCurrencyUnit = CurrencyUnitKey
mapKey Codes.KeycodeCurrencySubunit = CurrencySubunitKey
mapKey Codes.KeycodeKPLeftParen = KeypadLeftParenKey
mapKey Codes.KeycodeKPRightParen = KeypadRightParenKey
mapKey Codes.KeycodeKPLeftBrace = KeypadLeftBraceKey
mapKey Codes.KeycodeKPRightBrace = KeypadRightBraceKey
mapKey Codes.KeycodeKPTab = KeypadTabKey
mapKey Codes.KeycodeKPBackspace = KeypadBackspaceKey
mapKey Codes.KeycodeKPA = KeypadAKey
mapKey Codes.KeycodeKPB = KeypadBKey
mapKey Codes.KeycodeKPC = KeypadCKey
mapKey Codes.KeycodeKPD = KeypadDKey
mapKey Codes.KeycodeKPE = KeypadEKey
mapKey Codes.KeycodeKPF = KeypadFKey
mapKey Codes.KeycodeKPXor = KeypadXorKey
mapKey Codes.KeycodeKPPower = KeypadPowerKey
mapKey Codes.KeycodeKPPercent = KeypadPercentKey
mapKey Codes.KeycodeKPLess = KeypadLessKey
mapKey Codes.KeycodeKPGreater = KeypadGreaterKey
mapKey Codes.KeycodeKPAmpersand = KeypadAmpersandKey
mapKey Codes.KeycodeKPDblAmpersand = KeypadDblAmpersandKey
mapKey Codes.KeycodeKPVerticalBar = KeypadVerticalBarKey
mapKey Codes.KeycodeKPDblVerticalBar = KeypadDblVerticalBarKey
mapKey Codes.KeycodeKPColon = KeypadColonKey
mapKey Codes.KeycodeKPHash = KeypadHashKey
mapKey Codes.KeycodeKPSpace = KeypadSpaceKey
mapKey Codes.KeycodeKPAt = KeypadAtKey
mapKey Codes.KeycodeKPExclam = KeypadExclamKey
mapKey Codes.KeycodeKPMemStore = KeypadMemStoreKey
mapKey Codes.KeycodeKPMemRecall = KeypadMemRecallKey
mapKey Codes.KeycodeKPMemClear = KeypadMemClearKey
mapKey Codes.KeycodeKPMemAdd = KeypadMemAddKey
mapKey Codes.KeycodeKPMemSubtract = KeypadMemSubtractKey
mapKey Codes.KeycodeKPMemMultiply = KeypadMemMultiplyKey
mapKey Codes.KeycodeKPMemDivide = KeypadMemDivideKey
mapKey Codes.KeycodeKPPlusMinus = KeypadPlusMinusKey
mapKey Codes.KeycodeKPClear = KeypadClearKey
mapKey Codes.KeycodeKPClearEntry = KeypadClearEntryKey
mapKey Codes.KeycodeKPBinary = KeypadBinaryKey
mapKey Codes.KeycodeKPOctal = KeypadOctalKey
mapKey Codes.KeycodeKPDecimal = KeypadDecimalKey
mapKey Codes.KeycodeKPHexadecimal = KeypadHexadecimalKey
mapKey Codes.KeycodeLCtrl = LeftCtrlKey
mapKey Codes.KeycodeLShift = LeftShiftKey
mapKey Codes.KeycodeLAlt = LeftAltKey
mapKey Codes.KeycodeLGUI = LeftGUIKey
mapKey Codes.KeycodeRCtrl = RightCtrlKey
mapKey Codes.KeycodeRShift = RightShiftKey
mapKey Codes.KeycodeRAlt = RightAltKey
mapKey Codes.KeycodeRGUI = RightGUIKey
mapKey Codes.KeycodeMode = ModeKey
mapKey Codes.KeycodeAudioNext = AudioNextKey
mapKey Codes.KeycodeAudioPrev = AudioPrevKey
mapKey Codes.KeycodeAudioStop = AudioStopKey
mapKey Codes.KeycodeAudioPlay = AudioPlayKey
mapKey Codes.KeycodeAudioMute = AudioMuteKey
mapKey Codes.KeycodeMediaSelect = MediaSelectKey
mapKey Codes.KeycodeWWW = WWWKey
mapKey Codes.KeycodeMail = MailKey
mapKey Codes.KeycodeCalculator = CalculatorKey
mapKey Codes.KeycodeComputer = ComputerKey
mapKey Codes.KeycodeACSearch = ACSearchKey
mapKey Codes.KeycodeACHome = ACHomeKey
mapKey Codes.KeycodeACBack = ACBackKey
mapKey Codes.KeycodeACForward = ACForwardKey
mapKey Codes.KeycodeACStop = ACStopKey
mapKey Codes.KeycodeACRefresh = ACRefreshKey
mapKey Codes.KeycodeACBookmarks = ACBookmarksKey
mapKey Codes.KeycodeBrightnessDown = BrightnessDownKey
mapKey Codes.KeycodeBrightnessUp = BrightnessUpKey
mapKey Codes.KeycodeDisplaySwitch = DisplaySwitchKey
mapKey Codes.KeycodeKbdIllumToggle = KeyboardIllumToggleKey
mapKey Codes.KeycodeKbdIllumDown = KeyboardIllumDownKey
mapKey Codes.KeycodeKbdIllumUp = KeyboardIllumUpKey
mapKey Codes.KeycodeEject = EjectKey
mapKey Codes.KeycodeSleep = SleepKey
mapKey _ = UnknownKey