diff --git a/src/Thesaurus.cpp b/src/Thesaurus.cpp index 6bc0823425..42daa0c8eb 100644 --- a/src/Thesaurus.cpp +++ b/src/Thesaurus.cpp @@ -42,79 +42,6 @@ using namespace lyx::support::os; 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 { @@ -272,7 +199,80 @@ Thesaurus::Meanings Thesaurus::lookup(docstring const & t, docstring const & lan return meanings; } -#else +#else // HAVE_LIBMYTHES +#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 struct Thesaurus::Private { @@ -290,8 +290,8 @@ bool Thesaurus::thesaurusAvailable(docstring const &) const return false; } -#endif // HAVE_LIBMYTHES #endif // HAVE_LIBAIKSAURUS +#endif // HAVE_LIBMYTHES Thesaurus::Thesaurus() : d(new Thesaurus::Private) {