- // delete nucleus, keep scripts if possible
- MathAtom * p = prevAtom();
- MathAtom * n = nextAtom();
- if (pos() > 0) {
- bool need_parans = (p->up() && n->up()) || (p->down() && n->down());
- if (need_parans) {
- // need empty block
- insert('{', LM_TC_TEX);
- insert('}', LM_TC_TEX);
- p = prevAtom();
- n = nextAtom();
- }
- // move indices to the left
- if (n->up())
- swap(p->up(), n->up());
- if (n->down())
- swap(p->down(), n->down());
- plainErase();
- return;
- }
-
- // pos == 0 now
- if (n->up() || n->down()) {
- insert('{', LM_TC_TEX);
- insert('}', LM_TC_TEX);
- p = prevAtom();
- n = nextAtom();
- swap(p->up(), n->up());
- swap(p->down(), n->down());
+ MathScriptInset * p = nextAtom()->asScriptInset();
+ if (p) {
+ p->removeScript(p->hasUp());
+ // Don't delete if there is anything left
+ if (p->hasUp() || p->hasDown())
+ return;