From 38b577abe56c76805e2f2bebb5194bee28359145 Mon Sep 17 00:00:00 2001 From: Tobias Markmann Date: Mon, 26 Jun 2017 05:58:09 +0200 Subject: Use size_t instead of int in SpellParser::PositionPair Use of int required a lot of casts when using the indices with std::string methods. Furthermore code used -1 as error code, which should have used std::optional for invalid PoistionPair instnaces. Test-Information: All tests pass on Debian Stretch with clang-3.9. Change-Id: Ic5c44ed606deb58b6123d654f25fc50f047dfbc8 diff --git a/SwifTools/MacOSXChecker.mm b/SwifTools/MacOSXChecker.mm index 519f06c..aefe3e7 100644 --- a/SwifTools/MacOSXChecker.mm +++ b/SwifTools/MacOSXChecker.mm @@ -69,7 +69,7 @@ void MacOSXChecker::checkFragment(const std::string& fragment, PositionPairList& if (range.location != NSNotFound) { if (range.location < nextLocation) break; - misspelledPositions.push_back(PositionPair(static_cast(range.location), static_cast(range.location + range.length))); + misspelledPositions.push_back(PositionPair(range.location, range.location + range.length)); nextLocation = range.location + range.length + 1; } } while (range.location != NSNotFound); diff --git a/SwifTools/SpellParser.h b/SwifTools/SpellParser.h index 5b057c9..3c1cf8b 100644 --- a/SwifTools/SpellParser.h +++ b/SwifTools/SpellParser.h @@ -26,7 +26,7 @@ namespace Swift { ID_CHAR = 4 }; - typedef boost::tuple PositionPair; + typedef boost::tuple PositionPair; typedef std::vector PositionPairList; class SpellParser{ diff --git a/SwifTools/UnitTest/SpellParserTest.cpp b/SwifTools/UnitTest/SpellParserTest.cpp index ccfd7e5..bf974ec 100644 --- a/SwifTools/UnitTest/SpellParserTest.cpp +++ b/SwifTools/UnitTest/SpellParserTest.cpp @@ -34,21 +34,21 @@ class SpellParserTest : public CppUnit::TestFixture { } void testSimpleCheckFragment() { parser_->check("fragment test", position_); - int size = position_.size(); - CPPUNIT_ASSERT_EQUAL(2, size); - CPPUNIT_ASSERT_EQUAL(0, boost::get<0>(position_.front())); - CPPUNIT_ASSERT_EQUAL(8, boost::get<1>(position_.front())); - CPPUNIT_ASSERT_EQUAL(9, boost::get<0>(position_.back())); - CPPUNIT_ASSERT_EQUAL(13, boost::get<1>(position_.back())); + auto size = position_.size(); + CPPUNIT_ASSERT_EQUAL(static_cast(2), size); + CPPUNIT_ASSERT_EQUAL(static_cast(0), boost::get<0>(position_.front())); + CPPUNIT_ASSERT_EQUAL(static_cast(8), boost::get<1>(position_.front())); + CPPUNIT_ASSERT_EQUAL(static_cast(9), boost::get<0>(position_.back())); + CPPUNIT_ASSERT_EQUAL(static_cast(13), boost::get<1>(position_.back())); } void testWWWCheckFragment() { parser_->check("www.link.com fragment test", position_); - int size = position_.size(); - CPPUNIT_ASSERT_EQUAL(2, size); - CPPUNIT_ASSERT_EQUAL(13, boost::get<0>(position_.front())); - CPPUNIT_ASSERT_EQUAL(21, boost::get<1>(position_.front())); - CPPUNIT_ASSERT_EQUAL(22, boost::get<0>(position_.back())); - CPPUNIT_ASSERT_EQUAL(26, boost::get<1>(position_.back())); + auto size = position_.size(); + CPPUNIT_ASSERT_EQUAL(static_cast(2), size); + CPPUNIT_ASSERT_EQUAL(static_cast(13), boost::get<0>(position_.front())); + CPPUNIT_ASSERT_EQUAL(static_cast(21), boost::get<1>(position_.front())); + CPPUNIT_ASSERT_EQUAL(static_cast(22), boost::get<0>(position_.back())); + CPPUNIT_ASSERT_EQUAL(static_cast(26), boost::get<1>(position_.back())); } private: const std::unique_ptr parser_ = std::unique_ptr(new SpellParser()); diff --git a/Swift/QtUI/QtTextEdit.cpp b/Swift/QtUI/QtTextEdit.cpp index 168e6fc..e63cd4f 100644 --- a/Swift/QtUI/QtTextEdit.cpp +++ b/Swift/QtUI/QtTextEdit.cpp @@ -131,23 +131,25 @@ void QtTextEdit::handleTextChanged() { } } -void QtTextEdit::replaceMisspelledWord(const QString& word, int cursorPosition) { +void QtTextEdit::replaceMisspelledWord(const QString& word, size_t cursorPosition) { QTextCursor cursor = textCursor(); - PositionPair wordPosition = getWordFromCursor(cursorPosition); - cursor.setPosition(boost::get<0>(wordPosition), QTextCursor::MoveAnchor); - cursor.setPosition(boost::get<1>(wordPosition), QTextCursor::KeepAnchor); - QTextCharFormat normalFormat; - cursor.insertText(word, normalFormat); + auto wordPosition = getWordFromCursor(cursorPosition); + if (wordPosition) { + cursor.setPosition(boost::get<0>(*wordPosition), QTextCursor::MoveAnchor); + cursor.setPosition(boost::get<1>(*wordPosition), QTextCursor::KeepAnchor); + QTextCharFormat normalFormat; + cursor.insertText(word, normalFormat); + } } -PositionPair QtTextEdit::getWordFromCursor(int cursorPosition) { +boost::optional QtTextEdit::getWordFromCursor(size_t cursorPosition) { PositionPairList misspelledPositions = highlighter_->getMisspelledPositions(); for (auto& misspelledPosition : misspelledPositions) { if (cursorPosition >= boost::get<0>(misspelledPosition) && cursorPosition <= boost::get<1>(misspelledPosition)) { return misspelledPosition; } } - return boost::make_tuple(-1,-1); + return boost::optional(boost::make_tuple(-1,-1)); } QSize QtTextEdit::sizeHint() const { @@ -195,14 +197,14 @@ void QtTextEdit::addSuggestions(QMenu* menu, QContextMenuEvent* event) if (checker_ && highlighter_) { QAction* insertPoint = menu->actions().first(); QTextCursor cursor = cursorForPosition(event->pos()); - PositionPair wordPosition = getWordFromCursor(cursor.position()); - if (boost::get<0>(wordPosition) < 0) { + auto wordPosition = getWordFromCursor(cursor.position()); + if (!wordPosition) { // The click was executed outside a spellable word so no // suggestions are necessary return; } - cursor.setPosition(boost::get<0>(wordPosition), QTextCursor::MoveAnchor); - cursor.setPosition(boost::get<1>(wordPosition), QTextCursor::KeepAnchor); + cursor.setPosition(boost::get<0>(*wordPosition), QTextCursor::MoveAnchor); + cursor.setPosition(boost::get<1>(*wordPosition), QTextCursor::KeepAnchor); std::vector wordList; checker_->getSuggestions(Q2PSTRING(cursor.selectedText()), wordList); if (wordList.size() == 0) { diff --git a/Swift/QtUI/QtTextEdit.h b/Swift/QtUI/QtTextEdit.h index 7ce5d88..178f258 100644 --- a/Swift/QtUI/QtTextEdit.h +++ b/Swift/QtUI/QtTextEdit.h @@ -6,6 +6,8 @@ #pragma once +#include + #include #include @@ -52,10 +54,10 @@ namespace Swift { private: void addSuggestions(QMenu* menu, QContextMenuEvent* event); - void replaceMisspelledWord(const QString& word, int cursorPosition); + void replaceMisspelledWord(const QString& word, size_t cursorPosition); void setUpSpellChecker(); void spellCheckerSettingsWindow(); - PositionPair getWordFromCursor(int cursorPosition); + boost::optional getWordFromCursor(size_t cursorPosition); void updateStyleSheet(); private: -- cgit v0.10.2-6-g49f6