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);
}
}
// 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);
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()
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
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<Buffer &>(buf));
+ par.setInsetBuffers(const_cast<Buffer &>(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());
}
// 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));
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<Buffer &>(*buf));
textSel += par.asString(AS_STR_INSETS);
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);
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();
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)
// 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);