diff options
author | Neil <nyamatongwe@gmail.com> | 2018-02-02 14:34:55 +1100 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2018-02-02 14:34:55 +1100 |
commit | 3f1c1f5fe73d9fe48af8ffc2f0dbf2107d65cf52 (patch) | |
tree | 2f662f0da33a58e1e9700b358ab695c3c04b7465 /src | |
parent | cc13723d8f558fb7c48f3f4ed1bb107f35b95397 (diff) | |
download | scintilla-mirror-3f1c1f5fe73d9fe48af8ffc2f0dbf2107d65cf52.tar.gz |
Implement SC_DOCUMENTOPTION_STYLES_NONE.
Diffstat (limited to 'src')
-rw-r--r-- | src/CellBuffer.cxx | 27 | ||||
-rw-r--r-- | src/CellBuffer.h | 3 | ||||
-rw-r--r-- | src/Document.cxx | 3 | ||||
-rw-r--r-- | src/Document.h | 2 | ||||
-rw-r--r-- | src/EditModel.cxx | 2 | ||||
-rw-r--r-- | src/Editor.cxx | 6 |
6 files changed, 31 insertions, 12 deletions
diff --git a/src/CellBuffer.cxx b/src/CellBuffer.cxx index 1884a497a..513c9a9b8 100644 --- a/src/CellBuffer.cxx +++ b/src/CellBuffer.cxx @@ -342,7 +342,8 @@ void UndoHistory::CompletedRedoStep() { currentAction++; } -CellBuffer::CellBuffer() { +CellBuffer::CellBuffer(bool hasStyles_) : + hasStyles(hasStyles_) { readOnly = false; utf8LineEnds = 0; collectingUndo = true; @@ -369,7 +370,7 @@ void CellBuffer::GetCharRange(char *buffer, Sci::Position position, Sci::Positio } 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 @@ void CellBuffer::GetStyleRange(unsigned char *buffer, Sci::Position position, Sc 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 @@ const char *CellBuffer::InsertString(Sci::Position position, const char *s, Sci: } 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::SetStyleAt(Sci::Position position, char styleValue) { } 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 @@ Sci::Position CellBuffer::Length() const { 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 @@ void CellBuffer::BasicInsertString(Sci::Position position, const char *s, Sci::P } 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 @@ void CellBuffer::BasicDeleteChars(Sci::Position position, Sci::Position deleteLe } } substance.DeleteRange(position, deleteLength); - style.DeleteRange(position, deleteLength); + if (hasStyles) { + style.DeleteRange(position, deleteLength); + } } bool CellBuffer::SetUndoCollection(bool collectUndo) { diff --git a/src/CellBuffer.h b/src/CellBuffer.h index a12dc207f..7c999a36e 100644 --- a/src/CellBuffer.h +++ b/src/CellBuffer.h @@ -133,6 +133,7 @@ public: */ class CellBuffer { private: + bool hasStyles; SplitVector<char> substance; SplitVector<char> style; bool readOnly; @@ -151,7 +152,7 @@ private: public: - CellBuffer(); + CellBuffer(bool hasStyles_); // Deleted so CellBuffer objects can not be copied. CellBuffer(const CellBuffer &) = delete; void operator=(const CellBuffer &) = delete; diff --git a/src/Document.cxx b/src/Document.cxx index 55ddc7588..a6f408f3e 100644 --- a/src/Document.cxx +++ b/src/Document.cxx @@ -90,7 +90,8 @@ int LexInterface::LineEndTypesSupported() { return 0; } -Document::Document() { +Document::Document(int options) : + cb((options & SC_DOCUMENTOPTION_STYLES_NONE) == 0) { refCount = 0; #ifdef _WIN32 eolMode = SC_EOL_CRLF; diff --git a/src/Document.h b/src/Document.h index 9f22f154a..bd956ccbf 100644 --- a/src/Document.h +++ b/src/Document.h @@ -265,7 +265,7 @@ public: DecorationList decorations; - Document(); + Document(int options); // Deleted so Document objects can not be copied. Document(const Document &) = delete; void operator=(const Document &) = delete; diff --git a/src/EditModel.cxx b/src/EditModel.cxx index 0e00bcfe0..08888ba38 100644 --- a/src/EditModel.cxx +++ b/src/EditModel.cxx @@ -69,7 +69,7 @@ EditModel::EditModel() { hotspot = Range(Sci::invalidPosition); hoverIndicatorPos = Sci::invalidPosition; wrapWidth = LineLayout::wrapWidthInfinite; - pdoc = new Document(); + pdoc = new Document(SC_DOCUMENTOPTION_DEFAULT); pdoc->AddRef(); } diff --git a/src/Editor.cxx b/src/Editor.cxx index 84ae3e318..b6e572c24 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -5162,7 +5162,7 @@ void Editor::SetDocPointer(Document *document) { 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 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { 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 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { 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); |