[aquaskk-changes 231] CVS update: AquaSKK

Back to archive index

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 @@
 
     // ƒpƒX‚ð“WŠJ‚·‚é
     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 @@
 	// Ž«‘‚̃Xƒe[ƒ^ƒ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ƒ“ƒ^ƒtƒF[ƒ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ƒ‹‚ªXV‚³‚ê‚Ä‚¢‚È‚¯‚ê‚΁A‰½‚à‚µ‚È‚¢
-    if(stat(path_.c_str(), &st) < 0 || lastupdate == st.st_mtime) {
+    // Ž«‘ƒtƒ@ƒCƒ‹‚ªXV‚³‚ê‚Ä‚¢‚È‚¯‚ê‚Ή½‚à‚µ‚È‚¢
+    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_;


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