CMake/Windows compilation fix. Aiksaurus.h was not visible in frontend/qt4:

* pimpl the implementation details. Next step would probably be to have a virtual base class instead.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@29453 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Abdelrazak Younes 2009-05-01 06:33:19 +00:00
parent bd9de0b764
commit e2025f59dc
2 changed files with 54 additions and 64 deletions

View File

@ -25,6 +25,14 @@
#include "frontends/alert.h" #include "frontends/alert.h"
#ifdef HAVE_LIBMYTHES
#include MYTHES_H_LOCATION
#else
#ifdef HAVE_LIBAIKSAURUS
#include AIKSAURUS_H_LOCATION
#endif // HAVE_LIBAIKSAURUS
#endif // !HAVE_LIBMYTHES
#include <algorithm> #include <algorithm>
#include <cstring> #include <cstring>
@ -34,20 +42,13 @@ using namespace lyx::support::os;
namespace lyx { namespace lyx {
#ifndef HAVE_LIBMYTHES
#ifdef HAVE_LIBAIKSAURUS #ifdef HAVE_LIBAIKSAURUS
struct Thesaurus::Private
Thesaurus::Thesaurus()
: thes_(new Aiksaurus)
{}
Thesaurus::~Thesaurus()
{ {
delete thes_; Private(): thes_(new Aiksaurus) {}
} Aiksaurus * thes_;
};
Thesaurus::Meanings Thesaurus::lookup(docstring const & t, docstring const &) Thesaurus::Meanings Thesaurus::lookup(docstring const & t, docstring const &)
{ {
@ -63,7 +64,7 @@ Thesaurus::Meanings Thesaurus::lookup(docstring const & t, docstring const &)
string const text = to_ascii(t); string const text = to_ascii(t);
docstring error = from_ascii(thes_->error()); docstring error = from_ascii(d->thes_->error());
if (!error.empty()) { if (!error.empty()) {
static bool sent_error = false; static bool sent_error = false;
if (!sent_error) { if (!sent_error) {
@ -74,7 +75,7 @@ Thesaurus::Meanings Thesaurus::lookup(docstring const & t, docstring const &)
} }
return meanings; return meanings;
} }
if (!thes_->find(text.c_str())) if (!d->thes_->find(text.c_str()))
return meanings; return meanings;
// weird api, but ... // weird api, but ...
@ -84,19 +85,19 @@ Thesaurus::Meanings Thesaurus::lookup(docstring const & t, docstring const &)
docstring meaning; docstring meaning;
// correct, returns "" at the end // correct, returns "" at the end
string ret = thes_->next(cur_meaning); string ret = d->thes_->next(cur_meaning);
while (!ret.empty()) { while (!ret.empty()) {
if (cur_meaning != prev_meaning) { if (cur_meaning != prev_meaning) {
meaning = from_ascii(ret); meaning = from_ascii(ret);
ret = thes_->next(cur_meaning); ret = d->thes_->next(cur_meaning);
prev_meaning = cur_meaning; prev_meaning = cur_meaning;
} else { } else {
if (ret != text) if (ret != text)
meanings[meaning].push_back(from_ascii(ret)); meanings[meaning].push_back(from_ascii(ret));
} }
ret = thes_->next(cur_meaning); ret = d->thes_->next(cur_meaning);
} }
for (Meanings::iterator it = meanings.begin(); for (Meanings::iterator it = meanings.begin();
@ -113,10 +114,7 @@ bool Thesaurus::thesaurusAvailable(docstring const & lang) const
return prefixIs(lang, from_ascii("en_")); return prefixIs(lang, from_ascii("en_"));
} }
#endif // HAVE_LIBAIKSAURUS #else // HAVE_LIBAIKSAURUS
#endif // !HAVE_LIBMYTHES
#ifdef HAVE_LIBMYTHES #ifdef HAVE_LIBMYTHES
namespace { namespace {
@ -139,20 +137,25 @@ docstring const from_iconv_encoding(string const & s, string const & encoding)
} // namespace anon } // namespace anon
Thesaurus::Thesaurus() struct Thesaurus::Private
{}
Thesaurus::~Thesaurus()
{ {
~Private()
{
for (Thesauri::iterator it = thes_.begin(); for (Thesauri::iterator it = thes_.begin();
it != thes_.end(); ++it) { it != thes_.end(); ++it) {
delete it->second; delete it->second;
} }
} }
/// add a thesaurus to the list
bool addThesaurus(docstring const & lang);
bool Thesaurus::addThesaurus(docstring const & lang) typedef std::map<docstring, MyThes *> Thesauri;
/// the thesauri
Thesauri thes_;
};
bool Thesaurus::Private::addThesaurus(docstring const & lang)
{ {
string const thes_path = external_path(lyxrc.thesaurusdir_path); string const thes_path = external_path(lyxrc.thesaurusdir_path);
LYXERR(Debug::FILES, "thesaurus path: " << thes_path); LYXERR(Debug::FILES, "thesaurus path: " << thes_path);
@ -199,8 +202,8 @@ bool Thesaurus::addThesaurus(docstring const & lang)
bool Thesaurus::thesaurusAvailable(docstring const & lang) const bool Thesaurus::thesaurusAvailable(docstring const & lang) const
{ {
for (Thesauri::const_iterator it = thes_.begin(); for (Thesauri::const_iterator it = d->thes_.begin();
it != thes_.end(); ++it) { it != d->thes_.end(); ++it) {
if (it->first == lang) if (it->first == lang)
if (it->second) if (it->second)
return true; return true;
@ -215,11 +218,11 @@ Thesaurus::Meanings Thesaurus::lookup(docstring const & t, docstring const & lan
Meanings meanings; Meanings meanings;
MyThes * mythes = 0; MyThes * mythes = 0;
if (!addThesaurus(lang)) if (!d->addThesaurus(lang))
return meanings; return meanings;
for (Thesauri::const_iterator it = thes_.begin(); for (Thesauri::const_iterator it = d->thes_.begin();
it != thes_.end(); ++it) { it != d->thes_.end(); ++it) {
if (it->first == lang) { if (it->first == lang) {
mythes = it->second; mythes = it->second;
break; break;
@ -265,15 +268,10 @@ Thesaurus::Meanings Thesaurus::lookup(docstring const & t, docstring const & lan
} }
#else #else
#ifndef HAVE_LIBAIKSAURUS
Thesaurus::Thesaurus()
{
}
struct Thesaurus::Private
Thesaurus::~Thesaurus()
{ {
} };
Thesaurus::Meanings Thesaurus::lookup(docstring const &, docstring const &) Thesaurus::Meanings Thesaurus::lookup(docstring const &, docstring const &)
@ -287,8 +285,18 @@ bool Thesaurus::thesaurusAvailable(docstring const &) const
return false; return false;
} }
#endif
#endif // HAVE_LIBMYTHES #endif // HAVE_LIBMYTHES
#endif // HAVE_LIBAIKSAURUS
Thesaurus::Thesaurus() : d(new Thesaurus::Private)
{
}
Thesaurus::~Thesaurus()
{
delete d;
}
// Global instance // Global instance
Thesaurus thesaurus; Thesaurus thesaurus;

View File

@ -15,17 +15,9 @@
#include "support/docstring.h" #include "support/docstring.h"
#include <vector>
#include <map> #include <map>
#include <string> #include <string>
#include <vector>
#ifdef HAVE_LIBMYTHES
#include MYTHES_H_LOCATION
#else
#ifdef HAVE_LIBAIKSAURUS
#include AIKSAURUS_H_LOCATION
#endif // HAVE_LIBAIKSAURUS
#endif // !HAVE_LIBMYTHES
namespace lyx { namespace lyx {
@ -51,18 +43,8 @@ public:
bool thesaurusAvailable(docstring const & lang) const; bool thesaurusAvailable(docstring const & lang) const;
private: private:
#ifdef HAVE_LIBMYTHES struct Private;
/// add a thesaurus to the list Private * const d;
bool addThesaurus(docstring const & lang);
typedef std::map<docstring, MyThes *> Thesauri;
/// the thesauri
Thesauri thes_;
#else
#ifdef HAVE_LIBAIKSAURUS
Aiksaurus * thes_;
#endif // HAVE_LIBAIKSAURUS
#endif // !HAVE_LIBMYTHES
}; };
extern Thesaurus thesaurus; extern Thesaurus thesaurus;