text: # ----------------------------------------------------------------------------
  # pyglet
  # Copyright (c) 2006-2008 Alex Holkner
  # All rights reserved.
  # 
  # Redistribution and use in source and binary forms, with or without
  # modification, are permitted provided that the following conditions 
  # are met:
  #
  #  * Redistributions of source code must retain the above copyright
  #    notice, this list of conditions and the following disclaimer.
  #  * Redistributions in binary form must reproduce the above copyright 
  #    notice, this list of conditions and the following disclaimer in
  #    the documentation and/or other materials provided with the
  #    distribution.
  #  * Neither the name of pyglet nor the names of its
  #    contributors may be used to endorse or promote products
  #    derived from this software without specific prior written
  #    permission.
  #
  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  # POSSIBILITY OF SUCH DAMAGE.
  # ----------------------------------------------------------------------------
  
  '''
  '''
  
  __docformat__ = 'restructuredtext'
  __version__ = '$Id: $'
  
  from pyglet.window import key
  from constants import *
  
  keymap = {
      ord('A'): key.A,
      ord('B'): key.B,
      ord('C'): key.C,
      ord('D'): key.D,
      ord('E'): key.E,
      ord('F'): key.F,
      ord('G'): key.G,
      ord('H'): key.H,
      ord('I'): key.I,
      ord('J'): key.J,
      ord('K'): key.K,
      ord('L'): key.L,
      ord('M'): key.M,
      ord('N'): key.N,
      ord('O'): key.O,
      ord('P'): key.P,
      ord('Q'): key.Q,
      ord('R'): key.R,
      ord('S'): key.S,
      ord('T'): key.T,
      ord('U'): key.U,
      ord('V'): key.V,
      ord('W'): key.W,
      ord('X'): key.X,
      ord('Y'): key.Y,
      ord('Z'): key.Z,
      ord('0'): key._0,
      ord('1'): key._1,
      ord('2'): key._2,
      ord('3'): key._3,
      ord('4'): key._4,
      ord('5'): key._5,
      ord('6'): key._6,
      ord('7'): key._7,
      ord('8'): key._8,
      ord('9'): key._9,
      ord('\b'): key.BACKSPACE,
  
      # By experiment:
      0x14: key.CAPSLOCK,
      0x5d: key.MENU,
  
  #    VK_LBUTTON: , 
  #    VK_RBUTTON: , 
      VK_CANCEL: key.CANCEL, 
  #    VK_MBUTTON: , 
  #    VK_BACK: , 
      VK_TAB: key.TAB, 
  #    VK_CLEAR: , 
      VK_RETURN: key.RETURN, 
      VK_SHIFT: key.LSHIFT, 
      VK_CONTROL: key.LCTRL, 
      VK_MENU: key.LALT, 
      VK_PAUSE: key.PAUSE, 
  #    VK_CAPITAL: , 
  #    VK_KANA: , 
  #    VK_HANGEUL: , 
  #    VK_HANGUL: , 
  #    VK_JUNJA: , 
  #    VK_FINAL: , 
  #    VK_HANJA: , 
  #    VK_KANJI: , 
      VK_ESCAPE: key.ESCAPE, 
  #    VK_CONVERT: , 
  #    VK_NONCONVERT: , 
  #    VK_ACCEPT: , 
  #    VK_MODECHANGE: , 
      VK_SPACE: key.SPACE, 
      VK_PRIOR: key.PAGEUP, 
      VK_NEXT: key.PAGEDOWN, 
      VK_END: key.END, 
      VK_HOME: key.HOME, 
      VK_LEFT: key.LEFT, 
      VK_UP: key.UP, 
      VK_RIGHT: key.RIGHT, 
      VK_DOWN: key.DOWN, 
  #    VK_SELECT: , 
      VK_PRINT: key.PRINT, 
  #    VK_EXECUTE: , 
  #    VK_SNAPSHOT: , 
      VK_INSERT: key.INSERT, 
      VK_DELETE: key.DELETE, 
      VK_HELP: key.HELP, 
      VK_LWIN: key.LWINDOWS, 
      VK_RWIN: key.RWINDOWS, 
  #    VK_APPS: , 
      VK_NUMPAD0: key.NUM_0, 
      VK_NUMPAD1: key.NUM_1, 
      VK_NUMPAD2: key.NUM_2, 
      VK_NUMPAD3: key.NUM_3, 
      VK_NUMPAD4: key.NUM_4, 
      VK_NUMPAD5: key.NUM_5, 
      VK_NUMPAD6: key.NUM_6, 
      VK_NUMPAD7: key.NUM_7, 
      VK_NUMPAD8: key.NUM_8, 
      VK_NUMPAD9: key.NUM_9, 
      VK_MULTIPLY: key.NUM_MULTIPLY, 
      VK_ADD: key.NUM_ADD, 
  #    VK_SEPARATOR: , 
      VK_SUBTRACT: key.NUM_SUBTRACT, 
      VK_DECIMAL: key.NUM_DECIMAL, 
      VK_DIVIDE: key.NUM_DIVIDE, 
      VK_F1: key.F1, 
      VK_F2: key.F2, 
      VK_F3: key.F3, 
      VK_F4: key.F4, 
      VK_F5: key.F5, 
      VK_F6: key.F6, 
      VK_F7: key.F7, 
      VK_F8: key.F8, 
      VK_F9: key.F9, 
      VK_F10: key.F10, 
      VK_F11: key.F11, 
      VK_F12: key.F12, 
      VK_F13: key.F13, 
      VK_F14: key.F14, 
      VK_F15: key.F15, 
      VK_F16: key.F16, 
  #    VK_F17: , 
  #    VK_F18: , 
  #    VK_F19: , 
  #    VK_F20: , 
  #    VK_F21: , 
  #    VK_F22: , 
  #    VK_F23: , 
  #    VK_F24: , 
      VK_NUMLOCK: key.NUMLOCK, 
      VK_SCROLL: key.SCROLLLOCK, 
      VK_LSHIFT: key.LSHIFT, 
      VK_RSHIFT: key.RSHIFT, 
      VK_LCONTROL: key.LCTRL, 
      VK_RCONTROL: key.RCTRL, 
      VK_LMENU: key.LALT, 
      VK_RMENU: key.RALT, 
  #    VK_PROCESSKEY: , 
  #    VK_ATTN: , 
  #    VK_CRSEL: , 
  #    VK_EXSEL: , 
  #    VK_EREOF: , 
  #    VK_PLAY: , 
  #    VK_ZOOM: , 
  #    VK_NONAME: , 
  #    VK_PA1: , 
  #    VK_OEM_CLEAR: , 
  #    VK_XBUTTON1: , 
  #    VK_XBUTTON2: , 
  #    VK_VOLUME_MUTE: , 
  #    VK_VOLUME_DOWN: , 
  #    VK_VOLUME_UP: , 
  #    VK_MEDIA_NEXT_TRACK: , 
  #    VK_MEDIA_PREV_TRACK: , 
  #    VK_MEDIA_PLAY_PAUSE: , 
  #    VK_BROWSER_BACK: , 
  #    VK_BROWSER_FORWARD: , 
  }
  
  # Keys that must be translated via MapVirtualKey, as the virtual key code
  # is language and keyboard dependent.
  chmap = {
      ord('!'): key.EXCLAMATION,
      ord('"'): key.DOUBLEQUOTE,
      ord('#'): key.HASH,
      ord('$'): key.DOLLAR,
      ord('%'): key.PERCENT,
      ord('&'): key.AMPERSAND,
      ord("'"): key.APOSTROPHE,
      ord('('): key.PARENLEFT,
      ord(')'): key.PARENRIGHT,
      ord('*'): key.ASTERISK,
      ord('+'): key.PLUS,
      ord(','): key.COMMA,
      ord('-'): key.MINUS,
      ord('.'): key.PERIOD,
      ord('/'): key.SLASH,
      ord(':'): key.COLON,
      ord(';'): key.SEMICOLON,
      ord('<'): key.LESS,
      ord('='): key.EQUAL,
      ord('>'): key.GREATER,
      ord('?'): key.QUESTION,
      ord('@'): key.AT,
      ord('['): key.BRACKETLEFT,
      ord('\\'): key.BACKSLASH,
      ord(']'): key.BRACKETRIGHT,
      ord('\x5e'): key.ASCIICIRCUM,
      ord('_'): key.UNDERSCORE,
      ord('\x60'): key.GRAVE,
      ord('`'): key.QUOTELEFT,
      ord('{'): key.BRACELEFT,
      ord('|'): key.BAR,
      ord('}'): key.BRACERIGHT,
      ord('~'): key.ASCIITILDE,
  }
  