aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CellBuffer.cxx31
-rw-r--r--src/CellBuffer.h4
-rw-r--r--src/Document.cxx1
-rw-r--r--src/DocumentAccessor.cxx1
-rw-r--r--src/Editor.cxx2
-rw-r--r--src/PositionCache.cxx1
-rw-r--r--src/ScintillaBase.cxx1
-rw-r--r--src/SplitVector.h8
8 files changed, 35 insertions, 14 deletions
diff --git a/src/CellBuffer.cxx b/src/CellBuffer.cxx
index 157c91bdc..1beeefc6b 100644
--- a/src/CellBuffer.cxx
+++ b/src/CellBuffer.cxx
@@ -13,7 +13,6 @@
#include "Platform.h"
#include "Scintilla.h"
-#include "SVector.h"
#include "SplitVector.h"
#include "Partitioning.h"
#include "CellBuffer.h"
@@ -726,6 +725,20 @@ int CellBuffer::LineFromHandle(int markerHandle) {
// Without undo
+void CellBuffer::InsertLine(int line, int position) {
+ lv.InsertLine(line, position);
+ if (lineStates.Length()) {
+ lineStates.Insert(line, 0);
+ }
+}
+
+void CellBuffer::RemoveLine(int line) {
+ lv.RemoveLine(line);
+ if (lineStates.Length()) {
+ lineStates.Delete(line);
+ }
+}
+
void CellBuffer::BasicInsertString(int position, const char *s, int insertLength) {
if (insertLength == 0)
return;
@@ -741,21 +754,21 @@ void CellBuffer::BasicInsertString(int position, const char *s, int insertLength
char chAfter = substance.ValueAt(position + insertLength);
if (chPrev == '\r' && chAfter == '\n') {
// Splitting up a crlf pair at position
- lv.InsertLine(lineInsert, position);
+ InsertLine(lineInsert, position);
lineInsert++;
}
char ch = ' ';
for (int i = 0; i < insertLength; i++) {
ch = s[i];
if (ch == '\r') {
- lv.InsertLine(lineInsert, (position + i) + 1);
+ InsertLine(lineInsert, (position + i) + 1);
lineInsert++;
} else if (ch == '\n') {
if (chPrev == '\r') {
// Patch up what was end of line
lv.SetLineStart(lineInsert - 1, (position + i) + 1);
} else {
- lv.InsertLine(lineInsert, (position + i) + 1);
+ InsertLine(lineInsert, (position + i) + 1);
lineInsert++;
}
}
@@ -765,7 +778,7 @@ void CellBuffer::BasicInsertString(int position, const char *s, int insertLength
if (chAfter == '\n') {
if (ch == '\r') {
// End of line already in buffer so drop the newly created one
- lv.RemoveLine(lineInsert - 1);
+ RemoveLine(lineInsert - 1);
}
}
}
@@ -800,13 +813,13 @@ void CellBuffer::BasicDeleteChars(int position, int deleteLength) {
chNext = substance.ValueAt(position + i + 1);
if (ch == '\r') {
if (chNext != '\n') {
- lv.RemoveLine(lineRemove);
+ RemoveLine(lineRemove);
}
} else if (ch == '\n') {
if (ignoreNL) {
ignoreNL = false; // Further \n are real deletions
} else {
- lv.RemoveLine(lineRemove);
+ RemoveLine(lineRemove);
}
}
@@ -817,7 +830,7 @@ void CellBuffer::BasicDeleteChars(int position, int deleteLength) {
char chAfter = substance.ValueAt(position + deleteLength);
if (chBefore == '\r' && chAfter == '\n') {
// Using lineRemove-1 as cr ended line before start of deletion
- lv.RemoveLine(lineRemove - 1);
+ RemoveLine(lineRemove - 1);
lv.SetLineStart(lineRemove - 1, position + 1);
}
}
@@ -892,12 +905,14 @@ void CellBuffer::PerformRedoStep() {
}
int CellBuffer::SetLineState(int line, int state) {
+ lineStates.EnsureLength(line + 1);
int stateOld = lineStates[line];
lineStates[line] = state;
return stateOld;
}
int CellBuffer::GetLineState(int line) {
+ lineStates.EnsureLength(line + 1);
return lineStates[line];
}
diff --git a/src/CellBuffer.h b/src/CellBuffer.h
index c51eab78d..4f654a8fd 100644
--- a/src/CellBuffer.h
+++ b/src/CellBuffer.h
@@ -160,7 +160,7 @@ private:
LineVector lv;
- SVector lineStates;
+ SplitVector<int> lineStates;
public:
@@ -177,6 +177,8 @@ public:
int Lines() const;
int LineStart(int line) const;
int LineFromPosition(int pos) { return lv.LineFromPosition(pos); }
+ void InsertLine(int line, int position);
+ void RemoveLine(int line);
const char *InsertString(int position, const char *s, int insertLength, bool &startSequence);
/// Setting styles for positions outside the range of the buffer is safe and has no effect.
diff --git a/src/Document.cxx b/src/Document.cxx
index db9949edc..e2ca7a32a 100644
--- a/src/Document.cxx
+++ b/src/Document.cxx
@@ -13,7 +13,6 @@
#include "Platform.h"
#include "Scintilla.h"
-#include "SVector.h"
#include "SplitVector.h"
#include "Partitioning.h"
#include "RunStyles.h"
diff --git a/src/DocumentAccessor.cxx b/src/DocumentAccessor.cxx
index b46eeba85..a25979dc2 100644
--- a/src/DocumentAccessor.cxx
+++ b/src/DocumentAccessor.cxx
@@ -13,7 +13,6 @@
#include "Platform.h"
#include "PropSet.h"
-#include "SVector.h"
#include "Accessor.h"
#include "DocumentAccessor.h"
#include "SplitVector.h"
diff --git a/src/Editor.cxx b/src/Editor.cxx
index 4d10b6272..8f334d534 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -21,7 +21,6 @@
#include "Partitioning.h"
#include "RunStyles.h"
#include "ContractionState.h"
-#include "SVector.h"
#include "CellBuffer.h"
#include "KeyMap.h"
#include "Indicator.h"
@@ -4110,6 +4109,7 @@ void Editor::NewLine() {
}
}
SetLastXChosen();
+ SetScrollBars();
EnsureCaretVisible();
// Avoid blinking during rapid typing:
ShowCaretAtCurrentPosition();
diff --git a/src/PositionCache.cxx b/src/PositionCache.cxx
index 8e30f5922..5bdafc27e 100644
--- a/src/PositionCache.cxx
+++ b/src/PositionCache.cxx
@@ -18,7 +18,6 @@
#include "Partitioning.h"
#include "RunStyles.h"
#include "ContractionState.h"
-#include "SVector.h"
#include "CellBuffer.h"
#include "KeyMap.h"
#include "Indicator.h"
diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx
index d72f86bc3..60d9c70fc 100644
--- a/src/ScintillaBase.cxx
+++ b/src/ScintillaBase.cxx
@@ -24,7 +24,6 @@
#include "Partitioning.h"
#include "RunStyles.h"
#include "ContractionState.h"
-#include "SVector.h"
#include "CellBuffer.h"
#include "CallTip.h"
#include "KeyMap.h"
diff --git a/src/SplitVector.h b/src/SplitVector.h
index 342be02ad..9d62aef72 100644
--- a/src/SplitVector.h
+++ b/src/SplitVector.h
@@ -181,6 +181,14 @@ public:
gapLength -= insertLength;
}
}
+
+ /// Ensure at least length elements allocated,
+ /// appending zero valued elements if needed.
+ void EnsureLength(int wantedLength) {
+ if (Length() < wantedLength) {
+ InsertValue(Length(), wantedLength - Length(), 0);
+ }
+ }
/// Insert text into the buffer from an array.
void InsertFromArray(int positionToInsert, const T s[], int positionFrom, int insertLength) {