aboutsummaryrefslogtreecommitdiff
path: root/src/scintilla_backports/6448_431b814a54a6.patch
diff options
context:
space:
mode:
Diffstat (limited to 'src/scintilla_backports/6448_431b814a54a6.patch')
-rw-r--r--src/scintilla_backports/6448_431b814a54a6.patch307
1 files changed, 307 insertions, 0 deletions
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 <nyamatongwe@gmail.com>
+# 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 @@
+
+ <h1>Scintilla Documentation</h1>
+
+- <p>Last edited 31 January 2018 NH</p>
++ <p>Last edited 1 February 2018 NH</p>
+
+ <p>There is <a class="jump" href="Design.html">an overview of the internal design of
+ Scintilla</a>.<br />
+@@ -5743,9 +5743,38 @@
+ to allocate once rather than rely on the buffer growing as data is added.
+ If <code>SCI_CREATEDOCUMENT</code> fails then 0 is returned.</p>
+
+- <p>The <code class="parameter">documentOption</code> 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 <code>SC_DOCUMENTOPTION_DEFAULT</code> (0).</p>
++ <p id="documentOption">The <code class="parameter">documentOption</code> argument
++ chooses between different document capabilities which affect memory allocation and performance with
++ <code>SC_DOCUMENTOPTION_DEFAULT</code> (0) choosing standard options.
++ <code>SC_DOCUMENTOPTION_STYLES_NONE</code> (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.</p>
++
++ <table class="standard" summary="Document options">
++ <tbody>
++ <tr>
++ <th align="left">Symbol</th>
++ <th align="left">Value</th>
++ <th align="left">Effect</th>
++ </tr>
++ </tbody>
++
++ <tbody valign="top">
++
++ <tr>
++ <td align="left">SC_DOCUMENTOPTION_DEFAULT</td>
++ <td align="left">0</td>
++ <td align="left">Standard behaviour</td>
++ </tr>
++
++ <tr>
++ <td align="left">SC_DOCUMENTOPTION_STYLES_NONE</td>
++ <td align="left">1</td>
++ <td align="left">Stop allocation of memory for styles and treat all text as style 0.</td>
++ </tr>
++
++ </tbody>
++ </table>
+
+ <p><b id="SCI_ADDREFDOCUMENT">SCI_ADDREFDOCUMENT(&lt;unused&gt;, document *doc)</b><br />
+ 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 <code>SCI_CREATELOADER</code> fails then 0 is returned.</p>
+
+- <p>The <code class="parameter">documentOption</code> 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 <code>SC_DOCUMENTOPTION_DEFAULT</code> (0).</p>
++ <p>The <code class="parameter">documentOption</code> argument
++ is described in the <a class="seealso" href="#documentOption"><code>SCI_CREATEDOCUMENT</code></a> section.</p>
+
+ <h4>ILoader</h4>
+
+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 @@
+ </li>
+ <li>
+ 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.
++ </li>
++ <li>
++ Add SC_DOCUMENTOPTION_STYLES_NONE option to stop allocating memory for styles.
+ </li>
+ <li>
+ 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<Document *>(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<unsigned char>(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<char> substance;
+ SplitVector<char> 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<int>(lParam));
+ doc->AddRef();
+ doc->Allocate(static_cast<int>(wParam));
+ return reinterpret_cast<sptr_t>(doc);
+@@ -7569,7 +7569,7 @@
+ break;
+
+ case SCI_CREATELOADER: {
+- Document *doc = new Document();
++ Document *doc = new Document(static_cast<int>(lParam));
+ doc->AddRef();
+ doc->Allocate(static_cast<int>(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<Sci::Position>(strlen(sText));
+
+- CellBuffer cb;
++ CellBuffer cb(true);
+
+ SECTION("InsertOneLine") {
+ bool startSequence = false;