From 35fce59f65c02414af6cf0fcdc698c61ae0f8b47 Mon Sep 17 00:00:00 2001 From: mitchell <70453897+667e-11@users.noreply.github.com> Date: Sun, 18 Feb 2018 10:41:51 -0500 Subject: Backported bugfixes and changes from Scintilla 4.0.2 to 4.0.3. --- src/scintilla_backports/6448_431b814a54a6.patch | 307 ++++++++++++++++++++++++ 1 file changed, 307 insertions(+) create mode 100644 src/scintilla_backports/6448_431b814a54a6.patch (limited to 'src/scintilla_backports/6448_431b814a54a6.patch') diff --git a/src/scintilla_backports/6448_431b814a54a6.patch b/src/scintilla_backports/6448_431b814a54a6.patch new file mode 100644 index 00000000..a0fca282 --- /dev/null +++ b/src/scintilla_backports/6448_431b814a54a6.patch @@ -0,0 +1,307 @@ +# HG changeset patch +# User Neil +# Date 1517542495 -39600 +# Node ID 431b814a54a62d81c8069655bbbebec7bda782e3 +# Parent 44ff2195a2026367e556e7dd9ef83af81a07219e +Implement SC_DOCUMENTOPTION_STYLES_NONE. + +diff -r 44ff2195a202 -r 431b814a54a6 doc/ScintillaDoc.html +--- a/doc/ScintillaDoc.html Fri Feb 02 08:37:32 2018 +1100 ++++ b/doc/ScintillaDoc.html Fri Feb 02 14:34:55 2018 +1100 +@@ -119,7 +119,7 @@ + +

Scintilla Documentation

+ +-

Last edited 31 January 2018 NH

++

Last edited 1 February 2018 NH

+ +

There is an overview of the internal design of + Scintilla.
+@@ -5743,9 +5743,38 @@ + to allocate once rather than rely on the buffer growing as data is added. + If SCI_CREATEDOCUMENT fails then 0 is returned.

+ +-

The documentOption argument may be used in future versions +- to choose between different document capabilities which affect memory allocation and performance. +- The only valid value for now is SC_DOCUMENTOPTION_DEFAULT (0).

++

The documentOption argument ++ chooses between different document capabilities which affect memory allocation and performance with ++ SC_DOCUMENTOPTION_DEFAULT (0) choosing standard options. ++ SC_DOCUMENTOPTION_STYLES_NONE (1) stops allocation of memory to style characters ++ which saves significant memory, often 40% with the whole document treated as being style 0. ++ Lexers may still produce visual styling by using indicators.

++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++
SymbolValueEffect
SC_DOCUMENTOPTION_DEFAULT0Standard behaviour
SC_DOCUMENTOPTION_STYLES_NONE1Stop allocation of memory for styles and treat all text as style 0.
+ +

SCI_ADDREFDOCUMENT(<unused>, document *doc)
+ This increases the reference count of a document by 1. If you want to replace the current +@@ -5788,9 +5817,8 @@ + to allocate once rather than rely on the buffer growing as data is added. + If SCI_CREATELOADER fails then 0 is returned.

+ +-

The documentOption argument may be used in future versions +- to choose between different document capabilities which affect memory allocation and performance. +- The only valid value for now is SC_DOCUMENTOPTION_DEFAULT (0).

++

The documentOption argument ++ is described in the SCI_CREATEDOCUMENT section.

+ +

ILoader

+ +diff -r 44ff2195a202 -r 431b814a54a6 doc/ScintillaHistory.html +--- a/doc/ScintillaHistory.html Fri Feb 02 08:37:32 2018 +1100 ++++ b/doc/ScintillaHistory.html Fri Feb 02 14:34:55 2018 +1100 +@@ -539,6 +539,11 @@ + +
  • + SCI_CREATEDOCUMENT adds a bytes argument to allocate memory for an initial size. ++ SCI_CREATELOADER and SCI_CREATEDOCUMENT add a documentOption argument to ++ allow choosing different document capabilities. ++
  • ++
  • ++ Add SC_DOCUMENTOPTION_STYLES_NONE option to stop allocating memory for styles. +
  • +
  • + Add SCI_GETMOVEEXTENDSSELECTION to allow applications to add more +diff -r 44ff2195a202 -r 431b814a54a6 include/Scintilla.h +--- a/include/Scintilla.h Fri Feb 02 08:37:32 2018 +1100 ++++ b/include/Scintilla.h Fri Feb 02 14:34:55 2018 +1100 +@@ -690,6 +690,7 @@ + #define SCI_SETZOOM 2373 + #define SCI_GETZOOM 2374 + #define SC_DOCUMENTOPTION_DEFAULT 0 ++#define SC_DOCUMENTOPTION_STYLES_NONE 1 + #define SCI_CREATEDOCUMENT 2375 + #define SCI_ADDREFDOCUMENT 2376 + #define SCI_RELEASEDOCUMENT 2377 +diff -r 44ff2195a202 -r 431b814a54a6 include/Scintilla.iface +--- a/include/Scintilla.iface Fri Feb 02 08:37:32 2018 +1100 ++++ b/include/Scintilla.iface Fri Feb 02 14:34:55 2018 +1100 +@@ -1773,6 +1773,7 @@ + + enu DocumentOption=SC_DOCUMENTOPTION_ + val SC_DOCUMENTOPTION_DEFAULT=0 ++val SC_DOCUMENTOPTION_STYLES_NONE=1 + + # Create a new document object. + # Starts with reference count of 1 and not selected into editor. +diff -r 44ff2195a202 -r 431b814a54a6 qt/ScintillaEdit/ScintillaDocument.cpp +--- a/qt/ScintillaEdit/ScintillaDocument.cpp Fri Feb 02 08:37:32 2018 +1100 ++++ b/qt/ScintillaEdit/ScintillaDocument.cpp Fri Feb 02 14:34:55 2018 +1100 +@@ -91,7 +91,7 @@ + ScintillaDocument::ScintillaDocument(QObject *parent, void *pdoc_) : + QObject(parent), pdoc(pdoc_), docWatcher(0) { + if (!pdoc) { +- pdoc = new Document(); ++ pdoc = new Document(SC_DOCUMENTOPTION_DEFAULT); + } + docWatcher = new WatcherHelper(this); + (static_cast(pdoc))->AddRef(); +diff -r 44ff2195a202 -r 431b814a54a6 src/CellBuffer.cxx +--- a/src/CellBuffer.cxx Fri Feb 02 08:37:32 2018 +1100 ++++ b/src/CellBuffer.cxx Fri Feb 02 14:34:55 2018 +1100 +@@ -342,7 +342,8 @@ + currentAction++; + } + +-CellBuffer::CellBuffer() { ++CellBuffer::CellBuffer(bool hasStyles_) : ++ hasStyles(hasStyles_) { + readOnly = false; + utf8LineEnds = 0; + collectingUndo = true; +@@ -369,7 +370,7 @@ + } + + char CellBuffer::StyleAt(Sci::Position position) const { +- return style.ValueAt(position); ++ return hasStyles ? style.ValueAt(position) : 0; + } + + void CellBuffer::GetStyleRange(unsigned char *buffer, Sci::Position position, Sci::Position lengthRetrieve) const { +@@ -377,6 +378,10 @@ + return; + if (position < 0) + return; ++ if (!hasStyles) { ++ std::fill(buffer, buffer + lengthRetrieve, static_cast(0)); ++ return; ++ } + if ((position + lengthRetrieve) > style.Length()) { + Platform::DebugPrintf("Bad GetStyleRange %d for %d of %d\n", position, + lengthRetrieve, style.Length()); +@@ -414,6 +419,9 @@ + } + + bool CellBuffer::SetStyleAt(Sci::Position position, char styleValue) { ++ if (!hasStyles) { ++ return false; ++ } + const char curVal = style.ValueAt(position); + if (curVal != styleValue) { + style.SetValueAt(position, styleValue); +@@ -424,6 +432,9 @@ + } + + bool CellBuffer::SetStyleFor(Sci::Position position, Sci::Position lengthStyle, char styleValue) { ++ if (!hasStyles) { ++ return false; ++ } + bool changed = false; + PLATFORM_ASSERT(lengthStyle == 0 || + (lengthStyle > 0 && lengthStyle + position <= style.Length())); +@@ -462,7 +473,9 @@ + + void CellBuffer::Allocate(Sci::Position newSize) { + substance.ReAllocate(newSize); +- style.ReAllocate(newSize); ++ if (hasStyles) { ++ style.ReAllocate(newSize); ++ } + } + + void CellBuffer::SetLineEndTypes(int utf8LineEnds_) { +@@ -608,7 +621,9 @@ + } + + substance.InsertFromArray(position, s, 0, insertLength); +- style.InsertValue(position, insertLength, 0); ++ if (hasStyles) { ++ style.InsertValue(position, insertLength, 0); ++ } + + Sci::Line lineInsert = lv.LineFromPosition(position) + 1; + bool atLineStart = lv.LineStart(lineInsert-1) == position; +@@ -738,7 +753,9 @@ + } + } + substance.DeleteRange(position, deleteLength); +- style.DeleteRange(position, deleteLength); ++ if (hasStyles) { ++ style.DeleteRange(position, deleteLength); ++ } + } + + bool CellBuffer::SetUndoCollection(bool collectUndo) { +diff -r 44ff2195a202 -r 431b814a54a6 src/CellBuffer.h +--- a/src/CellBuffer.h Fri Feb 02 08:37:32 2018 +1100 ++++ b/src/CellBuffer.h Fri Feb 02 14:34:55 2018 +1100 +@@ -133,6 +133,7 @@ + */ + class CellBuffer { + private: ++ bool hasStyles; + SplitVector substance; + SplitVector style; + bool readOnly; +@@ -151,7 +152,7 @@ + + public: + +- CellBuffer(); ++ CellBuffer(bool hasStyles_); + ~CellBuffer(); + + /// Retrieving positions outside the range of the buffer works and returns 0 +diff -r 44ff2195a202 -r 431b814a54a6 src/Document.cxx +--- a/src/Document.cxx Fri Feb 02 08:37:32 2018 +1100 ++++ b/src/Document.cxx Fri Feb 02 14:34:55 2018 +1100 +@@ -90,7 +90,8 @@ + return 0; + } + +-Document::Document() { ++Document::Document(int options) : ++ cb((options & SC_DOCUMENTOPTION_STYLES_NONE) == 0) { + refCount = 0; + #ifdef _WIN32 + eolMode = SC_EOL_CRLF; +diff -r 44ff2195a202 -r 431b814a54a6 src/Document.h +--- a/src/Document.h Fri Feb 02 08:37:32 2018 +1100 ++++ b/src/Document.h Fri Feb 02 14:34:55 2018 +1100 +@@ -265,7 +265,7 @@ + + DecorationList decorations; + +- Document(); ++ Document(int options); + virtual ~Document(); + + int AddRef(); +diff -r 44ff2195a202 -r 431b814a54a6 src/EditModel.cxx +--- a/src/EditModel.cxx Fri Feb 02 08:37:32 2018 +1100 ++++ b/src/EditModel.cxx Fri Feb 02 14:34:55 2018 +1100 +@@ -69,7 +69,7 @@ + hotspot = Range(Sci::invalidPosition); + hoverIndicatorPos = Sci::invalidPosition; + wrapWidth = LineLayout::wrapWidthInfinite; +- pdoc = new Document(); ++ pdoc = new Document(SC_DOCUMENTOPTION_DEFAULT); + pdoc->AddRef(); + } + +diff -r 44ff2195a202 -r 431b814a54a6 src/Editor.cxx +--- a/src/Editor.cxx Fri Feb 02 08:37:32 2018 +1100 ++++ b/src/Editor.cxx Fri Feb 02 14:34:55 2018 +1100 +@@ -5162,7 +5162,7 @@ + pdoc->RemoveWatcher(this, 0); + pdoc->Release(); + if (document == NULL) { +- pdoc = new Document(); ++ pdoc = new Document(SC_DOCUMENTOPTION_DEFAULT); + } else { + pdoc = document; + } +@@ -7554,7 +7554,7 @@ + return 0; + + case SCI_CREATEDOCUMENT: { +- Document *doc = new Document(); ++ Document *doc = new Document(static_cast(lParam)); + doc->AddRef(); + doc->Allocate(static_cast(wParam)); + return reinterpret_cast(doc); +@@ -7569,7 +7569,7 @@ + break; + + case SCI_CREATELOADER: { +- Document *doc = new Document(); ++ Document *doc = new Document(static_cast(lParam)); + doc->AddRef(); + doc->Allocate(static_cast(wParam)); + doc->SetUndoCollection(false); +diff -r 44ff2195a202 -r 431b814a54a6 test/unit/testCellBuffer.cxx +--- a/test/unit/testCellBuffer.cxx Fri Feb 02 08:37:32 2018 +1100 ++++ b/test/unit/testCellBuffer.cxx Fri Feb 02 14:34:55 2018 +1100 +@@ -25,7 +25,7 @@ + const char sText[] = "Scintilla"; + const Sci::Position sLength = static_cast(strlen(sText)); + +- CellBuffer cb; ++ CellBuffer cb(true); + + SECTION("InsertOneLine") { + bool startSequence = false; -- cgit v1.2.3