[aquaskk-changes 219] CVS update: AquaSKK

Back to archive index

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() {
     // ƒEƒCƒ“ƒhƒEID(UInt16)‚ðŠÜ‚ÞCFData‚ðì¬‚µAŽI‚Ö‘—‚é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‚̃oƒ“ƒhƒ‹–¼
+// ƒRƒ“ƒ|[ƒlƒ“ƒg‚̃oƒ“ƒhƒ‹–¼
 #define kIMBundleIdentifier "jp.sourceforge.AquaSKKInputMethod"
 
-// ŽI‚̃AƒvƒŠ–¼
-#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;
 
+// ƒƒbƒZ[ƒW‚Ì‹æØ‚蕶Žš
+#define	SKK_MSG_DELIMITER	(0x0b) /* ‚’¼ƒ^ƒu */
+
 enum { // ƒNƒ‰ƒCƒAƒ“ƒg‚©‚çŽI‚ւ̃ƒbƒZ[ƒW
     kBasicMessageActivated			= 100,	// SKK‚ªƒAƒNƒeƒBƒu‚É‚È‚Á‚½B
     kBasicMessageDeactivated			= 101,	// SKK‚ªƒAƒNƒeƒBƒu‚Å‚È‚­‚È‚Á‚½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 ‚ÌŒó•âƒŠƒXƒg‚ðì¬
-    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()];
     }
 
     // –¢Žg—pID‚ðŒŸõ
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 ‚ð’è‹`BƒƒbƒZ[ƒW‚Ì‹æØ‚蕶ŽšB
+
+	* DictionarySet.cpp, KanjiConversionMode.cpp,
+	AsciiConversionMode.cpp, : SKK_MSG_DELIMITER ‚ðŽg‚¤‚悤‚ɏC³B‘S”Ê
+	“I‚ɁA' ' Ì [20] •ÏŠ·‚ðœ‹ŽB
+
+	* CandidatesManager.mm:	SKK_MSG_DELIMITER ‚ðŽg‚¤‚悤‚ɏC³B
+
+	* CppCFString.*: encode() ‚Æ decode() ‚ð’ljÁB"[/;" ‚ÌŠe•¶Žš‚ðƒGƒ“
+	ƒR[ƒh/ƒfƒR[ƒh‚·‚éB
+
+	* KotoeriDictionary.cpp: ŒŸõŒ‹‰Ê‚ð CppCFString::encode() ‚·‚é‚悤
+	‚ɏC³B
+
 2006-04-26  Tomotaka SUWA  <t.suw****@mac*****>
 
 	* Info-*.plist: ƒŠƒŠ[ƒX 3.0 ‚ÉŒü‚¯‚čXVB
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() {
+	// ƒGƒ“ƒR[ƒh‘Ώۂ̕¶Žš(‡”Ô‚ªd—v)
+	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‚È‚Årv
-	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‚È‚Årv
+	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•¡‚ðƒ`ƒFƒbƒNBd•¡‚µ‚Ä‚¢‚½‚çŒã‚É‚ ‚é‚à‚Ì‚ðíœB
 	removeRedundantItems(candidates);
 
-	// candidates‚Ì‘S‚Ă̍€–ڂ̃Xƒy[ƒ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));
 
     // ‘—‚艼–¼‚ ‚èHu+‚¨‚­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 {
 	// ‘—‚艼–¼–³‚µBu-‚©‚È ‰¼–¼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));
 
     // ‘—‚艼–¼‚ ‚èHu+‚¨‚­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 {
 	// ‘—‚艼–¼–³‚µBu-‚©‚È ‰¼–¼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);
     }
-    
+
     // ‘SŠp‰¼–¼‚Æ”¼Š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) {
-		// Œó•â‚ð’ljÁ
-		addCandidate(reply.substring(blockstart, i).replace(nbsp, space), candidates);
-	    }
-	    blockstart = i + 1;
-	}
-    }
-    if(reply_len > blockstart) {
-	// Œó•â‚ð’ljÁ
-	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 {
 	// ‚©‚È ‰¼–¼@¨@-‚©‚È ‰¼–¼
 	// “ǂ݂ɂ‚¢‚Ä‚Í‘SŠp‰¼–¼‚Æ”¼Š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) {
-		// Œó•â‚ð’ljÁ
-		completions.push_back(reply.substring(blockstart, i).replace(nbsp, space));
-	    }
-	    blockstart = i + 1;
-	}
-    }
-    if(reply_len > blockstart) {
-	// Œó•â‚ð’ljÁ
-	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
-    // ‘—‚艼–¼‚ª–³‚¯‚ê‚Ή½‚àÁ‚³‚ꂸ‚»‚̂܂܃Rƒs[‚³‚ê‚é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
 	// Œ‹‰Ê‚ɒljÁ‚·‚é
-	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);
 


aquaskk-changes メーリングリストの案内
Back to archive index