/**
* \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 "Thesaurus.h"
+#include <config.h>
-Thesaurus thesaurus;
+#include "Thesaurus.h"
#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;
-}
+#include <algorithm>
+
+using std::sort;
Thesaurus::Thesaurus()
{
- aik_ = new AikSaurus();
+ aik_ = new Aiksaurus;
}
}
-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 ...
- char pos;
- string ret;
+ int prev_meaning = -1;
+ int cur_meaning;
+ string meaning;
+
+ // correct, returns "" at the end
+ string ret = aik_->next(cur_meaning);
- 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;