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);