Tomotaka SUWA
t-suw****@users*****
2007年 6月 14日 (木) 21:00:17 JST
Index: AquaSKK/AsciiConversionMode.cpp
diff -u AquaSKK/AsciiConversionMode.cpp:1.10 AquaSKK/AsciiConversionMode.cpp:1.11
--- AquaSKK/AsciiConversionMode.cpp:1.10 Sat Feb 3 13:04:21 2007
+++ AquaSKK/AsciiConversionMode.cpp Thu Jun 14 21:00:16 2007
@@ -1,5 +1,5 @@
/*
- $Id: AsciiConversionMode.cpp,v 1.10 2007/02/03 04:04:21 t-suwa Exp $
+ $Id: AsciiConversionMode.cpp,v 1.11 2007/06/14 12:00:16 t-suwa Exp $
MacOS X implementation of the SKK input method.
@@ -33,7 +33,8 @@
AsciiConversionMode::AsciiConversionMode(ParentInputMode& src)
:ChildInputMode(src),
- word_register_mode(NULL),
+ word_register_mode(0),
+ old_word_register_mode(0),
status(STATUS_NULL),
show_cands_window_after_Nth_cand(5),
completion_mode(false),
@@ -42,9 +43,8 @@
}
AsciiConversionMode::~AsciiConversionMode() {
- if(word_register_mode) {
- delete word_register_mode;
- }
+ delete word_register_mode;
+ delete old_word_register_mode;
}
void AsciiConversionMode::start() {
@@ -61,12 +61,12 @@
bool AsciiConversionMode::handleInputChar(SKKChar skkchar) {
if(word_register_mode) {
word_register_mode->handleInput(skkchar);
- return false; // WordRegisterMode::handleInput()ª½ðÔ»¤Æàmè͵ȢB
+ return false; // WordRegisterMode::handleInput()ãä½ãè¿ããã¨ã確å®ã¯ããªãã
}
if(SKKConfig::AbbrevNextKey() == skkchar) {
if(status == STATUS_WHITE && completion_mode) {
- // ÌóâÖBÅãÜÅsÁ½çÅÉßéB
+ // 次ã®åè£ã¸ãæå¾ã¾ã§è¡ã£ããæåã«æ»ãã
current_completion_index++;
if (current_completion_index >= completions.size()) {
current_completion_index = 0;
@@ -78,7 +78,7 @@
if(SKKConfig::AbbrevPrevKey() == skkchar) {
if(status == STATUS_WHITE && completion_mode) {
- // OÌóâÖBÅÜÅsÁ½çÅãÉßéB
+ // åã®åè£ã¸ãæåã¾ã§è¡ã£ããæå¾ã«æ»ãã
if(current_completion_index == 0) {
current_completion_index = completions.size() - 1;
} else {
@@ -89,14 +89,14 @@
}
}
- // tab,sIh,J}ÈOÌ¢©È鶪üͳêÄàâ®[hð²¯éB
+ // tab,ããªãªã,ã«ã³ã以å¤ã®ãããªãæåãå
¥åããã¦ãè£å®ã¢ã¼ããæããã
completion_mode = false;
if(SKKConfig::ToggleKanaKey() == skkchar) {
if(status == STATUS_BLACK || status == STATUS_BLACK_WITH_WINDOW) {
- // »ÝÌóâðmèB
- // 1) ½¼¼[hÈçSpм¼[hÖ
- // 2) »êÈOÈç½¼¼[hÖ
+ // ç¾å¨ã®åè£ã確å®ã
+ // 1) 平仮åã¢ã¼ããªãå
¨è§çä»®åã¢ã¼ãã¸
+ // 2) ãã以å¤ãªã平仮åã¢ã¼ãã¸
parent->setEnabledKanjiMode(false);
if(parent->isHiraganaInputMode()) {
parent->goZenKataInputMode();
@@ -109,7 +109,7 @@
if(SKKConfig::PrevKouhoKey() == skkchar) {
if(status == STATUS_BLACK) {
- // êÂOÌóâÖBÅÌóâ¾Á½ç¤[hÖßéB
+ // ä¸ã¤åã®åè£ã¸ãæåã®åè£ã ã£ããâ½ã¢ã¼ãã¸æ»ãã
if(current_candidate_index > 0) {
current_candidate_index--;
} else {
@@ -118,17 +118,17 @@
return false;
}
else if(status == STATUS_BLACK_WITH_WINDOW) {
- // deleteª³ê½àÌÆ©ô·
+ // deleteãæ¼ããããã®ã¨è¦åã
handleBackSpace();
return false;
}
- // »êÈOÈçfÊè
+ // ãã以å¤ãªãç´ éã
}
if(SKKConfig::PurgeFromJisyoKey() == skkchar) {
if(status == STATUS_BLACK) {
- // ívvgðo·B±ÌÏ·ªÀÍ[U[«ÉÚÁĢȩÁ½ÆµÄà
- // Ê|ÈÌÅ»Ìðí´í´mFµÈ¢Bv]Åà êÎʾªB
+ // åé¤ããã³ãããåºãããã®å¤æãå®ã¯ã¦ã¼ã¶ã¼è¾æ¸ã«è¼ã£ã¦ããªãã£ãã¨ãã¦ã
+ // é¢åãªã®ã§ãã®äºããããã確èªããªããè¦æã§ãããã°å¥ã ãã
status = STATUS_PROMPT;
prompt_type = PROMPT_DELETE_FROM_USER_DIC;
prompt_input.clear();
@@ -144,7 +144,7 @@
if(SKKConfig::ToggleKatakanaKey() == skkchar) {
if(status == STATUS_WHITE) {
- // ¼ppðSppÉÏ·µÄ©çmèµÄI¹
+ // åè§è±æ°åãå
¨è§è±æ°åã«å¤æãã¦ãã確å®ãã¦çµäº
parent->fix(ZenAscInputMode::convert(index));
parent->setEnabledAsciiConversionMode(false);
@@ -153,9 +153,9 @@
return false;
}
if(status == STATUS_BLACK || status == STATUS_BLACK_WITH_WINDOW) {
- // »ÝÌóâðmèµÄ©çA
- // 1) ¼pм¼[hÈç½¼¼[hÖ
- // 2) »êÈOÈç¼pм¼¼¼[hÖ
+ // ç¾å¨ã®åè£ã確å®ãã¦ããã
+ // 1) åè§çä»®åã¢ã¼ããªã平仮åã¢ã¼ãã¸
+ // 2) ãã以å¤ãªãåè§çä»®åä»®åã¢ã¼ãã¸
parent->setEnabledAsciiConversionMode(false);
if (parent->isHanKataInputMode()) {
parent->goHiraganaInputMode();
@@ -167,12 +167,12 @@
}
if(SKKConfig::KakuteiKey() == skkchar) {
- return true; // mèÌÝ
+ return true; // 確å®ã®ã¿
}
if(SKKConfig::LatinModeKey() == skkchar || SKKConfig::Jisx0208LatinModeKey() == skkchar) {
if(status == STATUS_BLACK) {
- // »ê¼êðmèµÄ¼p/Spp[hÖB
+ // ããããã確å®ãã¦åè§/å
¨è§è±æ°åã¢ã¼ãã¸ã
if(SKKConfig::LatinModeKey() == skkchar) {
parent->goHanAscInputMode();
} else {
@@ -180,7 +180,7 @@
}
return true;
}
- // ¤[hâóâIðæÊÈçfÊèB
+ // â½ã¢ã¼ããåè£é¸æç»é¢ãªãç´ éãã
}
if(SKKConfig::SetHenkanPointKey() == skkchar) {
@@ -201,67 +201,67 @@
if(SKKConfig::NextKouhoKey() == skkchar) {
if(status == STATUS_WHITE) {
if(index.length() == 0) {
- // I¹
+ // çµäº
parent->setEnabledAsciiConversionMode(false);
parent->display(CppCFString());
initialize();
return false;
}
- // IÉâ¢í¹
+ // é¯ã«åãåãã
askServerTheCandidates();
if(candidates.size() > 0) {
- // ó⪶ݵ½B¥[hÖB
+ // åè£ãåå¨ãããâ¼ã¢ã¼ãã¸ã
status = STATUS_BLACK;
- current_candidate_index = 0; // ÅÌóâB
+ current_candidate_index = 0; // æåã®åè£ã
} else {
- // êÂàó⪳¢BPêo^JnB
+ // ä¸ã¤ãåè£ãç¡ããåèªç»é²éå§ã
startRegisteringWord();
}
}
else if(status == STATUS_BLACK) {
- // ÌóâÖ
+ // 次ã®åè£ã¸
current_candidate_index++;
- if(current_candidate_index >= candidates.size()) { // IíèÜÅsÁ½çPêo^JnB
+ if(current_candidate_index >= candidates.size()) { // çµããã¾ã§è¡ã£ããåèªç»é²éå§ã
startRegisteringWord();
}
else if(current_candidate_index >= show_cands_window_after_Nth_cand - 1) {
- // ±êÈ~Ì[e[VÅóâIðEChEð\¦·éB
+ // ãã以éã®ãã¼ãã¼ã·ã§ã³ã§åè£é¸æã¦ã¤ã³ãã¦ã表示ããã
status = STATUS_BLACK_WITH_WINDOW;
openCandidatesWindow();
}
}
else if(status == STATUS_BLACK_WITH_WINDOW) {
if(candidates_window_current_frame < candidates_window_num_of_frames - 1) {
- // ÅãÌt[ÅȯêÎAÌt[ÖsB
+ // æå¾ã®ãã¬ã¼ã ã§ãªããã°ã次ã®ãã¬ã¼ã ã¸è¡ãã
goToNextCandidatesFrame();
} else {
- // ÅãÌt[¾Á½çAPêo^ðJnB
+ // æå¾ã®ãã¬ã¼ã ã ã£ãããåèªç»é²ãéå§ã
closeCandidatesWindow();
startRegisteringWord();
}
}
} else {
if(status == STATUS_WHITE) {
- // indexɽ¾ÇÁB
+ // indexã«ãã 追å ã
index += skkchar;
}
else if(status == STATUS_BLACK) {
- // »ÝÌóâðmèµÄðp±
+ // ç¾å¨ã®åè£ã確å®ãã¦å¦çãç¶ç¶
parent->fix(getStringToFix());
return parent->handleInput(skkchar);
}
else if(status == STATUS_BLACK_WITH_WINDOW) {
- // asdfjkli1t[½èÌóâª7æèȯêαêà¸éBj̶ŠêÎ
- // »Ìóâð½¾mè·éB
- // »¤ÅȯêλÝÌóâð½¾mè·éB
+ // asdfjklï¼1ãã¬ã¼ã å½ããã®åè£æ°ã7ããå°ãªããã°ãããæ¸ããï¼ã®æåã§ããã°
+ // ãã®åè£ããã 確å®ããã
+ // ããã§ãªããã°ç¾å¨ã®åè£ããã 確å®ããã
int cand_index = CppCFString("asdfjkl").substring(0, candidates_window_cands_per_frame).indexOf(skkchar);
if(cand_index != -1) {
unsigned new_index = current_candidate_index + cand_index;
if(new_index < candidates.size()) {
- // ±ÌCfBbNXª³êéÈçmèB
+ // ãã®ã¤ã³ãã£ãã¯ã¹ã許ããããªã確å®ã
current_candidate_index = new_index;
return true;
}
@@ -269,7 +269,7 @@
return false;
}
else if(status == STATUS_PROMPT) {
- // »ÌÜÜprompt_inputÉÇÁB
+ // ãã®ã¾ã¾prompt_inputã«è¿½å ã
prompt_input += skkchar;
}
}
@@ -284,7 +284,7 @@
bool AsciiConversionMode::handleBackSpace() {
if(word_register_mode) {
word_register_mode->handleBackSpace();
- return true; // WordRegisterMode::handleBackSpace()ª½ðÔ»¤Æà{¶ÍÁ³È¢B
+ return true; // WordRegisterMode::handleBackSpace()ãä½ãè¿ããã¨ãæ¬æã¯æ¶ããªãã
}
if(status == STATUS_NULL) {
@@ -292,32 +292,32 @@
}
if(status == STATUS_WHITE) {
- // indexªóÈçú»µÄI¹
- // óÅȯêÎindexÌÅã̶ðÁ·B
+ // indexã空ãªãåæåãã¦çµäº
+ // 空ã§ãªããã°indexã®æå¾ã®æåãæ¶ãã
if(index.length() == 0) {
parent->setEnabledAsciiConversionMode(false);
parent->display(CppCFString());
initialize();
} else {
- completion_mode = false; // â®[h¾Á½êÍâ®[hð²¯éB
+ completion_mode = false; // è£å®ã¢ã¼ãã ã£ãå ´åã¯è£å®ã¢ã¼ããæããã
index.eraseLast(1);
}
}
else if(status == STATUS_BLACK) {
- // »ÝÌóâðmèµÄê¶í
+ // ç¾å¨ã®åè£ã確å®ãã¦ä¸æååé¤
CppCFString str(getStringToFix());
str.eraseLast(1);
parent->fix(str);
parent->display(CppCFString());
}
else if(status == STATUS_BLACK_WITH_WINDOW) {
- // ÅÌt[ÈçA¥[hÖßé
- // »¤ÅȯêÎOÌt[ÖB
+ // æåã®ãã¬ã¼ã ãªããâ¼ã¢ã¼ãã¸æ»ã
+ // ããã§ãªããã°åã®ãã¬ã¼ã ã¸ã
if(candidates_window_current_frame == 0) {
- // EChEðJOÉß·
+ // ã¦ã¤ã³ãã¦ãéãåã«æ»ã
current_candidate_index = show_cands_window_after_Nth_cand - 2;
- // EChEð¶éB
+ // ã¦ã¤ã³ãã¦ãéããã
closeCandidatesWindow();
status = STATUS_BLACK;
@@ -326,7 +326,7 @@
}
}
else if(status == STATUS_PROMPT) {
- // prompt_inputªóÅȯêÎÅã̶ðÁ·B
+ // prompt_inputã空ã§ãªããã°æå¾ã®æåãæ¶ãã
if(prompt_input.length() > 0) {
prompt_input.eraseLast(1);
}
@@ -339,23 +339,23 @@
word_register_mode->handleReturn();
if(word_register_mode) {
- // handleReturn©çwordRegistrationFinishedªÄÎê½çword_register_modeÍjü³êé½ßB
+ // handleReturnããwordRegistrationFinishedãå¼ã°ãããword_register_modeã¯ç ´æ£ãããããã
word_register_mode->redisplay();
}
- return true; // íÉtrueðÔ·B
+ return true; // 常ã«trueãè¿ãã
}
if(status == STATUS_PROMPT) {
switch(prompt_type) {
case PROMPT_DELETE_FROM_USER_DIC: {
- // prompt_inputªyesÈçíµÄSTATUS_WHITEÉßéB
- // »êÈOÈçSTATUS_BLACKÉßéB
+ // prompt_inputãyesãªãåé¤ãã¦STATUS_WHITEã«æ»ãã
+ // ãã以å¤ãªãSTATUS_BLACKã«æ»ãã
if(prompt_input == "yes") {
- // í
+ // åé¤
makeServerRemoveWord();
- // STATUS_WHITEÖ
+ // STATUS_WHITEã¸
status = STATUS_WHITE;
} else {
status = STATUS_BLACK;
@@ -370,8 +370,8 @@
}
if(ClientConfiguration::theInstance().isSkkEggLikeNewline()) {
- // skk-egglike-newline[hÈçA©ÍÅm賹ĩçú»µÄtrueðÔ·B
- // IÉM
+ // skk-egglike-newlineã¢ã¼ããªããèªåã§ç¢ºå®ããã¦ããåæåãã¦trueãè¿ãã
+ // é¯ã«éä¿¡
parent->fix(getStringToFix());
return true;
} else {
@@ -381,15 +381,15 @@
bool AsciiConversionMode::handleArrow(SKKChar skkchar) {
if(word_register_mode) {
- return word_register_mode->handleArrow(skkchar); // Ï÷
+ return word_register_mode->handleArrow(skkchar); // å§è²
}
if(status == STATUS_BLACK || status == STATUS_BLACK_WITH_WINDOW) {
- // »ÝÌóâðmè·é
+ // ç¾å¨ã®åè£ã確å®ãã
parent->fix(getStringToFix());
}
- // AXL[Ï·[hðI¹·éB
+ // ã¢ã¹ãã¼å¤æã¢ã¼ããçµäºããã
parent->setEnabledAsciiConversionMode(false);
initialize();
return false;
@@ -400,18 +400,18 @@
return word_register_mode->handleCg();
}
- // ½¼¼Cvbg[hÌhandleCgðÄÑAgetStringToFix()àÄÔªAÄÔ¾¯B
+ // 平仮åã¤ã³ãããã¢ã¼ãã®handleCgãå¼ã³ãgetStringToFix()ãå¼ã¶ããå¼ã¶ã ãã
parent->getCurrentInputMode().handleCg();
parent->getCurrentInputMode().getStringToFix();
if(status == STATUS_WHITE) {
- // AXL[Ï·[hI¹
+ // ã¢ã¹ãã¼å¤æã¢ã¼ãçµäº
parent->setEnabledAsciiConversionMode(false);
initialize();
}
else if(status == STATUS_BLACK || status == STATUS_BLACK_WITH_WINDOW) {
- // okuriªóÈçSTATUS_WHITE_ROOTÖB»¤ÅȯêÎSTATUS_WHITE_OKURIÖB
- // EChEªJ©êÄ¢½ç¶éB
+ // okuriã空ãªãSTATUS_WHITE_ROOTã¸ãããã§ãªããã°STATUS_WHITE_OKURIã¸ã
+ // ã¦ã¤ã³ãã¦ãéããã¦ãããéããã
if(status == STATUS_BLACK_WITH_WINDOW) {
closeCandidatesWindow();
}
@@ -436,17 +436,17 @@
if(status == STATUS_WHITE) {
if(completion_mode) {
- // ÌóâÖBÅãÜÅsÁ½çÅÉßéB
+ // 次ã®åè£ã¸ãæå¾ã¾ã§è¡ã£ããæåã«æ»ãã
current_completion_index++;
if(current_completion_index >= completions.size()) {
current_completion_index = 0;
}
index = completions[current_completion_index];
} else {
- // IÉâ¢í¹éB
+ // é¯ã«åãåãããã
askServerTheCompletions();
- // â®Ìó⪠êÎâ®JnB³¯êν๸ÉßéB
+ // è£å®ã®åè£ãããã°è£å®éå§ãç¡ããã°ä½ãããã«æ»ãã
if(completions.size() > 0) {
completion_mode = true;
index = completions[0];
@@ -461,72 +461,78 @@
void AsciiConversionMode::terminate() {
if(word_register_mode) {
word_register_mode->terminate();
+ resetRegistrationMode();
}
- parent->fix(getStringToFix()); // mè·é
+ parent->fix(getStringToFix()); // 確å®ãã
parent->setEnabledAsciiConversionMode(false);
initialize();
}
+// ç´åã®åèªç»é²ã¢ã¼ããåé¤ããç¾å¨ã®åèªç»é²ã¢ã¼ããéé¿ãã
+void AsciiConversionMode::resetRegistrationMode() {
+ delete old_word_register_mode;
+ old_word_register_mode = word_register_mode;
+ word_register_mode = 0;
+}
+
void AsciiConversionMode::wordRegistrationFinished() {
if(word_register_mode) {
CppCFString content = word_register_mode->getContent();
if(content.length() > 0) {
- // IÉM
+ // é¯ã«éä¿¡
sendWordToServerToRegister(index,content);
- // mè
+ // 確å®
parent->fix(content);
- // I¹
+ // çµäº
parent->setEnabledAsciiConversionMode(false);
initialize();
} else {
status = STATUS_WHITE;
}
- delete word_register_mode;
- word_register_mode = NULL;
+ resetRegistrationMode();
parent->updatePencilMenuIcon();
}
}
void AsciiConversionMode::wordRegistrationCanceled() {
- delete word_register_mode;
- word_register_mode = NULL;
+ resetRegistrationMode();
parent->updatePencilMenuIcon();
if(status == STATUS_WHITE) {
// do nothing
}
else if(status == STATUS_BLACK) {
- current_candidate_index = candidates.size() - 1; // ÅãÌóâÖB
+ current_candidate_index = candidates.size() - 1; // æå¾ã®åè£ã¸ã
}
else if(status == STATUS_BLACK_WITH_WINDOW) {
- // EChEðJ¢ÄÅãÌt[ðo·
- current_candidate_index = show_cands_window_after_Nth_cand - 1; // goToNextCandidatesFrame()ŸêéB
+ // ã¦ã¤ã³ãã¦ãéãã¦æå¾ã®ãã¬ã¼ã ãåºã
+ current_candidate_index = show_cands_window_after_Nth_cand - 1; // goToNextCandidatesFrame()ã§ãããã
openCandidatesWindow(OpenReverse);
}
}
CppCFString AsciiConversionMode::getStringToDisplay() {
if(word_register_mode) {
- // ³³¹éB³àÈ¢ÆÜpWordRegisterModeªÝèµ½¶ð׵ĵܤB
+ // ç¡è¦ãããããããªãã¨æè§WordRegisterModeãè¨å®ããæåãæ½°ãã¦ãã¾ãã
return CppCFString().append(kIgnoreThis);
}
if(status == STATUS_WHITE) {
- // ¤index
+ // â½index
return CppCFString().append(0x25bd).append(index);
}
else if(status == STATUS_BLACK || status == STATUS_BLACK_WITH_WINDOW) {
CppCFString str(convertNumeric(numconv_, candidates[current_candidate_index]));
- // ¥»ÝÌóâ
+ // â¼ç¾å¨ã®åè£
return CppCFString().append(0x25bc).append(str);
}
else if(status == STATUS_PROMPT) {
- // [vvg][üÍ]
+ // [ããã³ãã][å
¥å]
return CppCFString('[').append(prompt).append("][").append(prompt_input).append(kCaret).append(']');
} else {
return CppCFString().append(kIgnoreThis);
@@ -541,24 +547,24 @@
else if(status == STATUS_BLACK) {
result = convertNumeric(numconv_, candidates[current_candidate_index]);
- // IÉM
+ // é¯ã«éä¿¡
sendCurrentCandidateToServerToRegister();
}
else if(status == STATUS_BLACK_WITH_WINDOW) {
result = convertNumeric(numconv_, candidates[current_candidate_index]);
- // IÉM
+ // é¯ã«éä¿¡
sendCurrentCandidateToServerToRegister();
- // EChEð¶éB
+ // ã¦ã¤ã³ãã¦ãéããã
closeCandidatesWindow();
}
else /* if (status == STATUS_NULL) */ {
result = CppCFString().append(kIgnoreThis);
}
- // ±êªÄÎê½Æ¢¤±ÆÍfix³ê鯢¤±ÆÈÌÅAXL[Ï·[hI¹B
- // ú»·éB
+ // ãããå¼ã°ããã¨ãããã¨ã¯fixãããã¨ãããã¨ãªã®ã§ã¢ã¹ãã¼å¤æã¢ã¼ãçµäºã
+ // åæåããã
parent->setEnabledAsciiConversionMode(false);
initialize();
@@ -580,14 +586,14 @@
str.append(index);
- // ahya@¨@-ahya
+ // ahyaãâã-ahya
CppCFData query;
query.own(str.toCFData());
current_candidate_index = 0;
::askServerTheCandidates(query, candidates);
- // lÏ·ªLø©H
+ // æ°å¤å¤æãæå¹ãï¼
if(ClientConfiguration::theInstance().useNumericConversion() &&
numconv_.Setup(index.toStdString(kCFStringEncodingUTF8))) {
CppCFString normalized(numconv_.NormalizedKey().c_str(), kCFStringEncodingUTF8);
@@ -603,7 +609,7 @@
}
void AsciiConversionMode::askServerTheCompletions() {
- // IÉqËé
+ // é¯ã«å°ãã
CppCFData cfdata_query;
cfdata_query.own(index.toCFData());
@@ -612,16 +618,16 @@
}
void AsciiConversionMode::sendCurrentCandidateToServerToRegister() {
- // IÉM
+ // é¯ã«éä¿¡
sendWordToServerToRegister(index,candidates[current_candidate_index]);
}
void AsciiConversionMode::makeServerRemoveWord() {
CppCFString query;
- // ahya ißÍßj@¨@-ahya ißÍßj
+ // ahya ï¼ï¾âï¾ï¼ãâã-ahya ï¼ï¾âï¾ï¼
query.append('-').append(index).append(SKK_MSG_DELIMITER).append(candidates[current_candidate_index]);
- // IÉn·
+ // é¯ã«æ¸¡ã
CppCFData cfdata_query;
cfdata_query.own(query.toCFData());
::makeServerRemoveWord(cfdata_query);
@@ -645,35 +651,35 @@
}
void AsciiConversionMode::goToNextCandidatesFrame() {
- // EChEID(UInt16)ðÜÞCFDatað쬵AIÖéB
+ // ã¦ã¤ã³ãã¦ID(UInt16)ãå«ãCFDataã使ããé¯ã¸éãã
CppCFData reply(ServerConnectionFactory::theInstance().newConnection().
send(kSKKCandidatesWindowNext, newCFDataRefWithWindowID(candidates_window_id),
kAquaSKKServerRunLoopMode));
- // »ÝÌt[ÔðCNg
+ // ç¾å¨ã®ãã¬ã¼ã çªå·ãã¤ã³ã¯ãªã¡ã³ã
++ candidates_window_current_frame;
- // »ÝÌóâÔðt[½èÌóâªâ·B
+ // ç¾å¨ã®åè£çªå·ããã¬ã¼ã å½ããã®åè£æ°åå¢ããã
current_candidate_index += candidates_window_cands_per_frame;
candidates_window_cands_per_frame = CFSwapInt16BigToHost(reply.getUInt16(0));
}
void AsciiConversionMode::goToPrevCandidatesFrame() {
- // EChEID(UInt16)ðÜÞCFDatað쬵AIÖéB
+ // ã¦ã¤ã³ãã¦ID(UInt16)ãå«ãCFDataã使ããé¯ã¸éãã
CppCFData reply(ServerConnectionFactory::theInstance().newConnection().
send(kSKKCandidatesWindowPrev, newCFDataRefWithWindowID(candidates_window_id),
kAquaSKKServerRunLoopMode));
- // »ÝÌt[ÔðfNg
+ // ç¾å¨ã®ãã¬ã¼ã çªå·ããã¯ãªã¡ã³ã
-- candidates_window_current_frame;
- // »ÝÌóâÔðt[½èÌó⪸ç·B
+ // ç¾å¨ã®åè£çªå·ããã¬ã¼ã å½ããã®åè£æ°åæ¸ããã
candidates_window_cands_per_frame = CFSwapInt16BigToHost(reply.getUInt16(0));
current_candidate_index -= candidates_window_cands_per_frame;
}
void AsciiConversionMode::closeCandidatesWindow() {
- // EChEID(UInt16)ðÜÞCFDatað쬵AIÖéB
+ // ã¦ã¤ã³ãã¦ID(UInt16)ãå«ãCFDataã使ããé¯ã¸éãã
ServerConnectionFactory::theInstance().newConnection().
send(kSKKCloseCandidatesWindow, newCFDataRefWithWindowID(candidates_window_id));
}
Index: AquaSKK/AsciiConversionMode.h
diff -u AquaSKK/AsciiConversionMode.h:1.5 AquaSKK/AsciiConversionMode.h:1.6
--- AquaSKK/AsciiConversionMode.h:1.5 Sat Jun 3 10:23:18 2006
+++ AquaSKK/AsciiConversionMode.h Thu Jun 14 21:00:16 2007
@@ -1,5 +1,5 @@
/*
- $Id: AsciiConversionMode.h,v 1.5 2006/06/03 01:23:18 t-suwa Exp $
+ $Id: AsciiConversionMode.h,v 1.6 2007/06/14 12:00:16 t-suwa Exp $
MacOS X implementation of the SKK input method.
@@ -38,35 +38,36 @@
NumericConverter numconv_;
protected:
- static const int STATUS_NULL = 0; // AXL[Ï·[hÉÈÁĢȢóÔBæªÉ¤à¥à³¢B
- static const int STATUS_WHITE = 1; // ¤[h
- static const int STATUS_BLACK = 2; // ¥[h
- static const int STATUS_BLACK_WITH_WINDOW = 3; // ¥[hÅAóâIðEChEªJ¢Ä¢éB
- static const int STATUS_PROMPT = 4; // vvgðoµÄ¢éB
+ static const int STATUS_NULL = 0; // ã¢ã¹ãã¼å¤æã¢ã¼ãã«ãªã£ã¦ããªãç¶æ
ãå
é ã«â½ãâ¼ãç¡ãã
+ static const int STATUS_WHITE = 1; // â½ã¢ã¼ã
+ static const int STATUS_BLACK = 2; // â¼ã¢ã¼ã
+ static const int STATUS_BLACK_WITH_WINDOW = 3; // â¼ã¢ã¼ãã§ãåè£é¸æã¦ã¤ã³ãã¦ãéãã¦ããã
+ static const int STATUS_PROMPT = 4; // ããã³ãããåºãã¦ããã
- WordRegisterMode* word_register_mode; // NULLÅÈ¢ÍPêo^[hªN®B
+ WordRegisterMode* word_register_mode; // NULLã§ãªãæã¯åèªç»é²ã¢ã¼ããèµ·åä¸ã
+ WordRegisterMode* old_word_register_mode; // ç´åã¾ã§æå¹ã ã£ãåèªç»é²ã¢ã¼ã
int status;
- CppCFString index; // ©oµê
+ CppCFString index; // è¦åºãèª
- static const int PROMPT_DELETE_FROM_USER_DIC = 1; // [U[«©çPêðí
- int prompt_type; // vvgÌíÞB
- CppCFString prompt; // vvg
- CppCFString prompt_input; // vvgÉ[U[ªü͵½¶ñ
-
- std::vector<CppCFString> candidates; // SÄÌóâ
- unsigned current_candidate_index; // »ÝÌóâÔ
-
- unsigned show_cands_window_after_Nth_cand; // ½ÂÚÈ~ÌóâðóâIðEChEÉ\¦·é©B
-
- unsigned candidates_window_id; // statusªSTATUS_BLACK_WITH_WINDOWÌÆ«AóâIðEChEÌIDB
- unsigned candidates_window_current_frame; // óâIðEChEÌ»ÝÌt[
- unsigned candidates_window_cands_per_frame; // óâIðEChEÌ1t[½èÌóâ
- unsigned candidates_window_num_of_frames; // óâIðEChEÌt[
-
- bool completion_mode; // ©oµêâ®[hB±Ì[hÅÍsIhÆJ}ªâ®ÌìÉgíêéB
- std::vector<CppCFString> completions; // â®Ìóâ
- unsigned current_completion_index; // »ÝÌâ®ÌóâÔ
+ static const int PROMPT_DELETE_FROM_USER_DIC = 1; // ã¦ã¼ã¶ã¼è¾æ¸ããåèªãåé¤
+ int prompt_type; // ããã³ããã®ç¨®é¡ã
+ CppCFString prompt; // ããã³ãã
+ CppCFString prompt_input; // ããã³ããã«ã¦ã¼ã¶ã¼ãå
¥åããæåå
+
+ std::vector<CppCFString> candidates; // å
¨ã¦ã®åè£
+ unsigned current_candidate_index; // ç¾å¨ã®åè£çªå·
+
+ unsigned show_cands_window_after_Nth_cand; // ä½åç®ä»¥éã®åè£ãåè£é¸æã¦ã¤ã³ãã¦ã«è¡¨ç¤ºãããã
+
+ unsigned candidates_window_id; // statusãSTATUS_BLACK_WITH_WINDOWã®ã¨ããåè£é¸æã¦ã¤ã³ãã¦ã®IDã
+ unsigned candidates_window_current_frame; // åè£é¸æã¦ã¤ã³ãã¦ã®ç¾å¨ã®ãã¬ã¼ã
+ unsigned candidates_window_cands_per_frame; // åè£é¸æã¦ã¤ã³ãã¦ã®1ãã¬ã¼ã å½ããã®åè£æ°
+ unsigned candidates_window_num_of_frames; // åè£é¸æã¦ã¤ã³ãã¦ã®ãã¬ã¼ã æ°
+
+ bool completion_mode; // è¦åºãèªè£å®ã¢ã¼ãããã®ã¢ã¼ãã§ã¯ããªãªãã¨ã«ã³ããè£å®ã®æä½ã«ä½¿ãããã
+ std::vector<CppCFString> completions; // è£å®ã®åè£
+ unsigned current_completion_index; // ç¾å¨ã®è£å®ã®åè£çªå·
bool henkanModeStatus;
@@ -80,12 +81,13 @@
virtual void goToNextCandidatesFrame();
virtual void closeCandidatesWindow();
virtual void initialize();
+ virtual void resetRegistrationMode();
public:
AsciiConversionMode(class ParentInputMode& parent);
virtual ~AsciiConversionMode();
- virtual void start(); // ±êªÄÎê鯤[hÉÈéB
+ virtual void start(); // ãããå¼ã°ããã¨â½ã¢ã¼ãã«ãªãã
virtual bool handleInput(SKKChar skkchar);
virtual bool handleBackSpace();
virtual bool handleReturn();
@@ -97,8 +99,8 @@
virtual CppCFString getStringToDisplay();
virtual CppCFString getStringToFix();
- virtual void wordRegistrationFinished(); // WordRegisterModeêpB
- virtual void wordRegistrationCanceled(); // WordRegisterModeêpB
+ virtual void wordRegistrationFinished(); // WordRegisterModeå°ç¨ã
+ virtual void wordRegistrationCanceled(); // WordRegisterModeå°ç¨ã
};
#endif // INC__AsciiConversionMode__
Index: AquaSKK/ChangeLog
diff -u AquaSKK/ChangeLog:1.41 AquaSKK/ChangeLog:1.42
--- AquaSKK/ChangeLog:1.41 Tue Jun 12 23:25:08 2007
+++ AquaSKK/ChangeLog Thu Jun 14 21:00:16 2007
@@ -1,3 +1,12 @@
+2007-06-14 Tomotaka SUWA <t.suw****@mac*****>
+
+ * *ConversionMode.*: åèªç»é²ã¢ã¼ããå®å
¨ã«åé¤ããããã«ä¿®æ£ã
+
+ * KanjiConversionMode.*:
+ (1) è£å®çµæãç¾å¨ã®æå種å¥ã¨åãããããã«ä¿®æ£
+ (2) åèªç»é²æã«è¦åºãèªããã²ãããªãã«æ£è¦åãããªãä¸å
·åãä¿®æ£
+ (3) åèªç»é²åã®å
¥åã¢ã¼ãã復å
ãããªãä¸å
·åãä¿®æ£
+
2007-06-12 Tomotaka SUWA <t.suw****@mac*****>
* ServerMessageReceiver.* (registerToggleEntry): ãã°ã«å¤æã®çµæã
Index: AquaSKK/KanjiConversionMode.cpp
diff -u AquaSKK/KanjiConversionMode.cpp:1.12 AquaSKK/KanjiConversionMode.cpp:1.13
--- AquaSKK/KanjiConversionMode.cpp:1.12 Tue Jun 12 23:25:08 2007
+++ AquaSKK/KanjiConversionMode.cpp Thu Jun 14 21:00:16 2007
@@ -1,5 +1,5 @@
/*
- $Id: KanjiConversionMode.cpp,v 1.12 2007/06/12 14:25:08 t-suwa Exp $
+ $Id: KanjiConversionMode.cpp,v 1.13 2007/06/14 12:00:16 t-suwa Exp $
MacOS X implementation of the SKK input method.
@@ -56,18 +56,19 @@
KanjiConversionMode::KanjiConversionMode(ParentInputMode& src)
:ChildInputMode(src),
- word_register_mode(NULL),
+ word_register_mode(0),
+ old_word_register_mode(0),
status(STATUS_NULL),
show_cands_window_after_Nth_cand(5),
completion_mode(false),
- henkanModeStatus(false) {
-
+ henkanModeStatus(false),
+ priorInputMode_(Hirakana) {
+ // empty
}
KanjiConversionMode::~KanjiConversionMode() {
- if(word_register_mode) {
- delete word_register_mode;
- }
+ delete word_register_mode;
+ delete old_word_register_mode;
}
bool KanjiConversionMode::handleInput(SKKChar skkchar) {
@@ -477,15 +478,25 @@
void KanjiConversionMode::startRegisteringWord() {
CppCFString register_title;
- if (okuri.length() > 0) {
+
+ if(okuri.length() > 0) {
register_title.append(root).append('*').append(okuri);
- }
- else {
+ } else {
register_title = root;
}
- register_title = HiraganaInputMode::convert(register_title); // çä»®åã¯å¹³ä»®åã«å¤æ
-
- word_register_mode = new WordRegisterMode(*this,register_title);
+
+ // ç¾å¨ã®å
¥åã¢ã¼ããä¿åãã¦ãã
+ if(parent->isHiraganaInputMode()) {
+ priorInputMode_ = Hirakana;
+ }
+ if(parent->isZenKataInputMode()) {
+ priorInputMode_ = Katakana;
+ }
+ if(parent->isHanKataInputMode()) {
+ priorInputMode_ = Jisx0201Kana;
+ }
+
+ word_register_mode = new WordRegisterMode(*this, HiraganaInputMode::convert(register_title));
word_register_mode->redisplay();
word_register_mode->updatePencilMenuIcon();
}
@@ -737,8 +748,7 @@
if (word_register_mode) {
word_register_mode->terminate();
- delete word_register_mode;
- word_register_mode = NULL;
+ resetRegistrationMode();
}
// currenInputModeãterminateãã¦ãrootã«getStringToFix()ã®æ»ãå¤ã追å ããã
@@ -753,6 +763,30 @@
initialize();
}
+// ç´åã®åèªç»é²ã¢ã¼ããåé¤ããç¾å¨ã®åèªç»é²ã¢ã¼ããéé¿ãã
+void KanjiConversionMode::resetRegistrationMode() {
+ delete old_word_register_mode;
+ old_word_register_mode = word_register_mode;
+ word_register_mode = 0;
+}
+
+// åèªç»é²åã®å
¥åã¢ã¼ãã復å
ãã
+void KanjiConversionMode::restoreInputMode() {
+ switch(priorInputMode_) {
+ case Hirakana:
+ parent->goHiraganaInputMode();
+ break;
+ case Katakana:
+ parent->goZenKataInputMode();
+ break;
+ case Jisx0201Kana:
+ parent->goHanKataInputMode();
+ break;
+ }
+
+ parent->updatePencilMenuIcon();
+}
+
void KanjiConversionMode::wordRegistrationFinished() {
if(word_register_mode) {
CppCFString content = word_register_mode->getContent();
@@ -760,15 +794,16 @@
// é¯ã«éä¿¡ã
if(okuri.length() > 0) {
if(SKKConfig::UseKanaToOkuri()) {
-#ifdef DEBUG
- cerr << "(A)OKURI-HEAD: " << okuri[0] << " - " << SKKConfig::ConvertKanaToOkuri(okuri[0]) << endl;
-#endif
- sendWordToServerToRegister(root + SKKConfig::ConvertKanaToOkuri(okuri[0]), okuri, content);
+ sendWordToServerToRegister(
+ HiraganaInputMode::convert(root) + SKKConfig::ConvertKanaToOkuri(okuri[0]),
+ HiraganaInputMode::convert(okuri), content);
} else {
- sendWordToServerToRegister(root + okuri_head, okuri, content);
+ sendWordToServerToRegister(
+ HiraganaInputMode::convert(root) + okuri_head,
+ HiraganaInputMode::convert(okuri), content);
}
} else {
- sendWordToServerToRegister(root, content);
+ sendWordToServerToRegister(HiraganaInputMode::convert(root), content);
}
// 確å®ã
@@ -785,17 +820,15 @@
}
}
- delete word_register_mode;
- word_register_mode = NULL;
- parent->updatePencilMenuIcon();
+ resetRegistrationMode();
+ restoreInputMode();
}
}
void KanjiConversionMode::wordRegistrationCanceled() {
- delete word_register_mode;
- word_register_mode = NULL;
- parent->updatePencilMenuIcon();
-
+ resetRegistrationMode();
+ restoreInputMode();
+
if (status == STATUS_WHITE_ROOT || status == STATUS_WHITE_OKURI) {
// rootã«okuriããã£ã¤ãã¦STATUS_WHITE_ROOTã¸
root += okuri;
@@ -898,9 +931,6 @@
// çä»®åã¯å¹³ä»®åã«å¤æããã
if(okuri.length() > 0) {
if(SKKConfig::UseKanaToOkuri()) {
-#ifdef DEBUG
- cerr << "(B)OKURI-HEAD: " << okuri[0] << " - " << SKKConfig::ConvertKanaToOkuri(okuri[0]) << endl;
-#endif
sendWordToServerToRegister(
HiraganaInputMode::convert(root) + SKKConfig::ConvertKanaToOkuri(okuri[0]),
HiraganaInputMode::convert(okuri),
@@ -1022,6 +1052,24 @@
current_completion_index = 0;
::askServerTheCompletions(cfdata_query, completions);
+
+ // 夿ç¨ãã¡ã³ã¯ã¿
+ struct convert {
+ static void ToZenKana(CppCFString& str) {
+ str = ZenKataInputMode::convert(str);
+ }
+ static void ToHanKana(CppCFString& str) {
+ str = HanKataInputMode::convert(str);
+ }
+ };
+
+ // ã«ã¿ã«ããåè§ã«ãã®å ´åã¯è¦åºãèªã®æå種ã夿ãã
+ if(parent->isZenKataInputMode()) {
+ std::for_each(completions.begin(), completions.end(), &convert::ToZenKana);
+ }
+ if(parent->isHanKataInputMode()) {
+ std::for_each(completions.begin(), completions.end(), &convert::ToHanKana);
+ }
}
void askServerTheCompletions(const CppCFData& query, std::vector<CppCFString>& completions) {
Index: AquaSKK/KanjiConversionMode.h
diff -u AquaSKK/KanjiConversionMode.h:1.8 AquaSKK/KanjiConversionMode.h:1.9
--- AquaSKK/KanjiConversionMode.h:1.8 Tue Jun 12 23:25:08 2007
+++ AquaSKK/KanjiConversionMode.h Thu Jun 14 21:00:16 2007
@@ -1,5 +1,5 @@
/*
- $Id: KanjiConversionMode.h,v 1.8 2007/06/12 14:25:08 t-suwa Exp $
+ $Id: KanjiConversionMode.h,v 1.9 2007/06/14 12:00:16 t-suwa Exp $
MacOS X implementation of the SKK input method.
@@ -37,6 +37,9 @@
class KanjiConversionMode: public ChildInputMode, public RegistrationStarter {
bool handleInputChar(SKKChar skkchar);
NumericConverter numconv_;
+ int priorInputMode_;
+
+ enum { Hirakana, Katakana, Jisx0201Kana };
protected:
static const int STATUS_NULL = 0; // æ¼¢å夿ã¢ã¼ãã«ãªã£ã¦ããªãç¶æ
ãå
é ã«â½ãâ¼ãç¡ãã
@@ -47,6 +50,7 @@
static const int STATUS_PROMPT = 5; // ããã³ãããåºãã¦ããã
WordRegisterMode* word_register_mode; // NULLã§ãªãæã¯åèªç»é²ã¢ã¼ããèµ·åä¸ã
+ WordRegisterMode* old_word_register_mode; // ç´åã¾ã§æå¹ã ã£ãåèªç»é²ã¢ã¼ã
int status;
CppCFString root; // éãä»®åã®ç¡ãé¨åãä¾ï¼ãéãããªããããã
@@ -85,6 +89,8 @@
virtual void goToNextCandidatesFrame();
virtual void closeCandidatesWindow();
virtual void initialize();
+ virtual void resetRegistrationMode();
+ virtual void restoreInputMode();
public:
KanjiConversionMode(class ParentInputMode& parent);