]> git.lyx.org Git - lyx.git/blobdiff - src/Text.cpp
Update previews after doing a find/replace (#7242)
[lyx.git] / src / Text.cpp
index 526a1b53239a7790956797b1f88387edfaa044e3..1eecee1e30443e9b068a24538508a361de7fac97 100644 (file)
@@ -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;
                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;
                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.