aboutsummaryrefslogtreecommitdiff
path: root/src/scintilla_backports/6444_1bd57324aa36.patch
diff options
context:
space:
mode:
authormitchell <70453897+667e-11@users.noreply.github.com>2018-02-18 10:41:51 -0500
committermitchell <70453897+667e-11@users.noreply.github.com>2018-02-18 10:41:51 -0500
commit35fce59f65c02414af6cf0fcdc698c61ae0f8b47 (patch)
treeafe62ffd9e801d96a6c4b0bfe15cdbd8ae8f0043 /src/scintilla_backports/6444_1bd57324aa36.patch
parentb058704586be68bf208c783787edc4573db89ace (diff)
downloadtextadept-35fce59f65c02414af6cf0fcdc698c61ae0f8b47.tar.gz
textadept-35fce59f65c02414af6cf0fcdc698c61ae0f8b47.zip
Backported bugfixes and changes from Scintilla 4.0.2 to 4.0.3.
Diffstat (limited to 'src/scintilla_backports/6444_1bd57324aa36.patch')
-rw-r--r--src/scintilla_backports/6444_1bd57324aa36.patch279
1 files changed, 279 insertions, 0 deletions
diff --git a/src/scintilla_backports/6444_1bd57324aa36.patch b/src/scintilla_backports/6444_1bd57324aa36.patch
new file mode 100644
index 00000000..93552ba4
--- /dev/null
+++ b/src/scintilla_backports/6444_1bd57324aa36.patch
@@ -0,0 +1,279 @@
+# HG changeset patch
+# User Neil <nyamatongwe@gmail.com>
+# Date 1517436441 -39600
+# Node ID 1bd57324aa36e3fce1ed8a2371001b062322884b
+# Parent ab4efcbfdae68d1ec053db212edb1440326a7f1c
+Templatize Partitioning so it can hold different types.
+
+diff -r ab4efcbfdae6 -r 1bd57324aa36 src/CellBuffer.h
+--- a/src/CellBuffer.h Wed Jan 31 17:08:48 2018 +1100
++++ b/src/CellBuffer.h Thu Feb 01 09:07:21 2018 +1100
+@@ -24,7 +24,7 @@
+ */
+ class LineVector {
+
+- Partitioning starts;
++ Partitioning<int> starts;
+ PerLine *perLine;
+
+ public:
+diff -r ab4efcbfdae6 -r 1bd57324aa36 src/ContractionState.cxx
+--- a/src/ContractionState.cxx Wed Jan 31 17:08:48 2018 +1100
++++ b/src/ContractionState.cxx Thu Feb 01 09:07:21 2018 +1100
+@@ -39,7 +39,7 @@
+ expanded = new RunStyles();
+ heights = new RunStyles();
+ foldDisplayTexts = new SparseVector<const char *>();
+- displayLines = new Partitioning(4);
++ displayLines = new Partitioning<int>(4);
+ InsertLines(0, linesInDocument);
+ }
+ }
+diff -r ab4efcbfdae6 -r 1bd57324aa36 src/ContractionState.h
+--- a/src/ContractionState.h Wed Jan 31 17:08:48 2018 +1100
++++ b/src/ContractionState.h Thu Feb 01 09:07:21 2018 +1100
+@@ -21,7 +21,7 @@
+ RunStyles *expanded;
+ RunStyles *heights;
+ SparseVector<const char *> *foldDisplayTexts;
+- Partitioning *displayLines;
++ Partitioning<int> *displayLines;
+ Sci::Line linesInDocument;
+
+ void EnsureData();
+diff -r ab4efcbfdae6 -r 1bd57324aa36 src/Partitioning.h
+--- a/src/Partitioning.h Wed Jan 31 17:08:48 2018 +1100
++++ b/src/Partitioning.h Thu Feb 01 09:07:21 2018 +1100
+@@ -14,29 +14,30 @@
+ /// in a range.
+ /// Used by the Partitioning class.
+
+-class SplitVectorWithRangeAdd : public SplitVector<int> {
++template <typename T>
++class SplitVectorWithRangeAdd : public SplitVector<T> {
+ public:
+ explicit SplitVectorWithRangeAdd(ptrdiff_t growSize_) {
+- SetGrowSize(growSize_);
+- ReAllocate(growSize_);
++ this->SetGrowSize(growSize_);
++ this->ReAllocate(growSize_);
+ }
+ ~SplitVectorWithRangeAdd() {
+ }
+- void RangeAddDelta(ptrdiff_t start, ptrdiff_t end, int delta) {
++ void RangeAddDelta(ptrdiff_t start, ptrdiff_t end, T delta) {
+ // end is 1 past end, so end-start is number of elements to change
+ ptrdiff_t i = 0;
+ const ptrdiff_t rangeLength = end - start;
+ ptrdiff_t range1Length = rangeLength;
+- const ptrdiff_t part1Left = part1Length - start;
++ const ptrdiff_t part1Left = this->part1Length - start;
+ if (range1Length > part1Left)
+ range1Length = part1Left;
+ while (i < range1Length) {
+- body[start++] += delta;
++ this->body[start++] += delta;
+ i++;
+ }
+- start += gapLength;
++ start += this->gapLength;
+ while (i < rangeLength) {
+- body[start++] += delta;
++ this->body[start++] += delta;
+ i++;
+ }
+ }
+@@ -52,16 +53,17 @@
+ /// When needed, positions after the interval are considered part of the last partition
+ /// but the end of the last partition can be found with PositionFromPartition(last+1).
+
++template <typename T>
+ class Partitioning {
+ private:
+ // To avoid calculating all the partition positions whenever any text is inserted
+ // there may be a step somewhere in the list.
+- int stepPartition;
+- int stepLength;
+- SplitVectorWithRangeAdd *body;
++ T stepPartition;
++ T stepLength;
++ SplitVectorWithRangeAdd<T> *body;
+
+ // Move step forward
+- void ApplyStep(int partitionUpTo) {
++ void ApplyStep(T partitionUpTo) {
+ if (stepLength != 0) {
+ body->RangeAddDelta(stepPartition+1, partitionUpTo + 1, stepLength);
+ }
+@@ -73,7 +75,7 @@
+ }
+
+ // Move step backward
+- void BackStep(int partitionDownTo) {
++ void BackStep(T partitionDownTo) {
+ if (stepLength != 0) {
+ body->RangeAddDelta(partitionDownTo+1, stepPartition+1, -stepLength);
+ }
+@@ -81,7 +83,7 @@
+ }
+
+ void Allocate(ptrdiff_t growSize) {
+- body = new SplitVectorWithRangeAdd(growSize);
++ body = new SplitVectorWithRangeAdd<T>(growSize);
+ stepPartition = 0;
+ stepLength = 0;
+ body->Insert(0, 0); // This value stays 0 for ever
+@@ -100,11 +102,11 @@
+ ~Partitioning() {
+ }
+
+- int Partitions() const {
+- return static_cast<int>(body->Length()-1);
++ T Partitions() const {
++ return static_cast<T>(body->Length())-1;
+ }
+
+- void InsertPartition(int partition, int pos) {
++ void InsertPartition(T partition, T pos) {
+ if (stepPartition < partition) {
+ ApplyStep(partition);
+ }
+@@ -112,7 +114,7 @@
+ stepPartition++;
+ }
+
+- void SetPartitionStartPosition(int partition, int pos) {
++ void SetPartitionStartPosition(T partition, T pos) {
+ ApplyStep(partition+1);
+ if ((partition < 0) || (partition > body->Length())) {
+ return;
+@@ -120,7 +122,7 @@
+ body->SetValueAt(partition, pos);
+ }
+
+- void InsertText(int partitionInsert, int delta) {
++ void InsertText(T partitionInsert, T delta) {
+ // Point all the partitions after the insertion point further along in the buffer
+ if (stepLength != 0) {
+ if (partitionInsert >= stepPartition) {
+@@ -142,7 +144,7 @@
+ }
+ }
+
+- void RemovePartition(int partition) {
++ void RemovePartition(T partition) {
+ if (partition > stepPartition) {
+ ApplyStep(partition);
+ stepPartition--;
+@@ -152,29 +154,29 @@
+ body->Delete(partition);
+ }
+
+- int PositionFromPartition(int partition) const {
++ T PositionFromPartition(T partition) const {
+ PLATFORM_ASSERT(partition >= 0);
+ PLATFORM_ASSERT(partition < body->Length());
+ if ((partition < 0) || (partition >= body->Length())) {
+ return 0;
+ }
+- int pos = body->ValueAt(partition);
++ T pos = body->ValueAt(partition);
+ if (partition > stepPartition)
+ pos += stepLength;
+ return pos;
+ }
+
+ /// Return value in range [0 .. Partitions() - 1] even for arguments outside interval
+- int PartitionFromPosition(int pos) const {
++ T PartitionFromPosition(T pos) const {
+ if (body->Length() <= 1)
+ return 0;
+ if (pos >= (PositionFromPartition(Partitions())))
+ return Partitions() - 1;
+- int lower = 0;
+- int upper = Partitions();
++ T lower = 0;
++ T upper = Partitions();
+ do {
+- const int middle = (upper + lower + 1) / 2; // Round high
+- int posMiddle = body->ValueAt(middle);
++ const T middle = (upper + lower + 1) / 2; // Round high
++ T posMiddle = body->ValueAt(middle);
+ if (middle > stepPartition)
+ posMiddle += stepLength;
+ if (pos < posMiddle) {
+diff -r ab4efcbfdae6 -r 1bd57324aa36 src/RunStyles.cxx
+--- a/src/RunStyles.cxx Wed Jan 31 17:08:48 2018 +1100
++++ b/src/RunStyles.cxx Thu Feb 01 09:07:21 2018 +1100
+@@ -70,7 +70,7 @@
+ }
+
+ RunStyles::RunStyles() {
+- starts = new Partitioning(8);
++ starts = new Partitioning<int>(8);
+ styles = new SplitVector<int>();
+ styles->InsertValue(0, 2, 0);
+ }
+@@ -204,7 +204,7 @@
+ starts = NULL;
+ delete styles;
+ styles = NULL;
+- starts = new Partitioning(8);
++ starts = new Partitioning<int>(8);
+ styles = new SplitVector<int>();
+ styles->InsertValue(0, 2, 0);
+ }
+diff -r ab4efcbfdae6 -r 1bd57324aa36 src/RunStyles.h
+--- a/src/RunStyles.h Wed Jan 31 17:08:48 2018 +1100
++++ b/src/RunStyles.h Thu Feb 01 09:07:21 2018 +1100
+@@ -14,7 +14,7 @@
+
+ class RunStyles {
+ private:
+- Partitioning *starts;
++ Partitioning<int> *starts;
+ SplitVector<int> *styles;
+ int RunFromPosition(int position) const;
+ int SplitRun(int position);
+diff -r ab4efcbfdae6 -r 1bd57324aa36 src/SparseVector.h
+--- a/src/SparseVector.h Wed Jan 31 17:08:48 2018 +1100
++++ b/src/SparseVector.h Thu Feb 01 09:07:21 2018 +1100
+@@ -15,7 +15,7 @@
+ template <typename T>
+ class SparseVector {
+ private:
+- Partitioning *starts;
++ Partitioning<int> *starts;
+ SplitVector<T> *values;
+ // Private so SparseVector objects can not be copied
+ SparseVector(const SparseVector &);
+@@ -26,7 +26,7 @@
+ }
+ public:
+ SparseVector() {
+- starts = new Partitioning(8);
++ starts = new Partitioning<int>(8);
+ values = new SplitVector<T>();
+ values->InsertValue(0, 2, T());
+ }
+diff -r ab4efcbfdae6 -r 1bd57324aa36 test/unit/testPartitioning.cxx
+--- a/test/unit/testPartitioning.cxx Wed Jan 31 17:08:48 2018 +1100
++++ b/test/unit/testPartitioning.cxx Thu Feb 01 09:07:21 2018 +1100
+@@ -26,7 +26,7 @@
+
+ TEST_CASE("SplitVectorWithRangeAdd") {
+
+- SplitVectorWithRangeAdd svwra(growSize);
++ SplitVectorWithRangeAdd<int> svwra(growSize);
+
+ SECTION("IsEmptyInitially") {
+ REQUIRE(0 == svwra.Length());
+@@ -49,7 +49,7 @@
+
+ TEST_CASE("Partitioning") {
+
+- Partitioning part(growSize);
++ Partitioning<int> part(growSize);
+
+ SECTION("IsEmptyInitially") {
+ REQUIRE(1 == part.Partitions());