X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FThesaurus.cpp;h=bf657762c1c2d4a423d3998a7dc8245734d3e132;hb=a5b01f8f96efc95633a8da1cf4748aa473a89f1a;hp=870f967f41578ba7fcbb70c6c5a6dd4ed174e952;hpb=333485fa34449c5a543f35abac040285c2851042;p=lyx.git diff --git a/src/Thesaurus.cpp b/src/Thesaurus.cpp index 870f967f41..bf657762c1 100644 --- a/src/Thesaurus.cpp +++ b/src/Thesaurus.cpp @@ -100,9 +100,16 @@ pair Thesaurus::Private::getThesaurus(string const & path, docstr if (contains(basename, to_ascii(lang))) { ifstream ifs(it->absFileName().c_str()); if (ifs) { - string s; - getline(ifs,s); - if (s.find_first_of(',') != string::npos) { + // 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; } @@ -215,17 +222,17 @@ Thesaurus::Meanings Thesaurus::lookup(docstring const & t, docstring const & lan // they are needed for the CleanUpAfterLookup routine mentry * pm = pmean; docstring meaning; - docstring ret; for (int i = 0; i < count; i++) { + vector ret; meaning = from_iconv_encoding(string(pm->defn), encoding); // remove silly item if (support::prefixIs(meaning, '-')) meaning = support::ltrim(meaning, "- "); for (int j = 0; j < pm->count; j++) { - ret = from_iconv_encoding(string(pm->psyns[j]), encoding); + ret.push_back(from_iconv_encoding(string(pm->psyns[j]), encoding)); } - meanings[meaning].push_back(ret); - pm++; + meanings[meaning] = ret; + ++pm; } // now clean up all allocated memory mythes->CleanUpAfterLookup(&pmean, count);