namespace Core::Skin::KeyboardLayout

namespace KeyboardLayout {

// enums

enum Mode;
enum SpecialKeys;

// global variables

static const int kRowCount = 4;
static const int keysPerRow[kRowCount] =    {       11,         10,         11,         4   };
static const char layoutLetters[] =     {       'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', kBackspace,         'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', kEnter,      kShift, 'Z', 'X', 'C', 'V', 'B', 'N', 'M', ',', '.', kShift,            kMode, kSpace, kMode, kCancel           };
static const char layoutNumbers[] =     {       '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', kBackspace,         '-', '/', ':', ';', '(', ')', '$', '&', '@', kEnter,      kShift, '.', ',', '?', '!', '\'', '\"', kUnused, kUnused, kUnused, kShift,        kMode, kSpace, kMode, kCancel   };
static const char layoutSymbols[] =     {       '[', ']', '{', '}', '#', '%', '^', '*', '+', '=', kBackspace,         '_', '\\', '|', '~', '<', '>', '$', '&', '@', kEnter,         kShift, '.', ',', '?', '!', '\'', '\"', kUnused, kUnused, kUnused, kShift,        kMode, kSpace, kMode, kCancel   };
char keyCode;
float weight;
static const struct Core::Skin::KeyboardLayout keyWeights[] =   {       {kEnter, 1.5f},       {kMode, 1.5f},        {kCancel, 1.5f},      {kSpace, 6.5f}    };

// global functions

static bool isSpecialKey(char keyCode);
static const char* getLayout(Mode mode);
static float getKeyWeight(char keyCode);
static void getKeyLabel(CString32& label, char keyCode, Mode mode);
static char getCharacter(char keyCode, bool shiftEnabled);

} // namespace KeyboardLayout