X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FText.cpp;h=0ca32a4e931847fbad9a89becf485192e8a2025c;hb=1d637b8af0f76d7c758db91ee3a196306f861a21;hp=f596f0d2e440db6448c9e86c5ecf883f99b13c80;hpb=8d5da386c4880b8bd7791480e0fdbcf4218ec45e;p=lyx.git diff --git a/src/Text.cpp b/src/Text.cpp index f596f0d2e4..0ca32a4e93 100644 --- a/src/Text.cpp +++ b/src/Text.cpp @@ -209,7 +209,7 @@ pit_type Text::outerHook(pit_type par_offset) const if (par.getDepth() == 0) return pars_.size(); - return depthHook(par_offset, depth_type(par.getDepth() - 1)); + return depthHook(par_offset, par.getDepth() - 1); } @@ -369,7 +369,7 @@ InsetText const & Text::inset() const void Text::readParToken(Paragraph & par, Lexer & lex, string const & token, Font & font, Change & change, ErrorList & errorList) { - Buffer * buf = const_cast(&owner_->buffer()); + Buffer * buf = &owner_->buffer(); BufferParams & bp = buf->params(); if (token[0] != '\\') { @@ -1369,6 +1369,20 @@ void Text::selectWord(Cursor & cur, word_location loc) } +void Text::expandWordSel(Cursor & cur) +{ + // get selection of word around cur + Cursor c = cur; + c.selection(false); + c.text()->selectWord(c, WHOLE_WORD); + // use the correct word boundary, depending on selection direction + if (cur.top() > cur.normalAnchor()) + cur.pos() = c.selEnd().pos(); + else + cur.pos() = c.selBegin().pos(); +} + + void Text::selectAll(Cursor & cur) { LBUFERR(this == cur.text()); @@ -1496,7 +1510,8 @@ void Text::acceptOrRejectChanges(Cursor & cur, ChangeOp op) } // finally, invoke the DEPM - deleteEmptyParagraphMechanism(begPit, endPit, cur.buffer()->params().track_changes); + deleteEmptyParagraphMechanism(begPit, endPit, begPos, endPos, + cur.buffer()->params().track_changes); cur.finishUndo(); cur.clearSelection(); @@ -1881,6 +1896,7 @@ bool Text::dissolveInset(Cursor & cur) } pasteParagraphList(cur, plist, b.params().documentClassPtr(), + b.params().authors(), b.errorList("Paste")); } @@ -2147,7 +2163,10 @@ docstring Text::currentState(CursorData const & cur, bool devel_mode) const if (!par.empty() && cur.pos() < par.size()) { // Force output of code point, not character size_t const c = par.getChar(cur.pos()); - os << _(", Char: 0x") << hex << c; + if (c == META_INSET) + os << ", Char: INSET"; + else + os << _(", Char: 0x") << hex << c; } os << _(", Boundary: ") << cur.boundary(); // Row & row = cur.textRow(); @@ -2362,7 +2381,8 @@ void Text::setMacrocontextPosition(DocIterator const & pos) bool Text::completionSupported(Cursor const & cur) const { Paragraph const & par = cur.paragraph(); - return !cur.selection() + return !cur.buffer()->isReadonly() + && !cur.selection() && cur.pos() > 0 && (cur.pos() >= par.size() || par.isWordSeparator(cur.pos())) && !par.isWordSeparator(cur.pos() - 1); @@ -2376,9 +2396,12 @@ CompletionList const * Text::createCompletionList(Cursor const & cur) const } -bool Text::insertCompletion(Cursor & cur, docstring const & s, bool /*finished*/) +bool Text::insertCompletion(Cursor & cur, docstring const & s) { LBUFERR(cur.bv().cursor() == cur); + if (cur.buffer()->isReadonly()) + return false; + cur.recordUndo(); cur.insert(s); cur.bv().cursor() = cur; if (!(cur.result().screenUpdate() & Update::Force))