+
+} // namespace anon
+
+
+void finishUndo()
+{
+ // Make sure the next operation will be stored.
+ undo_finished = true;
+}
+
+
+bool textUndo(BufferView & bv)
+{
+ return textUndoOrRedo(bv, bv.buffer()->undostack(),
+ bv.buffer()->redostack());
+}
+
+
+bool textRedo(BufferView & bv)
+{
+ return textUndoOrRedo(bv, bv.buffer()->redostack(),
+ bv.buffer()->undostack());
+}
+
+
+void recordUndo(Undo::undo_kind kind,
+ LCursor & cur, pit_type first, pit_type last)
+{
+ Buffer * buf = cur.bv().buffer();
+ recordUndo(kind, cur, first, last, buf->undostack());
+ buf->redostack().clear();
+ //lyxerr << "undostack:\n";
+ //for (size_t i = 0, n = buf->undostack().size(); i != n && i < 6; ++i)
+ // lyxerr << " " << i << ": " << buf->undostack()[i] << std::endl;
+}
+
+
+void recordUndo(LCursor & cur, Undo::undo_kind kind)
+{
+ recordUndo(kind, cur, cur.pit(), cur.pit());
+}
+
+
+void recordUndoInset(LCursor & cur, Undo::undo_kind kind)
+{
+ LCursor c = cur;
+ c.pop();
+ Buffer * buf = cur.bv().buffer();
+ doRecordUndo(kind, c, c.pit(), c.pit(), cur,
+ buf->params(), false, buf->undostack());
+}
+
+
+void recordUndoSelection(LCursor & cur, Undo::undo_kind kind)
+{
+ recordUndo(kind, cur, cur.selBegin().pit(), cur.selEnd().pit());
+}
+
+
+void recordUndo(LCursor & cur, Undo::undo_kind kind, pit_type from)
+{
+ recordUndo(kind, cur, cur.pit(), from);
+}
+
+
+void recordUndo(LCursor & cur, Undo::undo_kind kind,
+ pit_type from, pit_type to)
+{
+ recordUndo(kind, cur, from, to);
+}
+
+
+void recordUndoFullDocument(BufferView * bv)
+{
+ Buffer * buf = bv->buffer();
+ doRecordUndo(
+ Undo::ATOMIC,
+ doc_iterator_begin(buf->inset()),
+ 0, buf->paragraphs().size() - 1,
+ bv->cursor(),
+ buf->params(),
+ true,
+ buf->undostack()
+ );
+ undo_finished = false;
+}
+
+
+} // namespace lyx