#include "math_hullinset.h"
#include "math_iterator.h"
#include "math_macroarg.h"
+#include "math_macrotemplate.h"
#include "math_mathmlstream.h"
#include "math_parser.h"
#include "math_replace.h"
bool MathCursor::popLeft()
{
- //cerr << "Leaving atom "; par()->write(cerr, false); cerr << " left\n";
+ //cerr << "Leaving atom to the left\n";
if (Cursor_.size() <= 1)
return false;
- if (par()->asScriptInset()) {
- par()->asScriptInset()->removeEmptyScripts();
- if (par()->asScriptInset()->empty())
- plainErase();
- }
Cursor_.pop_back();
return true;
}
//cerr << "Leaving atom "; par()->write(cerr, false); cerr << " right\n";
if (Cursor_.size() <= 1)
return false;
- if (par()->asScriptInset()) {
- par()->asScriptInset()->removeEmptyScripts();
- if (par()->asScriptInset()->empty())
- plainErase();
- }
Cursor_.pop_back();
posRight();
return true;
}
+void MathCursor::touch()
+{
+ cursor_type::const_iterator it = Cursor_.begin();
+ cursor_type::const_iterator et = Cursor_.end();
+ for ( ; it != et; ++it)
+ it->xcell().touch();
+}
+
+
void MathCursor::normalize()
{
+#if 0
// rebreak
{
MathIterator it = ibegin(formula()->par().nucleus());
if (it.par()->asBoxInset())
it.par()->asBoxInset()->rebreak();
}
+#endif
if (idx() >= par()->nargs()) {
lyxerr << "this should not really happen - 1: "
dump("error 4");
}
pos() = min(pos(), size());
+
+ // remove empty scripts if possible
+ for (pos_type i = 0; i < size(); ++i) {
+ MathScriptInset * p = array().at(i)->asScriptInset();
+ if (p) {
+ p->removeEmptyScripts();
+ if (p->empty())
+ array().erase(i);
+ }
+ }
+
+ // fix again position
+ pos() = min(pos(), size());
}
while (1) {
// avoid invalid nesting when selecting
if (!selection_ || positionable(it.cursor(), Anchor_)) {
- int xo = it.position().xpos();
- int yo = it.position().ypos();
+ MathCursorPos const & top = it.position();
+ int xo = top.xpos();
+ int yo = top.ypos();
if (xlow - 2 <= xo && xo <= xhigh + 2 &&
ylow - 2 <= yo && yo <= yhigh + 2)
{
if (inMacroArgMode()) {
--pos();
plainErase();
- if ('1' <= c && c <= '9')
+ int n = c - '0';
+ MathMacroTemplate * p = formula()->par()->asMacroTemplate();
+ if (p && 1 <= n && n <= p->numargs())
insert(MathAtom(new MathMacroArgument(c - '0')));
else {
insert(MathAtom(new MathSpecialCharInset('#')));
if (c == '\\')
insert(c, LM_TC_TEX);
- else
+ else if (c != ' ')
insert(c, lastcode_);
return true;