} else if (token == "\\strikeout") {
lex.next();
font.fontInfo().setStrikeout(setLyXMisc(lex.getString()));
+ } else if (token == "\\xout") {
+ lex.next();
+ font.fontInfo().setXout(setLyXMisc(lex.getString()));
} else if (token == "\\uuline") {
lex.next();
font.fontInfo().setUuline(setLyXMisc(lex.getString()));
par.eraseChar(pos - 1, cur.buffer()->params().track_changes);
c = 0x2014;
pos--;
- } else if (par.getChar(pos - 1) == 0x2014) {
- // convert "----" to "-"
- par.eraseChar(pos - 1, cur.buffer()->params().track_changes);
- c = '-';
- pos--;
}
}
}
-void Text::deleteWordForward(Cursor & cur)
+void Text::deleteWordForward(Cursor & cur, bool const force)
{
LBUFERR(this == cur.text());
if (cur.lastpos() == 0)
cur.selection(true);
cursorForwardOneWord(cur);
cur.setSelection();
- cutSelection(cur, true, false);
- cur.checkBufferStructure();
+ if (force || !cur.confirmDeletion()) {
+ cutSelection(cur, true, false);
+ cur.checkBufferStructure();
+ }
}
}
-void Text::deleteWordBackward(Cursor & cur)
+void Text::deleteWordBackward(Cursor & cur, bool const force)
{
LBUFERR(this == cur.text());
if (cur.lastpos() == 0)
cur.selection(true);
cursorBackwardOneWord(cur);
cur.setSelection();
- cutSelection(cur, true, false);
- cur.checkBufferStructure();
+ if (force || !cur.confirmDeletion()) {
+ cutSelection(cur, true, false);
+ cur.checkBufferStructure();
+ }
}
}
cur.recordUndoInset();
cur.setMark(false);
cur.selHandle(false);
- // save position
+ // save position inside inset
pos_type spos = cur.pos();
pit_type spit = cur.pit();
ParagraphList plist;
if (cur.lastpit() != 0 || cur.lastpos() != 0)
plist = paragraphs();
cur.popBackward();
- // store cursor offset
+ // update cursor offset
if (spit == 0)
spos += cur.pos();
spit += cur.pit();
- Buffer & b = *cur.buffer();
- cur.paragraph().eraseChar(cur.pos(), b.params().track_changes);
+ // remember position outside inset to delete inset later
+ // we do not do it now to avoid memory reuse issues (see #10667).
+ DocIterator inset_it = cur;
+ // jump over inset
+ ++cur.pos();
+ Buffer & b = *cur.buffer();
if (!plist.empty()) {
// see bug 7319
// we clear the cache so that we won't get conflicts with labels
pasteParagraphList(cur, plist, b.params().documentClassPtr(),
b.errorList("Paste"));
- // restore position
- cur.pit() = min(cur.lastpit(), spit);
- cur.pos() = min(cur.lastpos(), spos);
}
- cur.forceBufferUpdate();
+ // delete the inset now
+ inset_it.paragraph().eraseChar(inset_it.pos(), b.params().track_changes);
+ // restore position
+ cur.pit() = min(cur.lastpit(), spit);
+ cur.pos() = min(cur.lastpos(), spos);
// Ensure the current language is set correctly (bug 6292)
cur.text()->setCursor(cur, cur.pit(), cur.pos());
cur.clearSelection();
cur.resetAnchor();
+ cur.forceBufferUpdate();
+
return true;
}