Tomotaka SUWA
t-suw****@users*****
2006年 5月 5日 (金) 00:27:02 JST
Index: AquaSKK/AsciiConversionMode.cpp diff -u AquaSKK/AsciiConversionMode.cpp:1.3 AquaSKK/AsciiConversionMode.cpp:1.4 --- AquaSKK/AsciiConversionMode.cpp:1.3 Wed Apr 26 22:36:12 2006 +++ AquaSKK/AsciiConversionMode.cpp Fri May 5 00:27:02 2006 @@ -1,5 +1,5 @@ /* - $Id: AsciiConversionMode.cpp,v 1.3 2006/04/26 13:36:12 t-suwa Exp $ + $Id: AsciiConversionMode.cpp,v 1.4 2006/05/04 15:27:02 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -621,7 +621,7 @@ void AsciiConversionMode::makeServerRemoveWord() { CppCFString query; // ahya ißÍßj@¨@-ahya ißÍßj - query.append('-').append(index).append(' ').append(candidates[current_candidate_index]); + query.append('-').append(index).append(SKK_MSG_DELIMITER).append(candidates[current_candidate_index]); // IÉn· CppCFData cfdata_query; @@ -630,17 +630,13 @@ } void AsciiConversionMode::openCandidatesWindow(OpenDirection mode) { - // candidatesÌ4ÔÚÈ~ÌÚðÂzñðìéB - //vector<CppCFString> cands(candidates.begin()+(show_cands_window_after_Nth_cand-1),candidates.end()); - CppCFString space(" "); - CppCFString nbsp("[20]"); std::vector<CppCFString> cands; std::vector<CppCFString>::const_iterator ite; for(ite = candidates.begin() + (show_cands_window_after_Nth_cand - 1); ite != candidates.end(); ++ ite) { - cands.push_back(ite->replaceClone(space,nbsp)); + cands.push_back(*ite); } - ::openCandidatesWindow(join(' ',cands), + ::openCandidatesWindow(join(SKK_MSG_DELIMITER, cands), candidates_window_id, candidates_window_cands_per_frame, candidates_window_num_of_frames, @@ -650,7 +646,6 @@ mode); } - void AsciiConversionMode::goToNextCandidatesFrame() { // EChEID(UInt16)ðÜÞCFDatað쬵AIÖéB CppCFData reply(ServerConnectionFactory::theInstance().newConnection(). Index: AquaSKK/BIMClientServer.h diff -u AquaSKK/BIMClientServer.h:1.4 AquaSKK/BIMClientServer.h:1.5 --- AquaSKK/BIMClientServer.h:1.4 Wed Apr 26 22:36:12 2006 +++ AquaSKK/BIMClientServer.h Fri May 5 00:27:02 2006 @@ -1,5 +1,5 @@ /* - $Id: BIMClientServer.h,v 1.4 2006/04/26 13:36:12 t-suwa Exp $ + $Id: BIMClientServer.h,v 1.5 2006/05/04 15:27:02 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -21,16 +21,17 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#pragma once +#ifndef INC__BIMClientServer__ +#define INC__BIMClientServer__ -// IMÌoh¼ +// R|[lgÌoh¼ #define kIMBundleIdentifier "jp.sourceforge.AquaSKKInputMethod" -// IÌAv¼ -#define kBasicServerName "\pAquaSKKServer.app" +// T[o[¼ +//#define kBasicServerName "\pAquaSKKServer.app" #define kCSTR_SKKServerName "AquaSKKServer.app" -// IÌ|[g¼ +// T[o[|[g¼ #define kBasicServerPortName "jp.sourceforge.AquaSKKServer" // T[o[Ì RunLoopMode @@ -69,6 +70,9 @@ typedef SInt32 BasicMessageID; +// bZ[WÌæØè¶ +#define SKK_MSG_DELIMITER (0x0b) /* ¼^u */ + enum { // NCAg©çIÖÌbZ[W kBasicMessageActivated = 100, // SKKªANeBuÉÈÁ½B kBasicMessageDeactivated = 101, // SKKªANeBuÅÈÈÁ½B @@ -113,3 +117,5 @@ enum { kSKKClientConfigurationModified = 100, }; + +#endif Index: AquaSKK/CandidatesManager.mm diff -u AquaSKK/CandidatesManager.mm:1.4 AquaSKK/CandidatesManager.mm:1.5 --- AquaSKK/CandidatesManager.mm:1.4 Mon Dec 19 23:03:37 2005 +++ AquaSKK/CandidatesManager.mm Fri May 5 00:27:02 2006 @@ -1,10 +1,10 @@ /* -*- objc -*- - $Id: CandidatesManager.mm,v 1.4 2005/12/19 14:03:37 t-suwa Exp $ + $Id: CandidatesManager.mm,v 1.5 2006/05/04 15:27:02 t-suwa Exp $ MacOS X implementation of the SKK input method. Copyright (C) 2002-2004 phonohawk - Copyright (C) 2005 Tomotaka SUWA <t.suw****@mac*****> + Copyright (C) 2005-2006 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 @@ -25,6 +25,7 @@ #import "CandidatesView.h" #import "CandidatesWindowController.h" +#include "BIMClientServer.h" #include "CppCFString.h" #include "CandidatesManager.h" @@ -42,28 +43,11 @@ } unsigned CandidatesManager::createAndShow(int qd_x, int qd_y, const CppCFString& candidates_string, bool showLast) { - const CppCFString space(" "); - const CppCFString space_ref("[20]"); - const CppCFString blockopen("["); - const CppCFString blockopen_ref("[5b]"); - const CppCFString slash("/"); - const CppCFString slash_ref("[2f]"); - const CppCFString semicolon(";"); - const CppCFString semicolon_ref("[3b]"); - // NSArray ÌóâXgðì¬ - std::vector<CppCFString> cands_vec = candidates_string.split(' '); + std::vector<CppCFString> cands_vec = candidates_string.split(SKK_MSG_DELIMITER); NSMutableArray* cands_array = [[NSMutableArray alloc] init]; for(std::vector<CppCFString>::const_iterator ite = cands_vec.begin(); ite != cands_vec.end(); ++ ite) { - CppCFString tmp = ite->replaceClone(space_ref, space); - tmp.replace(semicolon_ref, semicolon); - tmp.replace(slash_ref, slash); - tmp.replace(blockopen_ref, blockopen); - - UniChar* unistr = tmp.toUniCharPtr(); - NSString* cand = [NSString stringWithCharacters:unistr length:tmp.length()]; - [cands_array addObject:cand]; - delete[] unistr; + [cands_array addObject:(NSString*)ite->decode().getString()]; } // ¢gpIDðõ Index: AquaSKK/ChangeLog diff -u AquaSKK/ChangeLog:1.22 AquaSKK/ChangeLog:1.23 --- AquaSKK/ChangeLog:1.22 Wed Apr 26 23:36:39 2006 +++ AquaSKK/ChangeLog Fri May 5 00:27:02 2006 @@ -1,3 +1,19 @@ +2006-05-05 Tomotaka SUWA <t.suw****@mac*****> + + * BIMClientServer.h: SKK_MSG_DELIMITER ðè`BbZ[WÌæØè¶B + + * DictionarySet.cpp, KanjiConversionMode.cpp, + AsciiConversionMode.cpp, : SKK_MSG_DELIMITER ðg¤æ¤ÉC³BSÊ + IÉA' ' Ì [20] Ï·ðB + + * CandidatesManager.mm: SKK_MSG_DELIMITER ðg¤æ¤ÉC³B + + * CppCFString.*: encode() Æ decode() ðÇÁB"[/;" Ìe¶ðG + R[h/fR[h·éB + + * KotoeriDictionary.cpp: õÊð CppCFString::encode() ·éæ¤ + ÉC³B + 2006-04-26 Tomotaka SUWA <t.suw****@mac*****> * Info-*.plist: [X 3.0 Éü¯ÄXVB Index: AquaSKK/CppCFString.cpp diff -u AquaSKK/CppCFString.cpp:1.4 AquaSKK/CppCFString.cpp:1.5 --- AquaSKK/CppCFString.cpp:1.4 Wed Apr 26 22:36:12 2006 +++ AquaSKK/CppCFString.cpp Fri May 5 00:27:02 2006 @@ -1,5 +1,5 @@ /* - $Id: CppCFString.cpp,v 1.4 2006/04/26 13:36:12 t-suwa Exp $ + $Id: CppCFString.cpp,v 1.5 2006/05/04 15:27:02 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -22,8 +22,55 @@ */ #include <CoreFoundation/CoreFoundation.h> +#include <iostream> +#include <sstream> #include "CppCFString.h" +// encode/decode pÌe[u +class EncodeDecodeTable { + std::vector<CppCFString> org_; + std::vector<CppCFString> enc_; + + EncodeDecodeTable() { + // GR[hÎÛ̶(Ôªdv) + char* chars = "[/;"; + + // e[uð¶¬(i.e. ";" ¨ "[3b]") + for(char* ptr = chars; *ptr != 0x00; ++ ptr) { + std::stringstream buf; + org_.push_back(*ptr); + buf << "[" << std::hex << (unsigned)*ptr << "]"; + enc_.push_back(buf.str().c_str()); + } + } + +public: + static EncodeDecodeTable& theInstance() { + static EncodeDecodeTable obj; + return obj; + } + + CppCFString Encode(const CppCFString& src) const { + CppCFString result(src); + + for(unsigned i = 0; i < enc_.size(); ++ i) { + result.replace(org_[i], enc_[i]); + } + + return result; + } + + CppCFString Decode(const CppCFString& src) const { + CppCFString result(src); + + for(unsigned i = 0; i < enc_.size(); ++ i) { + result.replace(enc_[i], org_[i]); + } + + return result; + } +}; + CppCFString::CppCFString() : cf_string(0) { cf_string = CFStringCreateMutable(NULL, 0); } @@ -341,13 +388,13 @@ while(pos < len) { // f~^¾Á½ if(unistr[pos] == delim) { - pos++; + ++ pos; } else { // f~^ÅÈ¢¶ª©t©Á½ int blockstart = pos; int blockend = -1; - for(int i = blockstart;i < len;i++) { + for(int i = blockstart; i < len; ++ i) { // f~^ðT·B if(unistr[i] == delim) { blockend = i; @@ -360,7 +407,7 @@ blockend = len; // ÅãÜÅðg[NÆ·éB } - result.push_back(substring(blockstart,blockend)); + result.push_back(substring(blockstart, blockend)); pos = blockend; } } @@ -371,6 +418,14 @@ return result; } +CppCFString CppCFString::encode() const { + return EncodeDecodeTable::theInstance().Encode(*this); +} + +CppCFString CppCFString::decode() const { + return EncodeDecodeTable::theInstance().Decode(*this); +} + // ñoÖQ CppCFString operator+(const CppCFString& l, const CppCFString& r) { return CppCFString(l).append(r); Index: AquaSKK/CppCFString.h diff -u AquaSKK/CppCFString.h:1.4 AquaSKK/CppCFString.h:1.5 --- AquaSKK/CppCFString.h:1.4 Wed Apr 26 22:36:12 2006 +++ AquaSKK/CppCFString.h Fri May 5 00:27:02 2006 @@ -1,5 +1,5 @@ /* -*- c++ -*- - $Id: CppCFString.h,v 1.4 2006/04/26 13:36:12 t-suwa Exp $ + $Id: CppCFString.h,v 1.5 2006/05/04 15:27:02 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -83,6 +83,9 @@ virtual CppCFString clone() const; virtual std::vector<CppCFString> split(UniChar delim) const; + + virtual CppCFString encode() const; + virtual CppCFString decode() const; }; CppCFString operator+ (const CppCFString& l,const CppCFString& r); Index: AquaSKK/DictionarySet.cpp diff -u AquaSKK/DictionarySet.cpp:1.2 AquaSKK/DictionarySet.cpp:1.3 --- AquaSKK/DictionarySet.cpp:1.2 Wed Apr 26 22:36:12 2006 +++ AquaSKK/DictionarySet.cpp Fri May 5 00:27:02 2006 @@ -1,5 +1,5 @@ /* - $Id: DictionarySet.cpp,v 1.2 2006/04/26 13:36:12 t-suwa Exp $ + $Id: DictionarySet.cpp,v 1.3 2006/05/04 15:27:02 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -23,6 +23,7 @@ #include <iostream> #include <set> +#include "BIMClientServer.h" #include "CppCFString.h" #include "OkuriganaEntry.h" #include "Dictionary.h" @@ -305,18 +306,16 @@ } CppCFString DictionarySet::search(const CppCFString& query) { - CppCFString space(" "); - CppCFString nbsp("[20]"); bool has_okuri = query[0] == '+'; CppCFString query_str(query.substring(1)); // æªÌ+,-ðÁ·B D_PRINTF("QUERY: %s\n",query_str.toCString(kCFStringEncodingEUC_JP)); if(has_okuri) { - int pos_space = query_str.indexOf(' '); - CppCFString root = query_str.substring(0,pos_space).replace(nbsp,space); // u+ÈÅr évÈçuÈÅrv - CppCFString okuri = query_str.substring(pos_space+1).replace(nbsp,space); // u+ÈÅr évÈçuév - + int pos_space = query_str.indexOf(SKK_MSG_DELIMITER); + CppCFString root = query_str.substring(0, pos_space); // u+ÈÅr évÈçuÈÅrv + CppCFString okuri = query_str.substring(pos_space + 1); // u+ÈÅr évÈçuév + std::vector<CppCFString> cand_strictly_matched; std::vector<CppCFString> cand_unstrictly_matched; @@ -358,11 +357,11 @@ if(semicolon_pos != -1) { ite->erase(semicolon_pos, ite->length()); } - ite->append(okuri).replace(space,nbsp); + ite->append(okuri); } - D_PRINTF("REPLY: %s\n",join(' ',candidates).toCString(kCFStringEncodingEUC_JP)); - return join(' ', candidates); + D_PRINTF("REPLY: %s\n",join('/', candidates).toCString(kCFStringEncodingEUC_JP)); + return join(SKK_MSG_DELIMITER, candidates); } else { std::vector<CppCFString> candidates; @@ -384,38 +383,30 @@ // candidatesÌd¡ð`FbNBd¡µÄ¢½çãÉ éàÌðíB removeRedundantItems(candidates); - // candidatesÌSÄÌÚÌXy[Xð[20]ÉÏ·B // ߪt¢Ä¢êÎAí·éB(bè) for(std::vector<CppCFString>::iterator ite = candidates.begin(); ite != candidates.end(); ++ ite) { const int semicolon_pos = ite->indexOf(';'); if(semicolon_pos != -1) { ite->erase(semicolon_pos, ite->length()); } - ite->replace(space,nbsp); } - D_PRINTF("REPLY: %s\n",join(' ',candidates).toCString(kCFStringEncodingEUC_JP)); - return join(' ',candidates); + D_PRINTF("REPLY: %s\n",join('/', candidates).toCString(kCFStringEncodingEUC_JP)); + return join(SKK_MSG_DELIMITER, candidates); } } void DictionarySet::registerToUserDic(const CppCFString& query) { - CppCFString space(" "); - CppCFString nbsp("[20]"); - D_PRINTF("REGISTER: %s\n",query.toCString(kCFStringEncodingEUC_JP)); // è¼¼ èHu+¨r è v if(query[0] == '+') { - int pos_first_space = query.indexOf(' '); - int pos_second_space = query.indexOf(' ',pos_first_space+1); + int pos_first_space = query.indexOf(SKK_MSG_DELIMITER); + int pos_second_space = query.indexOf(SKK_MSG_DELIMITER, pos_first_space + 1); - CppCFString index(query.substring(1,pos_first_space)); - index.replace(nbsp,space); // ¨r - CppCFString okuri(query.substring(pos_first_space+1,pos_second_space)); - okuri.replace(nbsp,space); // è - CppCFString kanji(query.substring(pos_second_space+1)); - kanji.replace(nbsp,space); // + CppCFString index(query.substring(1, pos_first_space)); + CppCFString okuri(query.substring(pos_first_space + 1, pos_second_space)); + CppCFString kanji(query.substring(pos_second_space + 1)); if(index.length() == 0 || okuri.length() == 0 || kanji.length() == 0) { std::cerr << "AquaSKK: Invalid registration received; index:" @@ -426,11 +417,10 @@ } } else { // è¼¼³µBu-©È ¼¼v - int pos_space = query.indexOf(' '); - CppCFString index(query.substring(1,pos_space)); - index.replace(nbsp,space); - CppCFString kanji(query.substring(pos_space+1)); - kanji.replace(nbsp,space); + int pos_space = query.indexOf(SKK_MSG_DELIMITER); + + CppCFString index(query.substring(1, pos_space)); + CppCFString kanji(query.substring(pos_space + 1)); if(index.length() == 0 || kanji.length() == 0) { std::cerr << "AquaSKK: Invalid registration received; index:" @@ -443,22 +433,16 @@ } void DictionarySet::removeFromUserDic(const CppCFString& query) { - CppCFString space(" "); - CppCFString nbsp("[20]"); - D_PRINTF("REMOVE: %s\n",query.toCString(kCFStringEncodingEUC_JP)); // è¼¼ èHu+¨r è v if(query[0] == '+') { - int pos_first_space = query.indexOf(' '); - int pos_second_space = query.indexOf(' ',pos_first_space+1); - - CppCFString index(query.substring(1,pos_first_space)); - index.replace(nbsp,space); // ¨r - CppCFString okuri(query.substring(pos_first_space+1,pos_second_space)); - okuri.replace(nbsp,space); // è - CppCFString kanji(query.substring(pos_second_space+1)); - kanji.replace(nbsp,space); // + int pos_first_space = query.indexOf(SKK_MSG_DELIMITER); + int pos_second_space = query.indexOf(SKK_MSG_DELIMITER, pos_first_space + 1); + + CppCFString index(query.substring(1, pos_first_space)); + CppCFString okuri(query.substring(pos_first_space + 1, pos_second_space)); + CppCFString kanji(query.substring(pos_second_space + 1)); if(index.length() == 0 || okuri.length() == 0 || kanji.length() == 0) { std::cerr << "AquaSKK: Invalid removal received; index:" @@ -469,11 +453,10 @@ } } else { // è¼¼³µBu-©È ¼¼v - int pos_space = query.indexOf(' '); - CppCFString index(query.substring(1,pos_space)); - index.replace(nbsp,space); - CppCFString kanji(query.substring(pos_space+1)); - kanji.replace(nbsp,space); + int pos_space = query.indexOf(SKK_MSG_DELIMITER); + + CppCFString index(query.substring(1, pos_space)); + CppCFString kanji(query.substring(pos_space + 1)); if(index.length() == 0 || kanji.length() == 0) { std::cerr << "AquaSKK: Invalid removal received; index:" @@ -486,15 +469,11 @@ } CppCFString DictionarySet::searchCompletions(const CppCFString& query) { - CppCFString space(" "); - CppCFString nbsp("[20]"); - D_PRINTF("COMPLETE: %s\n", query.toCString(kCFStringEncodingEUC_JP)); - CppCFString head = query.replaceClone(nbsp, space); - std::vector<CppCFString> result = userdict_->findCompletions(head); + std::vector<CppCFString> result = userdict_->findCompletions(query); - D_PRINTF("REPLY: %s\n", join(' ',result).toCString(kCFStringEncodingEUC_JP)); + D_PRINTF("REPLY: %s\n", join('/', result).toCString(kCFStringEncodingEUC_JP)); - return join(' ', result); + return join(SKK_MSG_DELIMITER, result); } Index: AquaSKK/KanjiConversionMode.cpp diff -u AquaSKK/KanjiConversionMode.cpp:1.3 AquaSKK/KanjiConversionMode.cpp:1.4 --- AquaSKK/KanjiConversionMode.cpp:1.3 Wed Apr 26 22:36:12 2006 +++ AquaSKK/KanjiConversionMode.cpp Fri May 5 00:27:02 2006 @@ -1,5 +1,5 @@ /* - $Id: KanjiConversionMode.cpp,v 1.3 2006/04/26 13:36:12 t-suwa Exp $ + $Id: KanjiConversionMode.cpp,v 1.4 2006/05/04 15:27:02 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -981,74 +981,42 @@ void KanjiConversionMode::askServerTheCandidates(bool hasOkuri) { // è¼¼ª êÎæªÉ+A³¯êÎ-ðt¯éB CppCFString query; - if (hasOkuri) { - if (SkkConfig::config().useKanaToOkuri()) { -#ifdef DEBUG - cerr << "(C)OKURI-HEAD: " << okuri[0] << " - " << SkkConfig::config().kanaToOkuri(okuri[0]) << endl; -#endif - query = CppCFString().append('+').append(root).append(SkkConfig::config().kanaToOkuri(okuri[0])).append(' ').append(okuri); + if(hasOkuri) { + query.append('+').append(root); + if(SkkConfig::config().useKanaToOkuri()) { + query.append(SkkConfig::config().kanaToOkuri(okuri[0])).append(SKK_MSG_DELIMITER).append(okuri); } else { // ¨è@¨@+¨r è - query = CppCFString().append('+').append(root).append(okuri_head).append(' ').append(okuri); + query.append(okuri_head).append(SKK_MSG_DELIMITER).append(okuri); } - } - else { + } 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()); - + cfdata_query.own(query.toCFData()); + current_candidate_index = 0; - ::askServerTheCandidates(cfdata_query,candidates); + ::askServerTheCandidates(cfdata_query, candidates); } // ño void askServerTheCandidates(const CppCFData& query, std::vector<CppCFString>& candidates) { - static CppCFString space(" "); - static CppCFString nbsp("[20]"); - CppCFString reply(ServerConnectionFactory::theInstance().newConnection(). send(kSKKMessageSearch, query, kAquaSKKServerRunLoopMode).getData()); D_PRINTF("reply: %s\n", reply.toCString(kCFStringEncodingEUC_JP)); - // óÅæØéB + std::vector<CppCFString> tmp = reply.split(SKK_MSG_DELIMITER); candidates.clear(); - const int reply_len = reply.length(); - int blockstart = 0; - for(int i = 0; i < reply_len; ++ i) { - if(reply[i] == ' ') { - if(i > blockstart) { - // óâðÇÁ - addCandidate(reply.substring(blockstart, i).replace(nbsp, space), candidates); - } - blockstart = i + 1; - } - } - if(reply_len > blockstart) { - // óâðÇÁ - addCandidate(reply.substring(blockstart, reply_len).replace(nbsp, space), candidates); - } -} -void addCandidate(const CppCFString& candidate, std::vector<CppCFString>& candidates) { - static CppCFString blockopen("["); - static CppCFString blockopen_ref("[5b]"); - static CppCFString slash("/"); - static CppCFString slash_ref("[2f]"); - static CppCFString semicolon(";"); - static CppCFString semicolon_ref("[3b]"); - - // ßÌíÍT[o[ªs¤B - candidates.push_back( - candidate.replaceClone(slash_ref,slash).replace(semicolon_ref,semicolon).replace(blockopen_ref,blockopen)); + std::transform(tmp.begin(), tmp.end(), std::back_inserter(candidates), std::mem_fun_ref(&CppCFString::decode)); } void KanjiConversionMode::makeServerRemoveWord() { @@ -1065,12 +1033,13 @@ } else { query.append(HiraganaInputMode::convert(root)).append(okuri_head); } - query.append(' ').append(HiraganaInputMode::convert(okuri)); - query.append(' ').append(candidates[current_candidate_index].clone().eraseLast(okuri.length())); // è¼¼ðÁ·B + query.append(SKK_MSG_DELIMITER).append(HiraganaInputMode::convert(okuri)); + query.append(SKK_MSG_DELIMITER).append( + candidates[current_candidate_index].clone().eraseLast(okuri.length())); // è¼¼ðÁ·B } else { // ©È ¼¼@¨@-©È ¼¼ // ÇÝÉ¢ÄÍSp¼¼Æ¼p¼¼ð½¼¼ÉÏ· - query.append('-').append(HiraganaInputMode::convert(root)).append(' '); + query.append('-').append(HiraganaInputMode::convert(root)).append(SKK_MSG_DELIMITER); query.append(candidates[current_candidate_index]); } @@ -1098,84 +1067,46 @@ } void askServerTheCompletions(const CppCFData& query, std::vector<CppCFString>& completions) { - CppCFString space(" "); - CppCFString nbsp("[20]"); CppCFString reply(ServerConnectionFactory::theInstance().newConnection(). send(kSKKFetchCompletions, query, kAquaSKKServerRunLoopMode).getData()); - // óÅæØéB - completions.clear(); - const int reply_len = reply.length(); - int blockstart = 0; - for(int i = 0; i < reply_len; ++ i) { - if(reply[i] == ' ') { - if(i > blockstart) { - // óâðÇÁ - completions.push_back(reply.substring(blockstart, i).replace(nbsp, space)); - } - blockstart = i + 1; - } - } - if(reply_len > blockstart) { - // óâðÇÁ - completions.push_back(reply.substring(blockstart, reply_len).replace(nbsp, space)); - } + completions = reply.split(SKK_MSG_DELIMITER); } // ño void sendWordToServerToRegister(const CppCFString& index,const CppCFString& okuri,const CppCFString& kanji) { - CppCFString space(" "); - CppCFString nbsp("[20]"); - CppCFData query; - query.own(CppCFString().append('+').append(index.replaceClone(space,nbsp)). - append(' ').append(okuri.replaceClone(space,nbsp)). - append(' ').append(kanji.replaceClone(space,nbsp)).toCFData()); + + query.own(CppCFString().append('+').append(index).append(SKK_MSG_DELIMITER). + append(okuri).append(SKK_MSG_DELIMITER).append(kanji).toCFData()); + ServerConnectionFactory::theInstance().newConnection().send(kSKKRegisterThisToUserDic, query); } void sendWordToServerToRegister(const CppCFString& index,const CppCFString& kanji) { - static CppCFString space(" "); - static CppCFString nbsp("[20]"); - static CppCFString blockopen("["); - static CppCFString blockopen_ref("[5b]"); - static CppCFString slash("/"); - static CppCFString slash_ref("[2f]"); - static CppCFString semicolon(";"); - static CppCFString semicolon_ref("[3b]"); - - CppCFString encoded_kanji = - kanji.replaceClone(blockopen, blockopen_ref).replace(slash, slash_ref). - replace(semicolon, semicolon_ref).replace(space,nbsp); - CppCFData query; - query.own(CppCFString().append('-').append(index.replaceClone(space, nbsp)). - append(' ').append(encoded_kanji).toCFData()); + + query.own(CppCFString().append('-').append(index).append(SKK_MSG_DELIMITER).append(kanji.encode()).toCFData()); ServerConnectionFactory::theInstance().newConnection().send(kSKKRegisterThisToUserDic, query); } void KanjiConversionMode::openCandidatesWindow(OpenDirection mode) { - // candidatesÌ4ÔÚÈ~ÌÚ©çè¼¼ðæ袽zñðìéB - // è¼¼ª³¯êνàÁ³ê¸»ÌÜÜRs[³êéB - CppCFString space(" "); - CppCFString nbsp("[20]"); - std::vector<CppCFString> cands_without_okuri; unsigned okuri_length = okuri.length(); if(okuri_length > 0) { for(std::vector<CppCFString>::const_iterator ite = candidates.begin() + (show_cands_window_after_Nth_cand - 1); ite != candidates.end(); ++ ite) { - cands_without_okuri.push_back(ite->substring(0, ite->length() - okuri_length).replace(space, nbsp)); + cands_without_okuri.push_back(ite->substring(0, ite->length() - okuri_length)); } } else { for(std::vector<CppCFString>::const_iterator ite = candidates.begin() + (show_cands_window_after_Nth_cand - 1); ite != candidates.end(); ++ ite) { - cands_without_okuri.push_back(ite->replaceClone(space,nbsp)); + cands_without_okuri.push_back(*ite); } } - ::openCandidatesWindow(join(' ', cands_without_okuri), + ::openCandidatesWindow(join(SKK_MSG_DELIMITER, cands_without_okuri), candidates_window_id, candidates_window_cands_per_frame, candidates_window_num_of_frames, Index: AquaSKK/KotoeriDictionary.cpp diff -u AquaSKK/KotoeriDictionary.cpp:1.2 AquaSKK/KotoeriDictionary.cpp:1.3 --- AquaSKK/KotoeriDictionary.cpp:1.2 Wed Apr 26 22:36:12 2006 +++ AquaSKK/KotoeriDictionary.cpp Fri May 5 00:27:02 2006 @@ -1,5 +1,5 @@ /* - $Id: KotoeriDictionary.cpp,v 1.2 2006/04/26 13:36:12 t-suwa Exp $ + $Id: KotoeriDictionary.cpp,v 1.3 2006/05/04 15:27:02 t-suwa Exp $ MacOS X implementation of the SKK input method. @@ -148,14 +148,15 @@ if(status != noErr) break; -#if MAC_OS_X_VERSION_MAX_ALLOWED>=1040 // ÊÉÇÁ·é - result.push_back(CppCFData(dataBuffer, actualSize).getData()); +#if MAC_OS_X_VERSION_MAX_ALLOWED>=1040 + CppCFString entry(CppCFData(dataBuffer, actualSize).getData()); #else CFStringRef tmp = CFStringCreateWithBytes(NULL, dataBuffer, actualSize, kCFStringEncodingUnicode, false); - result.push_back(tmp); + CppCFString entry(tmp); CFRelease(tmp); #endif + result.push_back(entry.encode()); } DCMDisposeRecordIterator(iterator);