summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVlad Voicu <vladvoic@gmail.com>2011-11-29 01:15:18 (GMT)
committervlad <vlad@tyrion.(none)>2012-10-13 13:55:44 (GMT)
commit5e7be9a49cf540a68275f084e57a6efe8d7c1626 (patch)
tree9b1e68541c3d00d598f2613537e4c47e60543e16
parent4ef710cfcc4aa4f171426ef55cbece00cd69af62 (diff)
downloadswift-contrib-5e7be9a49cf540a68275f084e57a6efe8d7c1626.zip
swift-contrib-5e7be9a49cf540a68275f084e57a6efe8d7c1626.tar.bz2
Modified the Spellchecker to use hunspell instead of aspell
-rw-r--r--SwifTools/SConscript2
-rw-r--r--SwifTools/SpellChecker.cpp42
-rw-r--r--SwifTools/SpellChecker.h7
3 files changed, 20 insertions, 31 deletions
diff --git a/SwifTools/SConscript b/SwifTools/SConscript
index 6f49e7f..aaafcbc 100644
--- a/SwifTools/SConscript
+++ b/SwifTools/SConscript
@@ -7,7 +7,7 @@ Import("env")
if env["SCONS_STAGE"] == "flags" :
env["SWIFTOOLS_FLAGS"] = {
"LIBPATH": [Dir(".")],
- "LIBS": ["SwifTools", "libaspell"]
+ "LIBS": ["SwifTools", "libhunspell"]
}
################################################################################
diff --git a/SwifTools/SpellChecker.cpp b/SwifTools/SpellChecker.cpp
index 8c9aeda..650b283 100644
--- a/SwifTools/SpellChecker.cpp
+++ b/SwifTools/SpellChecker.cpp
@@ -7,45 +7,35 @@
#include <SwifTools/SpellChecker.h>
#include <algorithm>
-#include <aspell.h>
+#include <hunspell/hunspell.hxx>
#include <boost/algorithm/string.hpp>
namespace Swift {
SpellChecker::SpellChecker() {
- AspellCanHaveError* ret;
- config_ = new_aspell_config();
- ret = new_aspell_speller(config_);
- if (aspell_error(ret) != 0) {
- //TODO(vladv): Proper log the error
- //printf("Error: %s\n",aspell_error_message(ret));
- delete_aspell_can_have_error(ret);
- }
- speller_ = to_aspell_speller(ret);
+ const char* dictionary_path = "/usr/share/hunspell/en_US.dic";
+ const char* affix_path = "/usr/share/hunspell/en_US.aff";
+ speller_ = new Hunspell(affix_path, dictionary_path);
+}
+
+SpellChecker::~SpellChecker() {
+ delete speller_;
}
bool SpellChecker::isCorrect(const std::string& word) {
- if (!word.empty()) {
- int aspell_error = aspell_speller_check(speller_, word.c_str(), -1);
- if (aspell_error == 1) {
- return true;
- } else {
- //TODO(vladv): Proper log the error
- }
- }
- return false;
+ return speller_->spell(word.c_str());
}
void SpellChecker::getSuggestions(const std::string& word, std::vector<std::string>& list) {
- const AspellWordList *alist;
+ char **suggestList;
+ int words_returned;
if (!word.empty()) {
- alist = aspell_speller_suggest(speller_, word.c_str(), -1);
- AspellStringEnumeration *els = aspell_word_list_elements(alist);
- const char* aword;
- while (((aword = aspell_string_enumeration_next(els)) != 0) && list.size() <= 5) {
- list.push_back(std::string(aword));
- }
+ words_returned = speller_->suggest(&suggestList, word.c_str());
+ }
+ for (int i = 0; i < words_returned; ++i) {
+ list.push_back(suggestList[i]);
+ free(suggestList[i]);
}
}
diff --git a/SwifTools/SpellChecker.h b/SwifTools/SpellChecker.h
index 3a9ff38..1c3148b 100644
--- a/SwifTools/SpellChecker.h
+++ b/SwifTools/SpellChecker.h
@@ -9,17 +9,16 @@
#pragma once
-class AspellSpeller;
-class AspellConfig;
+class Hunspell;
namespace Swift {
class SpellChecker {
public:
SpellChecker();
+ ~SpellChecker();
bool isCorrect(const std::string& word);
void getSuggestions(const std::string& word, std::vector<std::string>& list);
private:
- AspellSpeller* speller_;
- AspellConfig* config_;
+ Hunspell* speller_;
};
}