-#ifndef HAVE_LIBMYTHES
-#ifdef HAVE_LIBAIKSAURUS
-
-
-Thesaurus::Thesaurus()
- : thes_(new Aiksaurus)
-{}
-
-
-Thesaurus::~Thesaurus()
-{
- delete 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(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 (!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 = 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));
- }
-
- ret = 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_"));
-}
-
-#endif // HAVE_LIBAIKSAURUS
-#endif // !HAVE_LIBMYTHES
-
-
-#ifdef HAVE_LIBMYTHES
-