Tomotaka SUWA
t-suw****@users*****
2007年 8月 16日 (木) 19:58:18 JST
Index: AquaSKK/AsciiConversionMode.cpp diff -u AquaSKK/AsciiConversionMode.cpp:1.7.2.4 AquaSKK/AsciiConversionMode.cpp:1.7.2.5 --- AquaSKK/AsciiConversionMode.cpp:1.7.2.4 Sat Feb 3 17:52:48 2007 +++ AquaSKK/AsciiConversionMode.cpp Thu Aug 16 19:58:18 2007 @@ -1,5 +1,5 @@ /* - $Id: AsciiConversionMode.cpp,v 1.7.2.4 2007/02/03 08:52:48 t-suwa Exp $ + $Id: AsciiConversionMode.cpp,v 1.7.2.5 2007/08/16 10:58:18 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,14 @@ } return true; } - // ¤[hâóâIðæÊÈçfÊèB + // â½ã¢ã¼ããåè£é¸æç»é¢ãªãç´ éãã + } + + if(SKKConfig::SetHenkanPointKey() == skkchar) { + if(status == STATUS_BLACK || status == STATUS_BLACK_WITH_WINDOW) { + parent->fix(getStringToFix()); + return parent->handleInput(skkchar); + } } if(SKKConfig::SetHenkanPointKey() == skkchar) { @@ -201,67 +208,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 +276,7 @@ return false; } else if(status == STATUS_PROMPT) { - // »ÌÜÜprompt_inputÉÇÁB + // ãã®ã¾ã¾prompt_inputã«è¿½å ã prompt_input += skkchar; } } @@ -284,7 +291,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 +299,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 +333,7 @@ } } else if(status == STATUS_PROMPT) { - // prompt_inputªóÅȯêÎÅã̶ðÁ·B + // prompt_inputã空ã§ãªããã°æå¾ã®æåãæ¶ãã if(prompt_input.length() > 0) { prompt_input.eraseLast(1); } @@ -339,23 +346,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 +377,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 +388,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 +407,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 +443,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 +468,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 +554,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 +593,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 +616,7 @@ } void AsciiConversionMode::askServerTheCompletions() { - // IÉqËé + // é¯ã«å°ãã CppCFData cfdata_query; cfdata_query.own(index.toCFData()); @@ -612,16 +625,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,45 +658,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::suspendCandidatesWindow() { - ServerConnectionFactory::theInstance().newConnection(). - send(kSKKSuspendCandidatesWindow, newCFDataRefWithWindowID(candidates_window_id)); -} - -void AsciiConversionMode::resumeCandidatesWindow() { - ServerConnectionFactory::theInstance().newConnection(). - send(kSKKResumeCandidatesWindow, newCFDataRefWithWindowID(candidates_window_id)); -} - 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.2.1 AquaSKK/AsciiConversionMode.h:1.5.2.2 --- AquaSKK/AsciiConversionMode.h:1.5.2.1 Sat Feb 3 16:53:29 2007 +++ AquaSKK/AsciiConversionMode.h Thu Aug 16 19:58:18 2007 @@ -1,5 +1,5 @@ /* - $Id: AsciiConversionMode.h,v 1.5.2.1 2007/02/03 07:53:29 t-suwa Exp $ + $Id: AsciiConversionMode.h,v 1.5.2.2 2007/08/16 10:58:18 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; @@ -78,16 +79,15 @@ virtual void openCandidatesWindow(OpenDirection mode = OpenNormal); virtual void goToPrevCandidatesFrame(); virtual void goToNextCandidatesFrame(); - virtual void suspendCandidatesWindow(); - virtual void resumeCandidatesWindow(); 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(); @@ -99,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/BIMClientServer.h diff -u AquaSKK/BIMClientServer.h:1.6.2.1 AquaSKK/BIMClientServer.h:1.6.2.2 --- AquaSKK/BIMClientServer.h:1.6.2.1 Sat Feb 3 16:53:29 2007 +++ AquaSKK/BIMClientServer.h Thu Aug 16 19:58:18 2007 @@ -1,5 +1,5 @@ /* - $Id: BIMClientServer.h,v 1.6.2.1 2007/02/03 07:53:29 t-suwa Exp $ + $Id: BIMClientServer.h,v 1.6.2.2 2007/08/16 10:58:18 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -24,29 +24,27 @@ #ifndef INC__BIMClientServer__ #define INC__BIMClientServer__ -// R|[lgÌoh¼ +// ã³ã³ãã¼ãã³ãã®ãã³ãã«å #define kIMBundleIdentifier "jp.sourceforge.AquaSKKInputMethod" -// T[o[¼ -//#define kBasicServerName "\pAquaSKKServer.app" +// ãµã¼ãã¼å #define kCSTR_SKKServerName "AquaSKKServer.app" -// T[o[|[g¼ +// ãµã¼ãã¼ãã¼ãå #define kBasicServerPortName "jp.sourceforge.AquaSKKServer" -// T[o[Ì RunLoopMode +// ãµã¼ãã¼ã® RunLoopMode #define kAquaSKKServerRunLoopMode CFSTR("AquaSKK::ServerRunLoopMode") -// NCAgÌ RunLoopMode +// ã¯ã©ã¤ã¢ã³ãã® RunLoopMode #define kAquaSKKClientRunLoopMode CFSTR("AquaSKK::ClientRunLoopMode") -// NCAg¨IÖÌbZ[WÌMÅAcontentÌæªÉtwb_B +// ã¯ã©ã¤ã¢ã³ãâé¯ã¸ã®ã¡ãã»ã¼ã¸ã®éä¿¡ã§ãcontentã®å é ã«ä»ããããã struct BasicMessageHeader { ProcessSerialNumber fProcessSerialNumber; }; -typedef struct BasicMessageHeader BasicMessageHeader; -// TSM©çîñðø«o·Égp·é\¢ÌB +// TSMããæ å ±ãå¼ãåºãæã«ä½¿ç¨ããæ§é ä½ã struct OffsetToPosParams { long fRefCon; long fTextOffset; @@ -70,46 +68,75 @@ typedef SInt32 BasicMessageID; -// bZ[WÌæØè¶ -#define SKK_MSG_DELIMITER (0x0b) /* ¼^u */ +// ã¡ãã»ã¼ã¸ã®åºåãæå +#define SKK_MSG_DELIMITER (0x0b) // åç´ã¿ã -enum { // NCAg©çIÖÌbZ[W - kBasicMessageActivated = 100, // SKKªANeBuÉÈÁ½B - kBasicMessageDeactivated = 101, // SKKªANeBuÅÈÈÁ½B - kBasicMessageHidePalettes = 102, // pbgðB·æ¤ATSMÉw¦³ê½ - - kSKKMessageSearch = 200, // õBNGÌ`®ÍUniCharÌzñÅá¦Îu+½Æe ¦vâu-Í¢êÂvB - // è¼¼ª êÎ檪+A³¯êÎ-Bè¼¼ª éêͼpXy[XÅæØçêÄ¢éB - // X|XÍá¦Îuᦠg¦vuzñ rñvÌæ¤É¼pXy[XÅæØçêÄ¢éB - kSKKCreateCandidatesWindow = 201, // óâIðæÊð\¦B - // NGÌ`®Í - // +0 \¦·×«xÀW(QuickDrawÀW) t«2oCg® - // +2 \¦·×«yÀW(QuickDrawÀW) t«2oCg® - // +4 óâ(ãq) UniCharzñ - // óâ:u¢ ± gvÌæ¤É¿Ìªð¼pXy[XÅæØÁÄÀ×½àÌB +enum { // ã¯ã©ã¤ã¢ã³ãããé¯ã¸ã®ã¡ãã»ã¼ã¸ + // SKKãã¢ã¯ãã£ãã«ãªã£ã + kBasicMessageActivated = 100, + + // SKKãã¢ã¯ãã£ãã§ãªããªã£ã + kBasicMessageDeactivated = 101, + + // ãã¬ãããé ããããTSMã«æ示ããã + kBasicMessageHidePalettes = 102, + + // æ¤ç´¢ï¼ã¯ã¨ãªã®å½¢å¼ã¯UniCharã®é åã§ä¾ãã°ã+ãã¨e ãããã-ã¯ããã¤ã + // éãä»®åãããã°å é ã+ãç¡ããã°- + // éãä»®åãããå ´å㯠SKK_MSG_DELIMITER ã§åºåããã¦ãã + // ã¬ã¹ãã³ã¹ã¯ä¾ãã°ãé å æåãã®ããã« SKK_MSG_DELIMITER ã§åºåããã¦ãã + kSKKMessageSearch = 200, + + // åè£é¸æç»é¢ã表示 + // ã¯ã¨ãªã®å½¢å¼ã¯ + // +0 表示ãã¹ãx座æ¨(QuickDraw座æ¨) 符å·ä»ã2ãã¤ãæ´æ° + // +2 表示ãã¹ãy座æ¨(QuickDraw座æ¨) 符å·ä»ã2ãã¤ãæ´æ° + // +4 åè£(å¾è¿°) UniCharé å + // åè£:ãé¿ äº äº æãã®ããã«æ¼¢åã®é¨åã SKK_MSG_DELIMITER ã§åºåã£ã¦ä¸¦ã¹ããã®ã // - // X|XÍ - // +0 óâIðæÊID ³µ2oCg® - // +2 1t[É\¦·éóâÌ ³µ2oCg® - // +4 t[ ³µ2oCg® - // v6oCgB - kSKKCandidatesWindowNext = 202, // wèµ½óâIðæÊðÖXN[BNGÍ2oCgÌóâIðæÊIDBX|X³µB - kSKKCandidatesWindowPrev = 203, // OÖXN[BãÍNextƯ¶B - kSKKCloseCandidatesWindow = 204, // ¶éBãÍNextƯ¶B - kSKKRegisterThisToUserDic = 205, // [U[«ÖÌo^BNGÌ`®ÍUniCharÌzñÅA - // á¦Îu+½Æe ¦ ávu-Í¢ê zñvÆÈÁÄ¢éBX|Xͳ¢B - kSKKRemoveThisFromUserDic = 206, // [U[«©çíBNGÌ`®ÍkSKKRegisterThisToUserDicƯ¶B - kSKKSuspendCandidatesWindow = 207, - kSKKResumeCandidatesWindow = 208, - - kSKKShowAboutBox = 300, // AboutBoxð\¦·éBX|Xͳ¢B - kSKKShowPreferencesBox = 301, // «ÝèEChEð\¦·éBX|Xͳ¢B - kSKKShowWordRegistrationBox = 302, // Pêo^EChEð\¦·éBX|Xͳ¢B + // ã¬ã¹ãã³ã¹ã¯ + // +0 åè£é¸æç»é¢ID 符å·ç¡ã2ãã¤ãæ´æ° + // +2 1ãã¬ã¼ã ã«è¡¨ç¤ºããåè£ã®æ° 符å·ç¡ã2ãã¤ãæ´æ° + // +4 ãã¬ã¼ã æ° ç¬¦å·ç¡ã2ãã¤ãæ´æ° + kSKKCreateCandidatesWindow = 201, + + // æå®ããåè£é¸æç»é¢ã次ã¸ã¹ã¯ãã¼ã« + // ã¯ã¨ãªã¯2ãã¤ãã®åè£é¸æç»é¢ ID + kSKKCandidatesWindowNext = 202, + + // åã¸ã¹ã¯ãã¼ã« + kSKKCandidatesWindowPrev = 203, + + // éãã + kSKKCloseCandidatesWindow = 204, + + // ã¦ã¼ã¶ã¼è¾æ¸ã¸ã®ç»é² + // ã¯ã¨ãªã®å½¢å¼ã¯UniCharã®é åã§ã + // ä¾ãã°ã+ãã¨e ã ä¾ãã-ã¯ãã㤠é åãã¨ãªã£ã¦ãã + kSKKRegisterThisToUserDic = 205, + + // ã¦ã¼ã¶ã¼è¾æ¸ããåé¤ + // ã¯ã¨ãªã®å½¢å¼ã¯kSKKRegisterThisToUserDicã¨åã + kSKKRemoveThisFromUserDic = 206, + + // AboutBoxã表示ãã(ã¬ã¹ãã³ã¹ç¡) + kSKKShowAboutBox = 300, + + // ç°å¢è¨å®ã¦ã¤ã³ãã¦ã表示(ã¬ã¹ãã³ã¹ç¡) + kSKKShowPreferencesBox = 301, + + // åèªç»é²ã¦ã¤ã³ãã¦ã表示(ã¬ã¹ãã³ã¹ç¡) + kSKKShowWordRegistrationBox = 302, + + // è£å®ã®åè£ãæ¤ç´¢ + // ã¯ã¨ãªã®å½¢å¼ã¯UniCharã®é åã§ä¾ãã°ãã»ããªã© + // ã¬ã¹ãã³ã¹ã¯ãã»ã ã»ãããã®ããã« SKK_MSG_DELIMITER ã§åºåãããè¦åºãèªã®ãªã¹ã + kSKKFetchCompletions = 400, - kSKKFetchCompletions = 400, // â®ÌóâðõBNGÌ`®ÍUniCharÌzñÅA - // á¦ÎuÙvBX|XÍuÙ© Ù©ñvÌæ¤É¼pXy[XÅæØç꽩oµêÌXgB + // ãã°ã«å¤æã®è¦åºãèªãç»é² + kSKKRegisterToggleEntry = 401, - kBasicMessageIsSkkEggLikeNewline = 500, // + kBasicMessageIsSkkEggLikeNewline = 500, kBasicMessageIsNumericKeypad_HalfWidth = 501, kBasicMessageIsAsciiModeStartup = 502, kBasicMessageUseNumericConversion = 503, @@ -117,7 +144,7 @@ kBasicMessage__EOF }; -// T[o[©çNCAgÖÌÊmbZ[W +// ãµã¼ãã¼ããã¯ã©ã¤ã¢ã³ãã¸ã®éç¥ã¡ãã»ã¼ã¸ enum { kSKKClientConfigurationModified = 100 }; Index: AquaSKK/CandidatesManager.h diff -u AquaSKK/CandidatesManager.h:1.4.2.1 AquaSKK/CandidatesManager.h:1.4.2.2 --- AquaSKK/CandidatesManager.h:1.4.2.1 Sat Feb 3 16:53:29 2007 +++ AquaSKK/CandidatesManager.h Thu Aug 16 19:58:18 2007 @@ -1,5 +1,5 @@ /* - $Id: CandidatesManager.h,v 1.4.2.1 2007/02/03 07:53:29 t-suwa Exp $ + $Id: CandidatesManager.h,v 1.4.2.2 2007/08/16 10:58:18 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -39,8 +39,6 @@ unsigned createAndShow(SInt16 qd_x, SInt16 qd_y, const CppCFString& candidates, bool showLast = false); void windowNext(unsigned int window_id); void windowPrev(unsigned int window_id); - void suspendWindow(unsigned int window_id); - void resumeWindow(unsigned int window_id); void closeWindow(unsigned int window_id); CandidatesWindowController* getWindowController(unsigned window_id); }; Index: AquaSKK/CandidatesManager.mm diff -u AquaSKK/CandidatesManager.mm:1.6.2.1 AquaSKK/CandidatesManager.mm:1.6.2.2 --- AquaSKK/CandidatesManager.mm:1.6.2.1 Sat Feb 3 16:53:29 2007 +++ AquaSKK/CandidatesManager.mm Thu Aug 16 19:58:18 2007 @@ -1,5 +1,5 @@ /* -*- objc -*- - $Id: CandidatesManager.mm,v 1.6.2.1 2007/02/03 07:53:29 t-suwa Exp $ + $Id: CandidatesManager.mm,v 1.6.2.2 2007/08/16 10:58:18 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -103,18 +103,6 @@ [cand_windows[window_id] showPrevFrame]; } -void CandidatesManager::suspendWindow(unsigned int window_id) { - CandidatesWindowController* cwc = cand_windows[window_id]; - - [[cwc window] orderOut:nil]; -} - -void CandidatesManager::resumeWindow(unsigned int window_id) { - CandidatesWindowController* cwc = cand_windows[window_id]; - - [[cwc window] orderFront:nil]; -} - void CandidatesManager::closeWindow(unsigned int window_id) { CandidatesWindowController* cwc = cand_windows[window_id]; Index: AquaSKK/ChangeLog diff -u AquaSKK/ChangeLog:1.33.2.8 AquaSKK/ChangeLog:1.33.2.9 --- AquaSKK/ChangeLog:1.33.2.8 Sat Feb 3 17:52:48 2007 +++ AquaSKK/ChangeLog Thu Aug 16 19:58:18 2007 @@ -1,3 +1,36 @@ +2007-06-15 Tomotaka SUWA <t.suw****@mac*****> + + * AquaSKK.pbproj/project.pbxproj: Panther ã§ãã«ãã§ããããã«ä¿® + æ£(OkuriganaEntry ãé¤å»)ã + +2007-06-14 Tomotaka SUWA <t.suw****@mac*****> + + * *ConversionMode.*: åèªç»é²ã¢ã¼ããå®å ¨ã«åé¤ããããã«ä¿®æ£ã + + * KanjiConversionMode.*: + (1) è£å®çµæãç¾å¨ã®æå種å¥ã¨åãããããã«ä¿®æ£ + (2) åèªç»é²æã«è¦åºãèªããã²ãããªãã«æ£è¦åãããªãä¸å ·åãä¿®æ£ + (3) åèªç»é²åã®å ¥åã¢ã¼ãã復å ãããªãä¸å ·åãä¿®æ£ + +2007-06-12 Tomotaka SUWA <t.suw****@mac*****> + + * ServerMessageReceiver.* (registerToggleEntry): ãã°ã«å¤æã®çµæã + ã¦ã¼ã¶ã¼è¾æ¸ã«ç»é²ãããå¤æåè£ã¯ç©ºã + + * KanjiConversionMode.* (registerToggleEntry): æ°è¦è¿½å é¢æ°ããã° + ã«å¤æã®çµæãå¦ç¿ããã + + * DictionarySet.cpp (RegisterOkuriNasi): entry.empty() ãã§ãã¯ãã + ãªãããã«ä¿®æ£ããã°ã«å¤æãå¦ç¿ããå ´åãentry ã¯ç©ºã®ããã + + * Dictionary.h: SKKEntry ã§ç©ºã®å¤æåè£ã«å¯¾å¿ã + + * BIMClientServer.h: kSKKRegisterToggleEntry ã追å ãã³ã¼ãæ´å½¢ã + +2007-06-09 Tomotaka SUWA <t.suw****@mac*****> + + * AquaSKK 3.4 ãªãªã¼ã¹ã + 2007-02-03 Tomotaka SUWA <t.suw****@mac*****> * tests/TestAquaSKK.scpt: æ°è¦è¿½å ãAppleScript ã«ããèªåãã¹ãã¹ Index: AquaSKK/Dictionary.h diff -u AquaSKK/Dictionary.h:1.4.2.6 AquaSKK/Dictionary.h:1.4.2.7 --- AquaSKK/Dictionary.h:1.4.2.6 Sat Feb 3 17:52:48 2007 +++ AquaSKK/Dictionary.h Thu Aug 16 19:58:18 2007 @@ -1,10 +1,10 @@ /* -*- C++ -*- - $Id: Dictionary.h,v 1.4.2.6 2007/02/03 08:52:48 t-suwa Exp $ + $Id: Dictionary.h,v 1.4.2.7 2007/08/16 10:58:18 t-suwa Exp $ MacOS X implementation of the SKK input method. Copyright (C) 2002 phonohawk - Copyright (C) 2005-2006 Tomotaka SUWA <t.suw****@mac*****> + Copyright (C) 2005-2007 Tomotaka SUWA <t.suw****@mac*****> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -354,6 +354,9 @@ } void addCandidate(const SKKCandidate& theCandidate) { + // åè£ã空ãªãä½ãããªã + if(theCandidate.IsEmpty()) return; + // 註éãå«ãå®å ¨ãªã¨ã³ããªãæ¢ã SKKCandidateIterator i = getCandidateIterator(theCandidate); @@ -367,6 +370,9 @@ } void updateCandidate(const SKKCandidate& theCandidate) { + // åè£ã空ãªãä½ãããªã + if(theCandidate.IsEmpty()) return; + SKKCandidate target; // 註éãå«ãå®å ¨ãªã¨ã³ããªãæ¢ã Index: AquaSKK/DictionarySet.cpp diff -u AquaSKK/DictionarySet.cpp:1.5.2.7 AquaSKK/DictionarySet.cpp:1.5.2.8 --- AquaSKK/DictionarySet.cpp:1.5.2.7 Sat Feb 3 17:52:48 2007 +++ AquaSKK/DictionarySet.cpp Thu Aug 16 19:58:18 2007 @@ -1,10 +1,10 @@ /* - $Id: DictionarySet.cpp,v 1.5.2.7 2007/02/03 08:52:48 t-suwa Exp $ + $Id: DictionarySet.cpp,v 1.5.2.8 2007/08/16 10:58:18 t-suwa Exp $ MacOS X implementation of the SKK input method. Copyright (C) 2002-2004 phonohawk - Copyright (C) 2005-2006 Tomotaka SUWA <t.suw****@mac*****> + Copyright (C) 2005-2007 Tomotaka SUWA <t.suw****@mac*****> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -273,7 +273,8 @@ } void DictionarySet::RegisterOkuriNasi(const std::string& key, const std::string& entry) { - if(key.empty() || entry.empty()) { + // key ã ããã§ãã¯ãã(ãã°ã«å¤æã®ç»é²æ㯠entry ã¯ç©º) + if(key.empty()) { std::cerr << "AquaSKK: Invalid registration received" << std::endl; } else { userdict_->registerOkuriNasi(key, entry); Index: AquaSKK/KanjiConversionMode.cpp diff -u AquaSKK/KanjiConversionMode.cpp:1.8.2.5 AquaSKK/KanjiConversionMode.cpp:1.8.2.6 --- AquaSKK/KanjiConversionMode.cpp:1.8.2.5 Sat Feb 3 17:52:48 2007 +++ AquaSKK/KanjiConversionMode.cpp Thu Aug 16 19:58:18 2007 @@ -1,5 +1,5 @@ /* - $Id: KanjiConversionMode.cpp,v 1.8.2.5 2007/02/03 08:52:48 t-suwa Exp $ + $Id: KanjiConversionMode.cpp,v 1.8.2.6 2007/08/16 10:58:18 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -41,33 +41,34 @@ #endif /* - ©ÈüÍ[hÅå¶ÌAt@xbgðüÍ·éÆA - ¿üÍ[hÉØèÖíèA»Ì̶ªhandleInputÉn³êéB + ããªå ¥åã¢ã¼ãã§å¤§æåã®ã¢ã«ãã¡ããããå ¥åããã¨ã + æ¼¢åå ¥åã¢ã¼ãã«åãæ¿ããããã®æã®æåãhandleInputã«æ¸¡ãããã - handleInputÍܸ¤ðæªÉüêÄ©çA¬¶ÉµÄHiraganaInputModeÉn·B - Xy[Xª½çÏ·Bè¼¼ªüͳêÄàÏ·B + handleInputã¯ã¾ãâ½ãå é ã«å ¥ãã¦ãããå°æåã«ãã¦HiraganaInputModeã«æ¸¡ãã + ã¹ãã¼ã¹ãæ¥ããå¤æãéãä»®åãå ¥åããã¦ãå¤æã - Oku ¨ ¤¨ - OkuR ¨ ¤¨*r - OkuRi ¨ ¤¨*è ¨ ¥è + Oku â â½ãã + OkuR â â½ãã*r + OkuRi â â½ãã*ã â â¼éã - ¿üÍ[hÌÍAüͳ꽶ͻÌÜÜKanjiConversionModeÉn³êéB + æ¼¢åå ¥åã¢ã¼ãã®æã¯ãå ¥åãããæåã¯ãã®ã¾ã¾KanjiConversionModeã«æ¸¡ãããã */ 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) { @@ -80,12 +81,12 @@ bool KanjiConversionMode::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_ROOT && completion_mode) { - // ÌóâÖBÅãÜÅsÁ½çÅÉßéB + // 次ã®åè£ã¸ãæå¾ã¾ã§è¡ã£ããæåã«æ»ãã current_completion_index++; if(current_completion_index >= completions.size()) { current_completion_index = 0; @@ -98,7 +99,7 @@ if(SKKConfig::AbbrevPrevKey() == skkchar) { if(status == STATUS_WHITE_ROOT && completion_mode) { - // OÌóâÖBÅÜÅsÁ½çÅãÉßéB + // åã®åè£ã¸ãæåã¾ã§è¡ã£ããæå¾ã«æ»ãã if(current_completion_index == 0) { current_completion_index = completions.size() - 1; } else { @@ -110,20 +111,20 @@ } } - // tab,sIh,J}ÈOÌ¢©È鶪üͳêÄàâ®[hð²¯éB + // tab,ããªãªã,ã«ã³ã以å¤ã®ãããªãæåãå ¥åããã¦ãè£å®ã¢ã¼ããæããã completion_mode = false; if(SKKConfig::ToggleKanaKey() == skkchar) { if(status == STATUS_WHITE_ROOT || status == STATUS_WHITE_OKURI) { - // currenInputModeðterminateµÄArootÉgetStringToFix()ÌßèlðÇÁ·éB + // currenInputModeãterminateãã¦ãrootã«getStringToFix()ã®æ»ãå¤ã追å ããã parent->getCurrentInputMode().terminate(); CppCFString to_fix(parent->getCurrentInputMode().getStringToFix()); if (status == STATUS_WHITE_ROOT) { root += to_fix; } - // rootðSpм¼ÉÏ·µÄ©çmèµÄI¹B - // ½¾µSpм¼[h¾Á½ç½¼¼ÖÏ··éB + // rootãå ¨è§çä»®åã«å¤æãã¦ãã確å®ãã¦çµäºã + // ãã ãå ¨è§çä»®åã¢ã¼ãã ã£ãã平仮åã¸å¤æããã CppCFString cand; if(parent->isZenKataInputMode()) { cand = HiraganaInputMode::convert(root); @@ -131,8 +132,8 @@ cand = ZenKataInputMode::convert(root); } - // Âl«Éo^·é - sendWordToServerToRegister(root, cand); + // ãã°ã«å¤æã®çµæãç»é²ãã + registerToggleEntry(root); parent->fix(cand); parent->setEnabledKanjiMode(false); @@ -141,9 +142,9 @@ return false; } else if(status == STATUS_BLACK || status == STATUS_BLACK_WITH_WINDOW) { - // »ÝÌóâðmèB - // 1) Spм¼[hÈç½¼¼[hÖ - // 2) »êÈOÈçSpм¼[hÖ + // ç¾å¨ã®åè£ã確å®ã + // 1) å ¨è§çä»®åã¢ã¼ããªã平仮åã¢ã¼ã㸠+ // 2) ãã以å¤ãªãå ¨è§çä»®åã¢ã¼ã㸠parent->setEnabledKanjiMode(false); if(parent->isZenKataInputMode()) { @@ -157,7 +158,7 @@ if(SKKConfig::PrevKouhoKey() == skkchar) { if(status == STATUS_BLACK) { - // êÂOÌóâÖBÅÌóâ¾Á½ç¤[hÖßéB + // ä¸ã¤åã®åè£ã¸ãæåã®åè£ã ã£ããâ½ã¢ã¼ãã¸æ»ãã if(current_candidate_index > 0) { current_candidate_index--; } else { @@ -169,17 +170,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(); @@ -199,28 +200,31 @@ if(SKKConfig::ToggleKatakanaKey() == skkchar) { if(status == STATUS_WHITE_ROOT || status == STATUS_WHITE_OKURI) { - // currenInputModeðterminateµÄArootÉgetStringToFix()ÌßèlðÇÁ·éB + // currenInputModeãterminateãã¦ãrootã«getStringToFix()ã®æ»ãå¤ã追å ããã parent->getCurrentInputMode().terminate(); CppCFString to_fix(parent->getCurrentInputMode().getStringToFix()); if (status == STATUS_WHITE_ROOT) { root += to_fix; } - // rootð¼pм¼ÉÏ·µÄ©çmèµÄI¹B - // ½¾µ¼pм¼[h¾Á½ç½¼¼ÉÏ··éB + // rootãåè§çä»®åã«å¤æãã¦ãã確å®ãã¦çµäºã + // ãã ãåè§çä»®åã¢ã¼ãã ã£ãã平仮åã«å¤æããã if(parent->isHanKataInputMode()) { parent->fix(HiraganaInputMode::convert(root)); } else { parent->fix(HanKataInputMode::convert(root)); } + // ãã°ã«å¤æã®çµæãç»é²ãã + registerToggleEntry(root); + parent->setEnabledKanjiMode(false); initialize(); return false; } else if(status == STATUS_BLACK || status == STATUS_BLACK_WITH_WINDOW) { - // »ÝÌóâðmèµÄ©çA - // 1) ¼pм¼[hÈç½¼¼[hÖ - // 2) »êÈOÈç¼pм¼¼¼[hÖ + // ç¾å¨ã®åè£ã確å®ãã¦ããã + // 1) åè§çä»®åã¢ã¼ããªã平仮åã¢ã¼ã㸠+ // 2) ãã以å¤ãªãåè§çä»®åä»®åã¢ã¼ã㸠parent->setEnabledKanjiMode(false); if(parent->isHanKataInputMode()) { @@ -233,12 +237,12 @@ } if(SKKConfig::KakuteiKey() == skkchar) { - return true; // mèÌÝ + return true; // 確å®ã®ã¿ } if(SKKConfig::LatinModeKey() == skkchar || SKKConfig::Jisx0208LatinModeKey() == skkchar) { if(status == STATUS_WHITE_ROOT || status == STATUS_WHITE_OKURI || status == STATUS_BLACK) { - // »ê¼êðmèµÄ¼p/Spp[hÖB + // ããããã確å®ãã¦åè§/å ¨è§è±æ°åã¢ã¼ãã¸ã if(SKKConfig::LatinModeKey() == skkchar) { parent->goHanAscInputMode(); } else { @@ -246,15 +250,15 @@ } return true; } - // óâIðæÊÈçfÊèB + // åè£é¸æç»é¢ãªãç´ éãã } if(SKKConfig::AbbrevModeKey() == skkchar) { - // »ÝÌóâðmèµ½ãAú»µÄI¹·éªA - // ¯É¡ñÌ\¦/fixª½f³êȢƢéÌÅ - // ¿Ï·[hðI¹³¹Ä©çparentÌhandleInputÉn·B - // KanjiConversionModeÍSTATUS_NULLÌÉÍ - // íÉkIgnoreThisðÔ·B + // ç¾å¨ã®åè£ã確å®ããå¾ãåæåãã¦çµäºãããã + // åæã«ä»åã®è¡¨ç¤º/fixãåæ ãããªãã¨å°ãã®ã§ + // æ¼¢åå¤æã¢ã¼ããçµäºããã¦ããparentã®handleInputã«æ¸¡ãã + // KanjiConversionModeã¯STATUS_NULLã®æã«ã¯ + // 常ã«kIgnoreThisãè¿ãã parent->fix(getStringToFix()); return parent->handleInput(skkchar); @@ -262,14 +266,14 @@ if(SKKConfig::NextKouhoKey() == skkchar) { if(status == STATUS_WHITE_ROOT || status == STATUS_WHITE_OKURI) { - // currenInputModeðterminateµÄArootàµÍokuriÉgetStringToFix()ÌßèlðÇÁ·éB + // currenInputModeãterminateãã¦ãrootãããã¯okuriã«getStringToFix()ã®æ»ãå¤ã追å ããã parent->getCurrentInputMode().terminate(); if(status == STATUS_WHITE_ROOT) { root += parent->getCurrentInputMode().getStringToFix(); root_to_display.clear().append(root).append(parent->getCurrentInputMode().getStringToDisplay()); if(root.length() == 0) { - // I¹ + // çµäº parent->setEnabledKanjiMode(false); parent->display(CppCFString()); initialize(); @@ -285,33 +289,33 @@ } 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(); } @@ -319,17 +323,17 @@ return false; } - // Ï·|CgL[ª¨³ê½Ì®ì + // å¤æãã¤ã³ããã¼ãããããæã®åä½ if(SKKConfig::SetHenkanPointKey() == skkchar) { if(status == STATUS_NULL || (status == STATUS_WHITE_ROOT && root.length() == 0)) { - status = STATUS_WHITE_ROOT; // ¤[hÖB + status = STATUS_WHITE_ROOT; // â½ã¢ã¼ãã¸ã - // æÊ\¦p + // ç»é¢è¡¨ç¤ºç¨ root_to_display.clear().append(root).append(parent->getCurrentInputMode().getStringToDisplay()); return false; } - // mèµÄp± + // 確å®ãã¦ç¶ç¶ if(status == STATUS_WHITE_ROOT || status == STATUS_BLACK || status == STATUS_BLACK_WITH_WINDOW) { parent->fix(getStringToFix()); parent->setEnabledKanjiMode(true); @@ -337,13 +341,13 @@ } } - // vvgÉÇÁ + // ããã³ããã«è¿½å if(status == STATUS_PROMPT) { prompt_input += skkchar; return false; } - // Ið³ê½óâÅmè·é + // é¸æãããåè£ã§ç¢ºå®ãã if(status == STATUS_BLACK_WITH_WINDOW) { CppCFString labels = CppCFString("asdfjkl").substring(0, candidates_window_cands_per_frame); int cand_index = labels.indexOf(std::tolower(skkchar)); @@ -351,7 +355,7 @@ 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; } @@ -361,109 +365,109 @@ if('A' <= skkchar && skkchar <= 'Z') { if(status == STATUS_NULL || status == STATUS_WHITE_ROOT && root.length() == 0) { - status = STATUS_WHITE_ROOT; // ¤[hÖB + status = STATUS_WHITE_ROOT; // â½ã¢ã¼ãã¸ã - // ¬¶ÉµÄ¼¼üÍðÀsB + // å°æåã«ãã¦ä»®åå ¥åãå®è¡ã parent->getCurrentInputMode().handleInput(skkchar + 0x20); - // ¼¼üÍ[hÌfixobt@ðrootÖÇÁB + // ä»®åå ¥åã¢ã¼ãã®fixãããã¡ãrootã¸è¿½å ã root += parent->getCurrentInputMode().getStringToFix(); - // æÊ\¦p + // ç»é¢è¡¨ç¤ºç¨ root_to_display.clear().append(root).append(parent->getCurrentInputMode().getStringToDisplay()); - // okuriÍÁµÄ¨B±ÌóÔÅmè³ê½Ì×ÉB + // okuriã¯æ¶ãã¦ããããã®ç¶æ ã§ç¢ºå®ãããæã®çºã«ã okuri.clear(); } else if(status == STATUS_WHITE_ROOT) { - // terminate·éOÉ¡ñÌüÍðµÞB - // ±êðâçÈ¢ÆKesSiteªu¯µÄvÉÈÁĵܤB - // AµA±ÌüÍ̬¶ªA궾¯ÅoÍ𶬷éêÉÍ - // (WIÉÍ깨æÑn)A±ÌìðµÈ¢B + // terminateããåã«ä»åã®å ¥åãæ¼ãè¾¼ãã + // ããããããªãã¨KesSiteããããã¦ãã«ãªã£ã¦ãã¾ãã + // ä½ãããã®å ¥åã®å°æåããä¸æåã ãã§åºåãçæããå ´åã«ã¯ + // (æ¨æºçã«ã¯æ¯é³ããã³n)ããã®æä½ãããªãã CppCFString tmp_queue(skkchar + 0x20); CppCFString result = KanaTreeController::defaultTreeController().trace(KanaTreeController::OUTPUT_HIRAGANA, tmp_queue); if(result.length() == 0 && tmp_queue != "n") { - parent->getCurrentInputMode().handleInput(skkchar + 0x20); // ¬¶ + parent->getCurrentInputMode().handleInput(skkchar + 0x20); // å°æå } - // currentInputModeðterminateµÄArootÉgetStringToFix()ÌßèlðÇÁ·éB + // currentInputModeãterminateãã¦ãrootã«getStringToFix()ã®æ»ãå¤ã追å ããã parent->getCurrentInputMode().terminate(); root += parent->getCurrentInputMode().getStringToFix(); root_to_display.clear().append(root).append(parent->getCurrentInputMode().getStringToDisplay()); - status = STATUS_WHITE_OKURI; // ¤è¼¼[hÖB + status = STATUS_WHITE_OKURI; // â½éãä»®åã¢ã¼ãã¸ã - okuri_head = skkchar + 0x20; // ¬¶ + okuri_head = skkchar + 0x20; // å°æå - // ¬¶ÉµÄ¼¼üÍðÀsB + // å°æåã«ãã¦ä»®åå ¥åãå®è¡ã bool fix = parent->getCurrentInputMode().handleInput(okuri_head); - // ¼¼üÍ[hÌfixobt@ðokuriÖRs[B + // ä»®åå ¥åã¢ã¼ãã®fixãããã¡ãokuriã¸ã³ãã¼ã okuri += parent->getCurrentInputMode().getStringToFix(); - // æÊ\¦p + // ç»é¢è¡¨ç¤ºç¨ okuri_to_display.clear().append(okuri).append(parent->getCurrentInputMode().getStringToDisplay()); - // L [ªóÅȯêÎܾϷµÄµÜíÈ¢B + // ãã¥ã¼ã空ã§ãªããã°ã¾ã å¤æãã¦ãã¾ããªãã if(fix && parent->getCurrentInputMode().isQueueEmpty()) { - // Ï··éB - return handleInput(' '); // ÄËüBÓ¡IÉÍÄAÅÍÈcontinueB + // å¤æããã + return handleInput(' '); // åçªå ¥ãæå³çã«ã¯å帰ã§ã¯ãªãcontinueã } } else if(status == STATUS_WHITE_OKURI) { - // ¬¶ÉµÄ¼¼üÍðÀsB + // å°æåã«ãã¦ä»®åå ¥åãå®è¡ã bool fix = parent->getCurrentInputMode().handleInput(skkchar + 0x20); - // ¼¼üÍ[hÌfixobt@ðokuriÖRs[B + // ä»®åå ¥åã¢ã¼ãã®fixãããã¡ãokuriã¸ã³ãã¼ã okuri += parent->getCurrentInputMode().getStringToFix(); - // æÊ\¦p + // ç»é¢è¡¨ç¤ºç¨ okuri_to_display.clear().append(okuri).append(parent->getCurrentInputMode().getStringToDisplay()); - // L [ªóÅȯêÎܾϷµÄµÜíÈ¢B + // ãã¥ã¼ã空ã§ãªããã°ã¾ã å¤æãã¦ãã¾ããªãã if(fix && parent->getCurrentInputMode().isQueueEmpty()) { - // Ï··éB - return handleInput(' '); // ÄËüBÓ¡IÉÍÄAÅÍÈcontinueB + // å¤æããã + return handleInput(' '); // åçªå ¥ãæå³çã«ã¯å帰ã§ã¯ãªãcontinueã } } else if(status == STATUS_BLACK) { - // »ÝÌóâðmèµÄp± + // ç¾å¨ã®åè£ã確å®ãã¦ç¶ç¶ parent->fix(getStringToFix()); parent->setEnabledKanjiMode(true); return handleInput(skkchar); } } else { if(status == STATUS_WHITE_ROOT) { - // ¼¼üÍðÀsB + // ä»®åå ¥åãå®è¡ã parent->getCurrentInputMode().handleInput(skkchar); - // rootÉÇÁB + // rootã«è¿½å ã root += parent->getCurrentInputMode().getStringToFix(); - // æÊ\¦p + // ç»é¢è¡¨ç¤ºç¨ root_to_display.clear().append(root).append(parent->getCurrentInputMode().getStringToDisplay()); } else if(status == STATUS_WHITE_OKURI) { - // currentInputMode::handleInput()ðs¢AtrueÔµ½ç»êð輼ƵÄÏ·B - // »¤ÅȯêÎAcurrentInputMode::handleInput()Én·¾¯B + // currentInputMode::handleInput()ãè¡ããtrueè¿ããããããéãä»®åã¨ãã¦å¤æã + // ããã§ãªããã°ãcurrentInputMode::handleInput()ã«æ¸¡ãã ãã bool fix = parent->getCurrentInputMode().handleInput(skkchar); const CppCFString& kanainput_result = parent->getCurrentInputMode().getStringToFix(); - // okuriÉÇÁB + // okuriã«è¿½å ã okuri += kanainput_result; - // æÊ\¦p + // ç»é¢è¡¨ç¤ºç¨ okuri_to_display.clear().append(okuri).append(parent->getCurrentInputMode().getStringToDisplay()); - // L [ªóÅȯêÎܾϷµÈ¢B + // ãã¥ã¼ã空ã§ãªããã°ã¾ã å¤æããªãã if(fix && parent->getCurrentInputMode().isQueueEmpty()) { - // Ï··éB - return handleInput(' '); // ÄËüBÓ¡IÉÍÄAÅÍÈcontinueB + // å¤æããã + return handleInput(' '); // åçªå ¥ãæå³çã«ã¯å帰ã§ã¯ãªãcontinueã } } else if(status == STATUS_BLACK) { - // »ÝÌóâðmèµÄp± + // ç¾å¨ã®åè£ã確å®ãã¦ç¶ç¶ parent->fix(getStringToFix()); return parent->handleInput(skkchar); } @@ -474,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(); } @@ -490,7 +504,7 @@ bool KanjiConversionMode::handleBackSpace() { if (word_register_mode) { word_register_mode->handleBackSpace(); - return true; // WordRegisterMode::handleBackSpace()ª½ðÔ»¤Æà{¶ÍÁ³È¢B + return true; // WordRegisterMode::handleBackSpace()ãä½ãè¿ããã¨ãæ¬æã¯æ¶ããªãã } if (status == STATUS_NULL) { @@ -498,10 +512,10 @@ } if (status == STATUS_WHITE_ROOT) { - // hiraganaInputMode->handleBackSpace()ªtrueðÔµ½çroot_to_displayðXV·éB - // falseðÔµ½ç - // rootªóÈçú»µÄI¹B - // óÅȯêÎrootÌÅã̶ðÁ·B + // hiraganaInputMode->handleBackSpace()ãtrueãè¿ãããroot_to_displayãæ´æ°ããã + // falseãè¿ããã + // rootã空ãªãåæåãã¦çµäºã + // 空ã§ãªããã°rootã®æå¾ã®æåãæ¶ãã if (parent->getCurrentInputMode().handleBackSpace()) { root_to_display.clear().append(root).append(parent->getCurrentInputMode().getStringToDisplay()); } @@ -512,20 +526,20 @@ initialize(); } else { - completion_mode = false; // â®[h¾Á½êÍâ®[hð²¯éB + completion_mode = false; // è£å®ã¢ã¼ãã ã£ãå ´åã¯è£å®ã¢ã¼ããæããã root.eraseLast(1); root_to_display = root; } } } else if (status == STATUS_WHITE_OKURI) { - // hiraganaInputMode->handleBackSpace()ª - // trueðÔµ½ç - // okuri_to_displayðXV·éB - // »ÌAokuriªê¶µ©³¯êÎSTATUS_WHITE_ROOTÖß·B - // falseðÔµ½ç - // okuriªê¶µ©³¯êÎSTATUS_WHITE_ROOTÖß·B - // ñ¶Èã Á½çokuriÌÅã̶ðÁ·B + // hiraganaInputMode->handleBackSpace()ã + // trueãè¿ããã + // okuri_to_displayãæ´æ°ããã + // ãã®æãokuriãä¸æåããç¡ããã°STATUS_WHITE_ROOTã¸æ»ãã + // falseãè¿ããã + // okuriãä¸æåããç¡ããã°STATUS_WHITE_ROOTã¸æ»ãã + // äºæå以ä¸ãã£ããokuriã®æå¾ã®æåãæ¶ãã if (parent->getCurrentInputMode().handleBackSpace()) { okuri_to_display.clear().append(okuri).append(parent->getCurrentInputMode().getStringToDisplay()); if (okuri.length() <= 1) { @@ -545,20 +559,20 @@ } } 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[Èç¥[hÖßéB - // »¤ÅȯêÎ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; @@ -568,7 +582,7 @@ } } else if (status == STATUS_PROMPT) { - // prompt_inputªóÅȯêÎÅã̶ðÁ·B + // prompt_inputã空ã§ãªããã°æå¾ã®æåãæ¶ãã if (prompt_input.length() > 0) { prompt_input.eraseLast(1); } @@ -581,23 +595,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_ROOTÉßéB - // »êÈOÈçSTATUS_BLACKÉßéB + // prompt_inputãyesãªãåé¤ãã¦STATUS_WHITE_ROOTã«æ»ãã + // ãã以å¤ãªãSTATUS_BLACKã«æ»ãã if (prompt_input == "yes") { - // í + // åé¤ makeServerRemoveWord(); - // STATUS_WHITE_ROOTÖ + // STATUS_WHITE_ROOT㸠if (okuri.length() > 0) { root += okuri; root_to_display = root; @@ -620,9 +634,9 @@ } if (ClientConfiguration::theInstance().isSkkEggLikeNewline()) { - // skk-egglike-newline[hÈçA©ÍÅm賹ĩçú»µÄtrueðÔ·B + // skk-egglike-newlineã¢ã¼ããªããèªåã§ç¢ºå®ããã¦ããåæåãã¦trueãè¿ãã - // §³êÈ¢ªA§IÉmè³¹éB + // æ¨å¥¨ãããªãããå¼·å¶çã«ç¢ºå®ãããã parent->fix(getStringToFix()); return true; } @@ -633,19 +647,19 @@ bool KanjiConversionMode::handleArrow(SKKChar skkchar) { if (word_register_mode) { - return word_register_mode->handleArrow(skkchar); // Ï÷ + return word_register_mode->handleArrow(skkchar); // å§è² } - // ½¼¼Cvbg[hÌhandleArrowðÄÑAgetStringToFix()àÄÔªAÄÔ¾¯B + // 平仮åã¤ã³ãããã¢ã¼ãã®handleArrowãå¼ã³ãgetStringToFix()ãå¼ã¶ããå¼ã¶ã ãã parent->getCurrentInputMode().handleArrow(skkchar); parent->getCurrentInputMode().getStringToFix(); if (status == STATUS_BLACK || status == STATUS_BLACK_WITH_WINDOW) { - // »ÝÌóâðmè + // ç¾å¨ã®åè£ãç¢ºå® parent->fix(getStringToFix()); } - // ¿Ï·[hðI¹·éB + // æ¼¢åå¤æã¢ã¼ããçµäºããã parent->setEnabledKanjiMode(false); initialize(); return false; @@ -656,18 +670,18 @@ return word_register_mode->handleCg(); } - // ½¼¼Cvbg[hÌhandleCgðÄÑAgetStringToFix()àÄÔªAÄÔ¾¯B + // 平仮åã¤ã³ãããã¢ã¼ãã®handleCgãå¼ã³ãgetStringToFix()ãå¼ã¶ããå¼ã¶ã ãã parent->getCurrentInputMode().handleCg(); parent->getCurrentInputMode().getStringToFix(); if (status == STATUS_WHITE_ROOT || status == STATUS_WHITE_OKURI) { - // ¿Ï·[hI¹ + // æ¼¢åå¤æã¢ã¼ãçµäº parent->setEnabledKanjiMode(false); initialize(); } else if (status == STATUS_BLACK || status == STATUS_BLACK_WITH_WINDOW) { - // rootÉokuriðÁ¯ÄSTATUS_WHITE_ROOTÖ - // EChEªJ©êÄ¢½ç¶éB + // rootã«okuriããã£ã¤ãã¦STATUS_WHITE_ROOT㸠+ // ã¦ã¤ã³ãã¦ãéããã¦ãããéããã if (status == STATUS_BLACK_WITH_WINDOW) { closeCandidatesWindow(); } @@ -699,7 +713,7 @@ if (status == STATUS_WHITE_ROOT) { if (completion_mode) { - // ÌóâÖBÅãÜÅsÁ½çÅÉßéB + // 次ã®åè£ã¸ãæå¾ã¾ã§è¡ã£ããæåã«æ»ãã current_completion_index++; if (current_completion_index >= completions.size()) { current_completion_index = 0; @@ -708,15 +722,15 @@ root_to_display = root; } else { - // currentInputModeðterminateµÄArootÉgetStringToFix()ÌßèlðÇÁ·éB + // currentInputModeãterminateãã¦ãrootã«getStringToFix()ã®æ»ãå¤ã追å ããã parent->getCurrentInputMode().terminate(); root += parent->getCurrentInputMode().getStringToFix(); root_to_display.clear().append(root).append(parent->getCurrentInputMode().getStringToDisplay()); - // IÉâ¢í¹éB + // é¯ã«åãåãããã askServerTheCompletions(); - // â®Ìó⪠êÎâ®JnB³¯êν๸ÉßéB + // è£å®ã®åè£ãããã°è£å®éå§ãç¡ããã°ä½ãããã«æ»ãã if (completions.size() > 0) { completion_mode = true; root = completions[0]; @@ -734,67 +748,89 @@ if (word_register_mode) { word_register_mode->terminate(); - delete word_register_mode; - word_register_mode = NULL; + resetRegistrationMode(); } - // currenInputModeðterminateµÄArootÉgetStringToFix()ÌßèlðÇÁ·éB + // currenInputModeãterminateãã¦ãrootã«getStringToFix()ã®æ»ãå¤ã追å ããã parent->getCurrentInputMode().terminate(); CppCFString to_fix(parent->getCurrentInputMode().getStringToFix()); if (status == STATUS_WHITE_ROOT) { root += to_fix; } - parent->fix(getStringToFix()); // mè·é + parent->fix(getStringToFix()); // 確å®ãã parent->setEnabledKanjiMode(false); 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(); if(content.length() > 0) { - // IÉMB + // é¯ã«éä¿¡ã 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); } - // mèB - parent->fix(content + okuri); // è¼¼ðt¯é + // 確å®ã + parent->fix(content + okuri); // éãä»®åãä»ãã - // I¹B + // çµäºã parent->setEnabledKanjiMode(false); initialize(); } else { - if(okuri.length() > 0) { // è¼¼ª êÎ + if(okuri.length() > 0) { // éãä»®åãããã° status = STATUS_WHITE_OKURI; } else { status = STATUS_WHITE_ROOT; } } - 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ããã£ã¤ãã¦STATUS_WHITE_ROOT㸠root += okuri; okuri.clear(); @@ -804,36 +840,36 @@ status = STATUS_WHITE_ROOT; } 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 KanjiConversionMode::getStringToDisplay() { if (word_register_mode) { - // ³³¹éB³àÈ¢ÆÜpWordRegisterModeªÝèµ½¶ð׵ĵܤB + // ç¡è¦ãããããããªãã¨æè§WordRegisterModeãè¨å®ããæåãæ½°ãã¦ãã¾ãã return CppCFString().append(kIgnoreThis); } if (status == STATUS_WHITE_ROOT) { - // ¤root + // â½root return CppCFString().append(0x25bd).append(root_to_display); } else if (status == STATUS_WHITE_OKURI) { - // ¤root*okuri + // â½root*okuri return CppCFString().append(0x25bd).append(root_to_display).append('*').append(okuri_to_display); } 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 { @@ -852,16 +888,16 @@ 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) */ { @@ -869,8 +905,8 @@ result = CppCFString().append(kIgnoreThis); } - // ±êªÄÎê½Æ¢¤±ÆÍfix³êéÆ¢¤±ÆÈÌÅ¿[hI¹B - // ú»·éB + // ãããå¼ã°ããã¨ãããã¨ã¯fixãããã¨ãããã¨ãªã®ã§æ¼¢åã¢ã¼ãçµäºã + // åæåããã parent->setEnabledKanjiMode(false); initialize(); @@ -891,22 +927,19 @@ } void KanjiConversionMode::sendCurrentCandidateToServerToRegister() { - // IÉMB - // м¼Í½¼¼ÉÏ··éB + // é¯ã«éä¿¡ã + // çä»®åã¯å¹³ä»®åã«å¤æããã 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), - candidates[current_candidate_index].clone().eraseLast(okuri.length())); // è¼¼ðÁ·B + candidates[current_candidate_index].clone().eraseLast(okuri.length())); // éãä»®åãæ¶ãã } else { sendWordToServerToRegister( HiraganaInputMode::convert(root) + okuri_head, HiraganaInputMode::convert(okuri), - candidates[current_candidate_index].clone().eraseLast(okuri.length())); // è¼¼ðÁ·B + candidates[current_candidate_index].clone().eraseLast(okuri.length())); // éãä»®åãæ¶ãã } } else { sendWordToServerToRegister(HiraganaInputMode::convert(root), candidates[current_candidate_index]); @@ -914,41 +947,41 @@ } void KanjiConversionMode::askServerTheCandidates(bool hasOkuri) { - // è¼¼ª êÎæªÉ+A³¯êÎ-ðt¯éB + // éãä»®åãããã°å é ã«+ãç¡ããã°-ãä»ããã CppCFString query; if(hasOkuri) { query.append('+').append(root); if(SKKConfig::UseKanaToOkuri()) { query.append(SKKConfig::ConvertKanaToOkuri(okuri[0])).append(SKK_MSG_DELIMITER).append(okuri); } else { - // ¨è@¨@+¨r è + // ããããâã+ããr ã query.append(okuri_head).append(SKK_MSG_DELIMITER).append(okuri); } } else { - // ©È@¨@-©È + // ããªãâã-ã㪠query = CppCFString().append('-').append(root); } - // Sp¼¼Æ¼p¼¼ð½¼¼ÉÏ· + // å ¨è§ä»®åã¨åè§ä»®åã平仮åã«å¤æ query = HiraganaInputMode::convert(query); D_PRINTF("query: %s\n",query.toCString(kCFStringEncodingEUC_JP)); - // IÉqËé + // é¯ã«å°ãã CppCFData cfdata_query; cfdata_query.own(query.toCFData()); current_candidate_index = 0; ::askServerTheCandidates(cfdata_query, candidates); - // è¼¼ðt^·é + // éãä»®åãä»ä¸ãã if(hasOkuri) { for(unsigned i = 0; i < candidates.size(); ++ i) { candidates[i] += okuri; } } - // lÏ·ªLø©H + // æ°å¤å¤æãæå¹ãï¼ if(!hasOkuri && ClientConfiguration::theInstance().useNumericConversion() && numconv_.Setup(root.toStdString(kCFStringEncodingUTF8))) { CppCFString normalized(numconv_.NormalizedKey().c_str(), kCFStringEncodingUTF8); @@ -963,7 +996,7 @@ } } -// ño +// éã¡ã³ã void askServerTheCandidates(const CppCFData& query, std::vector<CppCFString>& candidates) { CppCFString reply(ServerConnectionFactory::theInstance().newConnection(). send(kSKKMessageSearch, query, kAquaSKKServerRunLoopMode).getData()); @@ -978,8 +1011,8 @@ void KanjiConversionMode::makeServerRemoveWord() { CppCFString query; if(okuri.length() > 0) { - // ¨è è@¨@+¨r è - // ÇÝÉ¢ÄÍSp¼¼Æ¼p¼¼ð½¼¼ÉÏ· + // ããã éããâã+ããr ã é + // èªã¿ã«ã¤ãã¦ã¯å ¨è§ä»®åã¨åè§ä»®åã平仮åã«å¤æ query.append('+'); if (SKKConfig::UseKanaToOkuri()) { #ifdef DEBUG @@ -990,35 +1023,53 @@ query.append(HiraganaInputMode::convert(root)).append(okuri_head); } query.append(SKK_MSG_DELIMITER).append( - candidates[current_candidate_index].clone().eraseLast(okuri.length())); // è¼¼ðÁ·B + candidates[current_candidate_index].clone().eraseLast(okuri.length())); // éãä»®åãæ¶ãã } else { - // ©È ¼¼@¨@-©È ¼¼ - // ÇÝÉ¢ÄÍSp¼¼Æ¼p¼¼ð½¼¼ÉÏ· + // ã㪠仮åãâã-ã㪠仮å + // èªã¿ã«ã¤ãã¦ã¯å ¨è§ä»®åã¨åè§ä»®åã平仮åã«å¤æ query.append('-').append(HiraganaInputMode::convert(root)).append(SKK_MSG_DELIMITER); query.append(candidates[current_candidate_index]); } - // IÉn· + // é¯ã«æ¸¡ã CppCFData cfdata_query; cfdata_query.own(query.toCFData()); ::makeServerRemoveWord(cfdata_query); } -// ño +// éã¡ã³ã void makeServerRemoveWord(const CppCFData& query) { ServerConnectionFactory::theInstance().newConnection().send(kSKKRemoveThisFromUserDic, query); } void KanjiConversionMode::askServerTheCompletions() { - // Sp¼¼Æ¼p¼¼ð½¼¼ÉÏ· + // å ¨è§ä»®åã¨åè§ä»®åã平仮åã«å¤æ CppCFString query = HiraganaInputMode::convert(root); - // IÉqËé + // é¯ã«å°ãã CppCFData cfdata_query; cfdata_query.own(query.toCFData()); 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) { @@ -1028,7 +1079,7 @@ completions = reply.split(SKK_MSG_DELIMITER); } -// ño +// éã¡ã³ã void sendWordToServerToRegister(const CppCFString& index,const CppCFString& okuri,const CppCFString& kanji) { CppCFData query; @@ -1060,6 +1111,15 @@ ServerConnectionFactory::theInstance().newConnection().send(kSKKRegisterThisToUserDic, query); } +// ãã°ã«å¤æã®çµæãç»é²ãã +void registerToggleEntry(const CppCFString& entry) { + CppCFData query; + + query.own(HiraganaInputMode::convert(entry).toCFData()); + + ServerConnectionFactory::theInstance().newConnection().send(kSKKRegisterToggleEntry, query); +} + void KanjiConversionMode::openCandidatesWindow(OpenDirection mode) { std::vector<CppCFString> cands_without_okuri; unsigned okuri_length = okuri.length(); @@ -1083,7 +1143,7 @@ current_candidate_index, candidates.size(), mode); } -// ño +// éã¡ã³ã void openCandidatesWindow(const CppCFString& str_candidates, unsigned& window_id, unsigned& cands_per_frame, @@ -1092,7 +1152,7 @@ unsigned& current_index, size_t num_of_candidates, SInt16 open_direction) { - // CCüÍðsÁÄ¢éÊuðæ¾B + // ã¤ã³ã©ã¤ã³å ¥åãè¡ã£ã¦ããä½ç½®ãåå¾ã struct OffsetToPosParams offset_to_pos_params; offset_to_pos_params.fRefCon = 0; offset_to_pos_params.fTextOffset = 0; @@ -1103,7 +1163,7 @@ SInt16 qd_x = offset_to_pos_params.fReplyPoint.h; SInt16 qd_y = offset_to_pos_params.fReplyPoint.v; - // T[o[Éèt¯éCFDataðì¬B + // ãµã¼ãã¼ã«éãä»ããCFDataãä½æã CppCFData cands_to_be_attached; cands_to_be_attached.own(str_candidates.toCFData()); CppCFData attachment; @@ -1112,14 +1172,14 @@ attachment.append(CFSwapInt16HostToBig(open_direction)); attachment.append(cands_to_be_attached); - // óM + // éåä¿¡ CppCFData reply(ServerConnectionFactory::theInstance().newConnection(). send(kSKKCreateCandidatesWindow, attachment, kAquaSKKServerRunLoopMode)); - // ÔÁÄ«½f[^ðªðµÄÛ¶B - // +0 óâIðæÊID ³µ2oCg® - // +2 1t[É\¦·éóâÌ ³µ2oCg® - // +4 t[ ³µ2oCg® + // è¿ã£ã¦ãããã¼ã¿ãå解ãã¦ä¿åã + // +0 åè£é¸æç»é¢ID 符å·ç¡ã2ãã¤ãæ´æ° + // +2 1ãã¬ã¼ã ã«è¡¨ç¤ºããåè£ã®æ° 符å·ç¡ã2ãã¤ãæ´æ° + // +4 ãã¬ã¼ã æ° ç¬¦å·ç¡ã2ãã¤ãæ´æ° //CppCFData reply(reply_data); window_id = CFSwapInt16BigToHost(reply.getUInt16(0)); cands_per_frame = CFSwapInt16BigToHost(reply.getUInt16(2)); @@ -1133,7 +1193,7 @@ } } -// ño +// éã¡ã³ã CppCFData newCFDataRefWithWindowID(unsigned window_id) { CppCFData result; result.append(static_cast<UInt16>(CFSwapInt16HostToBig(window_id))); @@ -1142,45 +1202,35 @@ } void KanjiConversionMode::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 KanjiConversionMode::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 KanjiConversionMode::suspendCandidatesWindow() { - ServerConnectionFactory::theInstance().newConnection(). - send(kSKKSuspendCandidatesWindow, newCFDataRefWithWindowID(candidates_window_id)); -} - -void KanjiConversionMode::resumeCandidatesWindow() { - ServerConnectionFactory::theInstance().newConnection(). - send(kSKKResumeCandidatesWindow, newCFDataRefWithWindowID(candidates_window_id)); -} - void KanjiConversionMode::closeCandidatesWindow() { - // EChEID(UInt16)ðÜÞCFDatað쬵AIÖéB + // ã¦ã¤ã³ãã¦ID(UInt16)ãå«ãCFDataãä½æããé¯ã¸éãã ServerConnectionFactory::theInstance().newConnection(). send(kSKKCloseCandidatesWindow, newCFDataRefWithWindowID(candidates_window_id)); } @@ -1192,7 +1242,7 @@ check.insert(CppCFString(numconv.OriginalKey().c_str(), kCFStringEncodingUTF8)); - // õ + // æºå for(std::vector<CppCFString>::iterator iter = master.begin(); iter != master.end(); ++ iter) { if(check.find(*iter) != check.end()) continue; @@ -1200,7 +1250,7 @@ result.push_back(*iter); } - // }[W + // ãã¼ã¸ for(std::vector<CppCFString>::iterator iter = cands.begin(); iter != cands.end(); ++ iter) { CppCFString target(convertNumeric(numconv, *iter)); if(check.find(target) != check.end()) continue; Index: AquaSKK/KanjiConversionMode.h diff -u AquaSKK/KanjiConversionMode.h:1.6.2.4 AquaSKK/KanjiConversionMode.h:1.6.2.5 --- AquaSKK/KanjiConversionMode.h:1.6.2.4 Sat Feb 3 17:52:48 2007 +++ AquaSKK/KanjiConversionMode.h Thu Aug 16 19:58:18 2007 @@ -1,10 +1,10 @@ /* - $Id: KanjiConversionMode.h,v 1.6.2.4 2007/02/03 08:52:48 t-suwa Exp $ + $Id: KanjiConversionMode.h,v 1.6.2.5 2007/08/16 10:58:18 t-suwa Exp $ MacOS X implementation of the SKK input method. Copyright (C) 2002 phonohawk - Copyright (C) 2006 Tomotaka SUWA <t.suw****@mac*****> + Copyright (C) 2006-2007 Tomotaka SUWA <t.suw****@mac*****> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -37,43 +37,47 @@ 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; // ¿Ï·[hÉÈÁĢȢóÔBæªÉ¤à¥à³¢B - static const int STATUS_WHITE_ROOT = 1; // ¤[hÅAè¼¼ðüêéO - static const int STATUS_WHITE_OKURI = 2; // ¤[hÅAè¼¼ðüê½ã - static const int STATUS_BLACK = 3; // ¥[h - static const int STATUS_BLACK_WITH_WINDOW = 4; // ¥[hÅAóâIðEChEªJ¢Ä¢éB - static const int STATUS_PROMPT = 5; // vvgðoµÄ¢éB + static const int STATUS_NULL = 0; // æ¼¢åå¤æã¢ã¼ãã«ãªã£ã¦ããªãç¶æ ãå é ã«â½ãâ¼ãç¡ãã + static const int STATUS_WHITE_ROOT = 1; // â½ã¢ã¼ãã§ãéãä»®åãå ¥ããå + static const int STATUS_WHITE_OKURI = 2; // â½ã¢ã¼ãã§ãéãä»®åãå ¥ããå¾ + static const int STATUS_BLACK = 3; // â¼ã¢ã¼ã + static const int STATUS_BLACK_WITH_WINDOW = 4; // â¼ã¢ã¼ãã§ãåè£é¸æã¦ã¤ã³ãã¦ãéãã¦ããã + static const int STATUS_PROMPT = 5; // ããã³ãããåºãã¦ããã - WordRegisterMode* word_register_mode; // NULLÅÈ¢ÍPêo^[hªN®B + WordRegisterMode* word_register_mode; // NULLã§ãªãæã¯åèªç»é²ã¢ã¼ããèµ·åä¸ã + WordRegisterMode* old_word_register_mode; // ç´åã¾ã§æå¹ã ã£ãåèªç»é²ã¢ã¼ã int status; - CppCFString root; // 輼̳¢ªBáFuèvÈçu¨v - CppCFString okuri; // 輼̪BáFuèvÈçuèv - UniChar okuri_head; // 輼̪ÌAt@xbgBáFuèvÈçurv - CppCFString root_to_display,okuri_to_display; // æÊ\¦pBüÍrÌAt@xbgÈÇàüéB - - 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; // »ÝÌâ®ÌóâÔ + CppCFString root; // éãä»®åã®ç¡ãé¨åãä¾ï¼ãéãããªããããã + CppCFString okuri; // éãä»®åã®é¨åãä¾ï¼ãéãããªãããã + UniChar okuri_head; // éãä»®åã®é ã®ã¢ã«ãã¡ããããä¾ï¼ãéãããªããrã + CppCFString root_to_display,okuri_to_display; // ç»é¢è¡¨ç¤ºç¨ãå ¥åéä¸ã®ã¢ã«ãã¡ããããªã©ãå ¥ãã + + 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; //»ÝÏ·óÔÉÈÁÄ¢é©B + bool henkanModeStatus; //ç¾å¨å¤æç¶æ ã«ãªã£ã¦ãããã virtual void startRegisteringWord(); virtual void askServerTheCandidates(bool hasOkuri); @@ -83,10 +87,10 @@ virtual void openCandidatesWindow(OpenDirection mode = OpenNormal); virtual void goToPrevCandidatesFrame(); virtual void goToNextCandidatesFrame(); - virtual void suspendCandidatesWindow(); - virtual void resumeCandidatesWindow(); virtual void closeCandidatesWindow(); virtual void initialize(); + virtual void resetRegistrationMode(); + virtual void restoreInputMode(); public: KanjiConversionMode(class ParentInputMode& parent); @@ -103,14 +107,15 @@ virtual CppCFString getStringToDisplay(); virtual CppCFString getStringToFix(); - virtual void wordRegistrationFinished(); // WordRegisterModeêpB - virtual void wordRegistrationCanceled(); // WordRegisterModeêpB + virtual void wordRegistrationFinished(); // WordRegisterModeå°ç¨ã + virtual void wordRegistrationCanceled(); // WordRegisterModeå°ç¨ã }; void askServerTheCandidates(const CppCFData& query, std::vector<CppCFString>& candidates); void addCandidate(const CppCFString& candidate, std::vector<CppCFString>& candidates); void sendWordToServerToRegister(const CppCFString& index,const CppCFString& okuri,const CppCFString& kanji); void sendWordToServerToRegister(const CppCFString& index,const CppCFString& kanji); +void registerToggleEntry(const CppCFString& entry); void askServerTheCompletions(const CppCFData& query, std::vector<CppCFString>& completions); void makeServerRemoveWord(const CppCFData& query); void openCandidatesWindow(const CppCFString& str_candidates, Index: AquaSKK/ServerMessageReceiver.h diff -u AquaSKK/ServerMessageReceiver.h:1.5.2.1 AquaSKK/ServerMessageReceiver.h:1.5.2.2 --- AquaSKK/ServerMessageReceiver.h:1.5.2.1 Sat Feb 3 16:53:29 2007 +++ AquaSKK/ServerMessageReceiver.h Thu Aug 16 19:58:18 2007 @@ -1,10 +1,10 @@ /* - $Id: ServerMessageReceiver.h,v 1.5.2.1 2007/02/03 07:53:29 t-suwa Exp $ + $Id: ServerMessageReceiver.h,v 1.5.2.2 2007/08/16 10:58:18 t-suwa Exp $ MacOS X implementation of the SKK input method. Copyright (C) 2002 phonohawk - Copyright (C) 2005 Tomotaka SUWA <t.suw****@mac*****> + Copyright (C) 2005-2007 Tomotaka SUWA <t.suw****@mac*****> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,7 +21,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#pragma once +#ifndef INC__ServerMessageReceiver__ +#define INC__ServerMessageReceiver__ #include <Carbon/Carbon.h> #include <exception> @@ -30,7 +31,7 @@ class CppCFData; /* - NCAg©çÌbZ[Wðó¯æéNXÅ·B + ã¯ã©ã¤ã¢ã³ãããã®ã¡ãã»ã¼ã¸ãåãåãã¯ã©ã¹ã§ãã */ class ServerMessageReceiver: public CppMessagePortServer { @@ -42,10 +43,9 @@ CppCFData createCandidatesWindow(const CppCFData& attachment); CppCFData candidatesWindowNext(const CppCFData& attachment); CppCFData candidatesWindowPrev(const CppCFData& attachment); - void suspendCandidatesWindow(const CppCFData& attachment); - void resumeCandidatesWindow(const CppCFData& attachment); void closeCandidatesWindow(const CppCFData& attachment); void registerThisToUserDic(const CppCFData& attachment); + void registerToggleEntry(const CppCFData& attachment); void removeThisFromUserDic(const CppCFData& attachment); void showAboutBox(); void showPreferencesBox(); @@ -55,3 +55,5 @@ public: static void start(const CFStringRef loopMode); }; + +#endif Index: AquaSKK/ServerMessageReceiver.mm diff -u AquaSKK/ServerMessageReceiver.mm:1.7.2.4 AquaSKK/ServerMessageReceiver.mm:1.7.2.5 --- AquaSKK/ServerMessageReceiver.mm:1.7.2.4 Sat Feb 3 17:52:48 2007 +++ AquaSKK/ServerMessageReceiver.mm Thu Aug 16 19:58:18 2007 @@ -1,10 +1,10 @@ /* -*- objc -*- - $Id: ServerMessageReceiver.mm,v 1.7.2.4 2007/02/03 08:52:48 t-suwa Exp $ + $Id: ServerMessageReceiver.mm,v 1.7.2.5 2007/08/16 10:58:18 t-suwa Exp $ MacOS X implementation of the SKK input method. Copyright (C) 2002 phonohawk - Copyright (C) 2005-2006 Tomotaka SUWA <t.suw****@mac*****> + Copyright (C) 2005-2007 Tomotaka SUWA <t.suw****@mac*****> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -51,13 +51,13 @@ CppCFData ServerMessageReceiver::messageReceived(SInt32 msgid, const CppCFData& packet) { CppCFData reply; - // wb_ðæèo·BNCAgÌPSNªüÁÄ¢éB + // ããããåãåºããã¯ã©ã¤ã¢ã³ãã®PSNãå ¥ã£ã¦ããã BasicMessageHeader header; if(packet.getLength() > 0) { packet.copyData(0, sizeof(BasicMessageHeader), &header); } - // PSN ð Host Endian Éß· + // PSN ã Host Endian ã«æ»ã #define Big2Host32(arg) arg = CFSwapInt32BigToHost(arg) Big2Host32(header.fProcessSerialNumber.highLongOfPSN); Big2Host32(header.fProcessSerialNumber.lowLongOfPSN); @@ -68,10 +68,10 @@ } switch(msgid) { - case kBasicMessageActivated: // NCAgªANeBuÉÈÁ½ + case kBasicMessageActivated: // ã¯ã©ã¤ã¢ã³ããã¢ã¯ãã£ãã«ãªã£ã ClientConnectionFactory::theInstance().setDefaultTarget(header.fProcessSerialNumber); break; - case kBasicMessageDeactivated: { // NCAgªANeBuÅÈÈÁ½ + case kBasicMessageDeactivated: { // ã¯ã©ã¤ã¢ã³ããã¢ã¯ãã£ãã§ãªããªã£ã ProcessSerialNumber psn; psn.highLongOfPSN = 0; psn.lowLongOfPSN = kNoProcess; @@ -79,7 +79,7 @@ ClientConnectionFactory::theInstance().setDefaultTarget(psn); break; } - case kBasicMessageHidePalettes: // pbgðB·æ¤TSM©çw¦ªüÁ½ + case kBasicMessageHidePalettes: // ãã¬ãããé ãããTSMããæ示ãå ¥ã£ã break; case kSKKMessageSearch: reply = searchWord(body); @@ -99,6 +99,9 @@ case kSKKRegisterThisToUserDic: registerThisToUserDic(body); break; + case kSKKRegisterToggleEntry: + registerToggleEntry(body); + break; case kSKKRemoveThisFromUserDic: removeThisFromUserDic(body); break; @@ -141,7 +144,7 @@ std::string query = data.toStdString(kCFStringEncodingUTF8).substr(1); std::string result; - // è èH + // éãããï¼ if(data[0] == '+') { int pos = query.find_first_of(SKK_MSG_DELIMITER); @@ -159,7 +162,7 @@ } CppCFData ServerMessageReceiver::createCandidatesWindow(const CppCFData& attachment) { - // ÇÁf[^ƵÄQuickDrawÀWÆUniCharÌzñðæéB + // 追å ãã¼ã¿ã¨ãã¦QuickDraw座æ¨ã¨UniCharã®é åãåãã SInt16 qd_x = CFSwapInt16BigToHost(attachment.getSInt16(0)); SInt16 qd_y = CFSwapInt16BigToHost(attachment.getSInt16(2)); int showLast = CFSwapInt16BigToHost(attachment.getSInt16(4)); @@ -208,14 +211,6 @@ return reply; } -void ServerMessageReceiver::suspendCandidatesWindow(const CppCFData& attachment) { - CandidatesManager::sharedManager().suspendWindow(CFSwapInt16BigToHost(attachment.getUInt16(0))); -} - -void ServerMessageReceiver::resumeCandidatesWindow(const CppCFData& attachment) { - CandidatesManager::sharedManager().resumeWindow(CFSwapInt16BigToHost(attachment.getUInt16(0))); -} - void ServerMessageReceiver::closeCandidatesWindow(const CppCFData& attachment) { CandidatesManager::sharedManager().closeWindow(CFSwapInt16BigToHost(attachment.getUInt16(0))); } @@ -225,7 +220,7 @@ std::string query = data.toStdString(kCFStringEncodingUTF8).substr(1); - // è èH + // éãããï¼ if(data[0] == '+') { int pos1 = query.find_first_of(SKK_MSG_DELIMITER); int pos2 = query.find_first_of(SKK_MSG_DELIMITER, pos1 + 1); @@ -245,6 +240,15 @@ } } +void ServerMessageReceiver::registerToggleEntry(const CppCFData& attachment) { + CppCFString data(attachment.getData()); + + std::string key = data.toStdString(kCFStringEncodingUTF8); + + // è¦åºãèªã ãç»é²ãã + DictionarySet::theInstance().RegisterOkuriNasi(key, ""); +} + void ServerMessageReceiver::removeThisFromUserDic(const CppCFData& attachment) { CppCFString data(attachment.getData()); @@ -255,7 +259,7 @@ std::string key = query.substr(0, pos); std::string kanji = query.substr(pos + 1); - // è èH + // éãããï¼ if(data[0] == '+') { DictionarySet::theInstance().RemoveOkuriAri(key, kanji); } else {