aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Editor.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/Editor.cxx')
-rw-r--r--src/Editor.cxx62
1 files changed, 25 insertions, 37 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx
index 356f73baa..d1bcfa02a 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -774,10 +774,13 @@ bool Editor::RangeContainsProtected(Sci::Position start, Sci::Position end) cons
return false;
}
+bool Editor::RangeContainsProtected(const SelectionRange &range) const noexcept {
+ return RangeContainsProtected(range.Start().Position(), range.End().Position());
+}
+
bool Editor::SelectionContainsProtected() const noexcept {
for (size_t r=0; r<sel.Count(); r++) {
- if (RangeContainsProtected(sel.Range(r).Start().Position(),
- sel.Range(r).End().Position())) {
+ if (RangeContainsProtected(sel.Range(r))) {
return true;
}
}
@@ -2045,17 +2048,10 @@ void Editor::InsertCharacter(std::string_view sv, CharacterSource charSource) {
for (std::vector<SelectionRange *>::reverse_iterator rit = selPtrs.rbegin();
rit != selPtrs.rend(); ++rit) {
SelectionRange *currentSel = *rit;
- if (!RangeContainsProtected(currentSel->Start().Position(),
- currentSel->End().Position())) {
+ if (!RangeContainsProtected(*currentSel)) {
Sci::Position positionInsert = currentSel->Start().Position();
if (!currentSel->Empty()) {
- if (currentSel->Length()) {
- pdoc->DeleteChars(positionInsert, currentSel->Length());
- currentSel->ClearVirtualSpace();
- } else {
- // Range is all virtual so collapse to start of virtual space
- currentSel->MinimizeVirtualSpace();
- }
+ ClearSelectionRange(*currentSel);
} else if (inOverstrike) {
if (positionInsert < pdoc->Length()) {
if (!pdoc->IsPositionInLineEnd(positionInsert)) {
@@ -2123,24 +2119,26 @@ void Editor::InsertCharacter(std::string_view sv, CharacterSource charSource) {
}
}
+void Editor::ClearSelectionRange(SelectionRange &range) {
+ if (!range.Empty()) {
+ if (range.Length()) {
+ pdoc->DeleteChars(range.Start().Position(), range.Length());
+ range.ClearVirtualSpace();
+ } else {
+ // Range is all virtual so collapse to start of virtual space
+ range.MinimizeVirtualSpace();
+ }
+ }
+}
+
void Editor::ClearBeforeTentativeStart() {
// Make positions for the first composition string.
FilterSelections();
UndoGroup ug(pdoc, (sel.Count() > 1) || !sel.Empty() || inOverstrike);
for (size_t r = 0; r<sel.Count(); r++) {
- if (!RangeContainsProtected(sel.Range(r).Start().Position(),
- sel.Range(r).End().Position())) {
- const Sci::Position positionInsert = sel.Range(r).Start().Position();
- if (!sel.Range(r).Empty()) {
- if (sel.Range(r).Length()) {
- pdoc->DeleteChars(positionInsert, sel.Range(r).Length());
- sel.Range(r).ClearVirtualSpace();
- } else {
- // Range is all virtual so collapse to start of virtual space
- sel.Range(r).MinimizeVirtualSpace();
- }
- }
- RealizeVirtualSpace(positionInsert, sel.Range(r).caret.VirtualSpace());
+ if (!RangeContainsProtected(sel.Range(r))) {
+ ClearSelectionRange(sel.Range(r));
+ RealizeVirtualSpace(sel.Range(r).caret.Position(), sel.Range(r).caret.VirtualSpace());
sel.Range(r).ClearVirtualSpace();
}
}
@@ -2157,18 +2155,9 @@ void Editor::InsertPaste(const char *text, Sci::Position len) {
} else {
// MultiPaste::Each
for (size_t r=0; r<sel.Count(); r++) {
- if (!RangeContainsProtected(sel.Range(r).Start().Position(),
- sel.Range(r).End().Position())) {
+ if (!RangeContainsProtected(sel.Range(r))) {
Sci::Position positionInsert = sel.Range(r).Start().Position();
- if (!sel.Range(r).Empty()) {
- if (sel.Range(r).Length()) {
- pdoc->DeleteChars(positionInsert, sel.Range(r).Length());
- sel.Range(r).ClearVirtualSpace();
- } else {
- // Range is all virtual so collapse to start of virtual space
- sel.Range(r).MinimizeVirtualSpace();
- }
- }
+ ClearSelectionRange(sel.Range(r));
positionInsert = RealizeVirtualSpace(positionInsert, sel.Range(r).caret.VirtualSpace());
const Sci::Position lengthInserted = pdoc->InsertString(positionInsert, text, len);
if (lengthInserted > 0) {
@@ -2214,8 +2203,7 @@ void Editor::ClearSelection(bool retainMultipleSelections) {
UndoGroup ug(pdoc);
for (size_t r=0; r<sel.Count(); r++) {
if (!sel.Range(r).Empty()) {
- if (!RangeContainsProtected(sel.Range(r).Start().Position(),
- sel.Range(r).End().Position())) {
+ if (!RangeContainsProtected(sel.Range(r))) {
pdoc->DeleteChars(sel.Range(r).Start().Position(),
sel.Range(r).Length());
sel.Range(r) = SelectionRange(sel.Range(r).Start());