aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/Document.cxx22
-rw-r--r--src/Document.h8
-rw-r--r--src/EditView.cxx4
-rw-r--r--src/Editor.cxx28
-rw-r--r--src/MarginView.cxx20
5 files changed, 45 insertions, 37 deletions
diff --git a/src/Document.cxx b/src/Document.cxx
index acb9f14bd..fbe407515 100644
--- a/src/Document.cxx
+++ b/src/Document.cxx
@@ -513,7 +513,7 @@ void Document::ClearLevels() {
}
static bool IsSubordinate(int levelStart, int levelTry) noexcept {
- if (levelTry & SC_FOLDLEVELWHITEFLAG)
+ if (LevelIsWhitespace(levelTry))
return true;
else
return LevelNumber(levelStart) < LevelNumber(levelTry);
@@ -529,14 +529,14 @@ Sci::Line Document::GetLastChild(Sci::Line lineParent, int level, Sci::Line last
EnsureStyledTo(LineStart(lineMaxSubord + 2));
if (!IsSubordinate(level, GetLevel(lineMaxSubord + 1)))
break;
- if ((lookLastLine != -1) && (lineMaxSubord >= lookLastLine) && !(GetLevel(lineMaxSubord) & SC_FOLDLEVELWHITEFLAG))
+ if ((lookLastLine != -1) && (lineMaxSubord >= lookLastLine) && !LevelIsWhitespace(GetLevel(lineMaxSubord)))
break;
lineMaxSubord++;
}
if (lineMaxSubord > lineParent) {
if (level > LevelNumber(GetLevel(lineMaxSubord + 1))) {
// Have chewed up some whitespace that belongs to a parent so seek back
- if (GetLevel(lineMaxSubord) & SC_FOLDLEVELWHITEFLAG) {
+ if (LevelIsWhitespace(GetLevel(lineMaxSubord))) {
lineMaxSubord--;
}
}
@@ -548,12 +548,12 @@ Sci::Line Document::GetFoldParent(Sci::Line line) const {
const int level = LevelNumber(GetLevel(line));
Sci::Line lineLook = line - 1;
while ((lineLook > 0) && (
- (!(GetLevel(lineLook) & SC_FOLDLEVELHEADERFLAG)) ||
+ (!LevelIsHeader(GetLevel(lineLook))) ||
(LevelNumber(GetLevel(lineLook)) >= level))
) {
lineLook--;
}
- if ((GetLevel(lineLook) & SC_FOLDLEVELHEADERFLAG) &&
+ if (LevelIsHeader(GetLevel(lineLook)) &&
(LevelNumber(GetLevel(lineLook)) < level)) {
return lineLook;
} else {
@@ -568,13 +568,13 @@ void Document::GetHighlightDelimiters(HighlightDelimiter &highlightDelimiter, Sc
Sci::Line lookLine = line;
int lookLineLevel = level;
int lookLineLevelNum = LevelNumber(lookLineLevel);
- while ((lookLine > 0) && ((lookLineLevel & SC_FOLDLEVELWHITEFLAG) ||
- ((lookLineLevel & SC_FOLDLEVELHEADERFLAG) && (lookLineLevelNum >= LevelNumber(GetLevel(lookLine + 1)))))) {
+ while ((lookLine > 0) && (LevelIsWhitespace(lookLineLevel) ||
+ (LevelIsHeader(lookLineLevel) && (lookLineLevelNum >= LevelNumber(GetLevel(lookLine + 1)))))) {
lookLineLevel = GetLevel(--lookLine);
lookLineLevelNum = LevelNumber(lookLineLevel);
}
- Sci::Line beginFoldBlock = (lookLineLevel & SC_FOLDLEVELHEADERFLAG) ? lookLine : GetFoldParent(lookLine);
+ Sci::Line beginFoldBlock = LevelIsHeader(lookLineLevel) ? lookLine : GetFoldParent(lookLine);
if (beginFoldBlock == -1) {
highlightDelimiter.Clear();
return;
@@ -587,7 +587,7 @@ void Document::GetHighlightDelimiters(HighlightDelimiter &highlightDelimiter, Sc
lookLineLevel = GetLevel(lookLine);
lookLineLevelNum = LevelNumber(lookLineLevel);
while ((lookLine >= 0) && (lookLineLevelNum >= SC_FOLDLEVELBASE)) {
- if (lookLineLevel & SC_FOLDLEVELHEADERFLAG) {
+ if (LevelIsHeader(lookLineLevel)) {
if (GetLastChild(lookLine, -1, lookLastLine) == line) {
beginFoldBlock = lookLine;
endFoldBlock = line;
@@ -604,7 +604,7 @@ void Document::GetHighlightDelimiters(HighlightDelimiter &highlightDelimiter, Sc
for (lookLine = line - 1, lookLineLevel = GetLevel(lookLine), lookLineLevelNum = LevelNumber(lookLineLevel);
lookLine >= beginFoldBlock;
lookLineLevel = GetLevel(--lookLine), lookLineLevelNum = LevelNumber(lookLineLevel)) {
- if ((lookLineLevel & SC_FOLDLEVELWHITEFLAG) || (lookLineLevelNum > LevelNumber(level))) {
+ if (LevelIsWhitespace(lookLineLevel) || (lookLineLevelNum > LevelNumber(level))) {
firstChangeableLineBefore = lookLine;
break;
}
@@ -617,7 +617,7 @@ void Document::GetHighlightDelimiters(HighlightDelimiter &highlightDelimiter, Sc
for (lookLine = line + 1, lookLineLevel = GetLevel(lookLine), lookLineLevelNum = LevelNumber(lookLineLevel);
lookLine <= endFoldBlock;
lookLineLevel = GetLevel(++lookLine), lookLineLevelNum = LevelNumber(lookLineLevel)) {
- if ((lookLineLevel & SC_FOLDLEVELHEADERFLAG) && (lookLineLevelNum < LevelNumber(GetLevel(lookLine + 1)))) {
+ if (LevelIsHeader(lookLineLevel) && (lookLineLevelNum < LevelNumber(GetLevel(lookLine + 1)))) {
firstChangeableLineAfter = lookLine;
break;
}
diff --git a/src/Document.h b/src/Document.h
index 3e57d1449..cbb91e574 100644
--- a/src/Document.h
+++ b/src/Document.h
@@ -168,6 +168,14 @@ constexpr int LevelNumber(int level) noexcept {
return level & SC_FOLDLEVELNUMBERMASK;
}
+constexpr bool LevelIsHeader(int level) noexcept {
+ return (level & SC_FOLDLEVELHEADERFLAG) == SC_FOLDLEVELHEADERFLAG;
+}
+
+constexpr bool LevelIsWhitespace(int level) noexcept {
+ return (level & SC_FOLDLEVELWHITEFLAG) == SC_FOLDLEVELWHITEFLAG;
+}
+
class LexInterface {
protected:
Document *pdoc;
diff --git a/src/EditView.cxx b/src/EditView.cxx
index 1f92b44c0..b4eaa577f 100644
--- a/src/EditView.cxx
+++ b/src/EditView.cxx
@@ -2112,7 +2112,7 @@ void EditView::DrawIndentGuidesOverEmpty(Surface *surface, const EditModel &mode
xStartText = 100000; // Don't limit to visible indentation on empty line
// This line is empty, so use indentation of last line with text
int indentLastWithText = model.pdoc->GetLineIndentation(lineLastWithText);
- const int isFoldHeader = model.pdoc->GetLevel(lineLastWithText) & SC_FOLDLEVELHEADERFLAG;
+ const int isFoldHeader = LevelIsHeader(model.pdoc->GetLevel(lineLastWithText));
if (isFoldHeader) {
// Level is one more level than parent
indentLastWithText += model.pdoc->IndentSize();
@@ -2235,7 +2235,7 @@ static void DrawFoldLines(Surface *surface, const EditModel &model, const ViewSt
const bool expanded = model.pcs->GetExpanded(line);
const int level = model.pdoc->GetLevel(line);
const int levelNext = model.pdoc->GetLevel(line + 1);
- if ((level & SC_FOLDLEVELHEADERFLAG) &&
+ if (LevelIsHeader(level) &&
(LevelNumber(level) < LevelNumber(levelNext))) {
// Paint the line above the fold
if ((expanded && (model.foldFlags & SC_FOLDFLAG_LINEBEFORE_EXPANDED))
diff --git a/src/Editor.cxx b/src/Editor.cxx
index 8f5903dd5..0ff165595 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -2462,7 +2462,7 @@ bool Editor::NotifyMarginClick(Point pt, int modifiers) {
FoldAll(SC_FOLDACTION_TOGGLE);
} else {
const int levelClick = pdoc->GetLevel(lineClick);
- if (levelClick & SC_FOLDLEVELHEADERFLAG) {
+ if (LevelIsHeader(levelClick)) {
if (shift) {
// Ensure all children visible
FoldExpand(lineClick, SC_FOLDACTION_EXPAND, levelClick);
@@ -5358,7 +5358,7 @@ Sci::Line Editor::ExpandLine(Sci::Line line) {
while (line <= lineMaxSubord) {
pcs->SetVisible(line, line, true);
const int level = pdoc->GetLevel(line);
- if (level & SC_FOLDLEVELHEADERFLAG) {
+ if (LevelIsHeader(level)) {
if (pcs->GetExpanded(line)) {
line = ExpandLine(line);
} else {
@@ -5379,7 +5379,7 @@ void Editor::SetFoldExpanded(Sci::Line lineDoc, bool expanded) {
void Editor::FoldLine(Sci::Line line, int action) {
if (line >= 0) {
if (action == SC_FOLDACTION_TOGGLE) {
- if ((pdoc->GetLevel(line) & SC_FOLDLEVELHEADERFLAG) == 0) {
+ if (!LevelIsHeader(pdoc->GetLevel(line))) {
line = pdoc->GetFoldParent(line);
if (line < 0)
return;
@@ -5432,7 +5432,7 @@ void Editor::FoldExpand(Sci::Line line, int action, int level) {
pcs->SetVisible(line, lineMaxSubord, expanding);
while (line <= lineMaxSubord) {
const int levelLine = pdoc->GetLevel(line);
- if (levelLine & SC_FOLDLEVELHEADERFLAG) {
+ if (LevelIsHeader(levelLine)) {
SetFoldExpanded(line, expanding);
}
line++;
@@ -5443,7 +5443,7 @@ void Editor::FoldExpand(Sci::Line line, int action, int level) {
Sci::Line Editor::ContractedFoldNext(Sci::Line lineStart) const {
for (Sci::Line line = lineStart; line<pdoc->LinesTotal();) {
- if (!pcs->GetExpanded(line) && (pdoc->GetLevel(line) & SC_FOLDLEVELHEADERFLAG))
+ if (!pcs->GetExpanded(line) && LevelIsHeader(pdoc->GetLevel(line)))
return line;
line = pcs->ContractedNext(line+1);
if (line < 0)
@@ -5470,7 +5470,7 @@ void Editor::EnsureLineVisible(Sci::Line lineDoc, bool enforcePolicy) {
// Back up to find a non-blank line
Sci::Line lookLine = lineDoc;
int lookLineLevel = pdoc->GetLevel(lookLine);
- while ((lookLine > 0) && (lookLineLevel & SC_FOLDLEVELWHITEFLAG)) {
+ while ((lookLine > 0) && LevelIsWhitespace(lookLineLevel)) {
lookLineLevel = pdoc->GetLevel(--lookLine);
}
Sci::Line lineParent = pdoc->GetFoldParent(lookLine);
@@ -5519,7 +5519,7 @@ void Editor::FoldAll(int action) {
if (action == SC_FOLDACTION_TOGGLE) {
// Discover current state
for (int lineSeek = 0; lineSeek < maxLine; lineSeek++) {
- if (pdoc->GetLevel(lineSeek) & SC_FOLDLEVELHEADERFLAG) {
+ if (LevelIsHeader(pdoc->GetLevel(lineSeek))) {
expanding = !pcs->GetExpanded(lineSeek);
break;
}
@@ -5529,14 +5529,14 @@ void Editor::FoldAll(int action) {
pcs->SetVisible(0, maxLine-1, true);
for (int line = 0; line < maxLine; line++) {
const int levelLine = pdoc->GetLevel(line);
- if (levelLine & SC_FOLDLEVELHEADERFLAG) {
+ if (LevelIsHeader(levelLine)) {
SetFoldExpanded(line, true);
}
}
} else {
for (Sci::Line line = 0; line < maxLine; line++) {
const int level = pdoc->GetLevel(line);
- if ((level & SC_FOLDLEVELHEADERFLAG) &&
+ if (LevelIsHeader(level) &&
(SC_FOLDLEVELBASE == LevelNumber(level))) {
SetFoldExpanded(line, false);
const Sci::Line lineMaxSubord = pdoc->GetLastChild(line, -1);
@@ -5551,15 +5551,15 @@ void Editor::FoldAll(int action) {
}
void Editor::FoldChanged(Sci::Line line, int levelNow, int levelPrev) {
- if (levelNow & SC_FOLDLEVELHEADERFLAG) {
- if (!(levelPrev & SC_FOLDLEVELHEADERFLAG)) {
+ if (LevelIsHeader(levelNow)) {
+ if (!LevelIsHeader(levelPrev)) {
// Adding a fold point.
if (pcs->SetExpanded(line, true)) {
RedrawSelMargin();
}
FoldExpand(line, SC_FOLDACTION_EXPAND, levelPrev);
}
- } else if (levelPrev & SC_FOLDLEVELHEADERFLAG) {
+ } else if (LevelIsHeader(levelPrev)) {
const Sci::Line prevLine = line - 1;
const int prevLineLevel = pdoc->GetLevel(prevLine);
@@ -5577,7 +5577,7 @@ void Editor::FoldChanged(Sci::Line line, int levelNow, int levelPrev) {
FoldExpand(line, SC_FOLDACTION_EXPAND, levelPrev);
}
}
- if (!(levelNow & SC_FOLDLEVELWHITEFLAG) &&
+ if (!LevelIsWhitespace(levelNow) &&
(LevelNumber(levelPrev) > LevelNumber(levelNow))) {
if (pcs->HiddenLines()) {
// See if should still be hidden
@@ -5591,7 +5591,7 @@ void Editor::FoldChanged(Sci::Line line, int levelNow, int levelPrev) {
}
// Combining two blocks where the first one is collapsed (e.g. by adding characters in the line which separates the two blocks)
- if (!(levelNow & SC_FOLDLEVELWHITEFLAG) && (LevelNumber(levelPrev) < LevelNumber(levelNow))) {
+ if (!LevelIsWhitespace(levelNow) && (LevelNumber(levelPrev) < LevelNumber(levelNow))) {
if (pcs->HiddenLines()) {
const Sci::Line parentLine = pdoc->GetFoldParent(line);
if (!pcs->GetExpanded(parentLine) && pcs->GetVisible(line))
diff --git a/src/MarginView.cxx b/src/MarginView.cxx
index c2dcbf32d..05e25bc13 100644
--- a/src/MarginView.cxx
+++ b/src/MarginView.cxx
@@ -225,14 +225,14 @@ void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc,
bool needWhiteClosure = false;
if (vs.ms[margin].mask & SC_MASK_FOLDERS) {
const int level = model.pdoc->GetLevel(model.pcs->DocFromDisplay(visibleLine));
- if (level & SC_FOLDLEVELWHITEFLAG) {
+ if (LevelIsWhitespace(level)) {
Sci::Line lineBack = model.pcs->DocFromDisplay(visibleLine);
int levelPrev = level;
- while ((lineBack > 0) && (levelPrev & SC_FOLDLEVELWHITEFLAG)) {
+ while ((lineBack > 0) && LevelIsWhitespace(levelPrev)) {
lineBack--;
levelPrev = model.pdoc->GetLevel(lineBack);
}
- if (!(levelPrev & SC_FOLDLEVELHEADERFLAG)) {
+ if (!LevelIsHeader(levelPrev)) {
if (LevelNumber(level) < LevelNumber(levelPrev))
needWhiteClosure = true;
}
@@ -272,7 +272,7 @@ void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc,
const int levelNext = model.pdoc->GetLevel(lineDoc + 1);
const int levelNum = LevelNumber(level);
const int levelNextNum = LevelNumber(levelNext);
- if (level & SC_FOLDLEVELHEADERFLAG) {
+ if (LevelIsHeader(level)) {
if (firstSubLine) {
if (levelNum < levelNextNum) {
if (model.pcs->GetExpanded(lineDoc)) {
@@ -305,16 +305,16 @@ void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc,
const int firstFollowupLineLevel = model.pdoc->GetLevel(firstFollowupLine);
const int secondFollowupLineLevelNum = LevelNumber(model.pdoc->GetLevel(firstFollowupLine + 1));
if (!model.pcs->GetExpanded(lineDoc)) {
- if ((firstFollowupLineLevel & SC_FOLDLEVELWHITEFLAG) &&
+ if (LevelIsWhitespace(firstFollowupLineLevel) &&
(levelNum > secondFollowupLineLevelNum))
needWhiteClosure = true;
if (highlightDelimiter.IsFoldBlockHighlighted(firstFollowupLine))
headWithTail = true;
}
- } else if (level & SC_FOLDLEVELWHITEFLAG) {
+ } else if (LevelIsWhitespace(level)) {
if (needWhiteClosure) {
- if (levelNext & SC_FOLDLEVELWHITEFLAG) {
+ if (LevelIsWhitespace(levelNext)) {
marks |= 1 << SC_MARKNUM_FOLDERSUB;
} else if (levelNextNum > SC_FOLDLEVELBASE) {
marks |= 1 << SC_MARKNUM_FOLDERMIDTAIL;
@@ -337,7 +337,7 @@ void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc,
} else if (levelNum > SC_FOLDLEVELBASE) {
if (levelNextNum < levelNum) {
needWhiteClosure = false;
- if (levelNext & SC_FOLDLEVELWHITEFLAG) {
+ if (LevelIsWhitespace(levelNext)) {
marks |= 1 << SC_MARKNUM_FOLDERSUB;
needWhiteClosure = true;
} else if (lastSubLine) {
@@ -373,8 +373,8 @@ void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc,
if (model.foldFlags & SC_FOLDFLAG_LEVELNUMBERS) {
const int lev = model.pdoc->GetLevel(lineDoc);
sprintf(number, "%c%c %03X %03X",
- (lev & SC_FOLDLEVELHEADERFLAG) ? 'H' : '_',
- (lev & SC_FOLDLEVELWHITEFLAG) ? 'W' : '_',
+ LevelIsHeader(lev) ? 'H' : '_',
+ LevelIsWhitespace(lev) ? 'W' : '_',
LevelNumber(lev),
lev >> 16
);