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 {
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
{
return false;
}
-#endif // HAVE_LIBMYTHES
#endif // HAVE_LIBAIKSAURUS
+#endif // HAVE_LIBMYTHES
Thesaurus::Thesaurus() : d(new Thesaurus::Private)
{