From t-suwa @ users.sourceforge.jp Sat Jun 3 10:23:18 2006 From: t-suwa @ users.sourceforge.jp (Tomotaka SUWA) Date: Sat, 3 Jun 2006 10:23:18 +0900 Subject: [aquaskk-changes 224] CVS update: AquaSKK Message-ID: <20060603012318.C92312AC00E@users.sourceforge.jp> Index: AquaSKK/AsciiConversionMode.cpp diff -u AquaSKK/AsciiConversionMode.cpp:1.5 AquaSKK/AsciiConversionMode.cpp:1.6 --- AquaSKK/AsciiConversionMode.cpp:1.5 Wed May 17 01:13:10 2006 +++ AquaSKK/AsciiConversionMode.cpp Sat Jun 3 10:23:18 2006 @@ -1,5 +1,5 @@ /* - $Id: AsciiConversionMode.cpp,v 1.5 2006/05/16 16:13:10 t-suwa Exp $ + $Id: AsciiConversionMode.cpp,v 1.6 2006/06/03 01:23:18 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -252,9 +252,15 @@ sendCurrentCandidateToServerToRegister(); // ?????????????????? - parent->fix(candidates[current_candidate_index]); + if(ClientConfiguration::theInstance().useNumericConversion()) { + parent->fix(numconv_.Apply(candidates[current_candidate_index])); + } else { + parent->fix(candidates[current_candidate_index]); + } + parent->setEnabledAsciiConversionMode(false); initialize(); + parent->handleInput(skkchar); } else if(status == STATUS_BLACK_WITH_WINDOW) { @@ -311,6 +317,9 @@ // ????????????????????B // ????????I?? CppCFString str_to_fix(candidates[current_candidate_index]); + if(ClientConfiguration::theInstance().useNumericConversion()) { + str_to_fix = numconv_.Apply(str_to_fix); + } str_to_fix.eraseLast(1); // ???? @@ -401,7 +410,11 @@ sendCurrentCandidateToServerToRegister(); // ????????? - parent->fix(candidates[current_candidate_index]); + if(ClientConfiguration::theInstance().useNumericConversion()) { + parent->fix(numconv_.Apply(candidates[current_candidate_index])); + } else { + parent->fix(candidates[current_candidate_index]); + } if(status == STATUS_BLACK_WITH_WINDOW) { // ?????????? @@ -540,8 +553,12 @@ return CppCFString().append(0x25bd).append(index); } else if(status == STATUS_BLACK || status == STATUS_BLACK_WITH_WINDOW) { + CppCFString str = candidates[current_candidate_index]; + if(ClientConfiguration::theInstance().useNumericConversion()) { + str = numconv_.Apply(str); + } // ?????? - return CppCFString().append(0x25bc).append(candidates[current_candidate_index]); + return CppCFString().append(0x25bc).append(str); } else if(status == STATUS_PROMPT) { // [?????][??] @@ -558,16 +575,22 @@ } else if(status == STATUS_BLACK) { result = candidates[current_candidate_index]; - + if(ClientConfiguration::theInstance().useNumericConversion()) { + result = numconv_.Apply(candidates[current_candidate_index]); + } + // ???? sendCurrentCandidateToServerToRegister(); } else if(status == STATUS_BLACK_WITH_WINDOW) { result = candidates[current_candidate_index]; - + if(ClientConfiguration::theInstance().useNumericConversion()) { + result = numconv_.Apply(result); + } + // ???? sendCurrentCandidateToServerToRegister(); - + // ?????????? closeCandidatesWindow(); } @@ -594,12 +617,28 @@ } void AsciiConversionMode::askServerTheCandidates() { + CppCFString str('-'); + + str.append(index); + // ahya???-ahya CppCFData query; - query.own(CppCFString().append('-').append(index).toCFData()); + query.own(str.toCFData()); current_candidate_index = 0; - ::askServerTheCandidates(query,candidates); + ::askServerTheCandidates(query, candidates); + + // ????????? + if(ClientConfiguration::theInstance().useNumericConversion() && numconv_.Setup(str)) { + std::vector result; + CppCFData cfdata; + + cfdata.own(numconv_.NormalizedKey().toCFData()); + + ::askServerTheCandidates(cfdata, result); + + candidates.insert(candidates.end(), result.begin(), result.end()); + } } void AsciiConversionMode::askServerTheCompletions() { @@ -631,7 +670,11 @@ std::vector cands; std::vector::const_iterator ite; for(ite = candidates.begin() + (show_cands_window_after_Nth_cand - 1); ite != candidates.end(); ++ ite) { - cands.push_back(*ite); + if(ClientConfiguration::theInstance().useNumericConversion()) { + cands.push_back(numconv_.Apply(*ite)); + } else { + cands.push_back(*ite); + } } ::openCandidatesWindow(join(SKK_MSG_DELIMITER, cands), Index: AquaSKK/AsciiConversionMode.h diff -u AquaSKK/AsciiConversionMode.h:1.4 AquaSKK/AsciiConversionMode.h:1.5 --- AquaSKK/AsciiConversionMode.h:1.4 Wed May 17 01:13:10 2006 +++ AquaSKK/AsciiConversionMode.h Sat Jun 3 10:23:18 2006 @@ -1,5 +1,5 @@ /* - $Id: AsciiConversionMode.h,v 1.4 2006/05/16 16:13:10 t-suwa Exp $ + $Id: AsciiConversionMode.h,v 1.5 2006/06/03 01:23:18 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -28,12 +28,14 @@ #include "ChildInputMode.h" #include "RegistrationStarter.h" #include "CppCFString.h" +#include "NumericConverter.h" class ParentInputMode; class WordRegisterMode; class AsciiConversionMode : public ChildInputMode , public RegistrationStarter { bool handleInputChar(SKKChar skkchar); + NumericConverter numconv_; protected: static const int STATUS_NULL = 0; // ??????????????????B?????????? Index: AquaSKK/BIMClientServer.h diff -u AquaSKK/BIMClientServer.h:1.5 AquaSKK/BIMClientServer.h:1.6 --- AquaSKK/BIMClientServer.h:1.5 Fri May 5 00:27:02 2006 +++ AquaSKK/BIMClientServer.h Sat Jun 3 10:23:18 2006 @@ -1,5 +1,5 @@ /* - $Id: BIMClientServer.h,v 1.5 2006/05/04 15:27:02 t-suwa Exp $ + $Id: BIMClientServer.h,v 1.6 2006/06/03 01:23:18 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -110,7 +110,8 @@ kBasicMessageIsSkkEggLikeNewline = 500, // kBasicMessageIsNumericKeypad_HalfWidth = 501, kBasicMessageIsAsciiModeStartup = 502, - kBasicMessageKbdLayoutId = 503, + kBasicMessageUseNumericConversion = 503, + kBasicMessageKbdLayoutId = 504, }; // ????????????????????? Index: AquaSKK/BIMComponent.cpp diff -u AquaSKK/BIMComponent.cpp:1.5 AquaSKK/BIMComponent.cpp:1.6 --- AquaSKK/BIMComponent.cpp:1.5 Wed Apr 26 22:36:12 2006 +++ AquaSKK/BIMComponent.cpp Sat Jun 3 10:23:18 2006 @@ -1,5 +1,5 @@ /* - $Id: BIMComponent.cpp,v 1.5 2006/04/26 13:36:12 t-suwa Exp $ + $Id: BIMComponent.cpp,v 1.6 2006/06/03 01:23:18 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -52,12 +52,51 @@ static ComponentResult CallBIMFunctionWithStorage(Handle inStorage, ComponentParameters* inParams, ProcPtr inProcPtr, SInt32 inProcInfo); +static const char* componentDescription(int what) { + switch(what) { + case kComponentOpenSelect: + return "kComponentOpenSelect"; + case kComponentCloseSelect: + return "kComponentCloseSelect"; + case kComponentCanDoSelect: + return "kComponentCanDoSelect"; + case kComponentVersionSelect: + return "kComponentVersionSelect"; + case kCMGetScriptLangSupport: + return "kCMGetScriptLangSupport"; + case kCMInitiateTextService: + return "kCMInitiateTextService"; + case kCMTerminateTextService: + return "kCMTerminateTextService"; + case kCMActivateTextService: + return "kCMActivateTextService"; + case kCMDeactivateTextService: + return "kCMDeactivateTextService"; + case kCMTextServiceEvent: + return "kCMTextServiceEvent"; + case kCMGetTextServiceMenu: + return "kCMGetTextServiceMenu"; + case kCMFixTextService: + return "kCMFixTextService"; + case kCMHidePaletteWindows: + return "kCMHidePaletteWindows"; + case kCMCopyTextServiceInputModeList: + return "kCMCopyTextServiceInputModeList"; + case kCMSetTextServiceProperty: + return "kCMSetTextServiceProperty"; + default: + return "*** Unknown ***"; + } +} + // ?????????????????extern "C"???????????????????????? extern "C" pascal ComponentResult BIMComponentDispatch(ComponentParameters* inParams, Handle inSessionHandle) { ComponentResult result; result = noErr; + //std::cerr << "Component Dispatch: " << componentDescription(inParams->what) << std::endl; + switch(inParams->what) { // Component Manager????? case kComponentOpenSelect: Index: AquaSKK/ChangeLog diff -u AquaSKK/ChangeLog:1.25 AquaSKK/ChangeLog:1.26 --- AquaSKK/ChangeLog:1.25 Tue May 23 23:47:01 2006 +++ AquaSKK/ChangeLog Sat Jun 3 10:23:18 2006 @@ -1,3 +1,20 @@ +2006-06-03 Tomotaka SUWA + + * NumericConverter.h, NumericConverter.cpp: ??????????? + ????????? + + * AsciiConversionMode.*, KanjiConversionMode.*: ????????? + ???? + + * BIMClientServer.h: kBasicMessageUseNumericConversion ???? + + * ClientConfiguration.*: ??????????????? + + * ServerMessageReceiver.mm: ??????????????? + + * skkserv.cpp: ?????????????????A???????? + ????????B + 2006-05-23 Tomotaka SUWA * Japanese.lproj/Preferences.nib/keyedobjects.nib: ???????? Index: AquaSKK/ClientConfiguration.cpp diff -u AquaSKK/ClientConfiguration.cpp:1.4 AquaSKK/ClientConfiguration.cpp:1.5 --- AquaSKK/ClientConfiguration.cpp:1.4 Wed Apr 26 22:36:12 2006 +++ AquaSKK/ClientConfiguration.cpp Sat Jun 3 10:23:18 2006 @@ -1,5 +1,5 @@ /* - $Id: ClientConfiguration.cpp,v 1.4 2006/04/26 13:36:12 t-suwa Exp $ + $Id: ClientConfiguration.cpp,v 1.5 2006/06/03 01:23:18 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -41,7 +41,8 @@ void ClientConfiguration::load() { skkEggLikeNewline = getOption(kBasicMessageIsSkkEggLikeNewline); numericKeypad_HalfWidth = getOption(kBasicMessageIsNumericKeypad_HalfWidth); - asciiModeStartup_ = getOption(kBasicMessageIsAsciiModeStartup); + asciiModeStartup_ = getOption(kBasicMessageIsAsciiModeStartup); + useNumericConversion_ = getOption(kBasicMessageUseNumericConversion); kbdLayoutId_ = getOption(kBasicMessageKbdLayoutId); } @@ -72,6 +73,11 @@ return asciiModeStartup_; } +bool ClientConfiguration::useNumericConversion() const { + return useNumericConversion_; +} + int ClientConfiguration::kbdLayoutId() const { return kbdLayoutId_; } + Index: AquaSKK/ClientConfiguration.h diff -u AquaSKK/ClientConfiguration.h:1.4 AquaSKK/ClientConfiguration.h:1.5 --- AquaSKK/ClientConfiguration.h:1.4 Wed Apr 26 22:36:12 2006 +++ AquaSKK/ClientConfiguration.h Sat Jun 3 10:23:18 2006 @@ -1,10 +1,10 @@ /* - $Id: ClientConfiguration.h,v 1.4 2006/04/26 13:36:12 t-suwa Exp $ + $Id: ClientConfiguration.h,v 1.5 2006/06/03 01:23:18 t-suwa Exp $ MacOS X implementation of the SKK input method. Copyright (C) 2002 phonohawk - Copyright (C) 2005 Tomotaka SUWA + Copyright (C) 2005-2006 Tomotaka SUWA 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__ClientConfiguration__ +#define INC__ClientConfiguration__ /* ????????????????????Singleton??? @@ -38,6 +39,7 @@ bool skkEggLikeNewline; bool numericKeypad_HalfWidth; bool asciiModeStartup_; + bool useNumericConversion_; int kbdLayoutId_; ClientConfiguration(); @@ -53,5 +55,8 @@ bool isSkkEggLikeNewline() const; bool isNumericKeypad_HalfWidth() const; bool isAsciiModeStartup() const; + bool useNumericConversion() const; int kbdLayoutId() const; }; + +#endif // INC__ClientConfiguration__ Index: AquaSKK/Info-AquaSKKInputMethod.plist diff -u AquaSKK/Info-AquaSKKInputMethod.plist:1.6 AquaSKK/Info-AquaSKKInputMethod.plist:1.7 --- AquaSKK/Info-AquaSKKInputMethod.plist:1.6 Wed Apr 26 23:36:39 2006 +++ AquaSKK/Info-AquaSKKInputMethod.plist Sat Jun 3 10:23:18 2006 @@ -19,11 +19,11 @@ CFBundlePackageType thng CFBundleShortVersionString - 3.0 + 3.1 CFBundleSignature askk CFBundleVersion - 2006-04-27 + 2006-06-03 CSResourcesFileMapped tsInputMethodIconFileKey Index: AquaSKK/Info-AquaSKKServer.plist diff -u AquaSKK/Info-AquaSKKServer.plist:1.6 AquaSKK/Info-AquaSKKServer.plist:1.7 --- AquaSKK/Info-AquaSKKServer.plist:1.6 Wed Apr 26 23:36:39 2006 +++ AquaSKK/Info-AquaSKKServer.plist Sat Jun 3 10:23:18 2006 @@ -19,11 +19,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 3.0 + 3.1 CFBundleSignature askk CFBundleVersion - 2006-04-27 + 2006-06-03 NSMainNibFile Principal NSPrincipalClass Index: AquaSKK/KanjiConversionMode.cpp diff -u AquaSKK/KanjiConversionMode.cpp:1.5 AquaSKK/KanjiConversionMode.cpp:1.6 --- AquaSKK/KanjiConversionMode.cpp:1.5 Wed May 17 01:13:10 2006 +++ AquaSKK/KanjiConversionMode.cpp Sat Jun 3 10:23:18 2006 @@ -1,5 +1,5 @@ /* - $Id: KanjiConversionMode.cpp,v 1.5 2006/05/16 16:13:10 t-suwa Exp $ + $Id: KanjiConversionMode.cpp,v 1.6 2006/06/03 01:23:18 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -406,7 +406,11 @@ sendCurrentCandidateToServerToRegister(); // ?? - parent->fix(candidates[current_candidate_index]); + if(ClientConfiguration::theInstance().useNumericConversion()) { + parent->fix(numconv_.Apply(candidates[current_candidate_index])); + } else { + parent->fix(candidates[current_candidate_index]); + } initialize(); return handleInput(skkchar); // ??? @@ -470,7 +474,11 @@ sendCurrentCandidateToServerToRegister(); // ???????A?????????? - parent->fix(candidates[current_candidate_index]); + if(ClientConfiguration::theInstance().useNumericConversion()) { + parent->fix(numconv_.Apply(candidates[current_candidate_index])); + } else { + parent->fix(candidates[current_candidate_index]); + } parent->setEnabledKanjiMode(false); initialize(); @@ -576,6 +584,9 @@ // ????????????????????B // ????????I?? CppCFString str_to_fix(candidates[current_candidate_index]); + if(ClientConfiguration::theInstance().useNumericConversion()) { + str_to_fix = numconv_.Apply(str_to_fix); + } str_to_fix.eraseLast(1); // ???? @@ -584,7 +595,6 @@ // ??? parent->fix(str_to_fix); parent->display(CppCFString()); - parent->setEnabledKanjiMode(false); initialize(); } @@ -682,7 +692,11 @@ sendCurrentCandidateToServerToRegister(); // ????????? - parent->fix(candidates[current_candidate_index]); + if(ClientConfiguration::theInstance().useNumericConversion()) { + parent->fix(numconv_.Apply(candidates[current_candidate_index])); + } else { + parent->fix(candidates[current_candidate_index]); + } if (status == STATUS_BLACK_WITH_WINDOW) { // ?????????? @@ -873,8 +887,12 @@ 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 = candidates[current_candidate_index]; + if(ClientConfiguration::theInstance().useNumericConversion()) { + str = numconv_.Apply(str); + } // ?????? - return CppCFString().append(0x25bc).append(candidates[current_candidate_index]); + return CppCFString().append(0x25bc).append(str); } else if (status == STATUS_PROMPT) { // [?????][??] @@ -895,16 +913,22 @@ } else if (status == STATUS_BLACK) { result = candidates[current_candidate_index]; - + if(ClientConfiguration::theInstance().useNumericConversion()) { + result = numconv_.Apply(candidates[current_candidate_index]); + } + // ???? sendCurrentCandidateToServerToRegister(); } else if (status == STATUS_BLACK_WITH_WINDOW) { result = candidates[current_candidate_index]; - + if(ClientConfiguration::theInstance().useNumericConversion()) { + result = numconv_.Apply(result); + } + // ???? sendCurrentCandidateToServerToRegister(); - + // ?????????? closeCandidatesWindow(); } @@ -984,6 +1008,18 @@ current_candidate_index = 0; ::askServerTheCandidates(cfdata_query, candidates); + + // ????????? + if(ClientConfiguration::theInstance().useNumericConversion() && numconv_.Setup(query)) { + std::vector result; + CppCFData cfdata; + + cfdata.own(numconv_.NormalizedKey().toCFData()); + + ::askServerTheCandidates(cfdata, result); + + candidates.insert(candidates.end(), result.begin(), result.end()); + } } // ???? @@ -1064,8 +1100,16 @@ void sendWordToServerToRegister(const CppCFString& index,const CppCFString& kanji) { CppCFData query; + CppCFString str; + NumericConverter conv; - query.own(CppCFString().append('-').append(index).append(SKK_MSG_DELIMITER).append(kanji.encode()).toCFData()); + if(ClientConfiguration::theInstance().useNumericConversion() && conv.Setup(index)) { + str = conv.NormalizedKey(); + } else { + str = index; + } + + query.own(CppCFString().append('-').append(str).append(SKK_MSG_DELIMITER).append(kanji.encode()).toCFData()); ServerConnectionFactory::theInstance().newConnection().send(kSKKRegisterThisToUserDic, query); } @@ -1081,7 +1125,11 @@ } else { for(std::vector::const_iterator ite = candidates.begin() + (show_cands_window_after_Nth_cand - 1); ite != candidates.end(); ++ ite) { - cands_without_okuri.push_back(*ite); + if(ClientConfiguration::theInstance().useNumericConversion()) { + cands_without_okuri.push_back(numconv_.Apply(*ite)); + } else { + cands_without_okuri.push_back(*ite); + } } } Index: AquaSKK/KanjiConversionMode.h diff -u AquaSKK/KanjiConversionMode.h:1.4 AquaSKK/KanjiConversionMode.h:1.5 --- AquaSKK/KanjiConversionMode.h:1.4 Wed May 17 01:13:10 2006 +++ AquaSKK/KanjiConversionMode.h Sat Jun 3 10:23:18 2006 @@ -1,5 +1,5 @@ /* - $Id: KanjiConversionMode.h,v 1.4 2006/05/16 16:13:10 t-suwa Exp $ + $Id: KanjiConversionMode.h,v 1.5 2006/06/03 01:23:18 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -28,6 +28,7 @@ #include "ChildInputMode.h" #include "RegistrationStarter.h" #include "CppCFString.h" +#include "NumericConverter.h" class CppCFData; class ParentInputMode; @@ -35,6 +36,7 @@ class KanjiConversionMode: public ChildInputMode, public RegistrationStarter { bool handleInputChar(SKKChar skkchar); + NumericConverter numconv_; protected: static const int STATUS_NULL = 0; // ????????????????B?????????? @@ -44,7 +46,7 @@ static const int STATUS_BLACK_WITH_WINDOW = 4; // ?????????????????????? static const int STATUS_PROMPT = 5; // ???????????B - class WordRegisterMode* word_register_mode; // NULL????????????????? + WordRegisterMode* word_register_mode; // NULL????????????????? int status; CppCFString root; // ?????????????????????? Index: AquaSKK/NumericConverter.cpp diff -u /dev/null AquaSKK/NumericConverter.cpp:1.1 --- /dev/null Sat Jun 3 10:23:18 2006 +++ AquaSKK/NumericConverter.cpp Sat Jun 3 10:23:18 2006 @@ -0,0 +1,302 @@ +/* + $Id: NumericConverter.cpp,v 1.1 2006/06/03 01:23:18 t-suwa Exp $ + + MacOS X implementation of the SKK input method. + + Copyright (C) 2006 Tomotaka SUWA + + 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 + the Free Software Foundation; either version 2 of the License, or + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include "NumericConverter.h" + +// ====================================================================== +// 数値変換を実装するユーティリティ関数 +// ====================================================================== + +// 1024 → 1024 +std::string ConvertType1(const std::string& src) { + std::string result; + + for(unsigned i = 0; i < src.size(); ++ i) { + result += 0xa3; + result += (src[i] + 0x80); + } + + return result; +} + +// 1024 → 一〇二四 +std::string ConvertType2(const std::string& src) { + std::string result; + + for(unsigned i = 0; i < src.size(); ++ i) { + switch(src[i]) { + case '0': + result += "〇"; + break; + case '1': + result += "一"; + break; + case '2': + result += "二"; + break; + case '3': + result += "三"; + break; + case '4': + result += "四"; + break; + case '5': + result += "五"; + break; + case '6': + result += "六"; + break; + case '7': + result += "七"; + break; + case '8': + result += "八"; + break; + case '9': + result += "九"; + break; + } + } + + return result; +} + +// 1024 → 千二十四 +std::string ConvertType3(const std::string& src) { + const char* unit1[] = { "", "万", "億", "兆", "京", "垓" }; + const char* unit2[] = { "十", "百", "千" }; + std::string result; + + if(src.size() == 1 && src[0] == '0') { + return "〇"; + } + + for(unsigned i = src.find_first_not_of("0"); i < src.size(); ++ i) { + switch(src[i]) { + case '2': + result += "二"; + break; + case '3': + result += "三"; + break; + case '4': + result += "四"; + break; + case '5': + result += "五"; + break; + case '6': + result += "六"; + break; + case '7': + result += "七"; + break; + case '8': + result += "八"; + break; + case '9': + result += "九"; + break; + } + + int distance = src.size() - i; + + // 「十、百、千」以外の位 + if(distance > 4 && (distance - 1) % 4 == 0) { + if(src[i] == '1') { + result += "一"; + } + result += unit1[(distance - 1) / 4]; + } else { + // 十の位以上 + if(distance > 1) { + if(src[i] != '0') { + // 「一千万」の処理 + if(src[i] == '1' && distance > 4 && (distance - 2) % 4 == 2) { + result += "一"; + } + result += unit2[(distance - 2) % 4]; + } + } else { + // 一の位 + if(src[i] == '1') { + result += "一"; + } + } + } + } + + return result; +} + +// 数値再変換(AquaSKK では無視) +std::string ConvertType4(const std::string& src) { + return src; +} + +// 1024 → 壱阡弐拾四 +std::string ConvertType5(const std::string& src) { + const char* unit1[] = { "", "萬", "億", "兆", "京", "垓" }; + const char* unit2[] = { "拾", "百", "阡" }; + std::string result; + + if(src.size() == 1 && src[0] == '0') { + return "零"; + } + + for(unsigned i = src.find_first_not_of("0"); i < src.size(); ++ i) { + switch(src[i]) { + case '1': + result += "壱"; + break; + case '2': + result += "弐"; + break; + case '3': + result += "参"; + break; + case '4': + result += "四"; + break; + case '5': + result += "伍"; + break; + case '6': + result += "六"; + break; + case '7': + result += "七"; + break; + case '8': + result += "八"; + break; + case '9': + result += "九"; + break; + } + + int distance = src.size() - i; + + // 「十、百、千」以外の位 + if(distance > 4 && (distance - 1) % 4 == 0) { + result += unit1[(distance - 1) / 4]; + } else { + // 十の位以上 + if(distance > 1) { + if(src[i] != '0') { + result += unit2[(distance - 2) % 4]; + } + } + } + } + + return result; +} + +// 34 → 3四 +std::string ConvertType9(const std::string& src) { + return ConvertType1(src.substr(0, 1)) + ConvertType2(src.substr(1, 1)); +} + +// ====================================================================== +// クラスインタフェース +// ====================================================================== + +// 検索キーの正規化 +bool NumericConverter::Setup(const CppCFString& query) { + params_.clear(); + original_ = query; + + const char* numbers = "0123456789"; + std::string src(query.toStdString()); + std::string::size_type from = src.find_first_of(numbers); + + // 連続した数値を見つけたら vector に格納し、"#" に正規化 + while(from != std::string::npos) { + std::string::size_type to = src.find_first_not_of(numbers, from); + params_.push_back(src.substr(from, to - from)); + src.replace(from, to - from, "#"); + + from = src.find_first_of(numbers, to); + } + + normalized_ = CppCFString(src.c_str(), kCFStringEncodingEUC_JP); + + return !params_.empty(); +} + +// オリジナルのキー +CppCFString NumericConverter::OriginalKey() const { + return original_; +} + +// 正規化されたキー +CppCFString NumericConverter::NormalizedKey() const { + if(params_.empty()) return original_; + + return normalized_; +} + +// 数値変換を適用する +CppCFString NumericConverter::Apply(const CppCFString& candidate) const { + if(params_.empty()) return candidate; + + const char* numbers = "0123459"; + std::string result; + std::string src(candidate.toStdString()); + std::string::size_type pos = 0; + int index = 0; + + do { + pos = src.find_first_of(numbers, pos); + if(0 < pos && src[pos - 1] == '#') { + switch(src[pos]) { + case '0': // 無変換 + src.replace(pos - 1, 2, params_[index]); + break; + case '1': // 半角→全角変換 + src.replace(pos - 1, 2, ConvertType1(params_[index])); + break; + case '2': // 漢数字位取りなし + src.replace(pos - 1, 2, ConvertType2(params_[index])); + break; + case '3': // 漢数字位取りあり + src.replace(pos - 1, 2, ConvertType3(params_[index])); + break; + case '4': // 数値再変換(AquaSKK では無変換) + src.replace(pos - 1, 2, ConvertType4(params_[index])); + break; + case '5': // 小切手・手形 + src.replace(pos - 1, 2, ConvertType5(params_[index])); + break; + case '9': // 棋譜入力用 + src.replace(pos - 1, 2, ConvertType9(params_[index])); + break; + } + pos += params_[index].size(); + ++ index; + } + } while(pos != std::string::npos); + + return CppCFString(src.c_str(), kCFStringEncodingEUC_JP); +} Index: AquaSKK/NumericConverter.h diff -u /dev/null AquaSKK/NumericConverter.h:1.1 --- /dev/null Sat Jun 3 10:23:18 2006 +++ AquaSKK/NumericConverter.h Sat Jun 3 10:23:18 2006 @@ -0,0 +1,45 @@ +/* -*- c++ -*- + $Id: NumericConverter.h,v 1.1 2006/06/03 01:23:18 t-suwa Exp $ + + MacOS X implementation of the SKK input method. + + Copyright (C) 2006 Tomotaka SUWA + + 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 + the Free Software Foundation; either version 2 of the License, or + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef INC__NumericConverter__ +#define INC__NumericConverter__ + +#include +#include +#include "CppCFString.h" + +// 数値変換をサポートするユーティリティ + +class NumericConverter { + CppCFString original_; + CppCFString normalized_; + std::vector params_; + +public: + bool Setup(const CppCFString& query); + + CppCFString OriginalKey() const; + CppCFString NormalizedKey() const; + CppCFString Apply(const CppCFString& candidate) const; +}; + +#endif // INC__NumericConverter__ Index: AquaSKK/ServerMessageReceiver.mm diff -u AquaSKK/ServerMessageReceiver.mm:1.5 AquaSKK/ServerMessageReceiver.mm:1.6 --- AquaSKK/ServerMessageReceiver.mm:1.5 Wed Apr 26 22:36:12 2006 +++ AquaSKK/ServerMessageReceiver.mm Sat Jun 3 10:23:18 2006 @@ -1,5 +1,5 @@ /* -*- objc -*- - $Id: ServerMessageReceiver.mm,v 1.5 2006/04/26 13:36:12 t-suwa Exp $ + $Id: ServerMessageReceiver.mm,v 1.6 2006/06/03 01:23:18 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -118,13 +118,16 @@ break; case kBasicMessageIsNumericKeypad_HalfWidth: reply = valueForKey(KEY_numkeypad_use_halfwidth); - break; + break; case kBasicMessageIsAsciiModeStartup: reply = valueForKey(KEY_force_ascii_mode_startup); - break; + break; + case kBasicMessageUseNumericConversion: + reply = valueForKey(KEY_use_numeric_conversion); + break; case kBasicMessageKbdLayoutId: reply = valueForKey(KEY_keyboard_layout_id); - break; + break; default: break; } Index: AquaSKK/skkserv.cpp diff -u AquaSKK/skkserv.cpp:1.2 AquaSKK/skkserv.cpp:1.3 --- AquaSKK/skkserv.cpp:1.2 Wed Apr 26 22:36:12 2006 +++ AquaSKK/skkserv.cpp Sat Jun 3 10:23:18 2006 @@ -1,5 +1,5 @@ /* -*- c++ -*- - $Id: skkserv.cpp,v 1.2 2006/04/26 13:36:12 t-suwa Exp $ + $Id: skkserv.cpp,v 1.3 2006/06/03 01:23:18 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -122,7 +122,7 @@ fprintf(stderr, "AquaSKK(skkserv): Unknown command[0x%02x]\n", cmd); break; } - } while(cmd != '0'); + } while(sock.good() && cmd != '0'); sock.close(); std::cerr << "AquaSKK(skkserv): session closed[" << peer << "]" << std::endl; From t-suwa @ users.sourceforge.jp Sat Jun 3 10:23:19 2006 From: t-suwa @ users.sourceforge.jp (Tomotaka SUWA) Date: Sat, 3 Jun 2006 10:23:19 +0900 Subject: [aquaskk-changes 225] CVS update: AquaSKK/AquaSKK.xcodeproj Message-ID: <20060603012319.066432AC011@users.sourceforge.jp> Index: AquaSKK/AquaSKK.xcodeproj/project.pbxproj diff -u AquaSKK/AquaSKK.xcodeproj/project.pbxproj:1.9 AquaSKK/AquaSKK.xcodeproj/project.pbxproj:1.10 --- AquaSKK/AquaSKK.xcodeproj/project.pbxproj:1.9 Wed May 17 01:13:10 2006 +++ AquaSKK/AquaSKK.xcodeproj/project.pbxproj Sat Jun 3 10:23:18 2006 @@ -152,41 +152,12 @@ D3D0C6F9086EECA800319954 /* AsciiConversionMode.h in Headers */ = {isa = PBXBuildFile; fileRef = D3D0C6F7086EECA800319954 /* AsciiConversionMode.h */; }; D3D46F7B0872F755009707C1 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D3D46F790872F755009707C1 /* InfoPlist.strings */; }; D3D841440A1A310300E79929 /* Mutex.h in Headers */ = {isa = PBXBuildFile; fileRef = D3D841430A1A310300E79929 /* Mutex.h */; }; + D3EDBC080A23611F000C4C11 /* NumericConverter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D3EDBC060A23611F000C4C11 /* NumericConverter.cpp */; }; + D3EDBC090A23611F000C4C11 /* NumericConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = D3EDBC070A23611F000C4C11 /* NumericConverter.h */; }; D3F94BA708E3A6F500496C35 /* PrivateRunLoop.h in Headers */ = {isa = PBXBuildFile; fileRef = D3F94BA508E3A6F500496C35 /* PrivateRunLoop.h */; }; D3F94BA908E3A6F500496C35 /* PrivateRunLoop.h in Headers */ = {isa = PBXBuildFile; fileRef = D3F94BA508E3A6F500496C35 /* PrivateRunLoop.h */; }; /* End PBXBuildFile section */ -/* Begin PBXBuildStyle section */ - 01A38B260056394F1153986C /* Development */ = { - isa = PBXBuildStyle; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = AquaSKK_Prefix.h; - OPTIMIZATION_CFLAGS = "-O0"; - ZERO_LINK = YES; - }; - name = Development; - }; - 01A38B270056394F1153986C /* Deployment */ = { - isa = PBXBuildStyle; - buildSettings = { - COPY_PHASE_STRIP = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = AquaSKK_Prefix.h; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - MACOSX_DEPLOYMENT_TARGET = ""; - OPTIMIZATION_CFLAGS = "-O2"; - }; - name = Deployment; - }; -/* End PBXBuildStyle section */ - /* Begin PBXContainerItemProxy section */ 849E0FF105502281009C3C25 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -272,6 +243,8 @@ D3D0C6F7086EECA800319954 /* AsciiConversionMode.h */ = {isa = PBXFileReference; fileEncoding = "-2147483647"; lastKnownFileType = sourcecode.c.h; path = AsciiConversionMode.h; sourceTree = ""; }; D3D46F7A0872F755009707C1 /* Japanese */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = Japanese; path = Japanese.lproj/InfoPlist.strings; sourceTree = ""; }; D3D841430A1A310300E79929 /* Mutex.h */ = {isa = PBXFileReference; fileEncoding = "-2147483647"; lastKnownFileType = sourcecode.c.h; path = Mutex.h; sourceTree = ""; }; + D3EDBC060A23611F000C4C11 /* NumericConverter.cpp */ = {isa = PBXFileReference; fileEncoding = 3; lastKnownFileType = sourcecode.cpp.cpp; path = NumericConverter.cpp; sourceTree = ""; }; + D3EDBC070A23611F000C4C11 /* NumericConverter.h */ = {isa = PBXFileReference; fileEncoding = 3; lastKnownFileType = sourcecode.c.h; path = NumericConverter.h; sourceTree = ""; }; D3F94BA508E3A6F500496C35 /* PrivateRunLoop.h */ = {isa = PBXFileReference; fileEncoding = "-2147483647"; lastKnownFileType = sourcecode.c.h; path = PrivateRunLoop.h; sourceTree = ""; }; F500AE950356848401D799AD /* ClientConfiguration.h */ = {isa = PBXFileReference; fileEncoding = "-2147483647"; lastKnownFileType = sourcecode.c.h; path = ClientConfiguration.h; sourceTree = ""; }; F500AE960356848401D799AD /* ClientConfiguration.cpp */ = {isa = PBXFileReference; fileEncoding = "-2147483647"; lastKnownFileType = sourcecode.cpp.cpp; path = ClientConfiguration.cpp; sourceTree = ""; }; @@ -500,6 +473,8 @@ 08FB77ADFE841716C02AAC07 /* Source */ = { isa = PBXGroup; children = ( + D3EDBC060A23611F000C4C11 /* NumericConverter.cpp */, + D3EDBC070A23611F000C4C11 /* NumericConverter.h */, D3D0C6F6086EECA800319954 /* AsciiConversionMode.cpp */, D3D0C6F7086EECA800319954 /* AsciiConversionMode.h */, 01A38B190056394F1153986C /* BIM.cpp */, @@ -642,6 +617,7 @@ D369F6B90A1A280600784FF4 /* SKKConfig.h in Headers */, D369F6BD0A1A29C800784FF4 /* SKKChar.h in Headers */, D369F6BE0A1A29C800784FF4 /* SKKEvent.h in Headers */, + D3EDBC090A23611F000C4C11 /* NumericConverter.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -700,25 +676,6 @@ ); buildRules = ( ); - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ""; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = AquaSKK_Prefix.h; - GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; - GCC_WARN_UNKNOWN_PRAGMAS = NO; - HEADER_SEARCH_PATHS = ""; - INFOPLIST_FILE = "Info-AquaSKKInputMethod__Upgraded_.plist"; - INSTALL_PATH = "$(HOME)/Library/Bundles"; - LIBRARY_SEARCH_PATHS = /usr/lib/gcc/darwin/default; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - OTHER_REZFLAGS = ""; - PRODUCT_NAME = AquaSKKInputMethod; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = "-Wmost"; - WRAPPER_EXTENSION = component; - }; dependencies = ( 849E1018055022FF009C3C25 /* PBXTargetDependency */, ); @@ -740,22 +697,6 @@ ); buildRules = ( ); - buildSettings = { - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = AquaSKK_Prefix.h; - GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; - GCC_WARN_UNKNOWN_PRAGMAS = NO; - INFOPLIST_FILE = "Info-AquaSKKServer__Upgraded_.plist"; - LIBRARY_SEARCH_PATHS = /usr/lib/gcc/darwin/default; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - OTHER_REZFLAGS = ""; - PRODUCT_NAME = AquaSKKServer; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = "-Wmost"; - WRAPPER_EXTENSION = app; - }; dependencies = ( ); name = AquaSKKServer; @@ -769,12 +710,6 @@ 089C1669FE841209C02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = D30C5463086B0F720046BC02 /* Build configuration list for PBXProject "AquaSKK" */; - buildSettings = { - }; - buildStyles = ( - 01A38B260056394F1153986C /* Development */, - 01A38B270056394F1153986C /* Deployment */, - ); hasScannedForEncodings = 1; mainGroup = 089C166AFE841209C02AAC07 /* BasicInputMethod */; projectDirPath = ""; @@ -874,6 +809,7 @@ D3D0C6F8086EECA800319954 /* AsciiConversionMode.cpp in Sources */, D365BB1A08E4B86B000B9512 /* PrivateRunLoop.mm in Sources */, D369F6B60A1A27ED00784FF4 /* SKKConfig.cpp in Sources */, + D3EDBC080A23611F000C4C11 /* NumericConverter.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; From t-suwa @ users.sourceforge.jp Sat Jun 3 10:23:19 2006 From: t-suwa @ users.sourceforge.jp (Tomotaka SUWA) Date: Sat, 3 Jun 2006 10:23:19 +0900 Subject: [aquaskk-changes 226] CVS update: AquaSKK/Resources Message-ID: <20060603012319.3866E2AC00E@users.sourceforge.jp> Index: AquaSKK/Resources/kana-rule-list diff -u AquaSKK/Resources/kana-rule-list:1.2 AquaSKK/Resources/kana-rule-list:1.3 --- AquaSKK/Resources/kana-rule-list:1.2 Wed Apr 26 22:45:24 2006 +++ AquaSKK/Resources/kana-rule-list Sat Jun 3 10:23:19 2006 @@ -1,4 +1,4 @@ -# $Id: kana-rule-list,v 1.2 2006/04/26 13:45:24 t-suwa Exp $ +# $Id: kana-rule-list,v 1.3 2006/06/03 01:23:19 t-suwa Exp $ # このファイルは改行コードがLF、文字エンコーディングがEUC-JPでなければなりません。 # 五つ目の項目は次状態です。無ければ項目自体を省略します。 @@ -273,4 +273,4 @@ ],」,」,」 .,。,。,。 -,,、,、,、 \ No newline at end of file +,,、,、,、 From t-suwa @ users.sourceforge.jp Sat Jun 3 10:33:51 2006 From: t-suwa @ users.sourceforge.jp (Tomotaka SUWA) Date: Sat, 3 Jun 2006 10:33:51 +0900 Subject: [aquaskk-changes 227] CVS update: AquaSKK/AquaSKK.pbproj Message-ID: <20060603013351.1972D2AC00E@users.sourceforge.jp> Index: AquaSKK/AquaSKK.pbproj/project.pbxproj diff -u AquaSKK/AquaSKK.pbproj/project.pbxproj:1.7 AquaSKK/AquaSKK.pbproj/project.pbxproj:1.8 --- AquaSKK/AquaSKK.pbproj/project.pbxproj:1.7 Wed May 17 01:40:01 2006 +++ AquaSKK/AquaSKK.pbproj/project.pbxproj Sat Jun 3 10:33:50 2006 @@ -309,6 +309,8 @@ }; 08FB77ADFE841716C02AAC07 = { children = ( + D34948730A311D930045E0AB, + D34948740A311D930045E0AB, D3787C1D08ADBF280058EFCE, D3787C1C08ADBF280058EFCE, 01A38B190056394F1153986C, @@ -492,6 +494,7 @@ D3451E420A1A340000C0E5F5, D3451E430A1A340000C0E5F5, D3451E440A1A340000C0E5F5, + D34948760A311D930045E0AB, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; @@ -717,6 +720,7 @@ D3787C1E08ADBF280058EFCE, D3143F5A08E50E40004A51AE, D3451E3D0A1A33DA00C0E5F5, + D34948750A311D930045E0AB, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; @@ -1671,6 +1675,34 @@ settings = { }; }; + D34948730A311D930045E0AB = { + fileEncoding = 3; + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + path = NumericConverter.cpp; + refType = 4; + sourceTree = ""; + }; + D34948740A311D930045E0AB = { + fileEncoding = 3; + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + path = NumericConverter.h; + refType = 4; + sourceTree = ""; + }; + D34948750A311D930045E0AB = { + fileRef = D34948730A311D930045E0AB; + isa = PBXBuildFile; + settings = { + }; + }; + D34948760A311D930045E0AB = { + fileRef = D34948740A311D930045E0AB; + isa = PBXBuildFile; + settings = { + }; + }; D3787C1C08ADBF280058EFCE = { fileEncoding = "-2147483647"; isa = PBXFileReference; From t-suwa @ users.sourceforge.jp Mon Jun 5 21:27:01 2006 From: t-suwa @ users.sourceforge.jp (Tomotaka SUWA) Date: Mon, 5 Jun 2006 21:27:01 +0900 Subject: [aquaskk-changes 228] CVS update: AquaSKK Message-ID: <20060605122701.F3E492AC0AD@users.sourceforge.jp> Index: AquaSKK/ChangeLog diff -u AquaSKK/ChangeLog:1.26 AquaSKK/ChangeLog:1.27 --- AquaSKK/ChangeLog:1.26 Sat Jun 3 10:23:18 2006 +++ AquaSKK/ChangeLog Mon Jun 5 21:27:01 2006 @@ -1,3 +1,10 @@ +2006-06-05 Tomotaka SUWA + + * SKKDictionary.cpp: ????????????????C?? + + * KanjiConversionMode.cpp: ???????????????????? + ????????A??????K?????????????????B + 2006-06-03 Tomotaka SUWA * NumericConverter.h, NumericConverter.cpp: ??????????? Index: AquaSKK/KanjiConversionMode.cpp diff -u AquaSKK/KanjiConversionMode.cpp:1.6 AquaSKK/KanjiConversionMode.cpp:1.7 --- AquaSKK/KanjiConversionMode.cpp:1.6 Sat Jun 3 10:23:18 2006 +++ AquaSKK/KanjiConversionMode.cpp Mon Jun 5 21:27:01 2006 @@ -1,5 +1,5 @@ /* - $Id: KanjiConversionMode.cpp,v 1.6 2006/06/03 01:23:18 t-suwa Exp $ + $Id: KanjiConversionMode.cpp,v 1.7 2006/06/05 12:27:01 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -1104,7 +1104,12 @@ NumericConverter conv; if(ClientConfiguration::theInstance().useNumericConversion() && conv.Setup(index)) { - str = conv.NormalizedKey(); + CppCFString applied = conv.Apply(kanji); + if(applied != kanji) { + str = conv.NormalizedKey(); + } else { + str = index; + } } else { str = index; } Index: AquaSKK/SKKDictionary.cpp diff -u AquaSKK/SKKDictionary.cpp:1.8 AquaSKK/SKKDictionary.cpp:1.9 --- AquaSKK/SKKDictionary.cpp:1.8 Wed May 17 01:13:10 2006 +++ AquaSKK/SKKDictionary.cpp Mon Jun 5 21:27:01 2006 @@ -1,5 +1,5 @@ /* - $Id: SKKDictionary.cpp,v 1.8 2006/05/16 16:13:10 t-suwa Exp $ + $Id: SKKDictionary.cpp,v 1.9 2006/06/05 12:27:01 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -402,7 +402,7 @@ for(EntryIterator i = okuriNasi_.begin(); i != okuriNasi_.end(); ++ i) { // ????????????? - if(i->first.find(index) == 0) { + if(i->first.find(index) == 0 && i->first.size() > index.size()) { result.push_back(CppCFString(i->first.c_str(), kCFStringEncodingEUC_JP)); } } From t-suwa @ users.sourceforge.jp Sat Jun 10 10:51:02 2006 From: t-suwa @ users.sourceforge.jp (Tomotaka SUWA) Date: Sat, 10 Jun 2006 10:51:02 +0900 Subject: [aquaskk-changes 229] CVS update: AquaSKK Message-ID: <20060610015102.0C70B2AC023@users.sourceforge.jp> Index: AquaSKK/ChangeLog diff -u AquaSKK/ChangeLog:1.27 AquaSKK/ChangeLog:1.28 --- AquaSKK/ChangeLog:1.27 Mon Jun 5 21:27:01 2006 +++ AquaSKK/ChangeLog Sat Jun 10 10:51:01 2006 @@ -1,3 +1,12 @@ +2006-06-10 Tomotaka SUWA + + * SKKDictionary.*: SKKDictionary ???? 10 ??????????? + ????????????????????????B???URL ??? + ??????ォ???C???????????????????B + + * NumericConverter.cpp (NumericConverter::Apply): #[0-59] ???? + ?????????????????????????B + 2006-06-05 Tomotaka SUWA * SKKDictionary.cpp: ????????????????C?? Index: AquaSKK/NumericConverter.cpp diff -u AquaSKK/NumericConverter.cpp:1.1 AquaSKK/NumericConverter.cpp:1.2 --- AquaSKK/NumericConverter.cpp:1.1 Sat Jun 3 10:23:18 2006 +++ AquaSKK/NumericConverter.cpp Sat Jun 10 10:51:01 2006 @@ -1,5 +1,5 @@ /* - $Id: NumericConverter.cpp,v 1.1 2006/06/03 01:23:18 t-suwa Exp $ + $Id: NumericConverter.cpp,v 1.2 2006/06/10 01:51:01 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -268,8 +268,8 @@ int index = 0; do { - pos = src.find_first_of(numbers, pos); - if(0 < pos && src[pos - 1] == '#') { + pos = src.find_first_of(numbers, pos + 1); + if(src[pos - 1] == '#') { switch(src[pos]) { case '0': // 無変換 src.replace(pos - 1, 2, params_[index]); @@ -293,7 +293,7 @@ src.replace(pos - 1, 2, ConvertType9(params_[index])); break; } - pos += params_[index].size(); + pos = pos - 1 + params_[index].size(); ++ index; } } while(pos != std::string::npos); Index: AquaSKK/SKKDictionary.cpp diff -u AquaSKK/SKKDictionary.cpp:1.9 AquaSKK/SKKDictionary.cpp:1.10 --- AquaSKK/SKKDictionary.cpp:1.9 Mon Jun 5 21:27:01 2006 +++ AquaSKK/SKKDictionary.cpp Sat Jun 10 10:51:01 2006 @@ -1,5 +1,5 @@ /* - $Id: SKKDictionary.cpp,v 1.9 2006/06/05 12:27:01 t-suwa Exp $ + $Id: SKKDictionary.cpp,v 1.10 2006/06/10 01:51:01 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -37,7 +37,9 @@ #include "SKKConfig.h" #include "socketstream.h" -#pragma mark --- SKK common functions --- +// ====================================================================== +// ???? +// ====================================================================== // SKKDictionary ? SKKUserDictionary ?????????? namespace skkdic { @@ -45,6 +47,9 @@ const std::string OkuriNasiMark = ";; okuri-nasi entries."; const int SAVE_LIMIT_COUNT = 50; const int SAVE_TIMEOUT = 10 * 60; // 10 ? + const std::string RemoteHOST = "openlab.ring.gr.jp"; + const std::string RemoteURL = "/skk/skk/dic/"; + const int DOWNLOAD_INTERVAL = 60 * 60 * 6; // 6 ?? // ォ?t????????okuri-ari ?????????? bool OpenAndSeek(const std::string& path, std::ifstream& dic) { @@ -133,7 +138,9 @@ }; }; -#pragma mark --- SKKDictionary --- +// ====================================================================== +// SKKDictionary ??????? +// ====================================================================== SKKDictionary::SKKDictionary() { // empty @@ -143,52 +150,37 @@ // empty } -void SKKDictionary::initializeContainer(EntryContainer& okuriAri, EntryContainer& okuriNasi) { - std::string line; - std::string index; - std::ifstream dic; - - if(!skkdic::OpenAndSeek(path_, dic)) { - return; - } - - while(skkdic::GetEntry(dic, index, line)) { - if(skkdic::OkuriNasiMark.find(line) != std::string::npos) break; - - // ????????????\????????? - okuriAri.push_front(SKKPair(index, line)); - } - - while(skkdic::GetEntry(dic, index, line)) { - // ????????????\????????? - okuriNasi.push_back(SKKPair(index, line)); - } -} - void SKKDictionary::load(const std::string& path) { path_ = path; // ォ???[? - initializeContainer(okuriAri_, okuriNasi_); - - // ?????????? - std::sort(okuriAri_.begin(), okuriAri_.end(), skkdic::EntryCompare()); - std::sort(okuriNasi_.begin(), okuriNasi_.end(), skkdic::EntryCompare()); + reloadContainer(); std::cerr << "SKK Dictionary(" << path_ << ")" << std::endl << " okuri-ari: " << countOkuriAri() << " entries." << std::endl << " okuri-nasi: " << countOkuriNasi() << " entries." << std::endl << std::endl; + + // ????????????????? + pthread_t pth = 0; + if(pthread_create(&pth, NULL, SKKDictionary::refresh, this) == 0) { + pthread_detach(pth); + } else { + std::cerr << "pthread_create() failed: " << errno << std::endl; + } } int SKKDictionary::countOkuriAri() { + Guard g(mutex_); return okuriAri_.size(); } int SKKDictionary::countOkuriNasi() { + Guard g(mutex_); return okuriNasi_.size(); } std::vector SKKDictionary::findOkuriAri(const CppCFString& query) { + Guard g(mutex_); std::string index = query.toStdString(); // ??????? @@ -202,6 +194,7 @@ } std::vector SKKDictionary::findOkuriNasi(const CppCFString& query) { + Guard g(mutex_); std::string index = query.toStdString(); // ??????? @@ -214,9 +207,69 @@ return SKKEntryConverter::OkuriNasi(SKKEntry::ParseOkuriNasi(i->first, i->second)); } -#pragma mark --- SKKAutoUpdateDictionary --- +// ---------------------------------------------------------------------- + +bool SKKDictionary::reloadContainer() { + std::string line; + std::string index; + std::ifstream dic; + struct stat st; + static std::time_t lastupdate = 0; + + EntryContainer tmpOkuriAri; + EntryContainer tmpOkuriNasi; + + if(!skkdic::OpenAndSeek(path_, dic)) { + return false; + } + + // ォ?t???????????????????? + if(stat(path_.c_str(), &st) < 0 || lastupdate == st.st_mtime) { + return false; + } + lastupdate = st.st_mtime; + + while(skkdic::GetEntry(dic, index, line)) { + if(skkdic::OkuriNasiMark.find(line) != std::string::npos) break; + + // ????????????\????????? + tmpOkuriAri.push_front(SKKPair(index, line)); + } + + while(skkdic::GetEntry(dic, index, line)) { + // ????????????\????????? + tmpOkuriNasi.push_back(SKKPair(index, line)); + } + + // ?????????? + std::sort(tmpOkuriAri.begin(), tmpOkuriAri.end(), skkdic::EntryCompare()); + std::sort(tmpOkuriNasi.begin(), tmpOkuriNasi.end(), skkdic::EntryCompare()); + + // ???? + Guard g(mutex_); + tmpOkuriAri.swap(okuriAri_); + tmpOkuriNasi.swap(okuriNasi_); + + return true; +} + +void* SKKDictionary::refresh(void* param) { + SKKDictionary* obj = reinterpret_cast(param); + + while(true) { + sleep(skkdic::SAVE_TIMEOUT); -SKKAutoUpdateDictionary::SKKAutoUpdateDictionary() : host_("openlab.ring.gr.jp"), url_("/skk/skk/dic/") { + if(obj->reloadContainer()) { + std::cerr << "SKKDictionary: " << obj->path_ << " has been updated"; + } + } +} + +// ====================================================================== +// SKKAutoUpdateDictionary ??????? +// ====================================================================== + +SKKAutoUpdateDictionary::SKKAutoUpdateDictionary() : host_(skkdic::RemoteHOST), url_(skkdic::RemoteURL) { // empty } @@ -226,8 +279,17 @@ void SKKAutoUpdateDictionary::load(const std::string& path) { url_ += path; - path_ = SKKConfig::LibraryDirectory() + path; - initializeContainer(okuriAri_, okuriNasi_); + + // ォ??_??????????????(URL ?????????) + std::string::size_type pos = path.find_last_of('/'); + if(pos != std::string::npos) { + path_ = SKKConfig::LibraryDirectory() + path.substr(pos + 1); + } else { + path_ = SKKConfig::LibraryDirectory() + path; + } + + // ォ???[? + reloadContainer(); std::cerr << "SKK AutoUpdate Dictionary(" << path_ << ")" << std::endl << " okuri-ari: " << countOkuriAri() << " entries." << std::endl @@ -242,31 +304,12 @@ } } -int SKKAutoUpdateDictionary::countOkuriAri() { - Guard g(mutex_); - return SKKDictionary::countOkuriAri(); -} - -int SKKAutoUpdateDictionary::countOkuriNasi() { - Guard g(mutex_); - return SKKDictionary::countOkuriNasi(); -} - -std::vector SKKAutoUpdateDictionary::findOkuriAri(const CppCFString& query) { - Guard g(mutex_); - return SKKDictionary::findOkuriAri(query); -} - -std::vector SKKAutoUpdateDictionary::findOkuriNasi(const CppCFString& query) { - Guard g(mutex_); - return SKKDictionary::findOkuriNasi(query); -} +// ---------------------------------------------------------------------- void* SKKAutoUpdateDictionary::download(void* param) { - SKKAutoUpdateDictionary* obj = static_cast(param); + SKKAutoUpdateDictionary* obj = reinterpret_cast(param); while(true) { - std::cerr << "SKKAutoUpdateDictionary: checking " << obj->host_ << obj->url_ << " ..." << std::endl; socket_stream session(obj->host_.c_str(), 80); if(session) { // ォ??X?????? @@ -295,8 +338,8 @@ if(response == "\r") break; } + // ??????????????????????? if(modified) { - // ?? std::ofstream ofs(obj->path_.c_str()); while(true) { getline(session, response); @@ -305,16 +348,7 @@ } ofs.close(); - // ???? - EntryContainer tmpOkuriAri; - EntryContainer tmpOkuriNasi; - obj->initializeContainer(tmpOkuriAri, tmpOkuriNasi); - - // ???? - Guard g(obj->mutex_); - tmpOkuriAri.swap(obj->okuriAri_); - tmpOkuriNasi.swap(obj->okuriNasi_); - + obj->reloadContainer(); std::cerr << "SKKAutoUpdateDictionary: " << obj->path_ << " has been updated" << std::endl; } } else { @@ -322,13 +356,15 @@ } // 10 ?????6 ?????????????? - for(time_t nextTime = time(0) + (60 * 60 * 6); time(0) < nextTime; sleep(60 * 10)) { + for(time_t nextTime = time(0) + skkdic::DOWNLOAD_INTERVAL; time(0) < nextTime; sleep(skkdic::SAVE_TIMEOUT)) { // ???????OS ???????????????????? } } } -#pragma mark --- SKKUserDictionary --- +// ====================================================================== +// SKKUserDictionary ??????? +// ====================================================================== SKKUserDictionary::SKKUserDictionary() { // empty @@ -492,7 +528,7 @@ save(); } -// ------------------------------------------------------------------ +// ---------------------------------------------------------------------- void SKKUserDictionary::save(bool force) { static int updateCount = 0; Index: AquaSKK/SKKDictionary.h diff -u AquaSKK/SKKDictionary.h:1.6 AquaSKK/SKKDictionary.h:1.7 --- AquaSKK/SKKDictionary.h:1.6 Wed Apr 26 22:36:12 2006 +++ AquaSKK/SKKDictionary.h Sat Jun 10 10:51:01 2006 @@ -1,5 +1,5 @@ /* - $Id: SKKDictionary.h,v 1.6 2006/04/26 13:36:12 t-suwa Exp $ + $Id: SKKDictionary.h,v 1.7 2006/06/10 01:51:01 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -21,7 +21,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#pragma once +#ifndef INC__SKKDictionary__ +#define INC__SKKDictionary__ #include #include "Dictionary.h" @@ -39,12 +40,15 @@ // SKK ??ォ? class SKKDictionary: public Dictionary { + static void* refresh(void* param); + protected: std::string path_; EntryContainer okuriAri_; EntryContainer okuriNasi_; + Mutex mutex_; - void initializeContainer(EntryContainer& okuriAri, EntryContainer& okuriNasi); + bool reloadContainer(); public: SKKDictionary(); @@ -63,7 +67,6 @@ class SKKAutoUpdateDictionary: public SKKDictionary { std::string host_; std::string url_; - Mutex mutex_; static void* download(void* param); @@ -72,12 +75,6 @@ virtual ~SKKAutoUpdateDictionary(); virtual void load(const std::string& path); - - virtual int countOkuriAri(); - virtual int countOkuriNasi(); - - virtual std::vector findOkuriAri(const CppCFString& query); - virtual std::vector findOkuriNasi(const CppCFString& query); }; // SKK ????ォ?@@ -108,3 +105,5 @@ virtual void removeOkuriAri(const CppCFString& index, const CppCFString& kanji); virtual void removeOkuriNasi(const CppCFString& index, const CppCFString& kanji); }; + +#endif // INC__SKKDictionary__ From t-suwa @ users.sourceforge.jp Mon Jun 12 23:14:14 2006 From: t-suwa @ users.sourceforge.jp (Tomotaka SUWA) Date: Mon, 12 Jun 2006 23:14:14 +0900 Subject: [aquaskk-changes 230] CVS update: AquaSKK Message-ID: <20060612141414.85CDA2AC030@users.sourceforge.jp> Index: AquaSKK/ChangeLog diff -u AquaSKK/ChangeLog:1.28 AquaSKK/ChangeLog:1.29 --- AquaSKK/ChangeLog:1.28 Sat Jun 10 10:51:01 2006 +++ AquaSKK/ChangeLog Mon Jun 12 23:14:14 2006 @@ -1,3 +1,14 @@ +2006-06-12 Tomotaka SUWA + + * SKKDictionary.*: ??????????????????????? + ?????? static ??????????????????????? + ????????????) + + * DictionarySet.cpp: "~/" ???????? + + * AsciiConversionMode.cpp, KanjiConversionMode.*: ????????+ ????????????C?? + 2006-06-10 Tomotaka SUWA * SKKDictionary.*: SKKDictionary ???? 10 ??????????? From t-suwa @ users.sourceforge.jp Mon Jun 12 23:14:49 2006 From: t-suwa @ users.sourceforge.jp (Tomotaka SUWA) Date: Mon, 12 Jun 2006 23:14:49 +0900 Subject: [aquaskk-changes 231] CVS update: AquaSKK Message-ID: <20060612141449.0ECF92AC030@users.sourceforge.jp> Index: AquaSKK/AsciiConversionMode.cpp diff -u AquaSKK/AsciiConversionMode.cpp:1.6 AquaSKK/AsciiConversionMode.cpp:1.7 --- AquaSKK/AsciiConversionMode.cpp:1.6 Sat Jun 3 10:23:18 2006 +++ AquaSKK/AsciiConversionMode.cpp Mon Jun 12 23:14:48 2006 @@ -1,5 +1,5 @@ /* - $Id: AsciiConversionMode.cpp,v 1.6 2006/06/03 01:23:18 t-suwa Exp $ + $Id: AsciiConversionMode.cpp,v 1.7 2006/06/12 14:14:48 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -629,15 +629,15 @@ ::askServerTheCandidates(query, candidates); // ????????? - if(ClientConfiguration::theInstance().useNumericConversion() && numconv_.Setup(str)) { + if(ClientConfiguration::theInstance().useNumericConversion() && numconv_.Setup(index)) { std::vector result; CppCFData cfdata; - cfdata.own(numconv_.NormalizedKey().toCFData()); + cfdata.own(CppCFString().append('-').append(numconv_.NormalizedKey()).toCFData()); ::askServerTheCandidates(cfdata, result); - candidates.insert(candidates.end(), result.begin(), result.end()); + ::mergeCandidates(numconv_, candidates, result); } } Index: AquaSKK/DictionarySet.cpp diff -u AquaSKK/DictionarySet.cpp:1.4 AquaSKK/DictionarySet.cpp:1.5 --- AquaSKK/DictionarySet.cpp:1.4 Wed May 17 01:13:10 2006 +++ AquaSKK/DictionarySet.cpp Mon Jun 12 23:14:48 2006 @@ -1,5 +1,5 @@ /* - $Id: DictionarySet.cpp,v 1.4 2006/05/16 16:13:10 t-suwa Exp $ + $Id: DictionarySet.cpp,v 1.5 2006/06/12 14:14:48 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -103,7 +103,7 @@ // ??????? if(path.size() > 2 && path.find("~/") == 0) { - path = SKKConfig::HomeDirectory() + path.substr(1); + path = SKKConfig::HomeDirectory() + path.substr(2); } // ォ????Index: AquaSKK/KanjiConversionMode.cpp diff -u AquaSKK/KanjiConversionMode.cpp:1.7 AquaSKK/KanjiConversionMode.cpp:1.8 --- AquaSKK/KanjiConversionMode.cpp:1.7 Mon Jun 5 21:27:01 2006 +++ AquaSKK/KanjiConversionMode.cpp Mon Jun 12 23:14:48 2006 @@ -1,5 +1,5 @@ /* - $Id: KanjiConversionMode.cpp,v 1.7 2006/06/05 12:27:01 t-suwa Exp $ + $Id: KanjiConversionMode.cpp,v 1.8 2006/06/12 14:14:48 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -21,6 +21,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include #include "BIM.h" #include "BIMClientServer.h" #include "BIMInputEvents.h" @@ -1010,15 +1011,15 @@ ::askServerTheCandidates(cfdata_query, candidates); // ????????? - if(ClientConfiguration::theInstance().useNumericConversion() && numconv_.Setup(query)) { + if(!hasOkuri && ClientConfiguration::theInstance().useNumericConversion() && numconv_.Setup(root)) { std::vector result; CppCFData cfdata; - cfdata.own(numconv_.NormalizedKey().toCFData()); + cfdata.own(CppCFString().append('-').append(numconv_.NormalizedKey()).toCFData()); ::askServerTheCandidates(cfdata, result); - candidates.insert(candidates.end(), result.begin(), result.end()); + ::mergeCandidates(numconv_, candidates, result); } } @@ -1237,3 +1238,29 @@ ServerConnectionFactory::theInstance().newConnection(). send(kSKKCloseCandidatesWindow, newCFDataRefWithWindowID(candidates_window_id)); } + +void mergeCandidates(const NumericConverter& numconv, + std::vector& master, std::vector& cands) { + std::set check; + std::vector result; + + check.insert(numconv.OriginalKey()); + + // ??+ for(std::vector::iterator iter = master.begin(); iter != master.end(); ++ iter) { + if(check.find(*iter) != check.end()) continue; + + check.insert(check.lower_bound(*iter), *iter); + result.push_back(*iter); + } + + // ??? + for(std::vector::iterator iter = cands.begin(); iter != cands.end(); ++ iter) { + CppCFString target(numconv.Apply(*iter)); + if(check.find(target) != check.end()) continue; + + check.insert(check.lower_bound(target), target); + result.push_back(*iter); + } + result.swap(master); +} Index: AquaSKK/KanjiConversionMode.h diff -u AquaSKK/KanjiConversionMode.h:1.5 AquaSKK/KanjiConversionMode.h:1.6 --- AquaSKK/KanjiConversionMode.h:1.5 Sat Jun 3 10:23:18 2006 +++ AquaSKK/KanjiConversionMode.h Mon Jun 12 23:14:48 2006 @@ -1,5 +1,5 @@ /* - $Id: KanjiConversionMode.h,v 1.5 2006/06/03 01:23:18 t-suwa Exp $ + $Id: KanjiConversionMode.h,v 1.6 2006/06/12 14:14:48 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -120,5 +120,7 @@ size_t num_of_candidates, SInt16 open_direction); CppCFData newCFDataRefWithWindowID(unsigned window_id); +void mergeCandidates(const NumericConverter& numconv, + std::vector& master, std::vector& cands); #endif // INC__KanjiConversionMode__ Index: AquaSKK/SKKDictionary.cpp diff -u AquaSKK/SKKDictionary.cpp:1.10 AquaSKK/SKKDictionary.cpp:1.11 --- AquaSKK/SKKDictionary.cpp:1.10 Sat Jun 10 10:51:01 2006 +++ AquaSKK/SKKDictionary.cpp Mon Jun 12 23:14:48 2006 @@ -1,5 +1,5 @@ /* - $Id: SKKDictionary.cpp,v 1.10 2006/06/10 01:51:01 t-suwa Exp $ + $Id: SKKDictionary.cpp,v 1.11 2006/06/12 14:14:48 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -26,8 +26,6 @@ #include #include #include -#include -#include #include #include #include "CppCFString.h" @@ -56,7 +54,7 @@ // ォ??X??????? struct stat st; if(stat(path.c_str(), &st) < 0) { - std::cerr << __FUNCTION__ << ": stat() failed" << std::endl; + std::cerr << __FUNCTION__ << ": stat(" << path << ") failed" << std::endl; return false; } @@ -142,7 +140,7 @@ // SKKDictionary ??????? // ====================================================================== -SKKDictionary::SKKDictionary() { +SKKDictionary::SKKDictionary() : lastupdate_(0) { // empty } @@ -214,7 +212,6 @@ std::string index; std::ifstream dic; struct stat st; - static std::time_t lastupdate = 0; EntryContainer tmpOkuriAri; EntryContainer tmpOkuriNasi; @@ -223,11 +220,11 @@ return false; } - // ォ?t???????????????????? - if(stat(path_.c_str(), &st) < 0 || lastupdate == st.st_mtime) { + // ォ?t??????????????????? + if(stat(path_.c_str(), &st) < 0 || lastupdate_ == st.st_mtime) { return false; } - lastupdate = st.st_mtime; + lastupdate_ = st.st_mtime; while(skkdic::GetEntry(dic, index, line)) { if(skkdic::OkuriNasiMark.find(line) != std::string::npos) break; @@ -260,7 +257,7 @@ sleep(skkdic::SAVE_TIMEOUT); if(obj->reloadContainer()) { - std::cerr << "SKKDictionary: " << obj->path_ << " has been updated"; + std::cerr << "SKKDictionary: " << obj->path_ << " has been updated" << std::endl; } } } Index: AquaSKK/SKKDictionary.h diff -u AquaSKK/SKKDictionary.h:1.7 AquaSKK/SKKDictionary.h:1.8 --- AquaSKK/SKKDictionary.h:1.7 Sat Jun 10 10:51:01 2006 +++ AquaSKK/SKKDictionary.h Mon Jun 12 23:14:48 2006 @@ -1,5 +1,5 @@ /* - $Id: SKKDictionary.h,v 1.7 2006/06/10 01:51:01 t-suwa Exp $ + $Id: SKKDictionary.h,v 1.8 2006/06/12 14:14:48 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -24,6 +24,8 @@ #ifndef INC__SKKDictionary__ #define INC__SKKDictionary__ +#include +#include #include #include "Dictionary.h" #include "Mutex.h" @@ -43,6 +45,7 @@ static void* refresh(void* param); protected: + std::time_t lastupdate_; std::string path_; EntryContainer okuriAri_; EntryContainer okuriNasi_; From t-suwa @ users.sourceforge.jp Thu Jun 15 10:24:32 2006 From: t-suwa @ users.sourceforge.jp (Tomotaka SUWA) Date: Thu, 15 Jun 2006 10:24:32 +0900 Subject: [aquaskk-changes 232] CVS update: AquaSKK Message-ID: <20060615012432.F2C102AC027@users.sourceforge.jp> Index: AquaSKK/ChangeLog diff -u AquaSKK/ChangeLog:1.29 AquaSKK/ChangeLog:1.30 --- AquaSKK/ChangeLog:1.29 Mon Jun 12 23:14:14 2006 +++ AquaSKK/ChangeLog Thu Jun 15 10:24:32 2006 @@ -1,3 +1,7 @@ +2006-06-15 Tomotaka SUWA + + * Resources/UserDefaults.plist: ?????????????? + 2006-06-12 Tomotaka SUWA * SKKDictionary.*: ??????????????????????? Index: AquaSKK/Info-AquaSKKInputMethod.plist diff -u AquaSKK/Info-AquaSKKInputMethod.plist:1.7 AquaSKK/Info-AquaSKKInputMethod.plist:1.8 --- AquaSKK/Info-AquaSKKInputMethod.plist:1.7 Sat Jun 3 10:23:18 2006 +++ AquaSKK/Info-AquaSKKInputMethod.plist Thu Jun 15 10:24:32 2006 @@ -19,11 +19,11 @@ CFBundlePackageType thng CFBundleShortVersionString - 3.1 + 3.1 RC1 CFBundleSignature askk CFBundleVersion - 2006-06-03 + 2006-06-15 CSResourcesFileMapped tsInputMethodIconFileKey Index: AquaSKK/Info-AquaSKKServer.plist diff -u AquaSKK/Info-AquaSKKServer.plist:1.7 AquaSKK/Info-AquaSKKServer.plist:1.8 --- AquaSKK/Info-AquaSKKServer.plist:1.7 Sat Jun 3 10:23:18 2006 +++ AquaSKK/Info-AquaSKKServer.plist Thu Jun 15 10:24:32 2006 @@ -19,11 +19,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 3.1 + 3.1 RC1 CFBundleSignature askk CFBundleVersion - 2006-06-03 + 2006-06-15 NSMainNibFile Principal NSPrincipalClass From t-suwa @ users.sourceforge.jp Thu Jun 15 10:24:33 2006 From: t-suwa @ users.sourceforge.jp (Tomotaka SUWA) Date: Thu, 15 Jun 2006 10:24:33 +0900 Subject: [aquaskk-changes 233] CVS update: AquaSKK/Package Message-ID: <20060615012433.2272D2AC04C@users.sourceforge.jp> Index: AquaSKK/Package/AquaSKK.pmproj From t-suwa @ users.sourceforge.jp Thu Jun 15 10:24:33 2006 From: t-suwa @ users.sourceforge.jp (Tomotaka SUWA) Date: Thu, 15 Jun 2006 10:24:33 +0900 Subject: [aquaskk-changes 234] CVS update: AquaSKK/Resources Message-ID: <20060615012433.449712AC027@users.sourceforge.jp> Index: AquaSKK/Resources/UserDefaults.plist diff -u AquaSKK/Resources/UserDefaults.plist:1.2 AquaSKK/Resources/UserDefaults.plist:1.3 --- AquaSKK/Resources/UserDefaults.plist:1.2 Wed Apr 26 22:45:24 2006 +++ AquaSKK/Resources/UserDefaults.plist Thu Jun 15 10:24:33 2006 @@ -32,5 +32,7 @@ skkserv_port 1178 + use_numeric_conversion +