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