X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fparagraph_funcs.C;h=a43217cc055591222a2b62d954aecafec8812a6d;hb=e2cd4d4c44f7c604a45dd9de9c9ade0d7c09eefc;hp=8def8c6f228526645b12cf7cc5b613f76d5c00d4;hpb=a2cd656e256fa50aec3f03851b63a4bc6cdd666d;p=lyx.git diff --git a/src/paragraph_funcs.C b/src/paragraph_funcs.C index 8def8c6f22..a43217cc05 100644 --- a/src/paragraph_funcs.C +++ b/src/paragraph_funcs.C @@ -58,7 +58,12 @@ using std::pair; namespace { bool moveItem(Paragraph & from, Paragraph & to, - BufferParams const & params, pos_type i, pos_type j) + BufferParams const & params, pos_type i, pos_type j, + Change change = Change(Change::INSERTED)); + +bool moveItem(Paragraph & from, Paragraph & to, + BufferParams const & params, pos_type i, pos_type j, + Change change) { Paragraph::value_type const tmpchar = from.getChar(i); LyXFont tmpfont = from.getFontSettings(params, i); @@ -76,11 +81,9 @@ bool moveItem(Paragraph & from, Paragraph & to, return false; } if (tmpinset) - to.insertInset(j, tmpinset, tmpfont); + to.insertInset(j, tmpinset, tmpfont, change); } else { - if (!to.checkInsertChar(tmpfont)) - return false; - to.insertChar(j, tmpchar, tmpfont); + to.insertChar(j, tmpchar, tmpfont, change); } return true; } @@ -163,10 +166,11 @@ void breakParagraph(BufferParams const & bparams, return; } - par.params().clear(); - - par.layout(bparams.getLyXTextClass().defaultLayout()); - + if (!isempty) { + par.params().clear(); + par.layout(bparams.getLyXTextClass().defaultLayout()); + } + // layout stays the same with latex-environments if (flag) { par.layout(tmp->layout()); @@ -192,6 +196,9 @@ void breakParagraphConservative(BufferParams const & bparams, Paragraph & tmp = *pars.insert(pars.begin() + par_offset + 1, Paragraph()); Paragraph & par = pars[par_offset]; + if (bparams.tracking_changes) + tmp.trackChanges(); + tmp.makeSameLayout(par); // When can pos > size()? @@ -201,12 +208,18 @@ void breakParagraphConservative(BufferParams const & bparams, // paragraph pos_type pos_end = par.size() - 1; - for (pos_type i = pos, j = pos; i <= pos_end; ++i) - if (moveItem(par, tmp, bparams, i, j - pos)) + for (pos_type i = pos, j = pos; i <= pos_end; ++i) { + Change::Type change = par.lookupChange(i); + if (moveItem(par, tmp, bparams, i, j - pos, change)) ++j; - - for (pos_type k = pos_end; k >= pos; --k) + } + // If tracking changes, set all the text that is to be + // erased to Type::INSERTED. + for (pos_type k = pos_end; k >= pos; --k) { + if (bparams.tracking_changes) + par.setChange(k, Change::INSERTED); par.erase(k); + } } } @@ -221,9 +234,11 @@ void mergeParagraph(BufferParams const & bparams, pos_type pos_insert = par.size(); // ok, now copy the paragraph - for (pos_type i = 0, j = 0; i <= pos_end; ++i) - if (moveItem(next, par, bparams, i, pos_insert + j)) + for (pos_type i = 0, j = 0; i <= pos_end; ++i) { + Change::Type change = next.lookupChange(i); + if (moveItem(next, par, bparams, i, pos_insert + j, change)) ++j; + } pars.erase(pars.begin() + par_offset + 1); }