X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FParagraph.cpp;h=67965ef4c5950da18f47d9143db248161b87d68b;hb=68fe13dfa1ed24891d930b0d9b8b79e217c7f1e4;hp=64e8f4b7329f69dad004e3d20527dd1f57eebfab;hpb=8adcffff0c1a7c681be989b8c2b77f761483b0da;p=lyx.git diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index 64e8f4b732..67965ef4c5 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -173,6 +173,20 @@ public: return result; } + FontSpan const & getRange(pos_type pos) const + { + /// empty span to indicate mismatch + static FontSpan empty_; + RangesIterator et = ranges_.end(); + RangesIterator it = ranges_.begin(); + for (; it != et; ++it) { + if(it->inside(pos)) { + return it->range(); + } + } + return empty_; + } + bool needsRefresh() const { return needs_refresh_; } @@ -2825,6 +2839,13 @@ bool Paragraph::isWordSeparator(pos_type pos) const } +bool Paragraph::isSameSpellRange(pos_type pos1, pos_type pos2) const +{ + return pos1 == pos2 + || d->speller_state_.getRange(pos1) == d->speller_state_.getRange(pos2); +} + + bool Paragraph::isChar(pos_type pos) const { if (Inset const * inset = getInset(pos)) @@ -2928,11 +2949,8 @@ docstring Paragraph::asString(pos_type beg, pos_type end, int options) const || (c == '\n' && (options & AS_STR_NEWLINES))) os.put(c); else if (c == META_INSET && (options & AS_STR_INSETS)) { - Inset const * inset = getInset(i); - if ((options & AS_STR_INTOC) && !inset->isInToc()) - continue; - inset->toString(os); - if (inset->asInsetMath()) + getInset(i)->toString(os); + if (getInset(i)->asInsetMath()) os << " "; } } @@ -2941,6 +2959,24 @@ docstring Paragraph::asString(pos_type beg, pos_type end, int options) const } +void Paragraph::forToc(docstring & os, size_t maxlen) const +{ + if (!d->params_.labelString().empty()) + os += d->params_.labelString() + ' '; + for (pos_type i = 0; i < size() && os.length() < maxlen; ++i) { + if (isDeleted(i)) + continue; + char_type const c = d->text_[i]; + if (isPrintable(c)) + os += c; + else if (c == '\t' || c == '\n') + os += ' '; + else if (c == META_INSET) + getInset(i)->forToc(os, maxlen); + } +} + + docstring Paragraph::stringify(pos_type beg, pos_type end, int options, OutputParams & runparams) const { odocstringstream os; @@ -3600,6 +3636,11 @@ SpellChecker::Result Paragraph::spellCheck(pos_type & from, pos_type & to, LYXERR(Debug::GUI, "misspelled word is correct with dot: \"" << word << "\" [" << from << ".." << to << "]"); + } else { + // spell check with dot appended failed + // restore original word/lang value + word = asString(from, to, AS_STR_INSETS | AS_STR_SKIPDELETE); + wl = WordLangTuple(word, lang); } } }