From e2025f59dc7504bf7b413c7696eeb9ce255837e6 Mon Sep 17 00:00:00 2001 From: Abdelrazak Younes Date: Fri, 1 May 2009 06:33:19 +0000 Subject: [PATCH] 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 --- src/Thesaurus.cpp | 94 +++++++++++++++++++++++++---------------------- src/Thesaurus.h | 24 ++---------- 2 files changed, 54 insertions(+), 64 deletions(-) diff --git a/src/Thesaurus.cpp b/src/Thesaurus.cpp index 4bfaf86dc4..10dc0b4768 100644 --- a/src/Thesaurus.cpp +++ b/src/Thesaurus.cpp @@ -25,6 +25,14 @@ #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 #include @@ -34,20 +42,13 @@ using namespace lyx::support::os; namespace lyx { -#ifndef HAVE_LIBMYTHES #ifdef HAVE_LIBAIKSAURUS - -Thesaurus::Thesaurus() - : thes_(new Aiksaurus) -{} - - -Thesaurus::~Thesaurus() +struct Thesaurus::Private { - delete thes_; -} - + Private(): thes_(new Aiksaurus) {} + Aiksaurus * thes_; +}; 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); - docstring error = from_ascii(thes_->error()); + docstring error = from_ascii(d->thes_->error()); if (!error.empty()) { static bool sent_error = false; if (!sent_error) { @@ -74,7 +75,7 @@ Thesaurus::Meanings Thesaurus::lookup(docstring const & t, docstring const &) } return meanings; } - if (!thes_->find(text.c_str())) + if (!d->thes_->find(text.c_str())) return meanings; // weird api, but ... @@ -84,19 +85,19 @@ Thesaurus::Meanings Thesaurus::lookup(docstring const & t, docstring const &) docstring meaning; // correct, returns "" at the end - string ret = thes_->next(cur_meaning); + string ret = d->thes_->next(cur_meaning); while (!ret.empty()) { if (cur_meaning != prev_meaning) { meaning = from_ascii(ret); - ret = thes_->next(cur_meaning); + ret = d->thes_->next(cur_meaning); prev_meaning = cur_meaning; } else { if (ret != text) meanings[meaning].push_back(from_ascii(ret)); } - ret = thes_->next(cur_meaning); + ret = d->thes_->next(cur_meaning); } for (Meanings::iterator it = meanings.begin(); @@ -113,10 +114,7 @@ bool Thesaurus::thesaurusAvailable(docstring const & lang) const return prefixIs(lang, from_ascii("en_")); } -#endif // HAVE_LIBAIKSAURUS -#endif // !HAVE_LIBMYTHES - - +#else // HAVE_LIBAIKSAURUS #ifdef HAVE_LIBMYTHES namespace { @@ -139,20 +137,25 @@ docstring const from_iconv_encoding(string const & s, string const & encoding) } // namespace anon -Thesaurus::Thesaurus() -{} - - -Thesaurus::~Thesaurus() +struct Thesaurus::Private { - for (Thesauri::iterator it = thes_.begin(); - it != thes_.end(); ++it) { - delete it->second; + ~Private() + { + for (Thesauri::iterator it = thes_.begin(); + it != thes_.end(); ++it) { + delete it->second; + } } -} + /// add a thesaurus to the list + bool addThesaurus(docstring const & lang); -bool Thesaurus::addThesaurus(docstring const & lang) + typedef std::map Thesauri; + /// the thesauri + Thesauri thes_; +}; + +bool Thesaurus::Private::addThesaurus(docstring const & lang) { string const thes_path = external_path(lyxrc.thesaurusdir_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 { - for (Thesauri::const_iterator it = thes_.begin(); - it != thes_.end(); ++it) { + for (Thesauri::const_iterator it = d->thes_.begin(); + it != d->thes_.end(); ++it) { if (it->first == lang) if (it->second) return true; @@ -215,11 +218,11 @@ Thesaurus::Meanings Thesaurus::lookup(docstring const & t, docstring const & lan Meanings meanings; MyThes * mythes = 0; - if (!addThesaurus(lang)) + if (!d->addThesaurus(lang)) return meanings; - for (Thesauri::const_iterator it = thes_.begin(); - it != thes_.end(); ++it) { + for (Thesauri::const_iterator it = d->thes_.begin(); + it != d->thes_.end(); ++it) { if (it->first == lang) { mythes = it->second; break; @@ -265,15 +268,10 @@ Thesaurus::Meanings Thesaurus::lookup(docstring const & t, docstring const & lan } #else -#ifndef HAVE_LIBAIKSAURUS -Thesaurus::Thesaurus() -{ -} - -Thesaurus::~Thesaurus() +struct Thesaurus::Private { -} +}; Thesaurus::Meanings Thesaurus::lookup(docstring const &, docstring const &) @@ -287,8 +285,18 @@ bool Thesaurus::thesaurusAvailable(docstring const &) const return false; } -#endif #endif // HAVE_LIBMYTHES +#endif // HAVE_LIBAIKSAURUS + +Thesaurus::Thesaurus() : d(new Thesaurus::Private) +{ +} + + +Thesaurus::~Thesaurus() +{ + delete d; +} // Global instance Thesaurus thesaurus; diff --git a/src/Thesaurus.h b/src/Thesaurus.h index 9808a455ff..65cd0de655 100644 --- a/src/Thesaurus.h +++ b/src/Thesaurus.h @@ -15,17 +15,9 @@ #include "support/docstring.h" -#include #include #include - -#ifdef HAVE_LIBMYTHES -#include MYTHES_H_LOCATION -#else -#ifdef HAVE_LIBAIKSAURUS -#include AIKSAURUS_H_LOCATION -#endif // HAVE_LIBAIKSAURUS -#endif // !HAVE_LIBMYTHES +#include namespace lyx { @@ -51,18 +43,8 @@ public: bool thesaurusAvailable(docstring const & lang) const; private: -#ifdef HAVE_LIBMYTHES - /// add a thesaurus to the list - bool addThesaurus(docstring const & lang); - - typedef std::map Thesauri; - /// the thesauri - Thesauri thes_; -#else -#ifdef HAVE_LIBAIKSAURUS - Aiksaurus * thes_; -#endif // HAVE_LIBAIKSAURUS -#endif // !HAVE_LIBMYTHES + struct Private; + Private * const d; }; extern Thesaurus thesaurus;