#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;
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());
}
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('#')));