module Monkeybars
  class Key
    @@codes = {}
    @@symbols = {}
    [[:VK_0,48],
    [:VK_1,49],
    [:VK_2,50],
    [:VK_3,51],
    [:VK_4,52],
    [:VK_5,53],
    [:VK_6,54],
    [:VK_7,55],
    [:VK_8,56],
    [:VK_9,57],
    [:VK_A,65],
    [:VK_ACCEPT,30],
    [:VK_ADD,107],
    [:VK_AGAIN,65481],
    [:VK_ALL_CANDIDATES,256],
    [:VK_ALPHANUMERIC,240],
    [:VK_ALT,18],
    [:VK_ALT_GRAPH,65406],
    [:VK_AMPERSAND,150],
    [:VK_ASTERISK,151],
    [:VK_AT,512],
    [:VK_B,66],
    [:VK_BACK_QUOTE,192],
    [:VK_BACK_SLASH,92],
    [:VK_BACK_SPACE,8],
    [:VK_BEGIN,65368],
    [:VK_BRACELEFT,161],
    [:VK_BRACERIGHT,162],
    [:VK_C,67],
    [:VK_CANCEL,3],
    [:VK_CAPS_LOCK,20],
    [:VK_CIRCUMFLEX,514],
    [:VK_CLEAR,12],
    [:VK_CLOSE_BRACKET,93],
    [:VK_CODE_INPUT,258],
    [:VK_COLON,513],
    [:VK_COMMA,44],
    [:VK_COMPOSE,65312],
    [:VK_CONTEXT_MENU,525],
    [:VK_CONTROL,17],
    [:VK_CONVERT,28],
    [:VK_COPY,65485],
    [:VK_CUT,65489],
    [:VK_D,68],
    [:VK_DEAD_ABOVEDOT,134],
    [:VK_DEAD_ABOVERING,136],
    [:VK_DEAD_ACUTE,129],
    [:VK_DEAD_BREVE,133],
    [:VK_DEAD_CARON,138],
    [:VK_DEAD_CEDILLA,139],
    [:VK_DEAD_CIRCUMFLEX,130],
    [:VK_DEAD_DIAERESIS,135],
    [:VK_DEAD_DOUBLEACUTE,137],
    [:VK_DEAD_GRAVE,128],
    [:VK_DEAD_IOTA,141],
    [:VK_DEAD_MACRON,132],
    [:VK_DEAD_OGONEK,140],
    [:VK_DEAD_SEMIVOICED_SOUND,143],
    [:VK_DEAD_TILDE,131],
    [:VK_DEAD_VOICED_SOUND,142],
    [:VK_DECIMAL,110],
    [:VK_DELETE,127],
    [:VK_DIVIDE,111],
    [:VK_DOLLAR,515],
    [:VK_DOWN,40],
    [:VK_E,69],
    [:VK_END,35],
    [:VK_ENTER,10],
    [:VK_EQUALS,61],
    [:VK_ESCAPE,27],
    [:VK_EURO_SIGN,516],
    [:VK_EXCLAMATION_MARK,517],
    [:VK_F,70],
    [:VK_F1,112],
    [:VK_F10,121],
    [:VK_F11,122],
    [:VK_F12,123],
    [:VK_F13,61440],
    [:VK_F14,61441],
    [:VK_F15,61442],
    [:VK_F16,61443],
    [:VK_F17,61444],
    [:VK_F18,61445],
    [:VK_F19,61446],
    [:VK_F2,113],
    [:VK_F20,61447],
    [:VK_F21,61448],
    [:VK_F22,61449],
    [:VK_F23,61450],
    [:VK_F24,61451],
    [:VK_F3,114],
    [:VK_F4,115],
    [:VK_F5,116],
    [:VK_F6,117],
    [:VK_F7,118],
    [:VK_F8,119],
    [:VK_F9,120],
    [:VK_FINAL,24],
    [:VK_FIND,65488],
    [:VK_FULL_WIDTH,243],
    [:VK_G,71],
    [:VK_GREATER,160],
    [:VK_H,72],
    [:VK_HALF_WIDTH,244],
    [:VK_HELP,156],
    [:VK_HIRAGANA,242],
    [:VK_HOME,36],
    [:VK_I,73],
    [:VK_INPUT_METHOD_ON_OFF,263],
    [:VK_INSERT,155],
    [:VK_INVERTED_EXCLAMATION_MARK,518],
    [:VK_J,74],
    [:VK_JAPANESE_HIRAGANA,260],
    [:VK_JAPANESE_KATAKANA,259],
    [:VK_JAPANESE_ROMAN,261],
    [:VK_K,75],
    [:VK_KANA,21],
    [:VK_KANA_LOCK,262],
    [:VK_KANJI,25],
    [:VK_KATAKANA,241],
    [:VK_KP_DOWN,225],
    [:VK_KP_LEFT,226],
    [:VK_KP_RIGHT,227],
    [:VK_KP_UP,224],
    [:VK_L,76],
    [:VK_LEFT,37],
    [:VK_LEFT_PARENTHESIS,519],
    [:VK_LESS,153],
    [:VK_M,77],
    [:VK_META,157],
    [:VK_MINUS,45],
    [:VK_MODECHANGE,31],
    [:VK_MULTIPLY,106],
    [:VK_N,78],
    [:VK_NONCONVERT,29],
    [:VK_NUM_LOCK,144],
    [:VK_NUMBER_SIGN,520],
    [:VK_NUMPAD0,96],
    [:VK_NUMPAD1,97],
    [:VK_NUMPAD2,98],
    [:VK_NUMPAD3,99],
    [:VK_NUMPAD4,100],
    [:VK_NUMPAD5,101],
    [:VK_NUMPAD6,102],
    [:VK_NUMPAD7,103],
    [:VK_NUMPAD8,104],
    [:VK_NUMPAD9,105],
    [:VK_O,79],
    [:VK_OPEN_BRACKET,91],
    [:VK_P,80],
    [:VK_PAGE_DOWN,34],
    [:VK_PAGE_UP,33],
    [:VK_PASTE,65487],
    [:VK_PAUSE,19],
    [:VK_PERIOD,46],
    [:VK_PLUS,521],
    [:VK_PREVIOUS_CANDIDATE,257],
    [:VK_PRINTSCREEN,154],
    [:VK_PROPS,65482],
    [:VK_Q,81],
    [:VK_QUOTE,222],
    [:VK_QUOTEDBL,152],
    [:VK_R,82],
    [:VK_RIGHT,39],
    [:VK_RIGHT_PARENTHESIS,522],
    [:VK_ROMAN_CHARACTERS,245],
    [:VK_S,83],
    [:VK_SCROLL_LOCK,145],
    [:VK_SEMICOLON,59],
    [:VK_SEPARATER,108],
    [:VK_SEPARATOR,108],
    [:VK_SHIFT,16],
    [:VK_SLASH,47],
    [:VK_SPACE,32],
    [:VK_STOP,65480],
    [:VK_SUBTRACT,109],
    [:VK_T,84],
    [:VK_TAB,9],
    [:VK_U,85],
    [:VK_UNDEFINED,0],
    [:VK_UNDERSCORE,523],
    [:VK_UNDO,65483],
    [:VK_UP,38],
    [:VK_V,86],
    [:VK_W,87],
    [:VK_WINDOWS,524],
    [:VK_X,88],
    [:VK_Y,89],
    [:VK_Z,90]].each do |pair|
      @@codes[pair[1]] = pair[0]
      @@symbols[pair[0]] = pair[1]
    end
    
    def self.code_to_symbol code
      @@codes[code]
    end
    
    def self.symbol_to_code symbol
      @@symbols[symbol]
    end
  end
end
