\r
namespace Event\r
{\r
- Key prefixed(_T("prefixed"));\r
- Key before_key_down(_T("before-key-down"));\r
- Key after_key_up(_T("after-key-up"));\r
- Key *events[] =\r
- {\r
- &prefixed,\r
- &before_key_down,\r
- &after_key_up,\r
- NULL,\r
- };\r
+Key prefixed(_T("prefixed"));\r
+Key before_key_down(_T("before-key-down"));\r
+Key after_key_up(_T("after-key-up"));\r
+Key *events[] = {\r
+ &prefixed,\r
+ &before_key_down,\r
+ &after_key_up,\r
+ NULL,\r
+};\r
}\r
\r
\r
// get mayu filename\r
static bool getFilenameFromRegistry(\r
- tstringi *o_name, tstringi *o_filename, Setting::Symbols *o_symbols)\r
-{\r
- Registry reg(MAYU_REGISTRY_ROOT);\r
- int index;\r
- reg.read(_T(".mayuIndex"), &index, 0);\r
- _TCHAR buf[100];\r
- _sntprintf(buf, NUMBER_OF(buf), _T(".mayu%d"), index);\r
-\r
- tstringi entry;\r
- if (!reg.read(buf, &entry))\r
- return false;\r
- \r
- tregex getFilename(_T("^([^;]*);([^;]*);(.*)$"));\r
- tsmatch getFilenameResult;\r
- if (!boost::regex_match(entry, getFilenameResult, getFilename))\r
- return false;\r
- \r
- if (o_name)\r
- *o_name = getFilenameResult.str(1);\r
- if (o_filename)\r
- *o_filename = getFilenameResult.str(2);\r
- if (o_symbols)\r
- {\r
- tstringi symbols = getFilenameResult.str(3);\r
- tregex symbol(_T("-D([^;]*)(.*)$"));\r
- tsmatch symbolResult;\r
- while (boost::regex_search(symbols, symbolResult, symbol))\r
- {\r
- o_symbols->insert(symbolResult.str(1));\r
- symbols = symbolResult.str(2);\r
- }\r
- }\r
- return true;\r
+ tstringi *o_name, tstringi *o_filename, Setting::Symbols *o_symbols)\r
+{\r
+ Registry reg(MAYU_REGISTRY_ROOT);\r
+ int index;\r
+ reg.read(_T(".mayuIndex"), &index, 0);\r
+ _TCHAR buf[100];\r
+ _sntprintf(buf, NUMBER_OF(buf), _T(".mayu%d"), index);\r
+\r
+ tstringi entry;\r
+ if (!reg.read(buf, &entry))\r
+ return false;\r
+\r
+ tregex getFilename(_T("^([^;]*);([^;]*);(.*)$"));\r
+ tsmatch getFilenameResult;\r
+ if (!boost::regex_match(entry, getFilenameResult, getFilename))\r
+ return false;\r
+\r
+ if (o_name)\r
+ *o_name = getFilenameResult.str(1);\r
+ if (o_filename)\r
+ *o_filename = getFilenameResult.str(2);\r
+ if (o_symbols) {\r
+ tstringi symbols = getFilenameResult.str(3);\r
+ tregex symbol(_T("-D([^;]*)(.*)$"));\r
+ tsmatch symbolResult;\r
+ while (boost::regex_search(symbols, symbolResult, symbol)) {\r
+ o_symbols->insert(symbolResult.str(1));\r
+ symbols = symbolResult.str(2);\r
+ }\r
+ }\r
+ return true;\r
}\r
\r
\r
// get home directory path\r
void getHomeDirectories(HomeDirectories *o_pathes)\r
{\r
- tstringi filename;\r
+ tstringi filename;\r
#ifndef USE_INI\r
- if (getFilenameFromRegistry(NULL, &filename, NULL) &&\r
- !filename.empty())\r
- {\r
- tregex getPath(_T("^(.*[/\\\\])[^/\\\\]*$"));\r
- tsmatch getPathResult;\r
- if (boost::regex_match(filename, getPathResult, getPath))\r
- o_pathes->push_back(getPathResult.str(1));\r
- }\r
- \r
- const _TCHAR *home = _tgetenv(_T("HOME"));\r
- if (home)\r
- o_pathes->push_back(home);\r
-\r
- const _TCHAR *homedrive = _tgetenv(_T("HOMEDRIVE"));\r
- const _TCHAR *homepath = _tgetenv(_T("HOMEPATH"));\r
- if (homedrive && homepath)\r
- o_pathes->push_back(tstringi(homedrive) + homepath);\r
- \r
- const _TCHAR *userprofile = _tgetenv(_T("USERPROFILE"));\r
- if (userprofile)\r
- o_pathes->push_back(userprofile);\r
- \r
- _TCHAR buf[GANA_MAX_PATH];\r
- DWORD len = GetCurrentDirectory(NUMBER_OF(buf), buf);\r
- if (0 < len && len < NUMBER_OF(buf))\r
- o_pathes->push_back(buf);\r
+ if (getFilenameFromRegistry(NULL, &filename, NULL) &&\r
+ !filename.empty()) {\r
+ tregex getPath(_T("^(.*[/\\\\])[^/\\\\]*$"));\r
+ tsmatch getPathResult;\r
+ if (boost::regex_match(filename, getPathResult, getPath))\r
+ o_pathes->push_back(getPathResult.str(1));\r
+ }\r
+\r
+ const _TCHAR *home = _tgetenv(_T("HOME"));\r
+ if (home)\r
+ o_pathes->push_back(home);\r
+\r
+ const _TCHAR *homedrive = _tgetenv(_T("HOMEDRIVE"));\r
+ const _TCHAR *homepath = _tgetenv(_T("HOMEPATH"));\r
+ if (homedrive && homepath)\r
+ o_pathes->push_back(tstringi(homedrive) + homepath);\r
+\r
+ const _TCHAR *userprofile = _tgetenv(_T("USERPROFILE"));\r
+ if (userprofile)\r
+ o_pathes->push_back(userprofile);\r
+\r
+ _TCHAR buf[GANA_MAX_PATH];\r
+ DWORD len = GetCurrentDirectory(NUMBER_OF(buf), buf);\r
+ if (0 < len && len < NUMBER_OF(buf))\r
+ o_pathes->push_back(buf);\r
#else //USE_INI\r
- _TCHAR buf[GANA_MAX_PATH];\r
+ _TCHAR buf[GANA_MAX_PATH];\r
#endif //USE_INI\r
\r
- if (GetModuleFileName(GetModuleHandle(NULL), buf, NUMBER_OF(buf)))\r
- o_pathes->push_back(pathRemoveFileSpec(buf));\r
+ if (GetModuleFileName(GetModuleHandle(NULL), buf, NUMBER_OF(buf)))\r
+ o_pathes->push_back(pathRemoveFileSpec(buf));\r
}\r
\r
\r
// is there no more tokens ?\r
bool SettingLoader::isEOL()\r
{\r
- return m_ti == m_tokens.end();\r
+ return m_ti == m_tokens.end();\r
}\r
\r
\r
// get next token\r
Token *SettingLoader::getToken()\r
{\r
- if (isEOL())\r
- throw ErrorMessage() << _T("too few words.");\r
- return &*(m_ti ++);\r
+ if (isEOL())\r
+ throw ErrorMessage() << _T("too few words.");\r
+ return &*(m_ti ++);\r
}\r
\r
- \r
+\r
// look next token\r
Token *SettingLoader::lookToken()\r
{\r
- if (isEOL())\r
- throw ErrorMessage() << _T("too few words.");\r
- return &*m_ti;\r
+ if (isEOL())\r
+ throw ErrorMessage() << _T("too few words.");\r
+ return &*m_ti;\r
}\r
\r
\r
// argument "("\r
bool SettingLoader::getOpenParen(bool i_doesThrow, const _TCHAR *i_name)\r
{\r
- if (!isEOL() && lookToken()->isOpenParen())\r
- {\r
- getToken();\r
- return true;\r
- }\r
- if (i_doesThrow)\r
- throw ErrorMessage() << _T("there must be `(' after `&")\r
- << i_name << _T("'.");\r
- return false;\r
+ if (!isEOL() && lookToken()->isOpenParen()) {\r
+ getToken();\r
+ return true;\r
+ }\r
+ if (i_doesThrow)\r
+ throw ErrorMessage() << _T("there must be `(' after `&")\r
+ << i_name << _T("'.");\r
+ return false;\r
}\r
\r
\r
// argument ")"\r
bool SettingLoader::getCloseParen(bool i_doesThrow, const _TCHAR *i_name)\r
{\r
- if (!isEOL() && lookToken()->isCloseParen())\r
- {\r
- getToken();\r
- return true;\r
- }\r
- if (i_doesThrow)\r
- throw ErrorMessage() << _T("`&") << i_name\r
- << _T("': too many arguments.");\r
- return false;\r
+ if (!isEOL() && lookToken()->isCloseParen()) {\r
+ getToken();\r
+ return true;\r
+ }\r
+ if (i_doesThrow)\r
+ throw ErrorMessage() << _T("`&") << i_name\r
+ << _T("': too many arguments.");\r
+ return false;\r
}\r
\r
\r
// argument ","\r
bool SettingLoader::getComma(bool i_doesThrow, const _TCHAR *i_name)\r
{\r
- if (!isEOL() && lookToken()->isComma())\r
- {\r
- getToken();\r
- return true;\r
- }\r
- if (i_doesThrow)\r
- throw ErrorMessage() << _T("`&") << i_name\r
- << _T("': comma expected.");\r
- return false;\r
+ if (!isEOL() && lookToken()->isComma()) {\r
+ getToken();\r
+ return true;\r
+ }\r
+ if (i_doesThrow)\r
+ throw ErrorMessage() << _T("`&") << i_name\r
+ << _T("': comma expected.");\r
+ return false;\r
}\r
\r
\r
// <INCLUDE>\r
void SettingLoader::load_INCLUDE()\r
{\r
- SettingLoader loader(m_soLog, m_log);\r
- loader.m_defaultAssignModifier = m_defaultAssignModifier;\r
- loader.m_defaultKeySeqModifier = m_defaultKeySeqModifier;\r
- if (!loader.load(m_setting, (*getToken()).getString()))\r
- m_isThereAnyError = true;\r
+ SettingLoader loader(m_soLog, m_log);\r
+ loader.m_defaultAssignModifier = m_defaultAssignModifier;\r
+ loader.m_defaultKeySeqModifier = m_defaultKeySeqModifier;\r
+ if (!loader.load(m_setting, (*getToken()).getString()))\r
+ m_isThereAnyError = true;\r
}\r
\r
\r
// <SCAN_CODES>\r
void SettingLoader::load_SCAN_CODES(Key *o_key)\r
{\r
- for (int j = 0; j < Key::MAX_SCAN_CODES_SIZE && !isEOL(); ++ j)\r
- {\r
- ScanCode sc;\r
- sc.m_flags = 0;\r
- while (true)\r
- {\r
- Token *t = getToken();\r
- if (t->isNumber())\r
- {\r
- sc.m_scan = (u_char)t->getNumber();\r
- o_key->addScanCode(sc);\r
- break;\r
- }\r
- if (*t == _T("E0-")) sc.m_flags |= ScanCode::E0;\r
- else if (*t == _T("E1-")) sc.m_flags |= ScanCode::E1;\r
- else throw ErrorMessage() << _T("`") << *t\r
- << _T("': invalid modifier.");\r
- }\r
- }\r
+ for (int j = 0; j < Key::MAX_SCAN_CODES_SIZE && !isEOL(); ++ j) {\r
+ ScanCode sc;\r
+ sc.m_flags = 0;\r
+ while (true) {\r
+ Token *t = getToken();\r
+ if (t->isNumber()) {\r
+ sc.m_scan = (u_char)t->getNumber();\r
+ o_key->addScanCode(sc);\r
+ break;\r
+ }\r
+ if (*t == _T("E0-")) sc.m_flags |= ScanCode::E0;\r
+ else if (*t == _T("E1-")) sc.m_flags |= ScanCode::E1;\r
+ else throw ErrorMessage() << _T("`") << *t\r
+ << _T("': invalid modifier.");\r
+ }\r
+ }\r
}\r
\r
\r
// <DEFINE_KEY>\r
void SettingLoader::load_DEFINE_KEY()\r
{\r
- Token *t = getToken();\r
- Key key;\r
- \r
- // <KEY_NAMES>\r
- if (*t == _T('('))\r
- {\r
- key.addName(getToken()->getString());\r
- while (t = getToken(), *t != _T(')'))\r
- key.addName(t->getString());\r
- if (*getToken() != _T("="))\r
- throw ErrorMessage() << _T("there must be `=' after `)'.");\r
- }\r
- else\r
- {\r
- key.addName(t->getString());\r
- while (t = getToken(), *t != _T("="))\r
- key.addName(t->getString());\r
- }\r
-\r
- load_SCAN_CODES(&key);\r
- m_setting->m_keyboard.addKey(key);\r
+ Token *t = getToken();\r
+ Key key;\r
+\r
+ // <KEY_NAMES>\r
+ if (*t == _T('(')) {\r
+ key.addName(getToken()->getString());\r
+ while (t = getToken(), *t != _T(')'))\r
+ key.addName(t->getString());\r
+ if (*getToken() != _T("="))\r
+ throw ErrorMessage() << _T("there must be `=' after `)'.");\r
+ } else {\r
+ key.addName(t->getString());\r
+ while (t = getToken(), *t != _T("="))\r
+ key.addName(t->getString());\r
+ }\r
+\r
+ load_SCAN_CODES(&key);\r
+ m_setting->m_keyboard.addKey(key);\r
}\r
\r
\r
// <DEFINE_MODIFIER>\r
void SettingLoader::load_DEFINE_MODIFIER()\r
{\r
- Token *t = getToken();\r
- Modifier::Type mt;\r
- if (*t == _T("shift") ) mt = Modifier::Type_Shift;\r
- else if (*t == _T("alt") ||\r
- *t == _T("meta") ||\r
- *t == _T("menu") ) mt = Modifier::Type_Alt;\r
- else if (*t == _T("control") ||\r
- *t == _T("ctrl") ) mt = Modifier::Type_Control;\r
- else if (*t == _T("windows") ||\r
- *t == _T("win") ) mt = Modifier::Type_Windows;\r
- else throw ErrorMessage() << _T("`") << *t\r
- << _T("': invalid modifier name.");\r
- \r
- if (*getToken() != _T("="))\r
- throw ErrorMessage() << _T("there must be `=' after modifier name.");\r
- \r
- while (!isEOL())\r
- {\r
- t = getToken();\r
- Key *key =\r
- m_setting->m_keyboard.searchKeyByNonAliasName(t->getString());\r
- if (!key)\r
- throw ErrorMessage() << _T("`") << *t << _T("': invalid key name.");\r
- m_setting->m_keyboard.addModifier(mt, key);\r
- }\r
+ Token *t = getToken();\r
+ Modifier::Type mt;\r
+ if (*t == _T("shift") ) mt = Modifier::Type_Shift;\r
+ else if (*t == _T("alt") ||\r
+ *t == _T("meta") ||\r
+ *t == _T("menu") ) mt = Modifier::Type_Alt;\r
+ else if (*t == _T("control") ||\r
+ *t == _T("ctrl") ) mt = Modifier::Type_Control;\r
+ else if (*t == _T("windows") ||\r
+ *t == _T("win") ) mt = Modifier::Type_Windows;\r
+ else throw ErrorMessage() << _T("`") << *t\r
+ << _T("': invalid modifier name.");\r
+\r
+ if (*getToken() != _T("="))\r
+ throw ErrorMessage() << _T("there must be `=' after modifier name.");\r
+\r
+ while (!isEOL()) {\r
+ t = getToken();\r
+ Key *key =\r
+ m_setting->m_keyboard.searchKeyByNonAliasName(t->getString());\r
+ if (!key)\r
+ throw ErrorMessage() << _T("`") << *t << _T("': invalid key name.");\r
+ m_setting->m_keyboard.addModifier(mt, key);\r
+ }\r
}\r
\r
\r
// <DEFINE_SYNC_KEY>\r
void SettingLoader::load_DEFINE_SYNC_KEY()\r
{\r
- Key *key = m_setting->m_keyboard.getSyncKey();\r
- key->initialize();\r
- key->addName(_T("sync"));\r
- \r
- if (*getToken() != _T("="))\r
- throw ErrorMessage() << _T("there must be `=' after `sync'.");\r
- \r
- load_SCAN_CODES(key);\r
+ Key *key = m_setting->m_keyboard.getSyncKey();\r
+ key->initialize();\r
+ key->addName(_T("sync"));\r
+\r
+ if (*getToken() != _T("="))\r
+ throw ErrorMessage() << _T("there must be `=' after `sync'.");\r
+\r
+ load_SCAN_CODES(key);\r
}\r
\r
\r
// <DEFINE_ALIAS>\r
void SettingLoader::load_DEFINE_ALIAS()\r
{\r
- Token *name = getToken();\r
- \r
- if (*getToken() != _T("="))\r
- throw ErrorMessage() << _T("there must be `=' after `alias'.");\r
+ Token *name = getToken();\r
+\r
+ if (*getToken() != _T("="))\r
+ throw ErrorMessage() << _T("there must be `=' after `alias'.");\r
\r
- Token *t = getToken();\r
- Key *key = m_setting->m_keyboard.searchKeyByNonAliasName(t->getString());\r
- if (!key)\r
- throw ErrorMessage() << _T("`") << *t << _T("': invalid key name.");\r
- m_setting->m_keyboard.addAlias(name->getString(), key);\r
+ Token *t = getToken();\r
+ Key *key = m_setting->m_keyboard.searchKeyByNonAliasName(t->getString());\r
+ if (!key)\r
+ throw ErrorMessage() << _T("`") << *t << _T("': invalid key name.");\r
+ m_setting->m_keyboard.addAlias(name->getString(), key);\r
}\r
\r
\r
// <DEFINE_SUBSTITUTE>\r
void SettingLoader::load_DEFINE_SUBSTITUTE()\r
{\r
- typedef std::list<ModifiedKey> AssignedKeys;\r
- AssignedKeys assignedKeys;\r
- do\r
- {\r
- ModifiedKey mkey;\r
- mkey.m_modifier =\r
- load_MODIFIER(Modifier::Type_ASSIGN, m_defaultAssignModifier);\r
- mkey.m_key = load_KEY_NAME();\r
- assignedKeys.push_back(mkey);\r
- } while (!(*lookToken() == _T("=>") || *lookToken() == _T("=")));\r
- getToken();\r
- \r
- KeySeq *keySeq = load_KEY_SEQUENCE(_T(""), false, Modifier::Type_ASSIGN);\r
- ModifiedKey mkey = keySeq->getFirstModifiedKey();\r
- if (!mkey.m_key)\r
- throw ErrorMessage() << _T("no key is specified for substitute.");\r
- \r
- for (AssignedKeys::iterator i = assignedKeys.begin();\r
- i != assignedKeys.end(); ++ i)\r
- m_setting->m_keyboard.addSubstitute(*i, mkey);\r
+ typedef std::list<ModifiedKey> AssignedKeys;\r
+ AssignedKeys assignedKeys;\r
+ do {\r
+ ModifiedKey mkey;\r
+ mkey.m_modifier =\r
+ load_MODIFIER(Modifier::Type_ASSIGN, m_defaultAssignModifier);\r
+ mkey.m_key = load_KEY_NAME();\r
+ assignedKeys.push_back(mkey);\r
+ } while (!(*lookToken() == _T("=>") || *lookToken() == _T("=")));\r
+ getToken();\r
+\r
+ KeySeq *keySeq = load_KEY_SEQUENCE(_T(""), false, Modifier::Type_ASSIGN);\r
+ ModifiedKey mkey = keySeq->getFirstModifiedKey();\r
+ if (!mkey.m_key)\r
+ throw ErrorMessage() << _T("no key is specified for substitute.");\r
+\r
+ for (AssignedKeys::iterator i = assignedKeys.begin();\r
+ i != assignedKeys.end(); ++ i)\r
+ m_setting->m_keyboard.addSubstitute(*i, mkey);\r
}\r
\r
\r
// <DEFINE_OPTION>\r
void SettingLoader::load_DEFINE_OPTION()\r
{\r
- Token *t = getToken();\r
- if (*t == _T("KL-")) {\r
- if (*getToken() != _T("=")) {\r
- throw ErrorMessage() << _T("there must be `=' after `def option KL-'.");\r
- }\r
-\r
- load_ARGUMENT(&m_setting->m_correctKanaLockHandling);\r
- \r
- } else if (*t == _T("delay-of")) {\r
- if (*getToken() != _T("!!!")) {\r
- throw ErrorMessage()\r
- << _T("there must be `!!!' after `def option delay-of'.");\r
- }\r
- \r
- if (*getToken() != _T("=")) {\r
- throw ErrorMessage()\r
- << _T("there must be `=' after `def option delay-of !!!'.");\r
- }\r
- \r
- load_ARGUMENT(&m_setting->m_oneShotRepeatableDelay);\r
- \r
- } else if (*t == _T("sts4mayu")) {\r
- if (*getToken() != _T("=")) {\r
- throw ErrorMessage()\r
- << _T("there must be `=' after `def option sts4mayu'.");\r
- }\r
- \r
- load_ARGUMENT(&m_setting->m_sts4mayu);\r
- \r
- } else if (*t == _T("cts4mayu")) {\r
- if (*getToken() != _T("=")) {\r
- throw ErrorMessage()\r
- << _T("there must be `=' after `def option cts4mayu'.");\r
- }\r
- \r
- load_ARGUMENT(&m_setting->m_cts4mayu);\r
- \r
- } else {\r
- throw ErrorMessage() << _T("syntax error `def option ") << *t << _T("'.");\r
- }\r
+ Token *t = getToken();\r
+ if (*t == _T("KL-")) {\r
+ if (*getToken() != _T("=")) {\r
+ throw ErrorMessage() << _T("there must be `=' after `def option KL-'.");\r
+ }\r
+\r
+ load_ARGUMENT(&m_setting->m_correctKanaLockHandling);\r
+\r
+ } else if (*t == _T("delay-of")) {\r
+ if (*getToken() != _T("!!!")) {\r
+ throw ErrorMessage()\r
+ << _T("there must be `!!!' after `def option delay-of'.");\r
+ }\r
+\r
+ if (*getToken() != _T("=")) {\r
+ throw ErrorMessage()\r
+ << _T("there must be `=' after `def option delay-of !!!'.");\r
+ }\r
+\r
+ load_ARGUMENT(&m_setting->m_oneShotRepeatableDelay);\r
+\r
+ } else if (*t == _T("sts4mayu")) {\r
+ if (*getToken() != _T("=")) {\r
+ throw ErrorMessage()\r
+ << _T("there must be `=' after `def option sts4mayu'.");\r
+ }\r
+\r
+ load_ARGUMENT(&m_setting->m_sts4mayu);\r
+\r
+ } else if (*t == _T("cts4mayu")) {\r
+ if (*getToken() != _T("=")) {\r
+ throw ErrorMessage()\r
+ << _T("there must be `=' after `def option cts4mayu'.");\r
+ }\r
+\r
+ load_ARGUMENT(&m_setting->m_cts4mayu);\r
+\r
+ } else if (*t == _T("mouse-event")) {\r
+ if (*getToken() != _T("=")) {\r
+ throw ErrorMessage()\r
+ << _T("there must be `=' after `def option mouse-event'.");\r
+ }\r
+\r
+ load_ARGUMENT(&m_setting->m_mouseEvent);\r
+\r
+ } else if (*t == _T("drag-threshold")) {\r
+ if (*getToken() != _T("=")) {\r
+ throw ErrorMessage()\r
+ << _T("there must be `=' after `def option drag-threshold'.");\r
+ }\r
+\r
+ load_ARGUMENT(&m_setting->m_dragThreshold);\r
+\r
+ } else {\r
+ throw ErrorMessage() << _T("syntax error `def option ") << *t << _T("'.");\r
+ }\r
}\r
\r
\r
// <KEYBOARD_DEFINITION>\r
void SettingLoader::load_KEYBOARD_DEFINITION()\r
{\r
- Token *t = getToken();\r
- \r
- // <DEFINE_KEY>\r
- if (*t == _T("key")) load_DEFINE_KEY();\r
+ Token *t = getToken();\r
\r
- // <DEFINE_MODIFIER>\r
- else if (*t == _T("mod")) load_DEFINE_MODIFIER();\r
- \r
- // <DEFINE_SYNC_KEY>\r
- else if (*t == _T("sync")) load_DEFINE_SYNC_KEY();\r
- \r
- // <DEFINE_ALIAS>\r
- else if (*t == _T("alias")) load_DEFINE_ALIAS();\r
- \r
- // <DEFINE_SUBSTITUTE>\r
- else if (*t == _T("subst")) load_DEFINE_SUBSTITUTE();\r
+ // <DEFINE_KEY>\r
+ if (*t == _T("key")) load_DEFINE_KEY();\r
\r
- // <DEFINE_OPTION>\r
- else if (*t == _T("option")) load_DEFINE_OPTION();\r
- \r
- //\r
- else throw ErrorMessage() << _T("syntax error `") << *t << _T("'.");\r
+ // <DEFINE_MODIFIER>\r
+ else if (*t == _T("mod")) load_DEFINE_MODIFIER();\r
+\r
+ // <DEFINE_SYNC_KEY>\r
+ else if (*t == _T("sync")) load_DEFINE_SYNC_KEY();\r
+\r
+ // <DEFINE_ALIAS>\r
+ else if (*t == _T("alias")) load_DEFINE_ALIAS();\r
+\r
+ // <DEFINE_SUBSTITUTE>\r
+ else if (*t == _T("subst")) load_DEFINE_SUBSTITUTE();\r
+\r
+ // <DEFINE_OPTION>\r
+ else if (*t == _T("option")) load_DEFINE_OPTION();\r
+\r
+ //\r
+ else throw ErrorMessage() << _T("syntax error `") << *t << _T("'.");\r
}\r
\r
\r
// <..._MODIFIER>\r
Modifier SettingLoader::load_MODIFIER(\r
- Modifier::Type i_mode, Modifier i_modifier, Modifier::Type *o_mode)\r
-{\r
- if (o_mode)\r
- *o_mode = Modifier::Type_begin;\r
- \r
- Modifier isModifierSpecified;\r
- enum { PRESS, RELEASE, DONTCARE } flag = PRESS;\r
-\r
- int i;\r
- for (i = i_mode; i < Modifier::Type_ASSIGN; ++ i)\r
- {\r
- i_modifier.dontcare(Modifier::Type(i));\r
- isModifierSpecified.on(Modifier::Type(i));\r
- }\r
- \r
- Token *t = NULL;\r
- \r
- continue_loop:\r
- while (!isEOL())\r
- {\r
- t = lookToken();\r
-\r
- const static struct { const _TCHAR *m_s; Modifier::Type m_mt; } map[] =\r
- {\r
- // <BASIC_MODIFIER>\r
- { _T("S-"), Modifier::Type_Shift },\r
- { _T("A-"), Modifier::Type_Alt },\r
- { _T("M-"), Modifier::Type_Alt },\r
- { _T("C-"), Modifier::Type_Control },\r
- { _T("W-"), Modifier::Type_Windows },\r
- // <KEYSEQ_MODIFIER>\r
- { _T("U-"), Modifier::Type_Up },\r
- { _T("D-"), Modifier::Type_Down },\r
- // <ASSIGN_MODIFIER>\r
- { _T("R-"), Modifier::Type_Repeat },\r
- { _T("IL-"), Modifier::Type_ImeLock },\r
- { _T("IC-"), Modifier::Type_ImeComp },\r
- { _T("I-"), Modifier::Type_ImeComp },\r
- { _T("NL-"), Modifier::Type_NumLock },\r
- { _T("CL-"), Modifier::Type_CapsLock },\r
- { _T("SL-"), Modifier::Type_ScrollLock },\r
- { _T("KL-"), Modifier::Type_KanaLock },\r
- { _T("MAX-"), Modifier::Type_Maximized },\r
- { _T("MIN-"), Modifier::Type_Minimized },\r
- { _T("MMAX-"), Modifier::Type_MdiMaximized },\r
- { _T("MMIN-"), Modifier::Type_MdiMinimized },\r
- { _T("T-"), Modifier::Type_Touchpad },\r
- { _T("TS-"), Modifier::Type_TouchpadSticky },\r
- { _T("M0-"), Modifier::Type_Mod0 },\r
- { _T("M1-"), Modifier::Type_Mod1 },\r
- { _T("M2-"), Modifier::Type_Mod2 },\r
- { _T("M3-"), Modifier::Type_Mod3 },\r
- { _T("M4-"), Modifier::Type_Mod4 },\r
- { _T("M5-"), Modifier::Type_Mod5 },\r
- { _T("M6-"), Modifier::Type_Mod6 },\r
- { _T("M7-"), Modifier::Type_Mod7 },\r
- { _T("M8-"), Modifier::Type_Mod8 },\r
- { _T("M9-"), Modifier::Type_Mod9 },\r
- { _T("L0-"), Modifier::Type_Lock0 },\r
- { _T("L1-"), Modifier::Type_Lock1 },\r
- { _T("L2-"), Modifier::Type_Lock2 },\r
- { _T("L3-"), Modifier::Type_Lock3 },\r
- { _T("L4-"), Modifier::Type_Lock4 },\r
- { _T("L5-"), Modifier::Type_Lock5 },\r
- { _T("L6-"), Modifier::Type_Lock6 },\r
- { _T("L7-"), Modifier::Type_Lock7 },\r
- { _T("L8-"), Modifier::Type_Lock8 },\r
- { _T("L9-"), Modifier::Type_Lock9 },\r
- };\r
-\r
- for (int i = 0; i < NUMBER_OF(map); ++ i)\r
- if (*t == map[i].m_s)\r
- {\r
- getToken();\r
- Modifier::Type mt = map[i].m_mt;\r
- if (static_cast<int>(i_mode) <= static_cast<int>(mt))\r
- throw ErrorMessage() << _T("`") << *t\r
- << _T("': invalid modifier at this context.");\r
- switch (flag)\r
- {\r
- case PRESS: i_modifier.press(mt); break;\r
- case RELEASE: i_modifier.release(mt); break;\r
- case DONTCARE: i_modifier.dontcare(mt); break;\r
+ Modifier::Type i_mode, Modifier i_modifier, Modifier::Type *o_mode)\r
+{\r
+ if (o_mode)\r
+ *o_mode = Modifier::Type_begin;\r
+\r
+ Modifier isModifierSpecified;\r
+ enum { PRESS, RELEASE, DONTCARE } flag = PRESS;\r
+\r
+ int i;\r
+ for (i = i_mode; i < Modifier::Type_ASSIGN; ++ i) {\r
+ i_modifier.dontcare(Modifier::Type(i));\r
+ isModifierSpecified.on(Modifier::Type(i));\r
}\r
- isModifierSpecified.on(mt);\r
- flag = PRESS;\r
- \r
- if (o_mode && *o_mode < mt)\r
- {\r
- if (mt < Modifier::Type_BASIC)\r
- *o_mode = Modifier::Type_BASIC;\r
- else if (mt < Modifier::Type_KEYSEQ)\r
- *o_mode = Modifier::Type_KEYSEQ;\r
- else if (mt < Modifier::Type_ASSIGN)\r
- *o_mode = Modifier::Type_ASSIGN;\r
+\r
+ Token *t = NULL;\r
+\r
+continue_loop:\r
+ while (!isEOL()) {\r
+ t = lookToken();\r
+\r
+ const static struct {\r
+ const _TCHAR *m_s;\r
+ Modifier::Type m_mt;\r
+ } map[] = {\r
+ // <BASIC_MODIFIER>\r
+ { _T("S-"), Modifier::Type_Shift },\r
+ { _T("A-"), Modifier::Type_Alt },\r
+ { _T("M-"), Modifier::Type_Alt },\r
+ { _T("C-"), Modifier::Type_Control },\r
+ { _T("W-"), Modifier::Type_Windows },\r
+ // <KEYSEQ_MODIFIER>\r
+ { _T("U-"), Modifier::Type_Up },\r
+ { _T("D-"), Modifier::Type_Down },\r
+ // <ASSIGN_MODIFIER>\r
+ { _T("R-"), Modifier::Type_Repeat },\r
+ { _T("IL-"), Modifier::Type_ImeLock },\r
+ { _T("IC-"), Modifier::Type_ImeComp },\r
+ { _T("I-"), Modifier::Type_ImeComp },\r
+ { _T("NL-"), Modifier::Type_NumLock },\r
+ { _T("CL-"), Modifier::Type_CapsLock },\r
+ { _T("SL-"), Modifier::Type_ScrollLock },\r
+ { _T("KL-"), Modifier::Type_KanaLock },\r
+ { _T("MAX-"), Modifier::Type_Maximized },\r
+ { _T("MIN-"), Modifier::Type_Minimized },\r
+ { _T("MMAX-"), Modifier::Type_MdiMaximized },\r
+ { _T("MMIN-"), Modifier::Type_MdiMinimized },\r
+ { _T("T-"), Modifier::Type_Touchpad },\r
+ { _T("TS-"), Modifier::Type_TouchpadSticky },\r
+ { _T("M0-"), Modifier::Type_Mod0 },\r
+ { _T("M1-"), Modifier::Type_Mod1 },\r
+ { _T("M2-"), Modifier::Type_Mod2 },\r
+ { _T("M3-"), Modifier::Type_Mod3 },\r
+ { _T("M4-"), Modifier::Type_Mod4 },\r
+ { _T("M5-"), Modifier::Type_Mod5 },\r
+ { _T("M6-"), Modifier::Type_Mod6 },\r
+ { _T("M7-"), Modifier::Type_Mod7 },\r
+ { _T("M8-"), Modifier::Type_Mod8 },\r
+ { _T("M9-"), Modifier::Type_Mod9 },\r
+ { _T("L0-"), Modifier::Type_Lock0 },\r
+ { _T("L1-"), Modifier::Type_Lock1 },\r
+ { _T("L2-"), Modifier::Type_Lock2 },\r
+ { _T("L3-"), Modifier::Type_Lock3 },\r
+ { _T("L4-"), Modifier::Type_Lock4 },\r
+ { _T("L5-"), Modifier::Type_Lock5 },\r
+ { _T("L6-"), Modifier::Type_Lock6 },\r
+ { _T("L7-"), Modifier::Type_Lock7 },\r
+ { _T("L8-"), Modifier::Type_Lock8 },\r
+ { _T("L9-"), Modifier::Type_Lock9 },\r
+ };\r
+\r
+ for (int i = 0; i < NUMBER_OF(map); ++ i)\r
+ if (*t == map[i].m_s) {\r
+ getToken();\r
+ Modifier::Type mt = map[i].m_mt;\r
+ if (static_cast<int>(i_mode) <= static_cast<int>(mt))\r
+ throw ErrorMessage() << _T("`") << *t\r
+ << _T("': invalid modifier at this context.");\r
+ switch (flag) {\r
+ case PRESS:\r
+ i_modifier.press(mt);\r
+ break;\r
+ case RELEASE:\r
+ i_modifier.release(mt);\r
+ break;\r
+ case DONTCARE:\r
+ i_modifier.dontcare(mt);\r
+ break;\r
+ }\r
+ isModifierSpecified.on(mt);\r
+ flag = PRESS;\r
+\r
+ if (o_mode && *o_mode < mt) {\r
+ if (mt < Modifier::Type_BASIC)\r
+ *o_mode = Modifier::Type_BASIC;\r
+ else if (mt < Modifier::Type_KEYSEQ)\r
+ *o_mode = Modifier::Type_KEYSEQ;\r
+ else if (mt < Modifier::Type_ASSIGN)\r
+ *o_mode = Modifier::Type_ASSIGN;\r
+ }\r
+ goto continue_loop;\r
+ }\r
+\r
+ if (*t == _T("*")) {\r
+ getToken();\r
+ flag = DONTCARE;\r
+ continue;\r
+ }\r
+\r
+ if (*t == _T("~")) {\r
+ getToken();\r
+ flag = RELEASE;\r
+ continue;\r
+ }\r
+\r
+ break;\r
+ }\r
+\r
+ for (i = Modifier::Type_begin; i != Modifier::Type_end; ++ i)\r
+ if (!isModifierSpecified.isOn(Modifier::Type(i)))\r
+ switch (flag) {\r
+ case PRESS:\r
+ break;\r
+ case RELEASE:\r
+ i_modifier.release(Modifier::Type(i));\r
+ break;\r
+ case DONTCARE:\r
+ i_modifier.dontcare(Modifier::Type(i));\r
+ break;\r
+ }\r
+\r
+ // fix up and down\r
+ bool isDontcareUp = i_modifier.isDontcare(Modifier::Type_Up);\r
+ bool isDontcareDown = i_modifier.isDontcare(Modifier::Type_Down);\r
+ bool isOnUp = i_modifier.isOn(Modifier::Type_Up);\r
+ bool isOnDown = i_modifier.isOn(Modifier::Type_Down);\r
+ if (isDontcareUp && isDontcareDown)\r
+ ;\r
+ else if (isDontcareUp)\r
+ i_modifier.on(Modifier::Type_Up, !isOnDown);\r
+ else if (isDontcareDown)\r
+ i_modifier.on(Modifier::Type_Down, !isOnUp);\r
+ else if (isOnUp == isOnDown) {\r
+ i_modifier.dontcare(Modifier::Type_Up);\r
+ i_modifier.dontcare(Modifier::Type_Down);\r
}\r
- goto continue_loop;\r
- }\r
- \r
- if (*t == _T("*"))\r
- {\r
- getToken();\r
- flag = DONTCARE;\r
- continue;\r
- }\r
- \r
- if (*t == _T("~"))\r
- {\r
- getToken();\r
- flag = RELEASE;\r
- continue;\r
- }\r
-\r
- break;\r
- }\r
- \r
- for (i = Modifier::Type_begin; i != Modifier::Type_end; ++ i)\r
- if (!isModifierSpecified.isOn(Modifier::Type(i)))\r
- switch (flag)\r
- {\r
- case PRESS: break;\r
- case RELEASE: i_modifier.release(Modifier::Type(i)); break;\r
- case DONTCARE: i_modifier.dontcare(Modifier::Type(i)); break;\r
- }\r
-\r
- // fix up and down\r
- bool isDontcareUp = i_modifier.isDontcare(Modifier::Type_Up);\r
- bool isDontcareDown = i_modifier.isDontcare(Modifier::Type_Down);\r
- bool isOnUp = i_modifier.isOn(Modifier::Type_Up);\r
- bool isOnDown = i_modifier.isOn(Modifier::Type_Down);\r
- if (isDontcareUp && isDontcareDown)\r
- ;\r
- else if (isDontcareUp)\r
- i_modifier.on(Modifier::Type_Up, !isOnDown);\r
- else if (isDontcareDown)\r
- i_modifier.on(Modifier::Type_Down, !isOnUp);\r
- else if (isOnUp == isOnDown)\r
- {\r
- i_modifier.dontcare(Modifier::Type_Up);\r
- i_modifier.dontcare(Modifier::Type_Down);\r
- }\r
-\r
- // fix repeat\r
- if (!isModifierSpecified.isOn(Modifier::Type_Repeat))\r
- i_modifier.dontcare(Modifier::Type_Repeat);\r
- return i_modifier;\r
+\r
+ // fix repeat\r
+ if (!isModifierSpecified.isOn(Modifier::Type_Repeat))\r
+ i_modifier.dontcare(Modifier::Type_Repeat);\r
+ return i_modifier;\r
}\r
\r
\r
// <KEY_NAME>\r
Key *SettingLoader::load_KEY_NAME()\r
{\r
- Token *t = getToken();\r
- Key *key = m_setting->m_keyboard.searchKey(t->getString());\r
- if (!key)\r
- throw ErrorMessage() << _T("`") << *t << _T("': invalid key name.");\r
- return key;\r
+ Token *t = getToken();\r
+ Key *key = m_setting->m_keyboard.searchKey(t->getString());\r
+ if (!key)\r
+ throw ErrorMessage() << _T("`") << *t << _T("': invalid key name.");\r
+ return key;\r
}\r
\r
\r
// <KEYMAP_DEFINITION>\r
void SettingLoader::load_KEYMAP_DEFINITION(const Token *i_which)\r
{\r
- Keymap::Type type = Keymap::Type_keymap;\r
- Token *name = getToken(); // <KEYMAP_NAME>\r
- tstringi windowClassName;\r
- tstringi windowTitleName;\r
- KeySeq *keySeq = NULL;\r
- Keymap *parentKeymap = NULL;\r
- bool isKeymap2 = false;\r
- bool doesLoadDefaultKeySeq = false;\r
-\r
- if (!isEOL())\r
- {\r
- Token *t = lookToken();\r
- if (*i_which == _T("window")) // <WINDOW>\r
- {\r
- if (t->isOpenParen())\r
- // "(" <WINDOW_CLASS_NAME> "&&" <WINDOW_TITLE_NAME> ")"\r
- // "(" <WINDOW_CLASS_NAME> "||" <WINDOW_TITLE_NAME> ")"\r
- {\r
- getToken();\r
- windowClassName = getToken()->getRegexp();\r
- t = getToken();\r
- if (*t == _T("&&"))\r
- type = Keymap::Type_windowAnd;\r
- else if (*t == _T("||"))\r
- type = Keymap::Type_windowOr;\r
- else\r
- throw ErrorMessage() << _T("`") << *t << _T("': unknown operator.");\r
- windowTitleName = getToken()->getRegexp();\r
- if (!getToken()->isCloseParen())\r
- throw ErrorMessage() << _T("there must be `)'.");\r
- }\r
- else if (t->isRegexp()) // <WINDOW_CLASS_NAME>\r
- {\r
- getToken();\r
- type = Keymap::Type_windowAnd;\r
- windowClassName = t->getRegexp();\r
- }\r
- }\r
- else if (*i_which == _T("keymap"))\r
- ;\r
- else if (*i_which == _T("keymap2"))\r
- isKeymap2 = true;\r
- else\r
- ASSERT(false);\r
- \r
- if (!isEOL())\r
- doesLoadDefaultKeySeq = true;\r
- }\r
-\r
- m_currentKeymap = m_setting->m_keymaps.add(\r
- Keymap(type, name->getString(), windowClassName, windowTitleName,\r
- NULL, NULL));\r
-\r
- if (doesLoadDefaultKeySeq)\r
- {\r
- Token *t = lookToken();\r
- // <KEYMAP_PARENT>\r
- if (*t == _T(":"))\r
- {\r
- getToken();\r
- t = getToken();\r
- parentKeymap = m_setting->m_keymaps.searchByName(t->getString());\r
- if (!parentKeymap)\r
- throw ErrorMessage() << _T("`") << *t\r
- << _T("': unknown keymap name.");\r
- }\r
- if (!isEOL())\r
- {\r
- t = getToken();\r
- if (!(*t == _T("=>") || *t == _T("=")))\r
- throw ErrorMessage() << _T("`") << *t << _T("': syntax error.");\r
- keySeq = SettingLoader::load_KEY_SEQUENCE();\r
- }\r
- }\r
- if (keySeq == NULL)\r
- {\r
- FunctionData *fd;\r
- if (type == Keymap::Type_keymap && !isKeymap2)\r
- fd = createFunctionData(_T("KeymapParent"));\r
- else if (type == Keymap::Type_keymap && !isKeymap2)\r
- fd = createFunctionData(_T("Undefined"));\r
- else // (type == Keymap::Type_windowAnd || type == Keymap::Type_windowOr)\r
- fd = createFunctionData(_T("KeymapParent"));\r
- ASSERT( fd );\r
- keySeq = m_setting->m_keySeqs.add(\r
- KeySeq(name->getString()).add(ActionFunction(fd)));\r
- }\r
-\r
- m_currentKeymap->setIfNotYet(keySeq, parentKeymap);\r
+ Keymap::Type type = Keymap::Type_keymap;\r
+ Token *name = getToken(); // <KEYMAP_NAME>\r
+ tstringi windowClassName;\r
+ tstringi windowTitleName;\r
+ KeySeq *keySeq = NULL;\r
+ Keymap *parentKeymap = NULL;\r
+ bool isKeymap2 = false;\r
+ bool doesLoadDefaultKeySeq = false;\r
+\r
+ if (!isEOL()) {\r
+ Token *t = lookToken();\r
+ if (*i_which == _T("window")) { // <WINDOW>\r
+ if (t->isOpenParen())\r
+ // "(" <WINDOW_CLASS_NAME> "&&" <WINDOW_TITLE_NAME> ")"\r
+ // "(" <WINDOW_CLASS_NAME> "||" <WINDOW_TITLE_NAME> ")"\r
+ {\r
+ getToken();\r
+ windowClassName = getToken()->getRegexp();\r
+ t = getToken();\r
+ if (*t == _T("&&"))\r
+ type = Keymap::Type_windowAnd;\r
+ else if (*t == _T("||"))\r
+ type = Keymap::Type_windowOr;\r
+ else\r
+ throw ErrorMessage() << _T("`") << *t << _T("': unknown operator.");\r
+ windowTitleName = getToken()->getRegexp();\r
+ if (!getToken()->isCloseParen())\r
+ throw ErrorMessage() << _T("there must be `)'.");\r
+ } else if (t->isRegexp()) { // <WINDOW_CLASS_NAME>\r
+ getToken();\r
+ type = Keymap::Type_windowAnd;\r
+ windowClassName = t->getRegexp();\r
+ }\r
+ } else if (*i_which == _T("keymap"))\r
+ ;\r
+ else if (*i_which == _T("keymap2"))\r
+ isKeymap2 = true;\r
+ else\r
+ ASSERT(false);\r
+\r
+ if (!isEOL())\r
+ doesLoadDefaultKeySeq = true;\r
+ }\r
+\r
+ m_currentKeymap = m_setting->m_keymaps.add(\r
+ Keymap(type, name->getString(), windowClassName, windowTitleName,\r
+ NULL, NULL));\r
+\r
+ if (doesLoadDefaultKeySeq) {\r
+ Token *t = lookToken();\r
+ // <KEYMAP_PARENT>\r
+ if (*t == _T(":")) {\r
+ getToken();\r
+ t = getToken();\r
+ parentKeymap = m_setting->m_keymaps.searchByName(t->getString());\r
+ if (!parentKeymap)\r
+ throw ErrorMessage() << _T("`") << *t\r
+ << _T("': unknown keymap name.");\r
+ }\r
+ if (!isEOL()) {\r
+ t = getToken();\r
+ if (!(*t == _T("=>") || *t == _T("=")))\r
+ throw ErrorMessage() << _T("`") << *t << _T("': syntax error.");\r
+ keySeq = SettingLoader::load_KEY_SEQUENCE();\r
+ }\r
+ }\r
+ if (keySeq == NULL) {\r
+ FunctionData *fd;\r
+ if (type == Keymap::Type_keymap && !isKeymap2)\r
+ fd = createFunctionData(_T("KeymapParent"));\r
+ else if (type == Keymap::Type_keymap && !isKeymap2)\r
+ fd = createFunctionData(_T("Undefined"));\r
+ else // (type == Keymap::Type_windowAnd || type == Keymap::Type_windowOr)\r
+ fd = createFunctionData(_T("KeymapParent"));\r
+ ASSERT( fd );\r
+ keySeq = m_setting->m_keySeqs.add(\r
+ KeySeq(name->getString()).add(ActionFunction(fd)));\r
+ }\r
+\r
+ m_currentKeymap->setIfNotYet(keySeq, parentKeymap);\r
}\r
\r
\r
// <ARGUMENT>\r
void SettingLoader::load_ARGUMENT(bool *o_arg)\r
{\r
- *o_arg = !(*getToken() == _T("false"));\r
+ *o_arg = !(*getToken() == _T("false"));\r
}\r
\r
\r
// <ARGUMENT>\r
void SettingLoader::load_ARGUMENT(int *o_arg)\r
{\r
- *o_arg = getToken()->getNumber();\r
+ *o_arg = getToken()->getNumber();\r
}\r
\r
\r
// <ARGUMENT>\r
void SettingLoader::load_ARGUMENT(unsigned int *o_arg)\r
{\r
- *o_arg = getToken()->getNumber();\r
+ *o_arg = getToken()->getNumber();\r
}\r
\r
\r
// <ARGUMENT>\r
void SettingLoader::load_ARGUMENT(long *o_arg)\r
{\r
- *o_arg = getToken()->getNumber();\r
+ *o_arg = getToken()->getNumber();\r
}\r
\r
\r
// <ARGUMENT>\r
void SettingLoader::load_ARGUMENT(unsigned __int64 *o_arg)\r
{\r
- *o_arg = getToken()->getNumber();\r
+ *o_arg = getToken()->getNumber();\r
}\r
\r
\r
// <ARGUMENT>\r
void SettingLoader::load_ARGUMENT(__int64 *o_arg)\r
{\r
- *o_arg = getToken()->getNumber();\r
+ *o_arg = getToken()->getNumber();\r
}\r
\r
\r
// <ARGUMENT>\r
void SettingLoader::load_ARGUMENT(tstringq *o_arg)\r
{\r
- *o_arg = getToken()->getString();\r
+ *o_arg = getToken()->getString();\r
}\r
\r
\r
// <ARGUMENT>\r
void SettingLoader::load_ARGUMENT(std::list<tstringq> *o_arg)\r
{\r
- while (true)\r
- {\r
- if (!lookToken()->isString())\r
- return;\r
- o_arg->push_back(getToken()->getString());\r
- \r
- if (!lookToken()->isComma())\r
- return;\r
- getToken();\r
- }\r
+ while (true) {\r
+ if (!lookToken()->isString())\r
+ return;\r
+ o_arg->push_back(getToken()->getString());\r
+\r
+ if (!lookToken()->isComma())\r
+ return;\r
+ getToken();\r
+ }\r
}\r
\r
\r
// <ARGUMENT>\r
void SettingLoader::load_ARGUMENT(tregex *o_arg)\r
{\r
- *o_arg = getToken()->getRegexp();\r
+ *o_arg = getToken()->getRegexp();\r
}\r
\r
\r
// <ARGUMENT_VK>\r
void SettingLoader::load_ARGUMENT(VKey *o_arg)\r
{\r
- Token *t = getToken();\r
- int vkey = 0;\r
- while (true)\r
- {\r
- if (t->isNumber()) { vkey |= static_cast<BYTE>(t->getNumber()); break; }\r
- else if (*t == _T("E-")) vkey |= VKey_extended;\r
- else if (*t == _T("U-")) vkey |= VKey_released;\r
- else if (*t == _T("D-")) vkey |= VKey_pressed;\r
- else\r
- {\r
- const VKeyTable *vkt;\r
- for (vkt = g_vkeyTable; vkt->m_name; ++ vkt)\r
- if (*t == vkt->m_name)\r
- break;\r
- if (!vkt->m_name)\r
- throw ErrorMessage() << _T("`") << *t\r
- << _T("': unknown virtual key name.");\r
- vkey |= vkt->m_code;\r
- break;\r
- }\r
- t = getToken();\r
- }\r
- if (!(vkey & VKey_released) && !(vkey & VKey_pressed))\r
- vkey |= VKey_released | VKey_pressed;\r
- *o_arg = static_cast<VKey>(vkey);\r
+ Token *t = getToken();\r
+ int vkey = 0;\r
+ while (true) {\r
+ if (t->isNumber()) {\r
+ vkey |= static_cast<BYTE>(t->getNumber());\r
+ break;\r
+ } else if (*t == _T("E-")) vkey |= VKey_extended;\r
+ else if (*t == _T("U-")) vkey |= VKey_released;\r
+ else if (*t == _T("D-")) vkey |= VKey_pressed;\r
+ else {\r
+ const VKeyTable *vkt;\r
+ for (vkt = g_vkeyTable; vkt->m_name; ++ vkt)\r
+ if (*t == vkt->m_name)\r
+ break;\r
+ if (!vkt->m_name)\r
+ throw ErrorMessage() << _T("`") << *t\r
+ << _T("': unknown virtual key name.");\r
+ vkey |= vkt->m_code;\r
+ break;\r
+ }\r
+ t = getToken();\r
+ }\r
+ if (!(vkey & VKey_released) && !(vkey & VKey_pressed))\r
+ vkey |= VKey_released | VKey_pressed;\r
+ *o_arg = static_cast<VKey>(vkey);\r
}\r
\r
\r
// <ARGUMENT_WINDOW>\r
void SettingLoader::load_ARGUMENT(ToWindowType *o_arg)\r
{\r
- Token *t = getToken();\r
- if (t->isNumber())\r
- {\r
- if (ToWindowType_toBegin <= t->getNumber())\r
- {\r
- *o_arg = static_cast<ToWindowType>(t->getNumber());\r
- return;\r
- }\r
- }\r
- else if (getTypeValue(o_arg, t->getString()))\r
- return;\r
- throw ErrorMessage() << _T("`") << *t << _T("': invalid target window.");\r
+ Token *t = getToken();\r
+ if (t->isNumber()) {\r
+ if (ToWindowType_toBegin <= t->getNumber()) {\r
+ *o_arg = static_cast<ToWindowType>(t->getNumber());\r
+ return;\r
+ }\r
+ } else if (getTypeValue(o_arg, t->getString()))\r
+ return;\r
+ throw ErrorMessage() << _T("`") << *t << _T("': invalid target window.");\r
}\r
\r
\r
// <ARGUMENT>\r
void SettingLoader::load_ARGUMENT(GravityType *o_arg)\r
{\r
- Token *t = getToken();\r
- if (getTypeValue(o_arg, t->getString()))\r
- return;\r
- throw ErrorMessage() << _T("`") << *t << _T("': unknown gravity symbol.");\r
+ Token *t = getToken();\r
+ if (getTypeValue(o_arg, t->getString()))\r
+ return;\r
+ throw ErrorMessage() << _T("`") << *t << _T("': unknown gravity symbol.");\r
}\r
\r
\r
// <ARGUMENT>\r
void SettingLoader::load_ARGUMENT(MouseHookType *o_arg)\r
{\r
- Token *t = getToken();\r
- if (getTypeValue(o_arg, t->getString()))\r
- return;\r
- throw ErrorMessage() << _T("`") << *t << _T("': unknown MouseHookType symbol.");\r
+ Token *t = getToken();\r
+ if (getTypeValue(o_arg, t->getString()))\r
+ return;\r
+ throw ErrorMessage() << _T("`") << *t << _T("': unknown MouseHookType symbol.");\r
}\r
\r
\r
// <ARGUMENT>\r
void SettingLoader::load_ARGUMENT(MayuDialogType *o_arg)\r
{\r
- Token *t = getToken();\r
- if (getTypeValue(o_arg, t->getString()))\r
- return;\r
- throw ErrorMessage() << _T("`") << *t << _T("': unknown dialog box.");\r
+ Token *t = getToken();\r
+ if (getTypeValue(o_arg, t->getString()))\r
+ return;\r
+ throw ErrorMessage() << _T("`") << *t << _T("': unknown dialog box.");\r
}\r
\r
\r
// <ARGUMENT_LOCK>\r
void SettingLoader::load_ARGUMENT(ModifierLockType *o_arg)\r
{\r
- Token *t = getToken();\r
- if (getTypeValue(o_arg, t->getString()))\r
- return;\r
- throw ErrorMessage() << _T("`") << *t << _T("': unknown lock name.");\r
+ Token *t = getToken();\r
+ if (getTypeValue(o_arg, t->getString()))\r
+ return;\r
+ throw ErrorMessage() << _T("`") << *t << _T("': unknown lock name.");\r
}\r
\r
\r
// <ARGUMENT_LOCK>\r
void SettingLoader::load_ARGUMENT(ToggleType *o_arg)\r
{\r
- Token *t = getToken();\r
- if (getTypeValue(o_arg, t->getString()))\r
- return;\r
- throw ErrorMessage() << _T("`") << *t << _T("': unknown toggle name.");\r
+ Token *t = getToken();\r
+ if (getTypeValue(o_arg, t->getString()))\r
+ return;\r
+ throw ErrorMessage() << _T("`") << *t << _T("': unknown toggle name.");\r
}\r
\r
\r
// <ARGUMENT_SHOW_WINDOW>\r
void SettingLoader::load_ARGUMENT(ShowCommandType *o_arg)\r
{\r
- Token *t = getToken();\r
- if (getTypeValue(o_arg, t->getString()))\r
- return;\r
- throw ErrorMessage() << _T("`") << *t << _T("': unknown show command.");\r
+ Token *t = getToken();\r
+ if (getTypeValue(o_arg, t->getString()))\r
+ return;\r
+ throw ErrorMessage() << _T("`") << *t << _T("': unknown show command.");\r
}\r
\r
\r
// <ARGUMENT_TARGET_WINDOW>\r
void SettingLoader::load_ARGUMENT(TargetWindowType *o_arg)\r
{\r
- Token *t = getToken();\r
- if (getTypeValue(o_arg, t->getString()))\r
- return;\r
- throw ErrorMessage() << _T("`") << *t\r
- << _T("': unknown target window type.");\r
+ Token *t = getToken();\r
+ if (getTypeValue(o_arg, t->getString()))\r
+ return;\r
+ throw ErrorMessage() << _T("`") << *t\r
+ << _T("': unknown target window type.");\r
}\r
\r
\r
// <bool>\r
void SettingLoader::load_ARGUMENT(BooleanType *o_arg)\r
{\r
- Token *t = getToken();\r
- if (getTypeValue(o_arg, t->getString()))\r
- return;\r
- throw ErrorMessage() << _T("`") << *t << _T("': must be true or false.");\r
+ Token *t = getToken();\r
+ if (getTypeValue(o_arg, t->getString()))\r
+ return;\r
+ throw ErrorMessage() << _T("`") << *t << _T("': must be true or false.");\r
}\r
\r
\r
// <ARGUMENT>\r
void SettingLoader::load_ARGUMENT(LogicalOperatorType *o_arg)\r
{\r
- Token *t = getToken();\r
- if (getTypeValue(o_arg, t->getString()))\r
- return;\r
- throw ErrorMessage() << _T("`") << *t << _T("': must be 'or' or 'and'.");\r
+ Token *t = getToken();\r
+ if (getTypeValue(o_arg, t->getString()))\r
+ return;\r
+ throw ErrorMessage() << _T("`") << *t << _T("': must be 'or' or 'and'.");\r
}\r
\r
\r
// <ARGUMENT>\r
void SettingLoader::load_ARGUMENT(Modifier *o_arg)\r
{\r
- Modifier modifier;\r
- for (int i = Modifier::Type_begin; i != Modifier::Type_end; ++ i)\r
- modifier.dontcare(static_cast<Modifier::Type>(i));\r
- *o_arg = load_MODIFIER(Modifier::Type_ASSIGN, modifier);\r
+ Modifier modifier;\r
+ for (int i = Modifier::Type_begin; i != Modifier::Type_end; ++ i)\r
+ modifier.dontcare(static_cast<Modifier::Type>(i));\r
+ *o_arg = load_MODIFIER(Modifier::Type_ASSIGN, modifier);\r
}\r
\r
\r
// <ARGUMENT>\r
void SettingLoader::load_ARGUMENT(const Keymap **o_arg)\r
{\r
- Token *t = getToken();\r
- const Keymap *&keymap = *o_arg;\r
- keymap = m_setting->m_keymaps.searchByName(t->getString());\r
- if (!keymap)\r
- throw ErrorMessage() << _T("`") << *t << _T("': unknown keymap name.");\r
+ Token *t = getToken();\r
+ const Keymap *&keymap = *o_arg;\r
+ keymap = m_setting->m_keymaps.searchByName(t->getString());\r
+ if (!keymap)\r
+ throw ErrorMessage() << _T("`") << *t << _T("': unknown keymap name.");\r
}\r
\r
\r
// <ARGUMENT>\r
void SettingLoader::load_ARGUMENT(const KeySeq **o_arg)\r
{\r
- Token *t = getToken();\r
- const KeySeq *&keySeq = *o_arg;\r
- if (t->isOpenParen())\r
- {\r
- keySeq = load_KEY_SEQUENCE(_T(""), true);\r
- getToken(); // close paren\r
- }\r
- else if (*t == _T("$"))\r
- {\r
- t = getToken();\r
- keySeq = m_setting->m_keySeqs.searchByName(t->getString());\r
- if (!keySeq)\r
- throw ErrorMessage() << _T("`$") << *t << _T("': unknown keyseq name.");\r
- }\r
- else\r
- throw ErrorMessage() << _T("`") << *t << _T("': it is not keyseq.");\r
+ Token *t = getToken();\r
+ const KeySeq *&keySeq = *o_arg;\r
+ if (t->isOpenParen()) {\r
+ keySeq = load_KEY_SEQUENCE(_T(""), true);\r
+ getToken(); // close paren\r
+ } else if (*t == _T("$")) {\r
+ t = getToken();\r
+ keySeq = m_setting->m_keySeqs.searchByName(t->getString());\r
+ if (!keySeq)\r
+ throw ErrorMessage() << _T("`$") << *t << _T("': unknown keyseq name.");\r
+ } else\r
+ throw ErrorMessage() << _T("`") << *t << _T("': it is not keyseq.");\r
}\r
\r
\r
// <ARGUMENT>\r
void SettingLoader::load_ARGUMENT(StrExprArg *o_arg)\r
{\r
- Token *t = getToken();\r
- StrExprArg::Type type = StrExprArg::Literal;\r
- if (*t == _T("$") && t->isQuoted() == false\r
- && lookToken()->getType() == Token::Type_string)\r
- {\r
- type = StrExprArg::Builtin;\r
- t = getToken();\r
- }\r
- *o_arg = StrExprArg(t->getString(), type);\r
+ Token *t = getToken();\r
+ StrExprArg::Type type = StrExprArg::Literal;\r
+ if (*t == _T("$") && t->isQuoted() == false\r
+ && lookToken()->getType() == Token::Type_string) {\r
+ type = StrExprArg::Builtin;\r
+ t = getToken();\r
+ }\r
+ *o_arg = StrExprArg(t->getString(), type);\r
}\r
\r
\r
// <ARGUMENT>\r
void SettingLoader::load_ARGUMENT(WindowMonitorFromType *o_arg)\r
{\r
- Token *t = getToken();\r
- if (getTypeValue(o_arg, t->getString()))\r
- return;\r
- throw ErrorMessage() << _T("`") << *t\r
- << _T("': unknown monitor from type.");\r
+ Token *t = getToken();\r
+ if (getTypeValue(o_arg, t->getString()))\r
+ return;\r
+ throw ErrorMessage() << _T("`") << *t\r
+ << _T("': unknown monitor from type.");\r
}\r
\r
\r
// <KEY_SEQUENCE>\r
KeySeq *SettingLoader::load_KEY_SEQUENCE(\r
- const tstringi &i_name, bool i_isInParen, Modifier::Type i_mode)\r
-{\r
- KeySeq keySeq(i_name);\r
- while (!isEOL())\r
- {\r
- Modifier::Type mode;\r
- Modifier modifier = load_MODIFIER(i_mode, m_defaultKeySeqModifier, &mode);\r
- keySeq.setMode(mode);\r
- Token *t = lookToken();\r
- if (t->isCloseParen() && i_isInParen)\r
- break;\r
- else if (t->isOpenParen())\r
- {\r
- getToken(); // open paren\r
- KeySeq *ks = load_KEY_SEQUENCE(_T(""), true, i_mode);\r
- getToken(); // close paren\r
- keySeq.add(ActionKeySeq(ks));\r
- }\r
- else if (*t == _T("$")) // <KEYSEQ_NAME>\r
- {\r
- getToken();\r
- t = getToken();\r
- KeySeq *ks = m_setting->m_keySeqs.searchByName(t->getString());\r
- if (ks == NULL)\r
- throw ErrorMessage() << _T("`$") << *t\r
- << _T("': unknown keyseq name.");\r
- if (!ks->isCorrectMode(i_mode))\r
- throw ErrorMessage()\r
- << _T("`$") << *t\r
- << _T("': Some of R-, IL-, IC-, NL-, CL-, SL-, KL-, MAX-, MIN-, MMAX-, MMIN-, T-, TS-, M0...M9- and L0...L9- are used in the keyseq. They are prohibited in this context.");\r
- keySeq.setMode(ks->getMode());\r
- keySeq.add(ActionKeySeq(ks));\r
- }\r
- else if (*t == _T("&")) // <FUNCTION_NAME>\r
- {\r
- getToken();\r
- t = getToken();\r
- \r
- // search function\r
- ActionFunction af(createFunctionData(t->getString()), modifier);\r
- if (af.m_functionData == NULL)\r
- throw ErrorMessage() << _T("`&") << *t\r
- << _T("': unknown function name.");\r
- af.m_functionData->load(this);\r
- keySeq.add(af);\r
- }\r
- else // <KEYSEQ_MODIFIED_KEY_NAME>\r
- {\r
- ModifiedKey mkey;\r
- mkey.m_modifier = modifier;\r
- mkey.m_key = load_KEY_NAME();\r
- keySeq.add(ActionKey(mkey));\r
- }\r
- }\r
- return m_setting->m_keySeqs.add(keySeq);\r
+ const tstringi &i_name, bool i_isInParen, Modifier::Type i_mode)\r
+{\r
+ KeySeq keySeq(i_name);\r
+ while (!isEOL()) {\r
+ Modifier::Type mode;\r
+ Modifier modifier = load_MODIFIER(i_mode, m_defaultKeySeqModifier, &mode);\r
+ keySeq.setMode(mode);\r
+ Token *t = lookToken();\r
+ if (t->isCloseParen() && i_isInParen)\r
+ break;\r
+ else if (t->isOpenParen()) {\r
+ getToken(); // open paren\r
+ KeySeq *ks = load_KEY_SEQUENCE(_T(""), true, i_mode);\r
+ getToken(); // close paren\r
+ keySeq.add(ActionKeySeq(ks));\r
+ } else if (*t == _T("$")) { // <KEYSEQ_NAME>\r
+ getToken();\r
+ t = getToken();\r
+ KeySeq *ks = m_setting->m_keySeqs.searchByName(t->getString());\r
+ if (ks == NULL)\r
+ throw ErrorMessage() << _T("`$") << *t\r
+ << _T("': unknown keyseq name.");\r
+ if (!ks->isCorrectMode(i_mode))\r
+ throw ErrorMessage()\r
+ << _T("`$") << *t\r
+ << _T("': Some of R-, IL-, IC-, NL-, CL-, SL-, KL-, MAX-, MIN-, MMAX-, MMIN-, T-, TS-, M0...M9- and L0...L9- are used in the keyseq. They are prohibited in this context.");\r
+ keySeq.setMode(ks->getMode());\r
+ keySeq.add(ActionKeySeq(ks));\r
+ } else if (*t == _T("&")) { // <FUNCTION_NAME>\r
+ getToken();\r
+ t = getToken();\r
+\r
+ // search function\r
+ ActionFunction af(createFunctionData(t->getString()), modifier);\r
+ if (af.m_functionData == NULL)\r
+ throw ErrorMessage() << _T("`&") << *t\r
+ << _T("': unknown function name.");\r
+ af.m_functionData->load(this);\r
+ keySeq.add(af);\r
+ } else { // <KEYSEQ_MODIFIED_KEY_NAME>\r
+ ModifiedKey mkey;\r
+ mkey.m_modifier = modifier;\r
+ mkey.m_key = load_KEY_NAME();\r
+ keySeq.add(ActionKey(mkey));\r
+ }\r
+ }\r
+ return m_setting->m_keySeqs.add(keySeq);\r
}\r
\r
\r
// <KEY_ASSIGN>\r
void SettingLoader::load_KEY_ASSIGN()\r
{\r
- typedef std::list<ModifiedKey> AssignedKeys;\r
- AssignedKeys assignedKeys;\r
- \r
- ModifiedKey mkey;\r
- mkey.m_modifier =\r
- load_MODIFIER(Modifier::Type_ASSIGN, m_defaultAssignModifier);\r
- if (*lookToken() == _T("="))\r
- {\r
- getToken();\r
- m_defaultKeySeqModifier = load_MODIFIER(Modifier::Type_KEYSEQ,\r
- m_defaultKeySeqModifier);\r
- m_defaultAssignModifier = mkey.m_modifier;\r
- return;\r
- }\r
- \r
- while (true)\r
- {\r
- mkey.m_key = load_KEY_NAME();\r
- assignedKeys.push_back(mkey);\r
- if (*lookToken() == _T("=>") || *lookToken() == _T("="))\r
- break;\r
- mkey.m_modifier =\r
- load_MODIFIER(Modifier::Type_ASSIGN, m_defaultAssignModifier);\r
- }\r
- getToken();\r
-\r
- ASSERT(m_currentKeymap);\r
- KeySeq *keySeq = load_KEY_SEQUENCE();\r
- for (AssignedKeys::iterator i = assignedKeys.begin();\r
- i != assignedKeys.end(); ++ i)\r
- m_currentKeymap->addAssignment(*i, keySeq);\r
+ typedef std::list<ModifiedKey> AssignedKeys;\r
+ AssignedKeys assignedKeys;\r
+\r
+ ModifiedKey mkey;\r
+ mkey.m_modifier =\r
+ load_MODIFIER(Modifier::Type_ASSIGN, m_defaultAssignModifier);\r
+ if (*lookToken() == _T("=")) {\r
+ getToken();\r
+ m_defaultKeySeqModifier = load_MODIFIER(Modifier::Type_KEYSEQ,\r
+ m_defaultKeySeqModifier);\r
+ m_defaultAssignModifier = mkey.m_modifier;\r
+ return;\r
+ }\r
+\r
+ while (true) {\r
+ mkey.m_key = load_KEY_NAME();\r
+ assignedKeys.push_back(mkey);\r
+ if (*lookToken() == _T("=>") || *lookToken() == _T("="))\r
+ break;\r
+ mkey.m_modifier =\r
+ load_MODIFIER(Modifier::Type_ASSIGN, m_defaultAssignModifier);\r
+ }\r
+ getToken();\r
+\r
+ ASSERT(m_currentKeymap);\r
+ KeySeq *keySeq = load_KEY_SEQUENCE();\r
+ for (AssignedKeys::iterator i = assignedKeys.begin();\r
+ i != assignedKeys.end(); ++ i)\r
+ m_currentKeymap->addAssignment(*i, keySeq);\r
}\r
\r
\r
// <EVENT_ASSIGN>\r
void SettingLoader::load_EVENT_ASSIGN()\r
{\r
- std::list<ModifiedKey> assignedKeys;\r
+ std::list<ModifiedKey> assignedKeys;\r
\r
- ModifiedKey mkey;\r
- mkey.m_modifier.dontcare(); //set all modifiers to dontcare\r
- \r
- Token *t = getToken();\r
- Key **e;\r
- for (e = Event::events; *e; ++ e)\r
- if (*t == (*e)->getName())\r
- {\r
- mkey.m_key = *e;\r
- break;\r
- }\r
- if (!*e)\r
- throw ErrorMessage() << _T("`") << *t << _T("': invalid event name.");\r
+ ModifiedKey mkey;\r
+ mkey.m_modifier.dontcare(); //set all modifiers to dontcare\r
\r
- t = getToken();\r
- if (!(*t == _T("=>") || *t == _T("=")))\r
- throw ErrorMessage() << _T("`=' is expected.");\r
+ Token *t = getToken();\r
+ Key **e;\r
+ for (e = Event::events; *e; ++ e)\r
+ if (*t == (*e)->getName()) {\r
+ mkey.m_key = *e;\r
+ break;\r
+ }\r
+ if (!*e)\r
+ throw ErrorMessage() << _T("`") << *t << _T("': invalid event name.");\r
\r
- ASSERT(m_currentKeymap);\r
- KeySeq *keySeq = load_KEY_SEQUENCE();\r
- m_currentKeymap->addAssignment(mkey, keySeq);\r
+ t = getToken();\r
+ if (!(*t == _T("=>") || *t == _T("=")))\r
+ throw ErrorMessage() << _T("`=' is expected.");\r
+\r
+ ASSERT(m_currentKeymap);\r
+ KeySeq *keySeq = load_KEY_SEQUENCE();\r
+ m_currentKeymap->addAssignment(mkey, keySeq);\r
}\r
\r
\r
// <MODIFIER_ASSIGNMENT>\r
void SettingLoader::load_MODIFIER_ASSIGNMENT()\r
{\r
- // <MODIFIER_NAME>\r
- Token *t = getToken();\r
- Modifier::Type mt;\r
-\r
- while (true)\r
- {\r
- Keymap::AssignMode am = Keymap::AM_notModifier;\r
- if (*t == _T("!") ) am = Keymap::AM_true, t = getToken();\r
- else if (*t == _T("!!") ) am = Keymap::AM_oneShot, t = getToken();\r
- else if (*t == _T("!!!")) am = Keymap::AM_oneShotRepeatable, t = getToken();\r
- \r
- if (*t == _T("shift")) mt = Modifier::Type_Shift;\r
- else if (*t == _T("alt") ||\r
- *t == _T("meta") ||\r
- *t == _T("menu") ) mt = Modifier::Type_Alt;\r
- else if (*t == _T("control") ||\r
- *t == _T("ctrl") ) mt = Modifier::Type_Control;\r
- else if (*t == _T("windows") ||\r
- *t == _T("win") ) mt = Modifier::Type_Windows;\r
- else if (*t == _T("mod0") ) mt = Modifier::Type_Mod0;\r
- else if (*t == _T("mod1") ) mt = Modifier::Type_Mod1;\r
- else if (*t == _T("mod2") ) mt = Modifier::Type_Mod2;\r
- else if (*t == _T("mod3") ) mt = Modifier::Type_Mod3;\r
- else if (*t == _T("mod4") ) mt = Modifier::Type_Mod4;\r
- else if (*t == _T("mod5") ) mt = Modifier::Type_Mod5;\r
- else if (*t == _T("mod6") ) mt = Modifier::Type_Mod6;\r
- else if (*t == _T("mod7") ) mt = Modifier::Type_Mod7;\r
- else if (*t == _T("mod8") ) mt = Modifier::Type_Mod8;\r
- else if (*t == _T("mod9") ) mt = Modifier::Type_Mod9;\r
- else throw ErrorMessage() << _T("`") << *t\r
- << _T("': invalid modifier name.");\r
-\r
- if (am == Keymap::AM_notModifier)\r
- break;\r
- \r
- m_currentKeymap->addModifier(mt, Keymap::AO_overwrite, am, NULL);\r
- if (isEOL())\r
- return;\r
- t = getToken();\r
- }\r
- \r
- // <ASSIGN_OP>\r
- t = getToken();\r
- Keymap::AssignOperator ao;\r
- if (*t == _T("=") ) ao = Keymap::AO_new;\r
- else if (*t == _T("+=")) ao = Keymap::AO_add;\r
- else if (*t == _T("-=")) ao = Keymap::AO_sub;\r
- else throw ErrorMessage() << _T("`") << *t << _T("': is unknown operator.");\r
-\r
- // <ASSIGN_MODE>? <KEY_NAME>\r
- while (!isEOL())\r
- {\r
- // <ASSIGN_MODE>? \r
- t = getToken();\r
- Keymap::AssignMode am = Keymap::AM_normal;\r
- if (*t == _T("!") ) am = Keymap::AM_true, t = getToken();\r
- else if (*t == _T("!!") ) am = Keymap::AM_oneShot, t = getToken();\r
- else if (*t == _T("!!!")) am = Keymap::AM_oneShotRepeatable, t = getToken();\r
- \r
- // <KEY_NAME>\r
- Key *key = m_setting->m_keyboard.searchKey(t->getString());\r
- if (!key)\r
- throw ErrorMessage() << _T("`") << *t << _T("': invalid key name.");\r
-\r
- // we can ignore warning C4701\r
- m_currentKeymap->addModifier(mt, ao, am, key);\r
- if (ao == Keymap::AO_new)\r
- ao = Keymap::AO_add;\r
- }\r
+ // <MODIFIER_NAME>\r
+ Token *t = getToken();\r
+ Modifier::Type mt;\r
+\r
+ while (true) {\r
+ Keymap::AssignMode am = Keymap::AM_notModifier;\r
+ if (*t == _T("!") ) am = Keymap::AM_true, t = getToken();\r
+ else if (*t == _T("!!") ) am = Keymap::AM_oneShot, t = getToken();\r
+ else if (*t == _T("!!!")) am = Keymap::AM_oneShotRepeatable, t = getToken();\r
+\r
+ if (*t == _T("shift")) mt = Modifier::Type_Shift;\r
+ else if (*t == _T("alt") ||\r
+ *t == _T("meta") ||\r
+ *t == _T("menu") ) mt = Modifier::Type_Alt;\r
+ else if (*t == _T("control") ||\r
+ *t == _T("ctrl") ) mt = Modifier::Type_Control;\r
+ else if (*t == _T("windows") ||\r
+ *t == _T("win") ) mt = Modifier::Type_Windows;\r
+ else if (*t == _T("mod0") ) mt = Modifier::Type_Mod0;\r
+ else if (*t == _T("mod1") ) mt = Modifier::Type_Mod1;\r
+ else if (*t == _T("mod2") ) mt = Modifier::Type_Mod2;\r
+ else if (*t == _T("mod3") ) mt = Modifier::Type_Mod3;\r
+ else if (*t == _T("mod4") ) mt = Modifier::Type_Mod4;\r
+ else if (*t == _T("mod5") ) mt = Modifier::Type_Mod5;\r
+ else if (*t == _T("mod6") ) mt = Modifier::Type_Mod6;\r
+ else if (*t == _T("mod7") ) mt = Modifier::Type_Mod7;\r
+ else if (*t == _T("mod8") ) mt = Modifier::Type_Mod8;\r
+ else if (*t == _T("mod9") ) mt = Modifier::Type_Mod9;\r
+ else throw ErrorMessage() << _T("`") << *t\r
+ << _T("': invalid modifier name.");\r
+\r
+ if (am == Keymap::AM_notModifier)\r
+ break;\r
+\r
+ m_currentKeymap->addModifier(mt, Keymap::AO_overwrite, am, NULL);\r
+ if (isEOL())\r
+ return;\r
+ t = getToken();\r
+ }\r
+\r
+ // <ASSIGN_OP>\r
+ t = getToken();\r
+ Keymap::AssignOperator ao;\r
+ if (*t == _T("=") ) ao = Keymap::AO_new;\r
+ else if (*t == _T("+=")) ao = Keymap::AO_add;\r
+ else if (*t == _T("-=")) ao = Keymap::AO_sub;\r
+ else throw ErrorMessage() << _T("`") << *t << _T("': is unknown operator.");\r
+\r
+ // <ASSIGN_MODE>? <KEY_NAME>\r
+ while (!isEOL()) {\r
+ // <ASSIGN_MODE>?\r
+ t = getToken();\r
+ Keymap::AssignMode am = Keymap::AM_normal;\r
+ if (*t == _T("!") ) am = Keymap::AM_true, t = getToken();\r
+ else if (*t == _T("!!") ) am = Keymap::AM_oneShot, t = getToken();\r
+ else if (*t == _T("!!!")) am = Keymap::AM_oneShotRepeatable, t = getToken();\r
+\r
+ // <KEY_NAME>\r
+ Key *key = m_setting->m_keyboard.searchKey(t->getString());\r
+ if (!key)\r
+ throw ErrorMessage() << _T("`") << *t << _T("': invalid key name.");\r
+\r
+ // we can ignore warning C4701\r
+ m_currentKeymap->addModifier(mt, ao, am, key);\r
+ if (ao == Keymap::AO_new)\r
+ ao = Keymap::AO_add;\r
+ }\r
}\r
\r
\r
// <KEYSEQ_DEFINITION>\r
void SettingLoader::load_KEYSEQ_DEFINITION()\r
{\r
- if (*getToken() != _T("$"))\r
- throw ErrorMessage() << _T("there must be `$' after `keyseq'");\r
- Token *name = getToken();\r
- if (*getToken() != _T("="))\r
- throw ErrorMessage() << _T("there must be `=' after keyseq naem");\r
- load_KEY_SEQUENCE(name->getString(), false, Modifier::Type_ASSIGN);\r
+ if (*getToken() != _T("$"))\r
+ throw ErrorMessage() << _T("there must be `$' after `keyseq'");\r
+ Token *name = getToken();\r
+ if (*getToken() != _T("="))\r
+ throw ErrorMessage() << _T("there must be `=' after keyseq naem");\r
+ load_KEY_SEQUENCE(name->getString(), false, Modifier::Type_ASSIGN);\r
}\r
\r
\r
// <DEFINE>\r
void SettingLoader::load_DEFINE()\r
{\r
- m_setting->m_symbols.insert(getToken()->getString());\r
+ m_setting->m_symbols.insert(getToken()->getString());\r
}\r
\r
\r
// <IF>\r
void SettingLoader::load_IF()\r
{\r
- if (!getToken()->isOpenParen())\r
- throw ErrorMessage() << _T("there must be `(' after `if'.");\r
- Token *t = getToken(); // <SYMBOL> or !\r
- bool not = false;\r
- if (*t == _T("!"))\r
- {\r
- not = true;\r
- t = getToken(); // <SYMBOL>\r
- }\r
- \r
- bool doesSymbolExist = (m_setting->m_symbols.find(t->getString())\r
- != m_setting->m_symbols.end());\r
- bool doesRead = ((doesSymbolExist && !not) ||\r
- (!doesSymbolExist && not));\r
- if (0 < m_canReadStack.size())\r
- doesRead = doesRead && m_canReadStack.back();\r
- \r
- if (!getToken()->isCloseParen())\r
- throw ErrorMessage() << _T("there must be `)'.");\r
-\r
- m_canReadStack.push_back(doesRead);\r
- if (!isEOL())\r
- {\r
- size_t len = m_canReadStack.size();\r
- load_LINE();\r
- if (len < m_canReadStack.size())\r
- {\r
- bool r = m_canReadStack.back();\r
- m_canReadStack.pop_back();\r
- m_canReadStack[len - 1] = r && doesRead;\r
- }\r
- else if (len == m_canReadStack.size())\r
- m_canReadStack.pop_back();\r
- else\r
- ; // `end' found\r
- }\r
+ if (!getToken()->isOpenParen())\r
+ throw ErrorMessage() << _T("there must be `(' after `if'.");\r
+ Token *t = getToken(); // <SYMBOL> or !\r
+ bool not = false;\r
+ if (*t == _T("!")) {\r
+ not = true;\r
+ t = getToken(); // <SYMBOL>\r
+ }\r
+\r
+ bool doesSymbolExist = (m_setting->m_symbols.find(t->getString())\r
+ != m_setting->m_symbols.end());\r
+ bool doesRead = ((doesSymbolExist && !not) ||\r
+ (!doesSymbolExist && not));\r
+ if (0 < m_canReadStack.size())\r
+ doesRead = doesRead && m_canReadStack.back();\r
+\r
+ if (!getToken()->isCloseParen())\r
+ throw ErrorMessage() << _T("there must be `)'.");\r
+\r
+ m_canReadStack.push_back(doesRead);\r
+ if (!isEOL()) {\r
+ size_t len = m_canReadStack.size();\r
+ load_LINE();\r
+ if (len < m_canReadStack.size()) {\r
+ bool r = m_canReadStack.back();\r
+ m_canReadStack.pop_back();\r
+ m_canReadStack[len - 1] = r && doesRead;\r
+ } else if (len == m_canReadStack.size())\r
+ m_canReadStack.pop_back();\r
+ else\r
+ ; // `end' found\r
+ }\r
}\r
\r
\r
// <ELSE> <ELSEIF>\r
void SettingLoader::load_ELSE(bool i_isElseIf, const tstringi &i_token)\r
{\r
- bool doesRead = !load_ENDIF(i_token);\r
- if (0 < m_canReadStack.size())\r
- doesRead = doesRead && m_canReadStack.back();\r
- m_canReadStack.push_back(doesRead);\r
- if (!isEOL())\r
- {\r
- size_t len = m_canReadStack.size();\r
- if (i_isElseIf)\r
- load_IF();\r
- else\r
- load_LINE();\r
- if (len < m_canReadStack.size())\r
- {\r
- bool r = m_canReadStack.back();\r
- m_canReadStack.pop_back();\r
- m_canReadStack[len - 1] = doesRead && r;\r
- }\r
- else if (len == m_canReadStack.size())\r
- m_canReadStack.pop_back();\r
- else\r
- ; // `end' found\r
- }\r
+ bool doesRead = !load_ENDIF(i_token);\r
+ if (0 < m_canReadStack.size())\r
+ doesRead = doesRead && m_canReadStack.back();\r
+ m_canReadStack.push_back(doesRead);\r
+ if (!isEOL()) {\r
+ size_t len = m_canReadStack.size();\r
+ if (i_isElseIf)\r
+ load_IF();\r
+ else\r
+ load_LINE();\r
+ if (len < m_canReadStack.size()) {\r
+ bool r = m_canReadStack.back();\r
+ m_canReadStack.pop_back();\r
+ m_canReadStack[len - 1] = doesRead && r;\r
+ } else if (len == m_canReadStack.size())\r
+ m_canReadStack.pop_back();\r
+ else\r
+ ; // `end' found\r
+ }\r
}\r
\r
\r
// <ENDIF>\r
bool SettingLoader::load_ENDIF(const tstringi &i_token)\r
{\r
- if (m_canReadStack.size() == 0)\r
- throw ErrorMessage() << _T("unbalanced `") << i_token << _T("'");\r
- bool r = m_canReadStack.back();\r
- m_canReadStack.pop_back();\r
- return r;\r
+ if (m_canReadStack.size() == 0)\r
+ throw ErrorMessage() << _T("unbalanced `") << i_token << _T("'");\r
+ bool r = m_canReadStack.back();\r
+ m_canReadStack.pop_back();\r
+ return r;\r
}\r
\r
\r
// <LINE>\r
void SettingLoader::load_LINE()\r
{\r
- Token *i_token = getToken();\r
-\r
- // <COND_SYMBOL>\r
- if (*i_token == _T("if") ||\r
- *i_token == _T("and")) load_IF();\r
- else if (*i_token == _T("else")) load_ELSE(false, i_token->getString());\r
- else if (*i_token == _T("elseif") ||\r
- *i_token == _T("elsif") ||\r
- *i_token == _T("elif") ||\r
- *i_token == _T("or")) load_ELSE(true, i_token->getString());\r
- else if (*i_token == _T("endif")) load_ENDIF(_T("endif"));\r
- else if (0 < m_canReadStack.size() && !m_canReadStack.back())\r
- {\r
- while (!isEOL())\r
- getToken();\r
- }\r
- else if (*i_token == _T("define")) load_DEFINE();\r
- // <INCLUDE>\r
- else if (*i_token == _T("include")) load_INCLUDE();\r
- // <KEYBOARD_DEFINITION>\r
- else if (*i_token == _T("def")) load_KEYBOARD_DEFINITION();\r
- // <KEYMAP_DEFINITION>\r
- else if (*i_token == _T("keymap") ||\r
- *i_token == _T("keymap2") ||\r
- *i_token == _T("window")) load_KEYMAP_DEFINITION(i_token);\r
- // <KEY_ASSIGN>\r
- else if (*i_token == _T("key")) load_KEY_ASSIGN();\r
- // <EVENT_ASSIGN>\r
- else if (*i_token == _T("event")) load_EVENT_ASSIGN();\r
- // <MODIFIER_ASSIGNMENT>\r
- else if (*i_token == _T("mod")) load_MODIFIER_ASSIGNMENT();\r
- // <KEYSEQ_DEFINITION>\r
- else if (*i_token == _T("keyseq")) load_KEYSEQ_DEFINITION();\r
- else\r
- throw ErrorMessage() << _T("syntax error `") << *i_token << _T("'.");\r
-}\r
-\r
- \r
+ Token *i_token = getToken();\r
+\r
+ // <COND_SYMBOL>\r
+ if (*i_token == _T("if") ||\r
+ *i_token == _T("and")) load_IF();\r
+ else if (*i_token == _T("else")) load_ELSE(false, i_token->getString());\r
+ else if (*i_token == _T("elseif") ||\r
+ *i_token == _T("elsif") ||\r
+ *i_token == _T("elif") ||\r
+ *i_token == _T("or")) load_ELSE(true, i_token->getString());\r
+ else if (*i_token == _T("endif")) load_ENDIF(_T("endif"));\r
+ else if (0 < m_canReadStack.size() && !m_canReadStack.back()) {\r
+ while (!isEOL())\r
+ getToken();\r
+ } else if (*i_token == _T("define")) load_DEFINE();\r
+ // <INCLUDE>\r
+ else if (*i_token == _T("include")) load_INCLUDE();\r
+ // <KEYBOARD_DEFINITION>\r
+ else if (*i_token == _T("def")) load_KEYBOARD_DEFINITION();\r
+ // <KEYMAP_DEFINITION>\r
+ else if (*i_token == _T("keymap") ||\r
+ *i_token == _T("keymap2") ||\r
+ *i_token == _T("window")) load_KEYMAP_DEFINITION(i_token);\r
+ // <KEY_ASSIGN>\r
+ else if (*i_token == _T("key")) load_KEY_ASSIGN();\r
+ // <EVENT_ASSIGN>\r
+ else if (*i_token == _T("event")) load_EVENT_ASSIGN();\r
+ // <MODIFIER_ASSIGNMENT>\r
+ else if (*i_token == _T("mod")) load_MODIFIER_ASSIGNMENT();\r
+ // <KEYSEQ_DEFINITION>\r
+ else if (*i_token == _T("keyseq")) load_KEYSEQ_DEFINITION();\r
+ else\r
+ throw ErrorMessage() << _T("syntax error `") << *i_token << _T("'.");\r
+}\r
+\r
+\r
// prefix sort predicate used in load(const string &)\r
static bool prefixSortPred(const tstringi &i_a, const tstringi &i_b)\r
{\r
- return i_b.size() < i_a.size();\r
+ return i_b.size() < i_a.size();\r
}\r
\r
\r
*/\r
bool readFile(tstring *o_data, const tstringi &i_filename)\r
{\r
- // get size of file\r
+ // get size of file\r
#if 0\r
- // bcc's _wstat cannot obtain file size\r
- struct _stat sbuf;\r
- if (_tstat(i_filename.c_str(), &sbuf) < 0 || sbuf.st_size == 0)\r
- return false;\r
+ // bcc's _wstat cannot obtain file size\r
+ struct _stat sbuf;\r
+ if (_tstat(i_filename.c_str(), &sbuf) < 0 || sbuf.st_size == 0)\r
+ return false;\r
#else\r
- // so, we use _wstati64 for bcc\r
- struct stati64_t sbuf;\r
- if (_tstati64(i_filename.c_str(), &sbuf) < 0 || sbuf.st_size == 0)\r
- return false;\r
- // following check is needed to cast sbuf.st_size to size_t safely\r
- // this cast occurs because of above workaround for bcc\r
- if (sbuf.st_size > UINT_MAX)\r
- return false;\r
+ // so, we use _wstati64 for bcc\r
+ struct stati64_t sbuf;\r
+ if (_tstati64(i_filename.c_str(), &sbuf) < 0 || sbuf.st_size == 0)\r
+ return false;\r
+ // following check is needed to cast sbuf.st_size to size_t safely\r
+ // this cast occurs because of above workaround for bcc\r
+ if (sbuf.st_size > UINT_MAX)\r
+ return false;\r
#endif\r
- \r
- // open\r
- FILE *fp = _tfopen(i_filename.c_str(), _T("rb"));\r
- if (!fp)\r
- return false;\r
- \r
- // read file\r
- Array<BYTE> buf(static_cast<size_t>(sbuf.st_size) + 1);\r
- if (fread(buf.get(), static_cast<size_t>(sbuf.st_size), 1, fp) != 1)\r
- {\r
- fclose(fp);\r
- return false;\r
- }\r
- buf.get()[sbuf.st_size] = 0; // mbstowcs() requires null\r
- // terminated string\r
+\r
+ // open\r
+ FILE *fp = _tfopen(i_filename.c_str(), _T("rb"));\r
+ if (!fp)\r
+ return false;\r
+\r
+ // read file\r
+ Array<BYTE> buf(static_cast<size_t>(sbuf.st_size) + 1);\r
+ if (fread(buf.get(), static_cast<size_t>(sbuf.st_size), 1, fp) != 1) {\r
+ fclose(fp);\r
+ return false;\r
+ }\r
+ buf.get()[sbuf.st_size] = 0; // mbstowcs() requires null\r
+ // terminated string\r
\r
#ifdef _UNICODE\r
- //\r
- if (buf.get()[0] == 0xffU && buf.get()[1] == 0xfeU &&\r
- sbuf.st_size % 2 == 0)\r
- // UTF-16 Little Endien\r
- {\r
- size_t size = static_cast<size_t>(sbuf.st_size) / 2;\r
- o_data->resize(size);\r
- BYTE *p = buf.get();\r
- for (size_t i = 0; i < size; ++ i)\r
- {\r
- wchar_t c = static_cast<wchar_t>(*p ++);\r
- c |= static_cast<wchar_t>(*p ++) << 8;\r
- (*o_data)[i] = c;\r
- }\r
- fclose(fp);\r
- return true;\r
- }\r
- \r
- //\r
- if (buf.get()[0] == 0xfeU && buf.get()[1] == 0xffU &&\r
- sbuf.st_size % 2 == 0)\r
- // UTF-16 Big Endien\r
- {\r
- size_t size = static_cast<size_t>(sbuf.st_size) / 2;\r
- o_data->resize(size);\r
- BYTE *p = buf.get();\r
- for (size_t i = 0; i < size; ++ i)\r
- {\r
- wchar_t c = static_cast<wchar_t>(*p ++) << 8;\r
- c |= static_cast<wchar_t>(*p ++);\r
- (*o_data)[i] = c;\r
- }\r
- fclose(fp);\r
- return true;\r
- }\r
-\r
- // try multibyte charset \r
- size_t wsize = mbstowcs(NULL, reinterpret_cast<char *>(buf.get()), 0);\r
- if (wsize != size_t(-1))\r
- {\r
- Array<wchar_t> wbuf(wsize);\r
- mbstowcs(wbuf.get(), reinterpret_cast<char *>(buf.get()), wsize);\r
- o_data->assign(wbuf.get(), wbuf.get() + wsize);\r
- fclose(fp);\r
- return true;\r
- }\r
- \r
- // try UTF-8\r
- {\r
- Array<wchar_t> wbuf(static_cast<size_t>(sbuf.st_size));\r
- BYTE *f = buf.get();\r
- BYTE *end = buf.get() + sbuf.st_size;\r
- wchar_t *d = wbuf.get();\r
- enum { STATE_1, STATE_2of2, STATE_2of3, STATE_3of3 } state = STATE_1;\r
- \r
- while (f != end)\r
- {\r
- switch (state)\r
- {\r
- case STATE_1:\r
- if (!(*f & 0x80)) // 0xxxxxxx: 00-7F\r
- *d++ = static_cast<wchar_t>(*f++);\r
- else if ((*f & 0xe0) == 0xc0) // 110xxxxx 10xxxxxx: 0080-07FF\r
- {\r
- *d = ((static_cast<wchar_t>(*f++) & 0x1f) << 6);\r
- state = STATE_2of2;\r
- }\r
- else if ((*f & 0xf0) == 0xe0) // 1110xxxx 10xxxxxx 10xxxxxx:\r
- // 0800 - FFFF\r
- {\r
- *d = ((static_cast<wchar_t>(*f++) & 0x0f) << 12);\r
- state = STATE_2of3;\r
- }\r
- else\r
- goto not_UTF_8;\r
- break;\r
- \r
- case STATE_2of2:\r
- case STATE_3of3:\r
- if ((*f & 0xc0) != 0x80)\r
- goto not_UTF_8;\r
- *d++ |= (static_cast<wchar_t>(*f++) & 0x3f);\r
- state = STATE_1;\r
- break;\r
-\r
- case STATE_2of3:\r
- if ((*f & 0xc0) != 0x80)\r
- goto not_UTF_8;\r
- *d |= ((static_cast<wchar_t>(*f++) & 0x3f) << 6);\r
- state = STATE_3of3;\r
- break;\r
- }\r
- }\r
- o_data->assign(wbuf.get(), d);\r
- fclose(fp);\r
- return true;\r
- \r
- not_UTF_8: ;\r
- }\r
+ //\r
+ if (buf.get()[0] == 0xffU && buf.get()[1] == 0xfeU &&\r
+ sbuf.st_size % 2 == 0)\r
+ // UTF-16 Little Endien\r
+ {\r
+ size_t size = static_cast<size_t>(sbuf.st_size) / 2;\r
+ o_data->resize(size);\r
+ BYTE *p = buf.get();\r
+ for (size_t i = 0; i < size; ++ i) {\r
+ wchar_t c = static_cast<wchar_t>(*p ++);\r
+ c |= static_cast<wchar_t>(*p ++) << 8;\r
+ (*o_data)[i] = c;\r
+ }\r
+ fclose(fp);\r
+ return true;\r
+ }\r
+\r
+ //\r
+ if (buf.get()[0] == 0xfeU && buf.get()[1] == 0xffU &&\r
+ sbuf.st_size % 2 == 0)\r
+ // UTF-16 Big Endien\r
+ {\r
+ size_t size = static_cast<size_t>(sbuf.st_size) / 2;\r
+ o_data->resize(size);\r
+ BYTE *p = buf.get();\r
+ for (size_t i = 0; i < size; ++ i) {\r
+ wchar_t c = static_cast<wchar_t>(*p ++) << 8;\r
+ c |= static_cast<wchar_t>(*p ++);\r
+ (*o_data)[i] = c;\r
+ }\r
+ fclose(fp);\r
+ return true;\r
+ }\r
+\r
+ // try multibyte charset\r
+ size_t wsize = mbstowcs(NULL, reinterpret_cast<char *>(buf.get()), 0);\r
+ if (wsize != size_t(-1)) {\r
+ Array<wchar_t> wbuf(wsize);\r
+ mbstowcs(wbuf.get(), reinterpret_cast<char *>(buf.get()), wsize);\r
+ o_data->assign(wbuf.get(), wbuf.get() + wsize);\r
+ fclose(fp);\r
+ return true;\r
+ }\r
+\r
+ // try UTF-8\r
+ {\r
+ Array<wchar_t> wbuf(static_cast<size_t>(sbuf.st_size));\r
+ BYTE *f = buf.get();\r
+ BYTE *end = buf.get() + sbuf.st_size;\r
+ wchar_t *d = wbuf.get();\r
+ enum { STATE_1, STATE_2of2, STATE_2of3, STATE_3of3 } state = STATE_1;\r
+\r
+ while (f != end) {\r
+ switch (state) {\r
+ case STATE_1:\r
+ if (!(*f & 0x80)) // 0xxxxxxx: 00-7F\r
+ *d++ = static_cast<wchar_t>(*f++);\r
+ else if ((*f & 0xe0) == 0xc0) { // 110xxxxx 10xxxxxx: 0080-07FF\r
+ *d = ((static_cast<wchar_t>(*f++) & 0x1f) << 6);\r
+ state = STATE_2of2;\r
+ } else if ((*f & 0xf0) == 0xe0) // 1110xxxx 10xxxxxx 10xxxxxx:\r
+ // 0800 - FFFF\r
+ {\r
+ *d = ((static_cast<wchar_t>(*f++) & 0x0f) << 12);\r
+ state = STATE_2of3;\r
+ } else\r
+ goto not_UTF_8;\r
+ break;\r
+\r
+ case STATE_2of2:\r
+ case STATE_3of3:\r
+ if ((*f & 0xc0) != 0x80)\r
+ goto not_UTF_8;\r
+ *d++ |= (static_cast<wchar_t>(*f++) & 0x3f);\r
+ state = STATE_1;\r
+ break;\r
+\r
+ case STATE_2of3:\r
+ if ((*f & 0xc0) != 0x80)\r
+ goto not_UTF_8;\r
+ *d |= ((static_cast<wchar_t>(*f++) & 0x3f) << 6);\r
+ state = STATE_3of3;\r
+ break;\r
+ }\r
+ }\r
+ o_data->assign(wbuf.get(), d);\r
+ fclose(fp);\r
+ return true;\r
+\r
+not_UTF_8:\r
+ ;\r
+ }\r
#endif // _UNICODE\r
\r
- // assume ascii\r
- o_data->resize(static_cast<size_t>(sbuf.st_size));\r
- for (off_t i = 0; i < sbuf.st_size; ++ i)\r
- (*o_data)[i] = buf.get()[i];\r
- fclose(fp);\r
- return true;\r
+ // assume ascii\r
+ o_data->resize(static_cast<size_t>(sbuf.st_size));\r
+ for (off_t i = 0; i < sbuf.st_size; ++ i)\r
+ (*o_data)[i] = buf.get()[i];\r
+ fclose(fp);\r
+ return true;\r
}\r
\r
\r
// load (called from load(Setting *, const tstringi &) only)\r
void SettingLoader::load(const tstringi &i_filename)\r
{\r
- m_currentFilename = i_filename;\r
- \r
- tstring data;\r
- if (!readFile(&data, m_currentFilename))\r
- {\r
- Acquire a(m_soLog);\r
- *m_log << m_currentFilename << _T(" : error: file not found") << std::endl;\r
+ m_currentFilename = i_filename;\r
+\r
+ tstring data;\r
+ if (!readFile(&data, m_currentFilename)) {\r
+ Acquire a(m_soLog);\r
+ *m_log << m_currentFilename << _T(" : error: file not found") << std::endl;\r
#if 1\r
- *m_log << data << std::endl;\r
+ *m_log << data << std::endl;\r
#endif\r
- m_isThereAnyError = true;\r
- return;\r
- }\r
- \r
- // prefix\r
- if (m_prefixesRefCcount == 0)\r
- {\r
- static const _TCHAR *prefixes[] =\r
- {\r
- _T("="), _T("=>"), _T("&&"), _T("||"), _T(":"), _T("$"), _T("&"),\r
- _T("-="), _T("+="), _T("!!!"), _T("!!"), _T("!"), \r
- _T("E0-"), _T("E1-"), // <SCAN_CODE_EXTENTION>\r
- _T("S-"), _T("A-"), _T("M-"), _T("C-"), // <BASIC_MODIFIER>\r
- _T("W-"), _T("*"), _T("~"),\r
- _T("U-"), _T("D-"), // <KEYSEQ_MODIFIER>\r
- _T("R-"), _T("IL-"), _T("IC-"), _T("I-"), // <ASSIGN_MODIFIER>\r
- _T("NL-"), _T("CL-"), _T("SL-"), _T("KL-"),\r
- _T("MAX-"), _T("MIN-"), _T("MMAX-"), _T("MMIN-"),\r
- _T("T-"), _T("TS-"),\r
- _T("M0-"), _T("M1-"), _T("M2-"), _T("M3-"), _T("M4-"),\r
- _T("M5-"), _T("M6-"), _T("M7-"), _T("M8-"), _T("M9-"), \r
- _T("L0-"), _T("L1-"), _T("L2-"), _T("L3-"), _T("L4-"),\r
- _T("L5-"), _T("L6-"), _T("L7-"), _T("L8-"), _T("L9-"), \r
- };\r
- m_prefixes = new std::vector<tstringi>;\r
- for (size_t i = 0; i < NUMBER_OF(prefixes); ++ i)\r
- m_prefixes->push_back(prefixes[i]);\r
- std::sort(m_prefixes->begin(), m_prefixes->end(), prefixSortPred);\r
- }\r
- m_prefixesRefCcount ++;\r
-\r
- // create parser\r
- Parser parser(data.c_str(), data.size());\r
- parser.setPrefixes(m_prefixes);\r
- \r
- while (true)\r
- {\r
- try\r
- {\r
- if (!parser.getLine(&m_tokens))\r
- break;\r
- m_ti = m_tokens.begin();\r
- }\r
- catch (ErrorMessage &e)\r
- {\r
- if (m_log && m_soLog)\r
- {\r
- Acquire a(m_soLog);\r
- *m_log << m_currentFilename << _T("(") << parser.getLineNumber()\r
- << _T(") : error: ") << e << std::endl;\r
- }\r
- m_isThereAnyError = true;\r
- continue;\r
- }\r
- \r
- try\r
- {\r
- load_LINE();\r
- if (!isEOL())\r
- throw WarningMessage() << _T("back garbage is ignored.");\r
- }\r
- catch (WarningMessage &w)\r
- {\r
- if (m_log && m_soLog)\r
- {\r
- Acquire a(m_soLog);\r
- *m_log << i_filename << _T("(") << parser.getLineNumber()\r
- << _T(") : warning: ") << w << std::endl;\r
- }\r
- }\r
- catch (ErrorMessage &e)\r
- {\r
- if (m_log && m_soLog)\r
- {\r
- Acquire a(m_soLog);\r
- *m_log << i_filename << _T("(") << parser.getLineNumber()\r
- << _T(") : error: ") << e << std::endl;\r
- }\r
- m_isThereAnyError = true;\r
- }\r
- }\r
- \r
- // m_prefixes\r
- -- m_prefixesRefCcount;\r
- if (m_prefixesRefCcount == 0)\r
- delete m_prefixes;\r
-\r
- if (0 < m_canReadStack.size())\r
- {\r
- Acquire a(m_soLog);\r
- *m_log << m_currentFilename << _T("(") << parser.getLineNumber()\r
- << _T(") : error: unbalanced `if'. ")\r
- << _T("you forget `endif', didn'i_token you?")\r
- << std::endl;\r
- m_isThereAnyError = true;\r
- }\r
+ m_isThereAnyError = true;\r
+ return;\r
+ }\r
+\r
+ // prefix\r
+ if (m_prefixesRefCcount == 0) {\r
+ static const _TCHAR *prefixes[] = {\r
+ _T("="), _T("=>"), _T("&&"), _T("||"), _T(":"), _T("$"), _T("&"),\r
+ _T("-="), _T("+="), _T("!!!"), _T("!!"), _T("!"),\r
+ _T("E0-"), _T("E1-"), // <SCAN_CODE_EXTENTION>\r
+ _T("S-"), _T("A-"), _T("M-"), _T("C-"), // <BASIC_MODIFIER>\r
+ _T("W-"), _T("*"), _T("~"),\r
+ _T("U-"), _T("D-"), // <KEYSEQ_MODIFIER>\r
+ _T("R-"), _T("IL-"), _T("IC-"), _T("I-"), // <ASSIGN_MODIFIER>\r
+ _T("NL-"), _T("CL-"), _T("SL-"), _T("KL-"),\r
+ _T("MAX-"), _T("MIN-"), _T("MMAX-"), _T("MMIN-"),\r
+ _T("T-"), _T("TS-"),\r
+ _T("M0-"), _T("M1-"), _T("M2-"), _T("M3-"), _T("M4-"),\r
+ _T("M5-"), _T("M6-"), _T("M7-"), _T("M8-"), _T("M9-"),\r
+ _T("L0-"), _T("L1-"), _T("L2-"), _T("L3-"), _T("L4-"),\r
+ _T("L5-"), _T("L6-"), _T("L7-"), _T("L8-"), _T("L9-"),\r
+ };\r
+ m_prefixes = new std::vector<tstringi>;\r
+ for (size_t i = 0; i < NUMBER_OF(prefixes); ++ i)\r
+ m_prefixes->push_back(prefixes[i]);\r
+ std::sort(m_prefixes->begin(), m_prefixes->end(), prefixSortPred);\r
+ }\r
+ m_prefixesRefCcount ++;\r
+\r
+ // create parser\r
+ Parser parser(data.c_str(), data.size());\r
+ parser.setPrefixes(m_prefixes);\r
+\r
+ while (true) {\r
+ try {\r
+ if (!parser.getLine(&m_tokens))\r
+ break;\r
+ m_ti = m_tokens.begin();\r
+ } catch (ErrorMessage &e) {\r
+ if (m_log && m_soLog) {\r
+ Acquire a(m_soLog);\r
+ *m_log << m_currentFilename << _T("(") << parser.getLineNumber()\r
+ << _T(") : error: ") << e << std::endl;\r
+ }\r
+ m_isThereAnyError = true;\r
+ continue;\r
+ }\r
+\r
+ try {\r
+ load_LINE();\r
+ if (!isEOL())\r
+ throw WarningMessage() << _T("back garbage is ignored.");\r
+ } catch (WarningMessage &w) {\r
+ if (m_log && m_soLog) {\r
+ Acquire a(m_soLog);\r
+ *m_log << i_filename << _T("(") << parser.getLineNumber()\r
+ << _T(") : warning: ") << w << std::endl;\r
+ }\r
+ } catch (ErrorMessage &e) {\r
+ if (m_log && m_soLog) {\r
+ Acquire a(m_soLog);\r
+ *m_log << i_filename << _T("(") << parser.getLineNumber()\r
+ << _T(") : error: ") << e << std::endl;\r
+ }\r
+ m_isThereAnyError = true;\r
+ }\r
+ }\r
+\r
+ // m_prefixes\r
+ -- m_prefixesRefCcount;\r
+ if (m_prefixesRefCcount == 0)\r
+ delete m_prefixes;\r
+\r
+ if (0 < m_canReadStack.size()) {\r
+ Acquire a(m_soLog);\r
+ *m_log << m_currentFilename << _T("(") << parser.getLineNumber()\r
+ << _T(") : error: unbalanced `if'. ")\r
+ << _T("you forget `endif', didn'i_token you?")\r
+ << std::endl;\r
+ m_isThereAnyError = true;\r
+ }\r
}\r
\r
\r
// is the filename readable ?\r
bool SettingLoader::isReadable(const tstringi &i_filename,\r
- int i_debugLevel) const \r
+ int i_debugLevel) const\r
{\r
- if (i_filename.empty())\r
- return false;\r
+ if (i_filename.empty())\r
+ return false;\r
#ifdef UNICODE\r
- tifstream ist(to_string(i_filename).c_str());\r
+ tifstream ist(to_string(i_filename).c_str());\r
#else\r
- tifstream ist(i_filename.c_str());\r
+ tifstream ist(i_filename.c_str());\r
#endif\r
- if (ist.good())\r
- {\r
- if (m_log && m_soLog)\r
- {\r
- Acquire a(m_soLog, 0);\r
- *m_log << _T(" loading: ") << i_filename << std::endl;\r
- }\r
- return true;\r
- }\r
- else\r
- {\r
- if (m_log && m_soLog)\r
- {\r
- Acquire a(m_soLog, i_debugLevel);\r
- *m_log << _T("not found: ") << i_filename << std::endl;\r
- }\r
- return false;\r
- }\r
+ if (ist.good()) {\r
+ if (m_log && m_soLog) {\r
+ Acquire a(m_soLog, 0);\r
+ *m_log << _T(" loading: ") << i_filename << std::endl;\r
+ }\r
+ return true;\r
+ } else {\r
+ if (m_log && m_soLog) {\r
+ Acquire a(m_soLog, i_debugLevel);\r
+ *m_log << _T("not found: ") << i_filename << std::endl;\r
+ }\r
+ return false;\r
+ }\r
}\r
\r
#if 0\r
// get filename from registry\r
bool SettingLoader::getFilenameFromRegistry(tstringi *o_path) const\r
{\r
- // get from registry\r
- Registry reg(MAYU_REGISTRY_ROOT);\r
- int index;\r
- reg.read(_T(".mayuIndex"), &index, 0);\r
- char buf[100];\r
- snprintf(buf, NUMBER_OF(buf), _T(".mayu%d"), index);\r
- if (!reg.read(buf, o_path))\r
- return false;\r
-\r
- // parse registry entry\r
- Regexp getFilename(_T("^[^;]*;([^;]*);(.*)$"));\r
- if (!getFilename.doesMatch(*o_path))\r
- return false;\r
- \r
- tstringi path = getFilename[1];\r
- tstringi options = getFilename[2];\r
- \r
- if (!(0 < path.size() && isReadable(path)))\r
- return false;\r
- *o_path = path;\r
- \r
- // set symbols\r
- Regexp symbol(_T("-D([^;]*)"));\r
- while (symbol.doesMatch(options))\r
- {\r
- m_setting->symbols.insert(symbol[1]);\r
- options = options.substr(symbol.subBegin(1));\r
- }\r
- \r
- return true;\r
+ // get from registry\r
+ Registry reg(MAYU_REGISTRY_ROOT);\r
+ int index;\r
+ reg.read(_T(".mayuIndex"), &index, 0);\r
+ char buf[100];\r
+ snprintf(buf, NUMBER_OF(buf), _T(".mayu%d"), index);\r
+ if (!reg.read(buf, o_path))\r
+ return false;\r
+\r
+ // parse registry entry\r
+ Regexp getFilename(_T("^[^;]*;([^;]*);(.*)$"));\r
+ if (!getFilename.doesMatch(*o_path))\r
+ return false;\r
+\r
+ tstringi path = getFilename[1];\r
+ tstringi options = getFilename[2];\r
+\r
+ if (!(0 < path.size() && isReadable(path)))\r
+ return false;\r
+ *o_path = path;\r
+\r
+ // set symbols\r
+ Regexp symbol(_T("-D([^;]*)"));\r
+ while (symbol.doesMatch(options)) {\r
+ m_setting->symbols.insert(symbol[1]);\r
+ options = options.substr(symbol.subBegin(1));\r
+ }\r
+\r
+ return true;\r
}\r
#endif\r
\r
\r
// get filename\r
bool SettingLoader::getFilename(const tstringi &i_name, tstringi *o_path,\r
- int i_debugLevel) const\r
-{\r
- // the default filename is ".mayu"\r
- const tstringi &name = i_name.empty() ? tstringi(_T(".mayu")) : i_name;\r
- \r
- bool isFirstTime = true;\r
-\r
- while (true)\r
- {\r
- // find file from registry\r
- if (i_name.empty()) // called not from 'include'\r
- {\r
- Setting::Symbols symbols;\r
- if (getFilenameFromRegistry(NULL, o_path, &symbols))\r
- {\r
- if (o_path->empty())\r
- // find file from home directory\r
- {\r
- HomeDirectories pathes;\r
- getHomeDirectories(&pathes);\r
- for (HomeDirectories::iterator\r
- i = pathes.begin(); i != pathes.end(); ++ i)\r
- {\r
- *o_path = *i + _T("\\") + name;\r
- if (isReadable(*o_path, i_debugLevel))\r
- goto add_symbols;\r
- }\r
- return false;\r
+ int i_debugLevel) const\r
+{\r
+ // the default filename is ".mayu"\r
+ const tstringi &name = i_name.empty() ? tstringi(_T(".mayu")) : i_name;\r
+\r
+ bool isFirstTime = true;\r
+\r
+ while (true) {\r
+ // find file from registry\r
+ if (i_name.empty()) { // called not from 'include'\r
+ Setting::Symbols symbols;\r
+ if (getFilenameFromRegistry(NULL, o_path, &symbols)) {\r
+ if (o_path->empty())\r
+ // find file from home directory\r
+ {\r
+ HomeDirectories pathes;\r
+ getHomeDirectories(&pathes);\r
+ for (HomeDirectories::iterator\r
+ i = pathes.begin(); i != pathes.end(); ++ i) {\r
+ *o_path = *i + _T("\\") + name;\r
+ if (isReadable(*o_path, i_debugLevel))\r
+ goto add_symbols;\r
+ }\r
+ return false;\r
+ } else {\r
+ if (!isReadable(*o_path, i_debugLevel))\r
+ return false;\r
+ }\r
+add_symbols:\r
+ for (Setting::Symbols::iterator\r
+ i = symbols.begin(); i != symbols.end(); ++ i)\r
+ m_setting->m_symbols.insert(*i);\r
+ return true;\r
+ }\r
+ }\r
+\r
+ if (!isFirstTime)\r
+ return false;\r
+\r
+ // find file from home directory\r
+ HomeDirectories pathes;\r
+ getHomeDirectories(&pathes);\r
+ for (HomeDirectories::iterator i = pathes.begin(); i != pathes.end(); ++ i) {\r
+ *o_path = *i + _T("\\") + name;\r
+ if (isReadable(*o_path, i_debugLevel))\r
+ return true;\r
+ }\r
+\r
+ if (!i_name.empty())\r
+ return false; // called by 'include'\r
+\r
+ if (!DialogBox(g_hInst, MAKEINTRESOURCE(IDD_DIALOG_setting),\r
+ NULL, dlgSetting_dlgProc))\r
+ return false;\r
}\r
- else\r
- {\r
- if (!isReadable(*o_path, i_debugLevel))\r
- return false;\r
- }\r
- add_symbols:\r
- for (Setting::Symbols::iterator\r
- i = symbols.begin(); i != symbols.end(); ++ i)\r
- m_setting->m_symbols.insert(*i);\r
- return true;\r
- }\r
- }\r
- \r
- if (!isFirstTime)\r
- return false;\r
- \r
- // find file from home directory\r
- HomeDirectories pathes;\r
- getHomeDirectories(&pathes);\r
- for (HomeDirectories::iterator i = pathes.begin(); i != pathes.end(); ++ i)\r
- {\r
- *o_path = *i + _T("\\") + name;\r
- if (isReadable(*o_path, i_debugLevel))\r
- return true;\r
- }\r
- \r
- if (!i_name.empty())\r
- return false; // called by 'include'\r
- \r
- if (!DialogBox(g_hInst, MAKEINTRESOURCE(IDD_DIALOG_setting),\r
- NULL, dlgSetting_dlgProc))\r
- return false;\r
- }\r
}\r
\r
\r
// constructor\r
SettingLoader::SettingLoader(SyncObject *i_soLog, tostream *i_log)\r
- : m_setting(NULL),\r
- m_isThereAnyError(false),\r
- m_soLog(i_soLog),\r
- m_log(i_log),\r
- m_currentKeymap(NULL)\r
+ : m_setting(NULL),\r
+ m_isThereAnyError(false),\r
+ m_soLog(i_soLog),\r
+ m_log(i_log),\r
+ m_currentKeymap(NULL)\r
{\r
- m_defaultKeySeqModifier =\r
- m_defaultAssignModifier.release(Modifier::Type_ImeComp);\r
+ m_defaultKeySeqModifier =\r
+ m_defaultAssignModifier.release(Modifier::Type_ImeComp);\r
}\r
\r
\r
*/\r
bool SettingLoader::load(Setting *i_setting, const tstringi &i_filename)\r
{\r
- m_setting = i_setting;\r
- m_isThereAnyError = false;\r
- \r
- tstringi path;\r
- if (!getFilename(i_filename, &path))\r
- {\r
- if (i_filename.empty())\r
- {\r
- Acquire a(m_soLog);\r
- getFilename(i_filename, &path, 0); // show filenames\r
- return false;\r
- }\r
- else\r
- throw ErrorMessage() << _T("`") << i_filename\r
- << _T("': no such file or other error.");\r
- }\r
-\r
- // create global keymap's default keySeq\r
- ActionFunction af(createFunctionData(_T("OtherWindowClass")));\r
- KeySeq *globalDefault = m_setting->m_keySeqs.add(KeySeq(_T("")).add(af));\r
- \r
- // add default keymap\r
- m_currentKeymap = m_setting->m_keymaps.add(\r
- Keymap(Keymap::Type_windowOr, _T("Global"), _T(""), _T(""),\r
- globalDefault, NULL));\r
-\r
- /*\r
- // add keyboard layout name\r
- if (filename.empty())\r
- {\r
- char keyboardLayoutName[KL_NAMELENGTH];\r
- if (GetKeyboardLayoutName(keyboardLayoutName))\r
- {\r
- tstringi kl = tstringi(_T("KeyboardLayout/")) + keyboardLayoutName;\r
- m_setting->symbols.insert(kl);\r
- Acquire a(m_soLog);\r
- *m_log << _T("KeyboardLayout: ") << kl << std::endl;\r
- }\r
- }\r
- */\r
- \r
- // load\r
- load(path);\r
-\r
- // finalize\r
- if (i_filename.empty())\r
- m_setting->m_keymaps.adjustModifier(m_setting->m_keyboard);\r
- \r
- return !m_isThereAnyError;\r
+ m_setting = i_setting;\r
+ m_isThereAnyError = false;\r
+\r
+ tstringi path;\r
+ if (!getFilename(i_filename, &path)) {\r
+ if (i_filename.empty()) {\r
+ Acquire a(m_soLog);\r
+ getFilename(i_filename, &path, 0); // show filenames\r
+ return false;\r
+ } else\r
+ throw ErrorMessage() << _T("`") << i_filename\r
+ << _T("': no such file or other error.");\r
+ }\r
+\r
+ // create global keymap's default keySeq\r
+ ActionFunction af(createFunctionData(_T("OtherWindowClass")));\r
+ KeySeq *globalDefault = m_setting->m_keySeqs.add(KeySeq(_T("")).add(af));\r
+\r
+ // add default keymap\r
+ m_currentKeymap = m_setting->m_keymaps.add(\r
+ Keymap(Keymap::Type_windowOr, _T("Global"), _T(""), _T(""),\r
+ globalDefault, NULL));\r
+\r
+ /*\r
+ // add keyboard layout name\r
+ if (filename.empty())\r
+ {\r
+ char keyboardLayoutName[KL_NAMELENGTH];\r
+ if (GetKeyboardLayoutName(keyboardLayoutName))\r
+ {\r
+ tstringi kl = tstringi(_T("KeyboardLayout/")) + keyboardLayoutName;\r
+ m_setting->symbols.insert(kl);\r
+ Acquire a(m_soLog);\r
+ *m_log << _T("KeyboardLayout: ") << kl << std::endl;\r
+ }\r
+ }\r
+ */\r
+\r
+ // load\r
+ load(path);\r
+\r
+ // finalize\r
+ if (i_filename.empty())\r
+ m_setting->m_keymaps.adjustModifier(m_setting->m_keyboard);\r
+\r
+ return !m_isThereAnyError;\r
}\r
\r
\r