pos_type pos = cur.pos();
// The special chars we handle
- map<wchar_t, InsetSpecialChar::Kind> specialchars;
- specialchars[0x200c] = InsetSpecialChar::LIGATURE_BREAK;
- specialchars[0x200b] = InsetSpecialChar::ALLOWBREAK;
- specialchars[0x2026] = InsetSpecialChar::LDOTS;
- specialchars[0x2011] = InsetSpecialChar::NOBREAKDASH;
+ static map<wchar_t, InsetSpecialChar::Kind> specialchars = {
+ { 0x200c, InsetSpecialChar::LIGATURE_BREAK },
+ { 0x200b, InsetSpecialChar::ALLOWBREAK },
+ { 0x2026, InsetSpecialChar::LDOTS },
+ { 0x2011, InsetSpecialChar::NOBREAKDASH }
+ };
// insert the string, don't insert doublespace
bool space_inserted = true;
++pos;
space_inserted = true;
}
- } else if (specialchars.find(ch) != specialchars.end()) {
- par.insertInset(pos, new InsetSpecialChar(specialchars.find(ch)->second),
- font, bparams.track_changes ?
- Change(Change::INSERTED)
- : Change(Change::UNCHANGED));
+ } else if (specialchars.find(ch) != specialchars.end()
+ && (par.insertInset(pos, new InsetSpecialChar(specialchars.find(ch)->second),
+ font, bparams.track_changes
+ ? Change(Change::INSERTED)
+ : Change(Change::UNCHANGED)))) {
++pos;
space_inserted = false;
} else if (!isPrintable(ch)) {
}
// finally, invoke the DEPM
- deleteEmptyParagraphMechanism(begPit, endPit, cur.buffer()->params().track_changes);
+ deleteEmptyParagraphMechanism(begPit, endPit, begPos, endPos,
+ cur.buffer()->params().track_changes);
cur.finishUndo();
cur.clearSelection();
}
pasteParagraphList(cur, plist, b.params().documentClassPtr(),
+ b.params().authors(),
b.errorList("Paste"));
}
cur.setMark(false);
cur.selHandle(false);
cur.resetAnchor();
- Cursor dummy = cur;
- dummy.pos() = dummy.pit() = 0;
- if (cur.bv().checkDepm(dummy, cur))
+ bool atlastpos = false;
+ if (cur.pos() == 0 && cur.pit() > 0) {
+ // if we are at par start, remove this par
+ cur.text()->backspace(cur);
cur.forceBufferUpdate();
+ } else if (cur.pos() == cur.lastpos())
+ atlastpos = true;
// Move out of and jump over inset
cur.popBackward();
++cur.pos();
cutSelection(cur, false);
cap::pasteFromTemp(cur, cur.buffer()->errorList("Paste"));
cur.text()->setCursor(cur, 0, 0);
+ if (atlastpos && cur.paragraph().isFreeSpacing() && cur.paragraph().empty()) {
+ // We started from par end, remove extra empty par in free spacing insets
+ cur.text()->erase(cur);
+ cur.forceBufferUpdate();
+ }
}
cur.finishUndo();