Make Thesaurus check for more general dictionaries (en-v2.idx)

if a specific one (such as en_NZ-v2.idx) is not found.

If someone can replace the rather clumsy code by an elegant regexp
(I failed to find one), this is most welcome!
This commit is contained in:
Juergen Spitzmueller 2015-06-02 17:28:44 +02:00
parent 5d41a22ee4
commit 77ab3017d0

View File

@ -107,6 +107,11 @@ pair<string,string> Thesaurus::Private::getThesaurus(string const & path, docstr
for (FileNameList::const_iterator it = idx_files.begin(); it != idx_files.end(); ++it) { for (FileNameList::const_iterator it = idx_files.begin(); it != idx_files.end(); ++it) {
basename = it->onlyFileNameWithoutExt(); basename = it->onlyFileNameWithoutExt();
if (contains(basename, to_ascii(lang))) { if (contains(basename, to_ascii(lang))) {
// do not use more specific dicts.
if (contains(basename, '_') && !contains(lang, '_'))
continue;
if (contains(basename, '-') && !contains(lang, '-'))
continue;
ifstream ifs(it->absFileName().c_str()); ifstream ifs(it->absFileName().c_str());
if (ifs) { if (ifs) {
// check for appropriate version of index file // check for appropriate version of index file
@ -128,8 +133,23 @@ pair<string,string> Thesaurus::Private::getThesaurus(string const & path, docstr
break; break;
} }
} }
if (idx.empty()) if (idx.empty()) {
// try with a more general dictionary
docstring shortcode;
if (contains(lang, '_')) {
split(lang, shortcode, '_');
LYXERR(Debug::FILES, "Did not find thesaurus for LANG code "
<< lang << ". Trying with " << shortcode);
return getThesaurus(path, shortcode);
}
else if (contains(lang, '-')) {
split(lang, shortcode, '-');
LYXERR(Debug::FILES, "Did not find thesaurus for LANG code "
<< lang << ". Trying with " << shortcode);
return getThesaurus(path, shortcode);
}
return make_pair(string(), string()); return make_pair(string(), string());
}
for (support::FileNameList::const_iterator it = data_files.begin(); it != data_files.end(); ++it) { for (support::FileNameList::const_iterator it = data_files.begin(); it != data_files.end(); ++it) {
if (contains(it->onlyFileName(), basename)) { if (contains(it->onlyFileName(), basename)) {
data = it->absFileName(); data = it->absFileName();