diff options
author | Neil <nyamatongwe@gmail.com> | 2023-01-19 13:28:57 +1100 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2023-01-19 13:28:57 +1100 |
commit | 66f54388680a2617144e2bd3b4610f431c37fc02 (patch) | |
tree | 1bae29e1f6e25854fe5916782206a960c129a524 /src | |
parent | 6039080cfba2b9344fa9cde2ba5688d2db590d66 (diff) | |
download | scintilla-mirror-66f54388680a2617144e2bd3b4610f431c37fc02.tar.gz |
Feature [feature-requests:#1444] Move GetFoldParent from Document to LineLevels
as better modularity. Add LineLevels::GetFoldLevel for better type safety.
Simplify bounds checks in GetLevel and GetFoldLevel.
Diffstat (limited to 'src')
-rw-r--r-- | src/Document.cxx | 11 | ||||
-rw-r--r-- | src/PerLine.cxx | 23 | ||||
-rw-r--r-- | src/PerLine.h | 2 |
3 files changed, 24 insertions, 12 deletions
diff --git a/src/Document.cxx b/src/Document.cxx index 95777278c..9d1bf1d3b 100644 --- a/src/Document.cxx +++ b/src/Document.cxx @@ -559,7 +559,7 @@ int SCI_METHOD Document::GetLevel(Sci_Position line) const { } FoldLevel Document::GetFoldLevel(Sci_Position line) const noexcept { - return static_cast<FoldLevel>(Levels()->GetLevel(line)); + return Levels()->GetFoldLevel(line); } void Document::ClearLevels() { @@ -598,14 +598,7 @@ Sci::Line Document::GetLastChild(Sci::Line lineParent, std::optional<FoldLevel> } Sci::Line Document::GetFoldParent(Sci::Line line) const noexcept { - const FoldLevel level = LevelNumberPart(GetFoldLevel(line)); - for (Sci::Line lineLook = line - 1; lineLook >= 0; lineLook--) { - const FoldLevel levelTry = GetFoldLevel(lineLook); - if (LevelIsHeader(levelTry) && LevelNumberPart(levelTry) < level) { - return lineLook; - } - } - return -1; + return Levels()->GetFoldParent(line); } void Document::GetHighlightDelimiters(HighlightDelimiter &highlightDelimiter, Sci::Line line, Sci::Line lastLine) { diff --git a/src/PerLine.cxx b/src/PerLine.cxx index 78f7c7dc5..4d76b0b79 100644 --- a/src/PerLine.cxx +++ b/src/PerLine.cxx @@ -264,11 +264,28 @@ int LineLevels::SetLevel(Sci::Line line, int level, Sci::Line lines) { } int LineLevels::GetLevel(Sci::Line line) const noexcept { - if (levels.Length() && (line >= 0) && (line < levels.Length())) { + if ((line >= 0) && (line < levels.Length())) { return levels[line]; - } else { - return static_cast<int>(Scintilla::FoldLevel::Base); } + return static_cast<int>(Scintilla::FoldLevel::Base); +} + +Scintilla::FoldLevel LineLevels::GetFoldLevel(Sci::Line line) const noexcept { + if ((line >= 0) && (line < levels.Length())) { + return static_cast<FoldLevel>(levels[line]); + } + return Scintilla::FoldLevel::Base; +} + +Sci::Line LineLevels::GetFoldParent(Sci::Line line) const noexcept { + const FoldLevel level = LevelNumberPart(GetFoldLevel(line)); + for (Sci::Line lineLook = line - 1; lineLook >= 0; lineLook--) { + const FoldLevel levelTry = GetFoldLevel(lineLook); + if (LevelIsHeader(levelTry) && LevelNumberPart(levelTry) < level) { + return lineLook; + } + } + return -1; } void LineState::Init() { diff --git a/src/PerLine.h b/src/PerLine.h index 5b57dcaa9..27009d5ad 100644 --- a/src/PerLine.h +++ b/src/PerLine.h @@ -75,6 +75,8 @@ public: void ClearLevels(); int SetLevel(Sci::Line line, int level, Sci::Line lines); int GetLevel(Sci::Line line) const noexcept; + FoldLevel GetFoldLevel(Sci::Line line) const noexcept; + Sci::Line GetFoldParent(Sci::Line line) const noexcept; }; class LineState : public PerLine { |