Tomotaka SUWA
t-suw****@users*****
2006年 6月 12日 (月) 23:14:49 JST
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);
// lÏ·ªLø©H
- if(ClientConfiguration::theInstance().useNumericConversion() && numconv_.Setup(str)) {
+ if(ClientConfiguration::theInstance().useNumericConversion() && numconv_.Setup(index)) {
std::vector<CppCFString> 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 @@
// pXðWJ·é
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 <set>
#include "BIM.h"
#include "BIMClientServer.h"
#include "BIMInputEvents.h"
@@ -1010,15 +1011,15 @@
::askServerTheCandidates(cfdata_query, candidates);
// lÏ·ªLø©H
- if(ClientConfiguration::theInstance().useNumericConversion() && numconv_.Setup(query)) {
+ if(!hasOkuri && ClientConfiguration::theInstance().useNumericConversion() && numconv_.Setup(root)) {
std::vector<CppCFString> 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<CppCFString>& master, std::vector<CppCFString>& cands) {
+ std::set<CppCFString> check;
+ std::vector<CppCFString> result;
+
+ check.insert(numconv.OriginalKey());
+
+ // õ
+ for(std::vector<CppCFString>::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);
+ }
+
+ // }[W
+ for(std::vector<CppCFString>::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<CppCFString>& master, std::vector<CppCFString>& 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 <algorithm>
#include <numeric>
#include <ctime>
-#include <sys/types.h>
-#include <sys/stat.h>
#include <unistd.h>
#include <pthread.h>
#include "CppCFString.h"
@@ -56,7 +54,7 @@
// «ÌXe[^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 C^tF[X
// ======================================================================
-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@CªXV³êĢȯêÎA½àµÈ¢
- if(stat(path_.c_str(), &st) < 0 || lastupdate == st.st_mtime) {
+ // «t@CªXV³êĢȯêνàµÈ¢
+ 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 <sys/types.h>
+#include <sys/stat.h>
#include <deque>
#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_;