compile fix (and move MyThes to firt place, since it is the preferred lib).

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@29470 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jürgen Spitzmüller 2009-05-01 11:50:04 +00:00
parent c18baee469
commit 59b58c5c0a

View File

@ -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)
{