X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FCutAndPaste.cpp;h=09cedf8c4489d8313997c1ded4852fd3c3680813;hb=0fa93fe55a85e901215ea783e3baf2b465fb67bd;hp=8e0a72d6dda5068d155af22cb8081521f1b8a120;hpb=5fc2662b1301a8e04db0fa8695e06b363c1de60e;p=lyx.git diff --git a/src/CutAndPaste.cpp b/src/CutAndPaste.cpp index 8e0a72d6dd..09cedf8c44 100644 --- a/src/CutAndPaste.cpp +++ b/src/CutAndPaste.cpp @@ -222,23 +222,19 @@ pasteSelectionHelper(DocIterator const & cur, ParagraphList const & parlist, bool forcePlainLayout = target_inset->forcePlainLayout(); Layout const & plainLayout = newDocClass->plainLayout(); Layout const & defaultLayout = newDocClass->defaultLayout(); - ParagraphList::iterator const end = insertion.end(); - ParagraphList::iterator par = insertion.begin(); - for (; par != end; ++par) { - Layout const & parLayout = par->layout(); + for (auto & par : insertion) { + Layout const & parLayout = par.layout(); if (forcePlainLayout || parLayout == defaultLayout) - par->setLayout(plainLayout); + par.setLayout(plainLayout); } } else { // check if we need to reset from plain layout Layout const & defaultLayout = newDocClass->defaultLayout(); Layout const & plainLayout = newDocClass->plainLayout(); - ParagraphList::iterator const end = insertion.end(); - ParagraphList::iterator par = insertion.begin(); - for (; par != end; ++par) { - Layout const & parLayout = par->layout(); + for (auto & par : insertion) { + Layout const & parLayout = par.layout(); if (parLayout == plainLayout) - par->setLayout(defaultLayout); + par.setLayout(defaultLayout); } } @@ -466,17 +462,15 @@ pasteSelectionHelper(DocIterator const & cur, ParagraphList const & parlist, // Paste it! if (empty) { - pars.insert(lyx::next(pars.begin(), pit), - insertion.begin(), - insertion.end()); + pars.insert(pars.iterator_at(pit), + insertion.begin(), insertion.end()); // merge the empty par with the last par of the insertion mergeParagraph(buffer.params(), pars, pit + insertion.size() - 1); } else { - pars.insert(lyx::next(pars.begin(), pit + 1), - insertion.begin(), - insertion.end()); + pars.insert(pars.iterator_at(pit + 1), + insertion.begin(), insertion.end()); // merge the first par of the insertion with the current par mergeParagraph(buffer.params(), pars, pit); @@ -608,7 +602,7 @@ Buffer * copyToTempBuffer(ParagraphList const & paragraphs, DocumentClassConstPt void putClipboard(ParagraphList const & paragraphs, DocumentClassConstPtr docclass, docstring const & plaintext, - BufferParams const bp) + BufferParams const & bp) { Buffer * buffer = copyToTempBuffer(paragraphs, docclass); if (!buffer) // already asserted in copyToTempBuffer() @@ -687,8 +681,8 @@ void copySelectionHelper(Buffer const & buf, Text const & text, LASSERT(startpit != endpit || start <= end, return); // Clone the paragraphs within the selection. - ParagraphList copy_pars(lyx::next(pars.begin(), startpit), - lyx::next(pars.begin(), endpit + 1)); + ParagraphList copy_pars(pars.iterator_at(startpit), + pars.iterator_at(endpit + 1)); // Remove the end of the last paragraph; afterwards, remove the // beginning of the first paragraph. Keep this order - there may only @@ -700,20 +694,17 @@ void copySelectionHelper(Buffer const & buf, Text const & text, Paragraph & front = copy_pars.front(); front.eraseChars(0, start, false); - ParagraphList::iterator it = copy_pars.begin(); - ParagraphList::iterator it_end = copy_pars.end(); - - for (; it != it_end; ++it) { + for (auto & par : copy_pars) { // Since we have a copy of the paragraphs, the insets // do not have a proper buffer reference. It makes // sense to add them temporarily, because the // operations below depend on that (acceptChanges included). - it->setInsetBuffers(const_cast(buf)); + par.setInsetBuffers(const_cast(buf)); // PassThru paragraphs have the Language // latex_language. This is invalid for others, so we // need to change it to the buffer language. - if (it->isPassThru()) - it->changeLanguage(buf.params(), + if (par.isPassThru()) + par.changeLanguage(buf.params(), latex_language, buf.language()); } @@ -729,10 +720,9 @@ void copySelectionHelper(Buffer const & buf, Text const & text, // do some final cleanup now, to make sure that the paragraphs // are not linked to something else. - it = copy_pars.begin(); - for (; it != it_end; ++it) { - it->resetBuffer(); - it->setInsetOwner(nullptr); + for (auto & par : copy_pars) { + par.resetBuffer(); + par.setInsetOwner(nullptr); } cutstack.push(make_pair(copy_pars, dc)); @@ -894,17 +884,11 @@ vector availableSelections(Buffer const * buf) if (!buf) return selList; - CutStack::const_iterator cit = theCuts.begin(); - CutStack::const_iterator end = theCuts.end(); - for (; cit != end; ++cit) { - // we do not use cit-> here because gcc 2.9x does not - // like it (JMarc) - ParagraphList const & pars = (*cit).first; + for (auto const & cut : theCuts) { + ParagraphList const & pars = cut.first; docstring textSel; - ParagraphList::const_iterator pit = pars.begin(); - ParagraphList::const_iterator pend = pars.end(); - for (; pit != pend; ++pit) { - Paragraph par(*pit, 0, 46); + for (auto const & para : pars) { + Paragraph par(para, 0, 46); // adapt paragraph to current buffer. par.setInsetBuffers(const_cast(*buf)); textSel += par.asString(AS_STR_INSETS); @@ -1103,17 +1087,42 @@ void copySelectionToTemp(Cursor & cur) void copySelection(Cursor const & cur, docstring const & plaintext) { - // In tablemode, because copy and paste actually use special table stack - // we do not attempt to get selected paragraphs under cursor. Instead, a - // paragraph with the plain text version is generated so that table cells - // can be pasted as pure text somewhere else. + // In tablemode, because copy and paste actually use a special table stack, + // we need to go through the cells and collect the paragraphs. + // In math matrices, we generate a plain text version. if (cur.selBegin().idx() != cur.selEnd().idx()) { ParagraphList pars; - Paragraph par; BufferParams const & bp = cur.buffer()->params(); - par.setLayout(bp.documentClass().plainLayout()); - par.insert(0, plaintext, Font(), Change(Change::UNCHANGED)); - pars.push_back(par); + if (cur.inMathed()) { + Paragraph par; + par.setLayout(bp.documentClass().plainLayout()); + // Replace (column-separating) tabs by space (#4449) + docstring const clean_text = subst(plaintext, '\t', ' '); + // For pasting into text, we set the language to the paragraph language + // (rather than the default_language which is always English; see #11898) + par.insert(0, clean_text, Font(sane_font, par.getParLanguage(bp)), + Change(Change::UNCHANGED)); + pars.push_back(par); + } else { + // Get paragraphs from all cells + InsetTabular * table = cur.inset().asInsetTabular(); + LASSERT(table, return); + ParagraphList tplist = table->asParList(cur.selBegin().idx(), cur.selEnd().idx()); + for (auto & cpar : tplist) { + cpar.setLayout(bp.documentClass().plainLayout()); + pars.push_back(cpar); + // since the pars are merged later, we separate them by blank + Paragraph epar; + epar.insert(0, from_ascii(" "), Font(sane_font, epar.getParLanguage(bp)), + Change(Change::UNCHANGED)); + pars.push_back(epar); + } + // remove last empty par + pars.pop_back(); + // merge all paragraphs to one + while (pars.size() > 1) + mergeParagraph(bp, pars, 0); + } theCuts.push(make_pair(pars, bp.documentClassPtr())); } else { copySelectionToStack(cur, theCuts); @@ -1233,9 +1242,7 @@ bool pasteClipboardText(Cursor & cur, ErrorList & errorList, bool asParagraphs, theClipboard().hasTextContents(Clipboard::LyXTextType)) { string lyx = theClipboard().getAsLyX(); if (!lyx.empty()) { - // For some strange reason gcc 3.2 and 3.3 do not accept - // Buffer buffer(string(), false); - Buffer buffer("", false); + Buffer buffer(string(), false); buffer.setUnnamed(true); if (buffer.readString(lyx)) { cur.recordUndo(); @@ -1266,9 +1273,7 @@ bool pasteClipboardText(Cursor & cur, ErrorList & errorList, bool asParagraphs, docstring text = theClipboard().getAsText(types[i]); available = !text.empty(); if (available) { - // For some strange reason gcc 3.2 and 3.3 do not accept - // Buffer buffer(string(), false); - Buffer buffer("", false); + Buffer buffer(string(), false); buffer.setUnnamed(true); available = buffer.importString(names[i], text, errorList); if (available) @@ -1376,10 +1381,10 @@ void replaceSelectionWithString(Cursor & cur, docstring const & str) // Insert the new string pos_type pos = cur.selEnd().pos(); Paragraph & par = cur.selEnd().paragraph(); - docstring::const_iterator cit = str.begin(); - docstring::const_iterator end = str.end(); - for (; cit != end; ++cit, ++pos) - par.insertChar(pos, *cit, font, cur.buffer()->params().track_changes); + for (auto const & c : str) { + par.insertChar(pos, c, font, cur.buffer()->params().track_changes); + ++pos; + } // Cut the selection cutSelection(cur, false);