+ QList<TranslationStarDict> translations;
+ bool is32b = false;
+ if(settings()->value("idxoffsetbits") == "32" ||
+ settings()->value("idxoffsetbits") == "")
+ is32b = true;
+
+ bool err = 0;
+ int wordcount = settings()->value("wordcount").toInt(&err);
+ if(err)
+ return QList<Translation*>();
+
+ QString idxPath = settings()->value("idxFileName");
+ StarDictReader * reader = StarDictReaderFactory::createReader(idxPath);
+
+ QString fkey;
+ qint64 offset = 0, len = 0;
+ QRegExp keyword(word, Qt::CaseInsensitive, QRegExp::Wildcard);
+
+ int counter = 0;
+ while(counter < wordcount) {
+ counter++;
+ fkey = reader->readKeyword();
+ if(is32b)
+ offset = reader->readInt32BigEndian();
+ else
+ offset = reader->readInt64BigEndian();
+ len = reader->readInt32BigEndian();
+
+ if(keyword.exactMatch(fkey)) {
+ TranslationStarDict tran(fkey, infoNote(), this);
+ int id = translations.indexOf(tran);
+ if(id == -1) {
+ tran.add(offset, len);
+ translations.push_front(tran);
+ } else
+ translations[id].add(offset, len);
+ }
+
+
+ }
+ QList<Translation*> ret;
+ QListIterator<TranslationStarDict> it(translations);
+ while(it.hasNext())
+ ret.push_back(new TranslationStarDict(it.next()));
+
+
+ return ret;