if (range_.first > pos) {
range_.first += offset;
range_.last += offset;
- } else if (range_.last > pos) {
+ } else if (range_.last >= pos) {
range_.last += offset;
}
}
runparams);
}
- Change const & change = runparams.inDeletedInset ? runparams.changeOfDeletedInset
- : lookupChange(i);
+ Change const & change = runparams.inDeletedInset
+ ? runparams.changeOfDeletedInset : lookupChange(i);
if (bparams.outputChanges && runningChange != change) {
if (open_font) {
if (pos == size())
return true;
char_type const c = d->text_[pos];
+ // if we have a hard hyphen (no en- or emdash),
+ // we pass this to the spell checker
+ if (c == '-') {
+ int j = pos + 1;
+ if ((j == size() || d->text_[j] != '-')
+ && (pos == 0 || d->text_[pos - 1] != '-'))
+ return false;
+ }
// We want to pass the ' and escape chars to the spellchecker
static docstring const quote = from_utf8(lyxrc.spellchecker_esc_chars + '\'');
return (!isLetterChar(c) && !isDigitASCII(c) && !contains(quote, c));
return result;
if (needsSpellCheck() || check_learned) {
+ pos_type end = to;
if (!d->ignoreWord(word)) {
bool const trailing_dot = to < size() && d->text_[to] == '.';
result = speller->check(wl);
word << "\" [" <<
from << ".." << to << "]");
} else {
- // spell check with dot appended failed
+ // spell check with dot appended failed too
// restore original word/lang value
word = asString(from, to, AS_STR_INSETS | AS_STR_SKIPDELETE);
wl = WordLangTuple(word, lang);
}
}
}
- d->setMisspelled(from, to, result);
+ if (!SpellChecker::misspelled(result)) {
+ // area up to the begin of the next word is not misspelled
+ while (end < size() && isWordSeparator(end))
+ ++end;
+ }
+ d->setMisspelled(from, end, result);
} else {
result = d->speller_state_.getState(from);
}
- bool const misspelled_ = SpellChecker::misspelled(result) ;
- if (misspelled_ && do_suggestion)
- speller->suggest(wl, suggestions);
- else if (misspelled_)
+ if (do_suggestion)
+ suggestions.clear();
+
+ if (SpellChecker::misspelled(result)) {
LYXERR(Debug::GUI, "misspelled word: \"" <<
word << "\" [" <<
from << ".." << to << "]");
- else
- suggestions.clear();
-
+ if (do_suggestion)
+ speller->suggest(wl, suggestions);
+ }
return result;
}
bool Paragraph::isMisspelled(pos_type pos, bool check_boundary) const
{
bool result = SpellChecker::misspelled(d->speller_state_.getState(pos));
- if (result || pos <= 0 || pos >= size())
+ if (result || pos <= 0 || pos > size())
return result;
- if (check_boundary && isWordSeparator(pos))
+ if (check_boundary && (pos == size() || isWordSeparator(pos)))
result = SpellChecker::misspelled(d->speller_state_.getState(pos - 1));
return result;
}