-void Library::SimpleLookup(const string &str, TSearchResultList& res_list)
-{
- glong idx, idx_suggest;
- res_list.reserve(ndicts());
- for (gint idict=0; idict<ndicts(); ++idict)
- if (SimpleLookupWord(str.c_str(), idx, idx_suggest, (size_t) idict, 0))
- res_list.push_back(
- TSearchResult(dict_name(idict),
- poGetWord(idx, idict, 0),
- parse_data(poGetOrigWordData(idx, idict))));
+void Library::ListWords(CurrentIndex* iIndex)
+{
+ CurrentIndex *iCurrent = (CurrentIndex*)g_memdup(iIndex, sizeof(CurrentIndex)*query_dictmask.size());
+
+ pMStarDict->ResultsListClear();
+
+ int iWordCount=0;
+ const gchar * poCurrentWord = poGetCurrentWord(iIndex, query_dictmask, 0);
+ if (poCurrentWord) {
+ pMStarDict->ResultsListInsertLast(poCurrentWord);
+ iWordCount++;
+
+ while (iWordCount < 30 && (poCurrentWord = poGetNextWord(NULL, iIndex, query_dictmask, 0))) {
+ pMStarDict->ResultsListInsertLast(poCurrentWord);
+ iWordCount++;
+ }
+ }
+ pMStarDict->ReScroll();
+
+ if (iCurrent)
+ g_free (iCurrent);
+}
+
+bool Library::BuildResultData(std::vector<InstantDictIndex> &dictmask, const char* sWord, CurrentIndex *iIndex, int iLib, TSearchResultList& res_list)
+{
+ int iRealLib;
+ bool bFound = false, bLookupWord = false, bLookupSynonymWord = false;
+ gint nWord=0, count=0, i=0, j=0;
+
+ iRealLib = dictmask[iLib].index;
+
+ bLookupWord = LookupWord(sWord, iIndex[iLib].idx, iIndex[iLib].idx_suggest, iRealLib, 0);
+ if (!bLookupWord)
+ bLookupWord = LookupSimilarWord(sWord, iIndex[iLib].idx, iIndex[iLib].idx_suggest, iRealLib, 0);
+ if (!bLookupWord)
+ bLookupWord = SimpleLookupWord(sWord, iIndex[iLib].idx, iIndex[iLib].idx_suggest, iRealLib, 0);
+
+ bLookupSynonymWord = LookupSynonymWord(sWord, iIndex[iLib].synidx, iIndex[iLib].synidx_suggest, iRealLib, 0);
+ if (!bLookupSynonymWord)
+ bLookupSynonymWord = LookupSynonymSimilarWord(sWord, iIndex[iLib].synidx, iIndex[iLib].synidx_suggest, iRealLib, 0);
+ if (!bLookupSynonymWord)
+ bLookupSynonymWord = SimpleLookupSynonymWord(sWord, iIndex[iLib].synidx, iIndex[iLib].synidx_suggest, iRealLib, 0);
+
+ g_debug ("bookname: %s, iLib: %d, iRealLib: %d, str: %s", dict_name(iLib).c_str(), iLib, iRealLib, sWord);
+
+ if (bLookupWord || bLookupSynonymWord) {
+ if (bLookupWord)
+ nWord++;
+
+ if (bLookupSynonymWord)
+ nWord+=GetOrigWordCount(iIndex[iLib].synidx, iRealLib, false);
+
+ if (bLookupWord) {
+ count = GetOrigWordCount(iIndex[iLib].idx, iRealLib, true);
+ for (i=0;i<count;i++) {
+ res_list.push_back(TSearchResult(dict_name(iLib),
+ poGetWord(iIndex[iLib].idx, iRealLib, 0),
+ parse_data(poGetOrigWordData(iIndex[iLib].idx+i, iRealLib))));
+ }
+ i = 1;
+ } else {
+ i = 0;
+ }
+ for (j = 0; i < nWord; i++, j++) {
+ res_list.push_back(TSearchResult(dict_name(iLib),
+ poGetWord(iIndex[iLib].synidx+j, iRealLib, 0),
+ parse_data(poGetOrigWordData(iIndex[iLib].synidx+j, iRealLib))));
+ }
+
+ bFound = true;
+ }
+
+ return bFound;
+}
+
+bool Library::SimpleLookup(const gchar* sWord, CurrentIndex* piIndex)
+{
+ CurrentIndex *iIndex;
+ TSearchResultList results;
+ bool bFound = false;
+
+ if (!piIndex)
+ iIndex = (CurrentIndex *)g_malloc(sizeof(CurrentIndex) * query_dictmask.size());
+ else
+ iIndex = piIndex;
+
+ for (size_t iLib=0; iLib<query_dictmask.size(); iLib++) {
+ bFound = BuildResultData(query_dictmask, sWord, iIndex, iLib, results);
+ }
+
+ if (!piIndex)
+ g_free(iIndex);
+
+ return bFound;