- // correct, returns "" at the end
- string ret = thes_->next(cur_meaning);
-
- while (!ret.empty()) {
- if (cur_meaning != prev_meaning) {
- meaning = from_ascii(ret);
- ret = thes_->next(cur_meaning);
- prev_meaning = cur_meaning;
- } else {
- if (ret != text)
- meanings[meaning].push_back(from_ascii(ret));
+pair<string,string> Thesaurus::Private::getThesaurus(string const & path, docstring const & lang)
+{
+ FileName base(path);
+ if (!base.isDirectory()) {
+ return make_pair(string(), string());
+ }
+ FileNameList const idx_files = base.dirList("idx");
+ FileNameList const data_files = base.dirList("dat");
+ string idx;
+ string data;
+ string basename;
+
+ LYXERR(Debug::FILES, "thesaurus path: " << path);
+ for (FileNameList::const_iterator it = idx_files.begin(); it != idx_files.end(); ++it) {
+ basename = it->onlyFileNameWithoutExt();
+ if (contains(basename, to_ascii(lang))) {
+ ifstream ifs(it->absFileName().c_str());
+ if (ifs) {
+ // check for appropriate version of index file
+ string encoding; // first line is encoding
+ int items = 0; // second line is no. of items
+ getline(ifs,encoding);
+ ifs >> items;
+ if (ifs.fail()) {
+ LYXERR(Debug::FILES, "ignore irregular thesaurus idx file: " << it->absFileName());
+ continue;
+ }
+ if (encoding.length() == 0 || encoding.find_first_of(',') != string::npos) {
+ LYXERR(Debug::FILES, "ignore version1 thesaurus idx file: " << it->absFileName());
+ continue;
+ }
+ }
+ idx = it->absFileName();
+ LYXERR(Debug::FILES, "selected thesaurus idx file: " << idx);
+ break;