#include "Thesaurus.h"
-#include "support/debug.h"
-#include "support/gettext.h"
#include "LyXRC.h"
#include "support/FileNameList.h"
+#include "support/debug.h"
#include "support/filetools.h"
+#include "support/gettext.h"
#include "support/lstrings.h"
#include "support/os.h"
#include "support/unicode.h"
-#include "frontends/alert.h"
+#include "support/mythes/mythes.hxx"
-#ifdef HAVE_LIBMYTHES
-#include MYTHES_H_LOCATION
-#else
-#ifdef HAVE_LIBAIKSAURUS
-#include AIKSAURUS_H_LOCATION
-#endif // HAVE_LIBAIKSAURUS
-#endif // !HAVE_LIBMYTHES
+#include "frontends/alert.h"
#include <algorithm>
#include <cstring>
namespace lyx {
-#ifdef HAVE_LIBAIKSAURUS
-
-struct Thesaurus::Private
-{
- Private(): thes_(new Aiksaurus) {}
- Aiksaurus * thes_;
-};
-
-Thesaurus::Meanings Thesaurus::lookup(docstring const & t, docstring const &)
-{
- Meanings meanings;
-
- // aiksaurus is for english text only, therefore it does not work
- // with non-ascii strings.
- // The interface of the Thesaurus class uses docstring because a
- // non-english thesaurus is possible in theory.
- if (!support::isAscii(t))
- // to_ascii() would assert
- return meanings;
-
- string const text = to_ascii(t);
-
- docstring error = from_ascii(d->thes_->error());
- if (!error.empty()) {
- static bool sent_error = false;
- if (!sent_error) {
- frontend::Alert::error(_("Thesaurus failure"),
- bformat(_("Aiksaurus returned the following error:\n\n%1$s."),
- error));
- sent_error = true;
- }
- return meanings;
- }
- if (!d->thes_->find(text.c_str()))
- return meanings;
-
- // weird api, but ...
-
- int prev_meaning = -1;
- int cur_meaning;
- docstring meaning;
-
- // correct, returns "" at the end
- string ret = d->thes_->next(cur_meaning);
-
- while (!ret.empty()) {
- if (cur_meaning != prev_meaning) {
- meaning = from_ascii(ret);
- ret = d->thes_->next(cur_meaning);
- prev_meaning = cur_meaning;
- } else {
- if (ret != text)
- meanings[meaning].push_back(from_ascii(ret));
- }
-
- ret = d->thes_->next(cur_meaning);
- }
-
- for (Meanings::iterator it = meanings.begin();
- it != meanings.end(); ++it)
- sort(it->second.begin(), it->second.end());
-
- return meanings;
-}
-
-
-bool Thesaurus::thesaurusAvailable(docstring const & lang) const
-{
- // we support English only
- return prefixIs(lang, from_ascii("en_"));
-}
-
-#else // HAVE_LIBAIKSAURUS
-#ifdef HAVE_LIBMYTHES
-
namespace {
string const to_iconv_encoding(docstring const & s, string const & encoding)
return docstring(ucs4.begin(), ucs4.end());
}
+typedef std::map<docstring, MyThes *> Thesauri;
+
} // namespace anon
delete it->second;
}
}
+ ///
+ bool thesaurusAvailable(docstring const & lang) const
+ {
+ for (Thesauri::const_iterator it = thes_.begin();
+ it != thes_.end(); ++it) {
+ if (it->first == lang)
+ if (it->second)
+ return true;
+ }
+ return false;
+ }
/// add a thesaurus to the list
bool addThesaurus(docstring const & lang);
- typedef std::map<docstring, MyThes *> Thesauri;
/// the thesauri
Thesauri thes_;
};
bool Thesaurus::thesaurusAvailable(docstring const & lang) const
{
- for (Thesauri::const_iterator it = d->thes_.begin();
- it != d->thes_.end(); ++it) {
- if (it->first == lang)
- if (it->second)
- return true;
- }
-
- return false;
+ return d->thesaurusAvailable(lang);
}
return meanings;
}
-#else
-
-struct Thesaurus::Private
-{
-};
-
-
-Thesaurus::Meanings Thesaurus::lookup(docstring const &, docstring const &)
-{
- return Meanings();
-}
-
-
-bool Thesaurus::thesaurusAvailable(docstring const &) const
-{
- return false;
-}
-
-#endif // HAVE_LIBMYTHES
-#endif // HAVE_LIBAIKSAURUS
Thesaurus::Thesaurus() : d(new Thesaurus::Private)
{