/**
* \file Thesaurus.C
- * Copyright 2001 the LyX Team
- * Read the file COPYING
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
*
* \author John Levon
+ *
+ * Full author contact details are available in file CREDITS.
*/
+#include <config.h>
+
#include "Thesaurus.h"
-Thesaurus thesaurus;
+#include <algorithm>
+#include <string>
+
+using std::string;
#ifdef HAVE_LIBAIKSAURUS
-
-Thesaurus::ThesaurusEntry::ThesaurusEntry(string const & ent, char part)
- : entry(ent), pos(Thesaurus::NONE)
-{
- if (part & AikSaurus::Unknown)
- pos |= OTHER;
- if (part & AikSaurus::Other)
- pos |= OTHER;
- if (part & AikSaurus::Noun)
- pos |= NOUN;
- if (part & AikSaurus::Verb)
- pos |= VERB;
- if (part & AikSaurus::Adjective)
- pos |= ADJECTIVE;
- if (part & AikSaurus::Adverb)
- pos |= ADVERB;
-}
+
+using std::sort;
Thesaurus::Thesaurus()
-{
- aik_ = new AikSaurus;
-}
+ : aik_(new Aiksaurus)
+{}
Thesaurus::~Thesaurus()
}
-std::vector<Thesaurus::ThesaurusEntry> Thesaurus::lookup(string const & text)
+Thesaurus::Meanings Thesaurus::lookup(string const & text)
{
- std::vector<ThesaurusEntry> entries;
+ Meanings meanings;
if (!aik_->find(text.c_str()))
- return entries;
+ return meanings;
+
+ // weird api, but ...
+
+ int prev_meaning = -1;
+ int cur_meaning;
+ string meaning;
- char pos;
+ // correct, returns "" at the end
+ string ret = aik_->next(cur_meaning);
- string ret = aik_->next(pos);
while (!ret.empty()) {
- entries.push_back(ThesaurusEntry(ret, pos));
- ret = aik_->next(pos);
+ if (cur_meaning != prev_meaning) {
+ meaning = ret;
+ ret = aik_->next(cur_meaning);
+ prev_meaning = cur_meaning;
+ } else {
+ if (ret != text) {
+ meanings[meaning].push_back(ret);
+ }
+ }
+
+ ret = aik_->next(cur_meaning);
}
- return entries;
+ for (Meanings::iterator it = meanings.begin();
+ it != meanings.end(); ++it) {
+ sort(it->second.begin(), it->second.end());
+ }
+
+ return meanings;
}
#else
-Thesaurus::ThesaurusEntry::ThesaurusEntry(string const &, char)
-{
-}
-
-
Thesaurus::Thesaurus()
{
}
-
-
+
+
Thesaurus::~Thesaurus()
{
}
-
-std::vector<Thesaurus::ThesaurusEntry>
-Thesaurus::lookup(string const & /*text*/)
+
+Thesaurus::Meanings Thesaurus::lookup(string const &)
{
- return std::vector<ThesaurusEntry>();
+ return Meanings();
}
#endif // HAVE_LIBAIKSAURUS
+
+// Global instance
+Thesaurus thesaurus;