X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FText.cpp;h=1eecee1e30443e9b068a24538508a361de7fac97;hb=66f527e417de916105680696bd44d7ad91ff60cb;hp=526a1b53239a7790956797b1f88387edfaa044e3;hpb=d49051d99fbd2a462378c0cb5159899500cdc00d;p=lyx.git diff --git a/src/Text.cpp b/src/Text.cpp index 526a1b5323..1eecee1e30 100644 --- a/src/Text.cpp +++ b/src/Text.cpp @@ -113,8 +113,8 @@ static bool moveItem(Paragraph & fromPar, pos_type fromPos, // Therefore, it should only be used for breaking and merging paragraphs // We need a copy here because the character at fromPos is going to be erased. - Font const & tmpFont = fromPar.getFontSettings(params, fromPos); - Change const & tmpChange = fromPar.lookupChange(fromPos); + Font const tmpFont = fromPar.getFontSettings(params, fromPos); + Change const tmpChange = fromPar.lookupChange(fromPos); if (Inset * tmpInset = fromPar.getInset(fromPos)) { fromPar.releaseInset(fromPos); @@ -198,7 +198,7 @@ void mergeParagraph(BufferParams const & bparams, Text::Text(InsetText * owner, bool use_default_layout) - : owner_(owner), autoBreakRows_(false), undo_counter_(0) + : owner_(owner) { pars_.push_back(Paragraph()); Paragraph & par = pars_.back(); @@ -212,7 +212,7 @@ Text::Text(InsetText * owner, bool use_default_layout) Text::Text(InsetText * owner, Text const & text) - : owner_(owner), autoBreakRows_(text.autoBreakRows_), undo_counter_(0) + : owner_(owner) { pars_ = text.pars_; ParagraphList::iterator const end = pars_.end(); @@ -486,12 +486,18 @@ void Text::readParToken(Paragraph & par, Lexer & lex, } else if (token == "\\color") { lex.next(); setLyXColor(lex.getString(), font.fontInfo()); - } else if (token == "\\SpecialChar") { + } else if (token == "\\SpecialChar" || + (token == "\\SpecialCharNoPassThru" && + !par.layout().pass_thru && !inset().isPassThru())) { auto_ptr inset; inset.reset(new InsetSpecialChar); inset->read(lex); inset->setBuffer(*buf); par.insertInset(par.size(), inset.release(), font, change); + } else if (token == "\\SpecialCharNoPassThru") { + lex.next(); + docstring const s = ltrim(lex.getDocString(), "\\"); + par.insert(par.size(), s, font, change); } else if (token == "\\IPAChar") { auto_ptr inset; inset.reset(new InsetIPAChar); @@ -833,7 +839,7 @@ void Text::insertStringAsLines(Cursor & cur, docstring const & str, cit != str.end(); ++cit) { Paragraph & par = pars_[pit]; if (*cit == '\n') { - if (autoBreakRows_ && (!par.empty() || par.allowEmpty())) { + if (inset().allowMultiPar() && (!par.empty() || par.allowEmpty())) { lyx::breakParagraph(*this, pit, pos, par.layout().isEnvironment()); ++pit; @@ -1075,15 +1081,6 @@ void Text::charInserted(Cursor & cur) { Paragraph & par = cur.paragraph(); - // Here we call finishUndo for every 20 characters inserted. - // This is from my experience how emacs does it. (Lgb) - if (undo_counter_ < 20) { - ++undo_counter_; - } else { - cur.finishUndo(); - undo_counter_ = 0; - } - // register word if a non-letter was entered if (cur.pos() > 1 && !par.isWordSeparator(cur.pos() - 2) @@ -1561,7 +1558,7 @@ bool Text::handleBibitems(Cursor & cur) // if a bibitem is deleted, merge with previous paragraph // if this is a bibliography item as well if (cur.pit() > 0 && par.layout() == prevpar.layout()) { - cur.recordUndo(ATOMIC_UNDO, prevcur.pit()); + cur.recordUndo(prevcur.pit()); mergeParagraph(bufparams, cur.text()->paragraphs(), prevcur.pit()); cur.forceBufferUpdate(); @@ -1643,14 +1640,14 @@ bool Text::backspacePos0(Cursor & cur) // is it an empty paragraph? if (cur.lastpos() == 0 || (cur.lastpos() == 1 && par.isSeparator(0))) { - cur.recordUndo(ATOMIC_UNDO, prevcur.pit(), cur.pit()); + cur.recordUndo(prevcur.pit()); plist.erase(boost::next(plist.begin(), cur.pit())); needsUpdate = true; } // is previous par empty? else if (prevcur.lastpos() == 0 || (prevcur.lastpos() == 1 && prevpar.isSeparator(0))) { - cur.recordUndo(ATOMIC_UNDO, prevcur.pit(), cur.pit()); + cur.recordUndo(prevcur.pit()); plist.erase(boost::next(plist.begin(), prevcur.pit())); needsUpdate = true; } @@ -1662,7 +1659,7 @@ bool Text::backspacePos0(Cursor & cur) else if (par.layout() == prevpar.layout() || tclass.isDefaultLayout(par.layout()) || tclass.isPlainLayout(par.layout())) { - cur.recordUndo(ATOMIC_UNDO, prevcur.pit()); + cur.recordUndo(prevcur.pit()); mergeParagraph(bufparams, plist, prevcur.pit()); needsUpdate = true; } @@ -1688,7 +1685,7 @@ bool Text::backspace(Cursor & cur) --prev_cur.pit(); if (!prev_cur.paragraph().isMergedOnEndOfParDeletion(cur.buffer()->params().track_changes)) { - cur.recordUndo(ATOMIC_UNDO, prev_cur.pit(), prev_cur.pit()); + cur.recordUndo(prev_cur.pit(), prev_cur.pit()); prev_cur.paragraph().setChange(prev_cur.lastpos(), Change(Change::DELETED)); setCursorIntern(cur, prev_cur.pit(), prev_cur.lastpos()); return true; @@ -2097,11 +2094,11 @@ void Text::charsTranspose(Cursor & cur) // Store the characters to be transposed (including font information). char_type const char1 = par.getChar(pos1); - Font const & font1 = + Font const font1 = par.getFontSettings(cur.buffer()->params(), pos1); char_type const char2 = par.getChar(pos2); - Font const & font2 = + Font const font2 = par.getFontSettings(cur.buffer()->params(), pos2); // And finally, we are ready to perform the transposition.