// when we (hopefully) have a one-for-all paste mechanism.
bool dirty_tabular_stack_;
-class resetParagraph : public std::unary_function<Paragraph, Buffer const &> {
-public:
- resetParagraph(Buffer const & b) : buffer_(b) {}
- void operator()(Paragraph & p) const {
- // FIXME: change tracking (MG)
- // set p's text to INSERTED in CT mode; clear CT info otherwise
-
- // ERT paragraphs have the Language latex_language.
- // This is invalid outside of ERT, so we need to change it
- // to the buffer language.
- if (p.ownerCode() == InsetBase::ERT_CODE) {
- p.changeLanguage(buffer_.params(), latex_language,
- buffer_.getLanguage());
- }
- p.setInsetOwner(0);
- }
-private:
- Buffer const & buffer_;
-};
-
void region(CursorSlice const & i1, CursorSlice const & i2,
InsetBase::row_type & r1, InsetBase::row_type & r2,
tmpbuf->eraseChar(i--, false);
}
- // FIXME: Change tracking (MG)
- // set tmpbuf's text to INSERTED in CT mode; clear CT info otherwise
+ tmpbuf->setChange(Change(buffer.params().trackChanges ?
+ Change::INSERTED : Change::UNCHANGED));
}
bool const empty = pars[pit].empty();
return PitPosPair(endpit, endpos);
// Start and end is inside same paragraph
- if (endpit == pit_type(pars.size()) ||
- startpit == endpit) {
- endpos -= pars[startpit].erase(startpos, endpos, false);
+ if (endpit == pit_type(pars.size()) || startpit == endpit) {
+ endpos -= pars[startpit].eraseChars(startpos, endpos, params.trackChanges);
return PitPosPair(endpit, endpos);
}
for (pit_type pit = startpit; pit != endpit + 1;) {
// FIXME: Change tracking (MG)
bool const merge = !params.trackChanges ||
- pars[pit].lookupChange(pars[pit].size()) ==
- Change(Change::INSERTED);
+ pars[pit].isInserted(pars[pit].size());
pos_type const left = ( pit == startpit ? startpos : 0 );
pos_type const right = ( pit == endpit ? endpos :
pars[pit].size() + 1 );
// Logical erase only:
- pars[pit].erase(left, right, false);
+ pars[pit].eraseChars(left, right, false);
// Separate handling of para break:
if (merge && pit != endpit &&
(pit + 1 != endpit || pars[pit].hasSameLayout(pars[pit + 1]))) {
ParagraphList paragraphs(boost::next(pars.begin(), startpit),
boost::next(pars.begin(), endpit + 1));
- for_each(paragraphs.begin(), paragraphs.end(), resetParagraph(buf));
+ ParagraphList::iterator it = paragraphs.begin();
+ ParagraphList::iterator it_end = paragraphs.end();
+
+ for (; it != it_end; it++) {
+ // ERT paragraphs have the Language latex_language.
+ // This is invalid outside of ERT, so we need to change it
+ // to the buffer language.
+ if (it->ownerCode() == InsetBase::ERT_CODE) {
+ it->changeLanguage(buf.params(), latex_language,
+ buf.getLanguage());
+ }
+ it->setInsetOwner(0);
+ }
// Cut out the end of the last paragraph.
Paragraph & back = paragraphs.back();
- back.erase(end, back.size(), false);
+ // do not track deletion here; it is an internal action not visible to the user
+ back.eraseChars(end, back.size(), false);
// Cut out the begin of the first paragraph
Paragraph & front = paragraphs.front();
- front.erase(0, start, false);
+ // again, do not track deletion
+ front.eraseChars(0, start, false);
theCuts.push(make_pair(paragraphs, tc));
}
namespace cap {
-string grabAndEraseSelection(LCursor & cur)
+docstring grabAndEraseSelection(LCursor & cur)
{
if (!cur.selection())
- return string();
- string res = grabSelection(cur);
+ return docstring();
+ docstring res = grabSelection(cur);
eraseSelection(cur);
return res;
}
if (cur.inMathed()) {
//lyxerr << "copySelection in mathed" << endl;
ParagraphList pars;
- pars.push_back(Paragraph());
+ Paragraph par;
BufferParams const & bp = cur.buffer().params();
- pars.back().layout(bp.getLyXTextClass().defaultLayout());
- for_each(pars.begin(), pars.end(), resetParagraph(cur.buffer()));
- // FIXME: change tracking (MG)
- pars.back().insert(0, grabSelection(cur), LyXFont(), Change(Change::UNCHANGED));
+ par.layout(bp.getLyXTextClass().defaultLayout());
+ par.insert(0, grabSelection(cur), LyXFont(), Change(Change::UNCHANGED));
+ pars.push_back(par);
theCuts.push(make_pair(pars, bp.textclass));
}
// tell tabular that a recent copy happened
LyXText * text = cur.text();
BOOST_ASSERT(text);
- recordUndo(cur);
-
pit_type endpit;
PitPosPair ppp;
if (!checkPastePossible(sel_index))
return;
+ recordUndo(cur);
pasteParagraphList(cur, theCuts[sel_index].first,
theCuts[sel_index].second, errorList);
cur.setSelection();
}
-string grabSelection(LCursor const & cur)
+docstring grabSelection(LCursor const & cur)
{
if (!cur.selection())
- return string();
+ return docstring();
// FIXME: What is wrong with the following?
#if 0
MathArray::const_iterator it = i1.cell().begin();
return asString(MathArray(it + i1.pos(), it + i2.pos()));
} else {
- return "unknown selection 1";
+ return from_ascii("unknown selection 1");
}
}
InsetBase::col_type c1, c2;
region(i1, i2, r1, r2, c1, c2);
- string data;
+ docstring data;
if (i1.inset().asInsetMath()) {
for (InsetBase::row_type row = r1; row <= r2; ++row) {
if (row > r1)
}
}
} else {
- data = "unknown selection 2";
+ data = from_ascii("unknown selection 2");
}
return data;
}