]> git.lyx.org Git - lyx.git/blobdiff - src/Thesaurus.cpp
start using FileName::exists()
[lyx.git] / src / Thesaurus.cpp
index c9e9e8f3b1293ec4fc427faf3ddbaad636aac63e..91aa9f649ad1315a5625532c41f757e284824913 100644 (file)
@@ -4,7 +4,6 @@
  * Licence details can be found in the file COPYING.
  *
  * \author John Levon
- * \author Jürgen Spitzmüller
  *
  * Full author contact details are available in file CREDITS.
  */
 
 #include "Thesaurus.h"
 
-#include "debug.h"
+#include "gettext.h"
+
 #include "support/lstrings.h"
-#include "support/unicode.h"
+
+#include "frontends/alert.h"
 
 #include <algorithm>
 
 
 namespace lyx {
 
+#ifdef HAVE_LIBAIKSAURUS
+using support::bformat;
+
 using std::sort;
 using std::string;
-using std::endl;
 
 
-#ifndef HAVE_LIBMYTHES
-#ifdef HAVE_LIBAIKSAURUS
 Thesaurus::Thesaurus()
-       : thes_(new Aiksaurus)
+       : aik_(new Aiksaurus)
 {}
 
 
 Thesaurus::~Thesaurus()
 {
-       delete thes_;
+       delete aik_;
 }
 
 
@@ -53,7 +54,19 @@ Thesaurus::Meanings Thesaurus::lookup(docstring const & t)
                return meanings;
 
        string const text = to_ascii(t);
-       if (!thes_->find(text.c_str()))
+
+       docstring error = from_ascii(aik_->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 (!aik_->find(text.c_str()))
                return meanings;
 
        // weird api, but ...
@@ -63,19 +76,19 @@ Thesaurus::Meanings Thesaurus::lookup(docstring const & t)
        docstring meaning;
 
        // correct, returns "" at the end
-       string ret = thes_->next(cur_meaning);
+       string ret = aik_->next(cur_meaning);
 
        while (!ret.empty()) {
                if (cur_meaning != prev_meaning) {
                        meaning = from_ascii(ret);
-                       ret = thes_->next(cur_meaning);
+                       ret = aik_->next(cur_meaning);
                        prev_meaning = cur_meaning;
                } else {
                        if (ret != text)
                                meanings[meaning].push_back(from_ascii(ret));
                }
 
-               ret = thes_->next(cur_meaning);
+               ret = aik_->next(cur_meaning);
        }
 
        for (Meanings::iterator it = meanings.begin();
@@ -85,88 +98,6 @@ Thesaurus::Meanings Thesaurus::lookup(docstring const & t)
        return meanings;
 }
 
-#endif // HAVE_LIBAIKSAURUS
-#endif // !HAVE_LIBMYTHES
-
-
-#ifdef HAVE_LIBMYTHES
-
-namespace {
-
-string const to_iconv_encoding(docstring const & s, string const & encoding)
-{
-       std::vector<char> const encoded =
-               ucs4_to_eightbit(s.data(), s.length(), encoding);
-       return string(encoded.begin(), encoded.end());
-}
-
-
-docstring const from_iconv_encoding(string const & s, string const & encoding)
-{
-       std::vector<char_type> const ucs4 =
-               eightbit_to_ucs4(s.data(), s.length(), encoding);
-       return docstring(ucs4.begin(), ucs4.end());
-}
-
-} // namespace anon
-
-
-Thesaurus::Thesaurus()
-{
-       string const idx("/home/juergen/updates/MyThes-1.0/th_de_DE_v2.idx");
-       string const data("/home/juergen/updates/MyThes-1.0/th_de_DE_v2.dat");
-       char const * af = idx.c_str();
-       char const * df = data.c_str();
-       thes_ = new MyThes(af, df);
-}
-
-
-Thesaurus::~Thesaurus()
-{
-       if (thes_)
-               delete thes_;
-}
-
-
-Thesaurus::Meanings Thesaurus::lookup(docstring const & t)
-{
-       Meanings meanings;
-
-       string const encoding = thes_->get_th_encoding();
-       
-       mentry * pmean;
-       string const text = to_iconv_encoding(support::lowercase(t), encoding);
-       int len = strlen(text.c_str());
-       int count = thes_->Lookup(text.c_str(), len, &pmean);
-       if (!count)
-               return meanings;
-
-       // don't change value of pmean or count
-       // they are needed for the CleanUpAfterLookup routine
-       mentry * pm = pmean;
-       docstring meaning;
-       docstring ret;
-       for (int i = 0; i < count; i++) {
-               meaning = from_iconv_encoding(string(pm->defn), encoding);
-               // remove silly item
-               if (support::prefixIs(meaning, '-'))
-                       meaning = support::ltrim(meaning, "- ");
-               for (int j = 0; j < pm->count; j++) {
-                       ret = from_iconv_encoding(string(pm->psyns[j]), encoding);
-               }
-       meanings[meaning].push_back(ret);
-       pm++;
-       }
-        // now clean up all allocated memory
-        thes_->CleanUpAfterLookup(&pmean, count);
-
-       for (Meanings::iterator it = meanings.begin();
-            it != meanings.end(); ++it)
-               sort(it->second.begin(), it->second.end());
-
-       return meanings;
-}
-
 #else
 
 Thesaurus::Thesaurus()
@@ -184,7 +115,7 @@ Thesaurus::Meanings Thesaurus::lookup(docstring const &)
        return Meanings();
 }
 
-#endif // HAVE_LIBMYTHES
+#endif // HAVE_LIBAIKSAURUS
 
 // Global instance
 Thesaurus thesaurus;