]> git.lyx.org Git - features.git/commitdiff
Consider deleted spaces in spell checking
authorJuergen Spitzmueller <spitz@lyx.org>
Fri, 27 Dec 2019 12:01:35 +0000 (13:01 +0100)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Thu, 18 Jun 2020 13:48:49 +0000 (15:48 +0200)
Addresses part of #11470

src/Paragraph.cpp
src/Paragraph.h

index e64480c4c9ef847a21ba7525e447c541e4971538..8fa3c1d0a335f633f1177c91080643363f90ac47 100644 (file)
@@ -445,10 +445,10 @@ public:
                        return;
                }
                pos_type endpos = last;
-               owner_->locateWord(first, endpos, WHOLE_WORD);
+               owner_->locateWord(first, endpos, WHOLE_WORD, true);
                if (endpos < last) {
                        endpos = last;
-                       owner_->locateWord(last, endpos, WHOLE_WORD);
+                       owner_->locateWord(last, endpos, WHOLE_WORD, true);
                }
                last = endpos;
        }
@@ -3393,10 +3393,12 @@ bool Paragraph::isLineSeparator(pos_type pos) const
 }
 
 
-bool Paragraph::isWordSeparator(pos_type pos) const
+bool Paragraph::isWordSeparator(pos_type pos, bool const ignore_deleted) const
 {
        if (pos == size())
                return true;
+       if (ignore_deleted && isDeleted(pos))
+               return false;
        if (Inset const * inset = getInset(pos))
                return !inset->isLetter();
        // if we have a hard hyphen (no en- or emdash) or apostrophe
@@ -4000,13 +4002,13 @@ void Paragraph::deregisterWords()
 
 
 void Paragraph::locateWord(pos_type & from, pos_type & to,
-       word_location const loc) const
+       word_location const loc, bool const ignore_deleted) const
 {
        switch (loc) {
        case WHOLE_WORD_STRICT:
                if (from == 0 || from == size()
-                   || isWordSeparator(from)
-                   || isWordSeparator(from - 1)) {
+                   || isWordSeparator(from, ignore_deleted)
+                   || isWordSeparator(from - 1, ignore_deleted)) {
                        to = from;
                        return;
                }
@@ -4014,13 +4016,13 @@ void Paragraph::locateWord(pos_type & from, pos_type & to,
 
        case WHOLE_WORD:
                // If we are already at the beginning of a word, do nothing
-               if (!from || isWordSeparator(from - 1))
+               if (!from || isWordSeparator(from - 1, ignore_deleted))
                        break;
                // fall through
 
        case PREVIOUS_WORD:
                // always move the cursor to the beginning of previous word
-               while (from && !isWordSeparator(from - 1))
+               while (from && !isWordSeparator(from - 1, ignore_deleted))
                        --from;
                break;
        case NEXT_WORD:
@@ -4031,7 +4033,7 @@ void Paragraph::locateWord(pos_type & from, pos_type & to,
                break;
        }
        to = from;
-       while (to < size() && !isWordSeparator(to))
+       while (to < size() && !isWordSeparator(to, ignore_deleted))
                ++to;
 }
 
@@ -4211,7 +4213,7 @@ SpellChecker::Result Paragraph::spellCheck(pos_type & from, pos_type & to,
        if (!d->layout_->spellcheck || !inInset().allowSpellCheck())
                return result;
 
-       locateWord(from, to, WHOLE_WORD);
+       locateWord(from, to, WHOLE_WORD, true);
        if (from == to || from >= size())
                return result;
 
index 091c604311f67aa93e4130dee9f758fa66c5ceee..694222b771ae1d9cea0ea0f005fa815962ddd3e3 100644 (file)
@@ -423,7 +423,7 @@ public:
        bool isLineSeparator(pos_type pos) const;
        /// True if the character/inset at this point is a word separator.
        /// Note that digits in particular are not considered as word separator.
-       bool isWordSeparator(pos_type pos) const;
+       bool isWordSeparator(pos_type pos, bool const ignore_deleted = false) const;
        /// True if the element at this point is a character that is not a letter.
        bool isChar(pos_type pos) const;
        /// True if the element at this point is a space
@@ -480,7 +480,7 @@ public:
                bool del = true) const;
 
        void locateWord(pos_type & from, pos_type & to,
-               word_location const loc) const;
+               word_location const loc, bool const ignore_deleted = false) const;
        ///
        void updateWords();