diff --git a/honoka/plugins/Makefile.am b/honoka/plugins/Makefile.am index 86fae2a..a0f486b 100644 --- a/honoka/plugins/Makefile.am +++ b/honoka/plugins/Makefile.am @@ -30,7 +30,7 @@ nicolainput.h anthyplugin.h anthyconversion.h anthyprediction.h skkdic.h \ skkdicconversion.h wnnplugin.h wnnprediction.h honoka_plugin_def.h simpleprediction.h \ cannaconversion.h primeprediction.h asciiplugin.h wordsdic.h wordsprediction.h \ - asciiinput.h + asciiinput.h compose.h moduledir = @SCIM_MODULEDIR@/IMEngine diff --git a/honoka/plugins/asciiinput.cpp b/honoka/plugins/asciiinput.cpp index f8355ca..516f04f 100644 --- a/honoka/plugins/asciiinput.cpp +++ b/honoka/plugins/asciiinput.cpp @@ -38,11 +38,28 @@ #define bind_textdomain_codeset(domain,codeset) #endif +#include "compose.h" + AsciiInput::AsciiInput(ConfigPointer cfg) : PreEditor(cfg) { scim_string_to_key_list(lowProprotyKey,cfg->read(HONOKA_CONFIG_ASCIIINPUT_LOW_PRIORITY_KEY,String(HONOKA_DEFAULT_ASCIIINPUT_LOW_PRIORITY_KEY))); scim_string_to_key_list(autoCommitKey,cfg->read(HONOKA_CONFIG_ASCIIINPUT_AUTO_COMMIT_KEY,String(HONOKA_DEFAULT_ASCIIINPUT_AUTO_COMMIT_KEY))); autoCommit = cfg->read(HONOKA_CONFIG_ASCIIINPUT_AUTO_COMMIT,HONOKA_DEFAULT_ASCIIINPUT_AUTO_COMMIT); + + scim_string_to_key_list(compose_key,cfg->read(HONOKA_CONFIG_ASCIIINPUT_COMPOSE_KEY,String(HONOKA_DEFAULT_ASCIIINPUT_COMPOSE_KEY))); + scim_string_to_key_list(dead_abovering,cfg->read(HONOKA_CONFIG_ASCIIINPUT_ABOVERING_KEY,String(HONOKA_DEFAULT_ASCIIINPUT_ABOVERING_KEY))); + scim_string_to_key_list(dead_acute,cfg->read(HONOKA_CONFIG_ASCIIINPUT_ACUTE_KEY,String(HONOKA_DEFAULT_ASCIIINPUT_ACUTE_KEY))); + scim_string_to_key_list(dead_cedilla,cfg->read(HONOKA_CONFIG_ASCIIINPUT_CEDILLA_KEY,String(HONOKA_DEFAULT_ASCIIINPUT_CEDILLA_KEY))); + scim_string_to_key_list(dead_circumflex,cfg->read(HONOKA_CONFIG_ASCIIINPUT_CIRCUMFLEX_KEY,String(HONOKA_DEFAULT_ASCIIINPUT_CIRCUMFLEX_KEY))); + scim_string_to_key_list(dead_diaeresis,cfg->read(HONOKA_CONFIG_ASCIIINPUT_DIAERESIS_KEY,String(HONOKA_DEFAULT_ASCIIINPUT_DIAERESIS_KEY))); + scim_string_to_key_list(dead_doubleacute,cfg->read(HONOKA_CONFIG_ASCIIINPUT_DOUBLEACUTE_KEY,String(HONOKA_DEFAULT_ASCIIINPUT_DOUBLEACUTE_KEY))); + scim_string_to_key_list(dead_grave,cfg->read(HONOKA_CONFIG_ASCIIINPUT_GRAVE_KEY,String(HONOKA_DEFAULT_ASCIIINPUT_GRAVE_KEY))); + scim_string_to_key_list(dead_tilde,cfg->read(HONOKA_CONFIG_ASCIIINPUT_TILDE_KEY,String(HONOKA_DEFAULT_ASCIIINPUT_TILDE_KEY))); + + + compose = false; + composeKey1.code = 0; + composeKey2.code = 0; } @@ -55,6 +72,7 @@ */ String AsciiInput::getModeName() { + if (compose) return String(_("Cc")); return String(_("Aa")); } @@ -91,6 +109,118 @@ bool AsciiInput::keyEventHook(const KeyEvent &key) { if (key.is_key_release()) return false; + if ((key.code == SCIM_KEY_Multi_key) || (compose_key.comp(key))) { + composeKey1.code = 0; + composeKey2.code = 0; + if (compose) { + compose = false; + } else compose = true; + return true; + } else + if ((key.code == SCIM_KEY_dead_abovering) || + (key.code == SCIM_KEY_dead_acute) || + (key.code == SCIM_KEY_dead_cedilla) || + (key.code == SCIM_KEY_dead_circumflex) || + (key.code == SCIM_KEY_dead_diaeresis) || + (key.code == SCIM_KEY_dead_doubleacute) || + (key.code == SCIM_KEY_dead_grave) || + (key.code == SCIM_KEY_dead_tilde)) { + if ((!compose) || ((compose) && (composeKey1.code == 0))) { + compose = true; + composeKey1.code = key.code; + composeKey2.code = 0; + return true; + } else { + composeKey2.code = key.code; + } + } else + if (dead_abovering.comp(key)) { + if ((!compose) || ((compose) && (composeKey1.code == 0))) { + compose = true; + composeKey1.code = SCIM_KEY_dead_abovering; + composeKey2.code = 0; + return true; + } else { + composeKey2.code = SCIM_KEY_dead_abovering; + } + } else + if (dead_acute.comp(key)) { + if ((!compose) || ((compose) && (composeKey1.code == 0))) { + compose = true; + composeKey1.code = SCIM_KEY_dead_acute; + composeKey2.code = 0; + return true; + } else { + composeKey2.code = SCIM_KEY_dead_acute; + } + } else + if (dead_cedilla.comp(key)) { + if ((!compose) || ((compose) && (composeKey1.code == 0))) { + compose = true; + composeKey1.code = SCIM_KEY_dead_cedilla; + composeKey2.code = 0; + return true; + } else { + composeKey2.code = SCIM_KEY_dead_cedilla; + } + } else + if (dead_circumflex.comp(key)) { + if ((!compose) || ((compose) && (composeKey1.code == 0))) { + compose = true; + composeKey1.code = SCIM_KEY_dead_circumflex; + composeKey2.code = 0; + return true; + } else { + composeKey2.code = SCIM_KEY_dead_circumflex; + } + } else + if (dead_diaeresis.comp(key)) { + if ((!compose) || ((compose) && (composeKey1.code == 0))) { + compose = true; + composeKey1.code = SCIM_KEY_dead_diaeresis; + composeKey2.code = 0; + return true; + } else { + composeKey2.code = SCIM_KEY_dead_diaeresis; + } + } else + if (dead_doubleacute.comp(key)) { + if ((!compose) || ((compose) && (composeKey1.code == 0))) { + compose = true; + composeKey1.code = SCIM_KEY_dead_doubleacute; + composeKey2.code = 0; + return true; + } else { + composeKey2.code = SCIM_KEY_dead_doubleacute; + } + } else + if (dead_grave.comp(key)) { + if ((!compose) || ((compose) && (composeKey1.code == 0))) { + compose = true; + composeKey1.code = SCIM_KEY_dead_grave; + composeKey2.code = 0; + return true; + } else { + composeKey2.code = SCIM_KEY_dead_grave; + } + } else + if (dead_tilde.comp(key)) { + if ((!compose) || ((compose) && (composeKey1.code == 0))) { + compose = true; + composeKey1.code = SCIM_KEY_dead_tilde; + composeKey2.code = 0; + return true; + } else { + composeKey2.code = SCIM_KEY_dead_tilde; + } + } + + // composeKey2�ޤ�·�ä����Ϥ����Ǥ⤦�������Ƥ��ޤ��� + if ((compose) && (composeKey2.code != 0)) { + insertComposeKey(composeKey1,composeKey2); + return true; + } + if (lowProprotyKey.comp(key)) return false; else return keyEvent(key); } @@ -115,6 +245,18 @@ (key.code == SCIM_KEY_Hyper_L) || (key.code == SCIM_KEY_Hyper_R)) return true; + if ((compose)) { + if (composeKey1.code == 0) { + composeKey1 = key.code; + return true; + } else { + if (composeKey2.code == 0) composeKey2.code = key.code; + insertComposeKey(composeKey1,composeKey2); + return true; + } + } + + if (autoCommit) { if (autoCommitKey.comp(key)) { String c; @@ -135,3 +277,23 @@ } return false; } + + +/*! + \fn AsciiInput::insertComposeKey(KeyEvent &k1,KeyEvent &k2) + */ +void AsciiInput::insertComposeKey(KeyEvent &k1,KeyEvent &k2) +{ + compose = false; + String k1s,k2s; + if (!scim_key_to_string(k1s,k1)) return; + if (!scim_key_to_string(k2s,k2)) return; + for(unsigned int i = 0;multikey_table[i].first != "";i ++) { + if ((k1s == multikey_table[i].first) && (k2s == multikey_table[i].second)) { + text = text.substr(0,pos) + multikey_table[i].character + text.substr(pos); + pos ++; + } else continue; + } + composeKey1.code = 0; + composeKey2.code = 0; +} diff --git a/honoka/plugins/asciiinput.h b/honoka/plugins/asciiinput.h index ca9f7be..5d84479 100644 --- a/honoka/plugins/asciiinput.h +++ b/honoka/plugins/asciiinput.h @@ -32,6 +32,7 @@ using namespace std; using namespace scim; + /** @author TAM (Teppei Tamra) */ @@ -49,8 +50,20 @@ protected: HonokaKeyEventList lowProprotyKey,autoCommitKey; bool autoCommit; + bool compose; + KeyEvent composeKey1,composeKey2; + HonokaKeyEventList compose_key, + dead_abovering, + dead_acute, + dead_cedilla, + dead_circumflex, + dead_diaeresis, + dead_doubleacute, + dead_grave, + dead_tilde; protected: bool keyEvent(const KeyEvent &key); + void insertComposeKey(KeyEvent &k1,KeyEvent &k2); }; } #endif diff --git a/honoka/plugins/asciiplugin.cpp b/honoka/plugins/asciiplugin.cpp index 04dced4..2223d05 100644 --- a/honoka/plugins/asciiplugin.cpp +++ b/honoka/plugins/asciiplugin.cpp @@ -81,6 +81,69 @@ String(HONOKA_DEFAULT_ASCIIINPUT_AUTO_COMMIT_KEY) )); + page->append(new HonokaSetupKeyItem( + _("Compose key: "), + String(HONOKA_CONFIG_ASCIIINPUT_COMPOSE_KEY), + _("set the Compose emulation key."), + String(HONOKA_DEFAULT_ASCIIINPUT_COMPOSE_KEY) + )); + + page->append(new HonokaSetupKeyItem( + _("dead abovering key: "), + String(HONOKA_CONFIG_ASCIIINPUT_ABOVERING_KEY), + _("set the dead_abovering emulation key."), + String(HONOKA_DEFAULT_ASCIIINPUT_ABOVERING_KEY) + )); + + page->append(new HonokaSetupKeyItem( + _("dead acute key: "), + String(HONOKA_CONFIG_ASCIIINPUT_ACUTE_KEY), + _("set the dead_acute emulation key."), + String(HONOKA_DEFAULT_ASCIIINPUT_ACUTE_KEY) + )); + + page->append(new HonokaSetupKeyItem( + _("dead cedilla key: "), + String(HONOKA_CONFIG_ASCIIINPUT_CEDILLA_KEY), + _("set the dead_cedilla emulation key."), + String(HONOKA_DEFAULT_ASCIIINPUT_CEDILLA_KEY) + )); + + page->append(new HonokaSetupKeyItem( + _("dead circumflex key: "), + String(HONOKA_CONFIG_ASCIIINPUT_CIRCUMFLEX_KEY), + _("set the dead_circumflex emulation key."), + String(HONOKA_DEFAULT_ASCIIINPUT_CIRCUMFLEX_KEY) + )); + + page->append(new HonokaSetupKeyItem( + _("dead diaeresis key: "), + String(HONOKA_CONFIG_ASCIIINPUT_DIAERESIS_KEY), + _("set the dead_diaeresis emulation key."), + String(HONOKA_DEFAULT_ASCIIINPUT_DIAERESIS_KEY) + )); + + page->append(new HonokaSetupKeyItem( + _("dead doubleacute key: "), + String(HONOKA_CONFIG_ASCIIINPUT_DOUBLEACUTE_KEY), + _("set the dead_doubleacute emulation key."), + String(HONOKA_DEFAULT_ASCIIINPUT_DOUBLEACUTE_KEY) + )); + + page->append(new HonokaSetupKeyItem( + _("dead grave key: "), + String(HONOKA_CONFIG_ASCIIINPUT_GRAVE_KEY), + _("set the dead_grave emulation key."), + String(HONOKA_DEFAULT_ASCIIINPUT_GRAVE_KEY) + )); + + page->append(new HonokaSetupKeyItem( + _("dead tilde key: "), + String(HONOKA_CONFIG_ASCIIINPUT_TILDE_KEY), + _("set the dead_tilde emulation key."), + String(HONOKA_DEFAULT_ASCIIINPUT_TILDE_KEY) + )); + HonokaSetupPage *sc = new HonokaSetupPage(_("shortcut keys: "),"",""); sc->append(new HonokaSetupKeyItem( _("Ascii Input: "), diff --git a/honoka/plugins/asciiplugin.h b/honoka/plugins/asciiplugin.h index 3bfe04e..b6fa347 100644 --- a/honoka/plugins/asciiplugin.h +++ b/honoka/plugins/asciiplugin.h @@ -45,6 +45,24 @@ #define HONOKA_DEFAULT_ASCIIINPUT_AUTO_COMMIT_KEY "space,comma,period" #define HONOKA_CONFIG_ASCIIINPUT_AUTO_COMMIT "/IMEngine/Honoka/AsciiInput/AutoCommit" #define HONOKA_DEFAULT_ASCIIINPUT_AUTO_COMMIT false +#define HONOKA_CONFIG_ASCIIINPUT_COMPOSE_KEY "/IMEngine/Honoka/AsciiInput/ComposeKey" +#define HONOKA_DEFAULT_ASCIIINPUT_COMPOSE_KEY "" +#define HONOKA_CONFIG_ASCIIINPUT_ABOVERING_KEY "/IMEngine/Honoka/AsciiInput/DeadAboveringKey" +#define HONOKA_DEFAULT_ASCIIINPUT_ABOVERING_KEY "" +#define HONOKA_CONFIG_ASCIIINPUT_ACUTE_KEY "/IMEngine/Honoka/AsciiInput/DeadAcuteKey" +#define HONOKA_DEFAULT_ASCIIINPUT_ACUTE_KEY "" +#define HONOKA_CONFIG_ASCIIINPUT_CEDILLA_KEY "/IMEngine/Honoka/AsciiInput/DeadCedillaKey" +#define HONOKA_DEFAULT_ASCIIINPUT_CEDILLA_KEY "" +#define HONOKA_CONFIG_ASCIIINPUT_CIRCUMFLEX_KEY "/IMEngine/Honoka/AsciiInput/DeadCircumflexKey" +#define HONOKA_DEFAULT_ASCIIINPUT_CIRCUMFLEX_KEY "" +#define HONOKA_CONFIG_ASCIIINPUT_DIAERESIS_KEY "/IMEngine/Honoka/AsciiInput/DeadDiaeresisKey" +#define HONOKA_DEFAULT_ASCIIINPUT_DIAERESIS_KEY "" +#define HONOKA_CONFIG_ASCIIINPUT_DOUBLEACUTE_KEY "/IMEngine/Honoka/AsciiInput/DeadDoubleacuteKey" +#define HONOKA_DEFAULT_ASCIIINPUT_DOUBLEACUTE_KEY "" +#define HONOKA_CONFIG_ASCIIINPUT_GRAVE_KEY "/IMEngine/Honoka/AsciiInput/DeadGraveKey" +#define HONOKA_DEFAULT_ASCIIINPUT_GRAVE_KEY "" +#define HONOKA_CONFIG_ASCIIINPUT_TILDE_KEY "/IMEngine/Honoka/AsciiInput/DeadTildeKey" +#define HONOKA_DEFAULT_ASCIIINPUT_TILDE_KEY "" using namespace std; using namespace scim; diff --git a/honoka/plugins/compose.h b/honoka/plugins/compose.h new file mode 100644 index 0000000..67f9324 --- /dev/null +++ b/honoka/plugins/compose.h @@ -0,0 +1,473 @@ +// +// Xorg��Compose�ǡ����򥳡��ɲ������Ǥ��衣 +// + +namespace Honoka { +struct MultiKeySequence { + String first; + String second; + wchar_t character; +}; + +MultiKeySequence multikey_table[] = { + {"plus", "plus", '#'}, + {"apostrophe", "space", '\''}, + {"space", "apostrophe", '\''}, + {"A", "T", '@'}, + {"parenleft", "parenleft", '['}, + {"slash", "slash", '\\'}, + {"slash", "less", '\\'}, + {"less", "slash", '\\'}, + {"parenright", "parenright", ']'}, + {"asciicircum", "space", '^'}, + {"space", "asciicircum", '^'}, + {"greater", "space", '^'}, + {"space", "greater", '^'}, + {"grave", "space", '`'}, + {"space", "grave", '`'}, + {"parenleft", "minus", '{'}, + {"minus", "parenleft", '{'}, + {"slash", "asciicircum", '|'}, + {"asciicircum", "slash", '|'}, + {"V", "L", '|'}, + {"L", "V", '|'}, + {"v", "l", '|'}, + {"l", "v", '|'}, + {"parenright", "minus", '}'}, + {"minus", "parenright", '}'}, + {"asciitilde", "space", '~'}, + {"space", "asciitilde", '~'}, + {"minus", "space", '~'}, + {"space", "minus", '~'}, + {"exclam", "exclam", 0241}, + {"c", "slash", 0242}, + {"slash", "c", 0242}, + {"C", "slash", 0242}, + {"slash", "C", 0242}, + {"C", "bar", 0242}, + {"bar", "C", 0242}, + {"c", "bar", 0242}, + {"bar", "c", 0242}, + {"l", "minus", 0243}, + {"minus", "l", 0243}, + {"L", "minus", 0243}, + {"minus", "L", 0243}, + {"l", "equal", 0243}, + {"equal", "l", 0243}, + {"L", "equal", 0243}, + {"equal", "L", 0243}, + {"y", "minus", 0245}, + {"minus", "y", 0245}, + {"Y", "minus", 0245}, + {"minus", "Y", 0245}, + {"y", "equal", 0245}, + {"equal", "y", 0245}, + {"Y", "equal", 0245}, + {"equal", "Y", 0245}, + {"s", "o", 0247}, + {"o", "s", 0247}, + {"S", "O", 0247}, + {"O", "S", 0247}, + {"S", "exclam", 0247}, + {"exclam", "S", 0247}, + {"s", "exclam", 0247}, + {"exclam", "s", 0247}, + {"S", "0", 0247}, + {"0", "S", 0247}, + {"s", "0", 0247}, + {"0", "s", 0247}, + {"x", "o", 0244}, + {"o", "x", 0244}, + {"X", "O", 0244}, + {"O", "X", 0244}, + {"x", "O", 0244}, + {"O", "x", 0244}, + {"X", "o", 0244}, + {"o", "X", 0244}, + {"x", "0", 0244}, + {"0", "x", 0244}, + {"X", "0", 0244}, + {"0", "X", 0244}, + {"c", "o", 0251}, + {"o", "c", 0251}, + {"C", "O", 0251}, + {"O", "C", 0251}, + {"c", "O", 0251}, + {"O", "c", 0251}, + {"C", "o", 0251}, + {"o", "C", 0251}, + {"c", "0", 0251}, + {"0", "c", 0251}, + {"C", "0", 0251}, + {"0", "C", 0251}, + {"parenleft", "c", 0251}, + {"a", "underscore", 0252}, + {"underscore", "a", 0252}, + {"A", "underscore", 0252}, + {"underscore", "A", 0252}, + {"o", "underscore", 0272}, + {"underscore", "o", 0272}, + {"O", "underscore", 0272}, + {"underscore", "O", 0272}, + {"less", "less", 0253}, + {"greater", "greater", 0273}, + {"0", "asciicircum", 0260}, + {"asciicircum", "0", 0260}, + {"0", "asterisk", 0260}, + {"asterisk", "0", 0260}, + {"plus", "minus", 0261}, + {"minus", "plus", 0261}, + {"slash", "u", 0265}, + {"u", "slash", 0265}, + {"slash", "U", 0265}, + {"U", "slash", 0265}, + {"1", "asciicircum", 0271}, + {"asciicircum", "1", 0271}, + {"S", "1", 0271}, + {"1", "S", 0271}, + {"s", "1", 0271}, + {"1", "s", 0271}, + {"2", "asciicircum", 0262}, + {"asciicircum", "2", 0262}, + {"S", "2", 0262}, + {"2", "S", 0262}, + {"s", "2", 0262}, + {"2", "s", 0262}, + {"3", "asciicircum", 0263}, + {"asciicircum", "3", 0263}, + {"S", "3", 0263}, + {"3", "S", 0263}, + {"s", "3", 0263}, + {"3", "s", 0263}, + {"p", "exclam", 0266}, + {"exclam", "p", 0266}, + {"P", "exclam", 0266}, + {"exclam", "P", 0266}, + {"period", "asciicircum", 0267}, + {"asciicircum", "period", 0267}, + {"period", "period", 0267}, + {"1", "4", 0274}, + {"1", "2", 0275}, + {"3", "4", 0276}, + {"question", "question", 0277}, + {"space", "space", 0240}, + {"bar", "bar", 0246}, + {"exclam", "asciicircum", 0246}, + {"asciicircum", "exclam", 0246}, + {"V", "B", 0246}, + {"B", "V", 0246}, + {"v", "b", 0246}, + {"b", "v", 0246}, + {"minus", "comma", 0254}, + {"comma", "minus", 0254}, + {"minus", "minus", 0255}, + {"R", "O", 0256}, + {"O", "R", 0256}, + {"parenleft", "r", 0256}, + {"minus", "asciicircum", 0257}, + {"asciicircum", "minus", 0257}, + {"underscore", "asciicircum", 0257}, + {"asciicircum", "underscore", 0257}, + {"underscore", "underscore", 0257}, + {"minus", "colon", 0367}, + {"colon", "minus", 0367}, + {"x", "x", 0327}, + {"apostrophe", "apostrophe", 0264}, + {"comma", "comma", 0270}, + {"quotedbl", "quotedbl", 0250}, +// Accented Alphabet + {"A", "grave", 0300}, + {"grave", "A", 0300}, + {"A", "acute", 0301}, + {"acute", "A", 0301}, + {"A", "apostrophe", 0301}, + {"apostrophe", "A", 0301}, + {"A", "asciicircum", 0302}, + {"asciicircum", "A", 0302}, + {"A", "greater", 0302}, + {"greater", "A", 0302}, + {"A", "asciitilde", 0303}, + {"asciitilde", "A", 0303}, + {"A", "minus", 0303}, + {"minus", "A", 0303}, + {"A", "quotedbl", 0304}, + {"quotedbl", "A", 0304}, + {"A", "diaeresis", 0304}, + {"diaeresis", "A", 0304}, + {"A", "asterisk", 0305}, + {"asterisk", "A", 0305}, + {"A", "A", 0305}, + {"A", "O", 0305}, + {"A", "E", 0306}, + {"a", "grave", 0340}, + {"grave", "a", 0340}, + {"a", "acute", 0341}, + {"acute", "a", 0341}, + {"a", "apostrophe", 0341}, + {"apostrophe", "a", 0341}, + {"a", "asciicircum", 0342}, + {"asciicircum", "a", 0342}, + {"a", "greater", 0342}, + {"greater", "a", 0342}, + {"a", "asciitilde", 0343}, + {"asciitilde", "a", 0343}, + {"a", "minus", 0343}, + {"minus", "a", 0343}, + {"a", "quotedbl", 0344}, + {"quotedbl", "a", 0344}, + {"a", "diaeresis", 0344}, + {"diaeresis", "a", 0344}, + {"a", "asterisk", 0345}, + {"asterisk", "a", 0345}, + {"a", "a", 0345}, + {"a", "o", 0345}, + {"a", "e", 0346}, + {"acute", "C", 0307}, + {"acute", "c", 0347}, + {"C", "comma", 0307}, + {"comma", "C", 0307}, + {"c", "comma", 0347}, + {"comma", "c", 0347}, + {"minus", "D", 0320}, + {"D", "minus", 0320}, + {"minus", "d", 0360}, + {"d", "minus", 0360}, + {"E", "grave", 0310}, + {"grave", "E", 0310}, + {"E", "acute", 0311}, + {"acute", "E", 0311}, + {"E", "apostrophe", 0311}, + {"apostrophe", "E", 0311}, + {"E", "asciicircum", 0312}, + {"asciicircum", "E", 0312}, + {"E", "greater", 0312}, + {"greater", "E", 0312}, + {"E", "quotedbl", 0313}, + {"quotedbl", "E", 0313}, + {"E", "diaeresis", 0313}, + {"diaeresis", "E", 0313}, + {"e", "grave", 0350}, + {"grave", "e", 0350}, + {"e", "acute", 0351}, + {"acute", "e", 0351}, + {"e", "apostrophe", 0351}, + {"apostrophe", "e", 0351}, + {"e", "asciicircum", 0352}, + {"asciicircum", "e", 0352}, + {"e", "greater", 0352}, + {"greater", "e", 0352}, + {"e", "quotedbl", 0353}, + {"quotedbl", "e", 0353}, + {"e", "diaeresis", 0353}, + {"diaeresis", "e", 0353}, + {"I", "grave", 0314}, + {"grave", "I", 0314}, + {"I", "acute", 0315}, + {"acute", "I", 0315}, + {"I", "apostrophe", 0315}, + {"apostrophe", "I", 0315}, + {"I", "asciicircum", 0316}, + {"asciicircum", "I", 0316}, + {"I", "greater", 0316}, + {"greater", "I", 0316}, + {"I", "quotedbl", 0317}, + {"quotedbl", "I", 0317}, + {"I", "diaeresis", 0317}, + {"diaeresis", "I", 0317}, + {"i", "grave", 0354}, + {"grave", "i", 0354}, + {"i", "acute", 0355}, + {"acute", "i", 0355}, + {"i", "apostrophe", 0355}, + {"apostrophe", "i", 0355}, + {"i", "asciicircum", 0356}, + {"asciicircum", "i", 0356}, + {"i", "greater", 0356}, + {"greater", "i", 0356}, + {"i", "quotedbl", 0357}, + {"quotedbl", "i", 0357}, + {"i", "diaeresis", 0357}, + {"diaeresis", "i", 0357}, + {"N", "asciitilde", 0321}, + {"asciitilde", "N", 0321}, + {"N", "minus", 0321}, + {"minus", "N", 0321}, + {"n", "asciitilde", 0361}, + {"asciitilde", "n", 0361}, + {"n", "minus", 0361}, + {"minus", "n", 0361}, + {"O", "grave", 0322}, + {"grave", "O", 0322}, + {"O", "acute", 0323}, + {"acute", "O", 0323}, + {"O", "apostrophe", 0323}, + {"apostrophe", "O", 0323}, + {"O", "asciicircum", 0324}, + {"asciicircum", "O", 0324}, + {"O", "greater", 0324}, + {"greater", "O", 0324}, + {"O", "asciitilde", 0325}, + {"asciitilde", "O", 0325}, + {"O", "minus", 0325}, + {"minus", "O", 0325}, + {"O", "quotedbl", 0326}, + {"quotedbl", "O", 0326}, + {"O", "diaeresis", 0326}, + {"diaeresis", "O", 0326}, + {"O", "slash", 0330}, + {"slash", "O", 0330}, + {"o", "grave", 0362}, + {"grave", "o", 0362}, + {"o", "acute", 0363}, + {"acute", "o", 0363}, + {"o", "apostrophe", 0363}, + {"apostrophe", "o", 0363}, + {"o", "asciicircum", 0364}, + {"asciicircum", "o", 0364}, + {"o", "greater", 0364}, + {"greater", "o", 0364}, + {"o", "asciitilde", 0365}, + {"asciitilde", "o", 0365}, + {"o", "minus", 0365}, + {"minus", "o", 0365}, + {"o", "quotedbl", 0366}, + {"quotedbl", "o", 0366}, + {"o", "diaeresis", 0366}, + {"diaeresis", "o", 0366}, + {"o", "slash", 0370}, + {"slash", "o", 0370}, + {"U", "grave", 0331}, + {"grave", "U", 0331}, + {"U", "acute", 0332}, + {"acute", "U", 0332}, + {"U", "apostrophe", 0332}, + {"apostrophe", "U", 0332}, + {"U", "asciicircum", 0333}, + {"asciicircum", "U", 0333}, + {"U", "greater", 0333}, + {"greater", "U", 0333}, + {"U", "quotedbl", 0334}, + {"quotedbl", "U", 0334}, + {"U", "diaeresis", 0334}, + {"diaeresis", "U", 0334}, + {"u", "grave", 0371}, + {"grave", "u", 0371}, + {"u", "acute", 0372}, + {"acute", "u", 0372}, + {"u", "apostrophe", 0372}, + {"apostrophe", "u", 0372}, + {"u", "asciicircum", 0373}, + {"asciicircum", "u", 0373}, + {"u", "greater", 0373}, + {"greater", "u", 0373}, + {"u", "quotedbl", 0374}, + {"quotedbl", "u", 0374}, + {"u", "diaeresis", 0374}, + {"diaeresis", "u", 0374}, + {"s", "s", 0337}, + {"T", "H", 0336}, + {"t", "h", 0376}, + {"Y", "acute", 0335}, + {"acute", "Y", 0335}, + {"Y", "apostrophe", 0335}, + {"apostrophe", "Y", 0335}, + {"y", "acute", 0375}, + {"acute", "y", 0375}, + {"y", "apostrophe", 0375}, + {"apostrophe", "y", 0375}, + {"y", "quotedbl", 0377}, + {"quotedbl", "y", 0377}, + {"y", "diaeresis", 0377}, + {"diaeresis", "y", 0377}, +// dead key accent keysyms +// Special Character + {"dead_circumflex", "slash", '|'}, + {"dead_circumflex", "space", '^'}, + {"dead_circumflex", "dead_circumflex", '^'}, + {"dead_tilde", "space", '~'}, + {"dead_tilde", "dead_tilde", '~'}, + {"dead_grave", "space", '`'}, + {"dead_grave", "dead_grave", '`'}, +// These are for us_intl, that does not have diaeresis, etc + {"dead_acute", "space", '\''}, + {"dead_acute", "dead_acute", 0264}, + {"dead_diaeresis", "space", '\"'}, + {"dead_diaeresis", "dead_diaeresis", 0250}, + {"dead_doubleacute", "space", '\"'}, + {"dead_abovering", "space", 0260}, + {"dead_abovering", "dead_abovering", 0260}, + {"dead_circumflex", "0", 0260}, + {"dead_circumflex", "1", 0271}, + {"dead_circumflex", "2", 0262}, + {"dead_circumflex", "3", 0263}, + {"dead_circumflex", "period", 0267}, + {"dead_circumflex", "exclam", 0246}, + {"dead_cedilla", "minus", 0254}, + {"dead_circumflex", "minus", 0257}, + {"dead_circumflex", "underscore", 0257}, + {"dead_acute", "apostrophe", 0264}, + {"dead_cedilla", "comma", 0270}, + {"dead_diaeresis", "quotedbl", 0250}, +// Accented Alphabet + {"dead_abovering", "A", 0305}, + {"dead_grave", "A", 0300}, + {"dead_acute", "A", 0301}, + {"dead_circumflex", "A", 0302}, + {"dead_tilde", "A", 0303}, + {"dead_diaeresis", "A", 0304}, + {"dead_abovering", "a", 0345}, + {"dead_grave", "a", 0340}, + {"dead_acute", "a", 0341}, + {"dead_circumflex", "a", 0342}, + {"dead_tilde", "a", 0343}, + {"dead_diaeresis", "a", 0344}, + {"dead_cedilla", "C", 0307}, + {"dead_cedilla", "c", 0347}, + {"dead_grave", "E", 0310}, + {"dead_acute", "E", 0311}, + {"dead_circumflex", "E", 0312}, + {"dead_diaeresis", "E", 0313}, + {"dead_grave", "e", 0350}, + {"dead_acute", "e", 0351}, + {"dead_circumflex", "e", 0352}, + {"dead_diaeresis", "e", 0353}, + {"dead_grave", "I", 0314}, + {"dead_acute", "I", 0315}, + {"dead_circumflex", "I", 0316}, + {"dead_diaeresis", "I", 0317}, + {"dead_grave", "i", 0354}, + {"dead_acute", "i", 0355}, + {"dead_circumflex", "i", 0356}, + {"dead_diaeresis", "i", 0357}, + {"dead_tilde", "N", 0321}, + {"dead_tilde", "n", 0361}, + {"dead_grave", "O", 0322}, + {"dead_acute", "O", 0323}, + {"dead_circumflex", "O", 0324}, + {"dead_tilde", "O", 0325}, + {"dead_diaeresis", "O", 0326}, + {"dead_grave", "o", 0362}, + {"dead_acute", "o", 0363}, + {"dead_circumflex", "o", 0364}, + {"dead_tilde", "o", 0365}, + {"dead_diaeresis", "o", 0366}, + {"dead_grave", "U", 0331}, + {"dead_acute", "U", 0332}, + {"dead_circumflex", "U", 0333}, + {"dead_doubleacute", "U", 0334}, + {"dead_diaeresis", "U", 0334}, + {"dead_grave", "u", 0371}, + {"dead_acute", "u", 0372}, + {"dead_circumflex", "u", 0373}, + {"dead_doubleacute", "u", 0374}, + {"dead_diaeresis", "u", 0374}, + {"dead_acute", "Y", 0335}, + {"dead_acute", "y", 0375}, + {"dead_diaeresis", "y", 0377}, +// Useful for portuguese language + {"dead_acute", "C", 0307}, + {"dead_acute", "c", 0347}, + {"","",0000} +}; + +}