diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Document.cxx | 22 | ||||
-rw-r--r-- | src/Document.h | 8 | ||||
-rw-r--r-- | src/EditView.cxx | 4 | ||||
-rw-r--r-- | src/Editor.cxx | 28 | ||||
-rw-r--r-- | src/MarginView.cxx | 20 |
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 ); |