#include "Paragraph.h"
#include "paragraph_funcs.h"
#include "ParIterator.h"
+#include "TextMetrics.h"
#include "insets/InsetTabular.h"
#include "insets/InsetText.h"
-#include "mathed/MathData.h"
#include "mathed/InsetMath.h"
#include "mathed/InsetMathScript.h"
#include "mathed/MacroTable.h"
-
-#include "support/limited_stack.h"
+#include "mathed/MathData.h"
+#include "mathed/MathMacro.h"
#include <boost/assert.hpp>
#include <boost/bind.hpp>
odocstringstream ods;
ods << '\n';
// only add blank line if we're not in an ERT or Listings inset
- if (par.ownerCode() != Inset::ERT_CODE
- && par.ownerCode() != Inset::LISTINGS_CODE)
+ if (par.ownerCode() != ERT_CODE
+ && par.ownerCode() != LISTINGS_CODE)
ods << '\n';
return ods.str();
}
// bv functions are not yet available!
Cursor::Cursor(BufferView & bv)
: DocIterator(), bv_(&bv), anchor_(), x_target_(-1), textTargetOffset_(0),
- selection_(false), mark_(false), logicalpos_(false), current_font(Font::ALL_INHERIT)
+ selection_(false), mark_(false), logicalpos_(false),
+ current_font(inherit_font)
{}
// we can't move into anything new during selection
if (depth() >= anchor_.depth())
return false;
- if (!ptr_cmp(t.nucleus(), &anchor_[depth()].inset()))
+ if (t.nucleus() != &anchor_[depth()].inset())
return false;
return true;
InsetMathNest * const in = inset().asInsetMath()->asNestInset();
if (in && in->interpretString(*this, s))
return true;
- plainInsert(createInsetMath(name));
+ MathAtom atom = createInsetMath(name);
+ MathMacro * atomAsMacro = atom.nucleus()->asMacro();
+ if (atomAsMacro) {
+ // make non-greedy, i.e. don't eat parameters from the right
+ atomAsMacro->setDisplayMode(MathMacro::DISPLAY_NONGREEDY_INIT);
+ }
+ plainInsert(atom);
return true;
}
&& !boundary()) {
Language const * lang = par.getParLanguage(bufparams);
current_font.setLanguage(lang);
- current_font.setNumber(Font::OFF);
+ current_font.fontInfo().setNumber(FONT_OFF);
real_current_font.setLanguage(lang);
- real_current_font.setNumber(Font::OFF);
+ real_current_font.fontInfo().setNumber(FONT_OFF);
}
}
+
+bool Cursor::textUndo()
+{
+ DocIterator dit = *this;
+ // Undo::textUndo() will modify dit.
+ if (!bv_->buffer().undo().textUndo(dit))
+ return false;
+ // Set cursor
+ setCursor(dit);
+ selection() = false;
+ resetAnchor();
+ fixIfBroken();
+ return true;
+}
+
+
+bool Cursor::textRedo()
+{
+ DocIterator dit = *this;
+ // Undo::textRedo() will modify dit.
+ if (!bv_->buffer().undo().textRedo(dit))
+ return false;
+ // Set cursor
+ setCursor(dit);
+ selection() = false;
+ resetAnchor();
+ fixIfBroken();
+ return true;
+}
+
+
+void Cursor::finishUndo()
+{
+ bv_->buffer().undo().finishUndo();
+}
+
+
+void Cursor::recordUndo(UndoKind kind, pit_type from, pit_type to)
+{
+ bv_->buffer().undo().recordUndo(*this, kind, from, to);
+}
+
+
+void Cursor::recordUndo(UndoKind kind, pit_type from)
+{
+ bv_->buffer().undo().recordUndo(*this, kind, from);
+}
+
+
+void Cursor::recordUndo(UndoKind kind)
+{
+ bv_->buffer().undo().recordUndo(*this, kind);
+}
+
+
+void Cursor::recordUndoInset(UndoKind kind)
+{
+ bv_->buffer().undo().recordUndoInset(*this, kind);
+}
+
+
+void Cursor::recordUndoFullDocument()
+{
+ bv_->buffer().undo().recordUndoFullDocument(*this);
+}
+
+
+void Cursor::recordUndoSelection()
+{
+ bv_->buffer().undo().recordUndo(*this, ATOMIC_UNDO,
+ selBegin().pit(), selEnd().pit());
+}
+
+
} // namespace lyx