summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVlad Voicu <vladv@rosedu.org>2012-03-08 13:10:15 (GMT)
committerKevin Smith <git@kismith.co.uk>2012-03-09 15:04:11 (GMT)
commit02f7f0d98e937d8ec2d527ac701daf783bb37f27 (patch)
tree90555f4fd78725042cddb0abac32fca403a94be9
parentdbc27f2f163c33366fc9ca31088f0c255963168b (diff)
downloadswift-contrib-02f7f0d98e937d8ec2d527ac701daf783bb37f27.zip
swift-contrib-02f7f0d98e937d8ec2d527ac701daf783bb37f27.tar.bz2
Gracefully degrade when hunspell is not present
-rw-r--r--SwifTools/HunspellChecker.cpp3
-rw-r--r--SwifTools/SpellCheckerFactory.h4
-rw-r--r--Swift/QtUI/QtTextEdit.cpp24
-rw-r--r--Swift/QtUI/SConscript2
4 files changed, 22 insertions, 11 deletions
diff --git a/SwifTools/HunspellChecker.cpp b/SwifTools/HunspellChecker.cpp
index 6c1b4bb..fa5917a 100644
--- a/SwifTools/HunspellChecker.cpp
+++ b/SwifTools/HunspellChecker.cpp
@@ -43,7 +43,8 @@ void HunspellChecker::checkFragment(const std::string& fragment, PositionPairLis
for (PositionPairList::iterator it = misspelledPositions.begin(); it != misspelledPositions.end();) {
if (isCorrect(fragment.substr(boost::get<0>(*it), boost::get<1>(*it) - boost::get<0>(*it)))) {
misspelledPositions.erase(it++);
- } else {
+ }
+ else {
++it;
}
}
diff --git a/SwifTools/SpellCheckerFactory.h b/SwifTools/SpellCheckerFactory.h
index d58a9ec..5519db5 100644
--- a/SwifTools/SpellCheckerFactory.h
+++ b/SwifTools/SpellCheckerFactory.h
@@ -6,6 +6,10 @@
#pragma once
+#ifdef HAVE_HUNSPELL
+#define HAVE_SPELLCHECKER
+#endif
+
namespace Swift {
class SpellChecker;
class SpellCheckerFactory {
diff --git a/Swift/QtUI/QtTextEdit.cpp b/Swift/QtUI/QtTextEdit.cpp
index 75bc292..513e6fd 100644
--- a/Swift/QtUI/QtTextEdit.cpp
+++ b/Swift/QtUI/QtTextEdit.cpp
@@ -27,7 +27,9 @@ QtTextEdit::QtTextEdit(SettingsProvider* settings, QWidget* parent) : QTextEdit(
connect(this, SIGNAL(textChanged()), this, SLOT(handleTextChanged()));
checker_ = NULL;
settings_ = settings;
+#ifdef HAVE_SPELLCHECKER
setUpSpellChecker();
+#endif
handleTextChanged();
};
@@ -60,9 +62,11 @@ void QtTextEdit::keyPressEvent(QKeyEvent* event) {
}
else {
QTextEdit::keyPressEvent(event);
- if(settings_->getSetting(SettingConstants::SPELL_CHECKER)) {
+#ifdef HAVE_SPELLCHECKER
+ if (settings_->getSetting(SettingConstants::SPELL_CHECKER)) {
underlineMisspells();
}
+#endif
}
}
@@ -82,12 +86,10 @@ void QtTextEdit::underlineMisspells() {
std::string fragment = Q2PSTRING(cursor.selectedText());
checker_->checkFragment(fragment, misspelledPositions_);
for (PositionPairList::iterator it = misspelledPositions_.begin(); it != misspelledPositions_.end(); ++it) {
- if (textCursor().position() > boost::get<1>(*it)) {
- cursor.setPosition(boost::get<0>(*it), QTextCursor::MoveAnchor);
- cursor.setPosition(boost::get<1>(*it), QTextCursor::KeepAnchor);
- cursor.setCharFormat(spellingErrorFormat);
- cursor.clearSelection();
- }
+ cursor.setPosition(boost::get<0>(*it), QTextCursor::MoveAnchor);
+ cursor.setPosition(boost::get<1>(*it), QTextCursor::KeepAnchor);
+ cursor.setCharFormat(spellingErrorFormat);
+ cursor.clearSelection();
cursor.setCharFormat(normalFormat);
}
}
@@ -134,8 +136,8 @@ QSize QtTextEdit::sizeHint() const {
void QtTextEdit::contextMenuEvent(QContextMenuEvent* event) {
QMenu *menu = createStandardContextMenu();
QTextCursor cursor = cursorForPosition(event->pos());
+#ifdef HAVE_SPELLCHECKER
QAction *insertPoint = menu->actions().first();
-
QAction *settingsAction = new QAction(QApplication::translate("QtTextEdit", "Spell Checker Options", 0, QApplication::UnicodeUTF8), menu);
menu->insertAction(insertPoint, settingsAction);
menu->insertAction(insertPoint, menu->addSeparator());
@@ -149,6 +151,9 @@ void QtTextEdit::contextMenuEvent(QContextMenuEvent* event) {
replaceMisspelledWord((*it)->text(), cursor.position());
}
}
+#else
+ menu->exec(event->globalPos());
+#endif
delete menu;
}
@@ -193,6 +198,7 @@ void QtTextEdit::setUpSpellChecker()
std::string affixFile(dictFile);
boost::replace_all(affixFile, ".dic", ".aff");
if ((boost::filesystem::exists(dictPath + dictFile)) && (boost::filesystem::exists(dictPath + affixFile))) {
+ std::cout << dictPath + dictFile << std::endl;
checker_ = checkerFactory->createSpellChecker((dictPath + affixFile).c_str(), (dictPath + dictFile).c_str());
}
else {
@@ -220,8 +226,6 @@ void QtTextEdit::spellCheckerSettingsWindow() {
}
void QtTextEdit::handleModifiedSettings() {
- delete checker_;
- checker_ = NULL;
setUpSpellChecker();
underlineMisspells();
}
diff --git a/Swift/QtUI/SConscript b/Swift/QtUI/SConscript
index 2c0b28b..3b49f4b 100644
--- a/Swift/QtUI/SConscript
+++ b/Swift/QtUI/SConscript
@@ -39,6 +39,8 @@ if myenv["swift_mobile"] :
if myenv.get("HAVE_SNARL", False) :
myenv.UseFlags(myenv["SNARL_FLAGS"])
myenv.Append(CPPDEFINES = ["HAVE_SNARL"])
+if myenv.get("HAVE_HUNSPELL", True):
+ myenv.Append(CPPDEFINES = ["HAVE_HUNSPELL"])
if env["PLATFORM"] == "win32" :
myenv.Append(LIBS = ["cryptui"])
myenv.UseFlags(myenv["PLATFORM_FLAGS"])