+pair<string,string> Thesaurus::Private::getThesaurus(docstring const & lang)
+{
+ string const thes_path = external_path(lyxrc.thesaurusdir_path);
+ pair<string,string> result ;
+
+ if (thesaurusAvailable(lang))
+ return make_pair(string(), string());
+
+ if (!thes_path.empty()) {
+ result = getThesaurus(thes_path, lang);
+ }
+ if (result.first.empty() || result.second.empty()) {
+ string const sys_path = external_path(addName(lyx::support::package().system_support().absFileName(),dataDirectory())) ;
+ result = getThesaurus(sys_path, lang);
+ }
+ if (result.first.empty() || result.second.empty()) {
+ string const user_path = external_path(addName(lyx::support::package().user_support().absFileName(),dataDirectory())) ;
+ result = getThesaurus(user_path, lang);
+ }
+ return result;
+}
+
+
+bool Thesaurus::Private::addThesaurus(docstring const & lang)
+{
+ if (thesaurusAvailable(lang))
+ return true;
+
+ ThesFiles files = getThesaurus(lang);
+ string const idx = files.first;
+ string const data = files.second;
+
+ if (idx.empty() || data.empty())
+ return false;
+
+ char const * af = idx.c_str();
+ char const * df = data.c_str();
+ thes_[lang] = new MyThes(af, df);
+ return true;
+}
+
+
+bool Thesaurus::thesaurusAvailable(docstring const & lang) const
+{
+ return d->thesaurusAvailable(lang);
+}
+
+
+bool Thesaurus::thesaurusInstalled(docstring const & lang) const
+{
+ if (thesaurusAvailable(lang))
+ return true;
+ pair<string, string> files = d->getThesaurus(lang);
+ return (!files.first.empty() && !files.second.empty());
+}
+
+
+Thesaurus::Meanings Thesaurus::lookup(docstring const & t, docstring const & lang)