Skip to content

Commit

Permalink
Fix code folding broken after unbalanced braces or code folding word …
Browse files Browse the repository at this point in the history
…pairs, issue #745.
  • Loading branch information
zufuliu committed Jan 11, 2024
1 parent d14d082 commit 0c6f1ba
Show file tree
Hide file tree
Showing 57 changed files with 63 additions and 10 deletions.
1 change: 1 addition & 0 deletions scintilla/lexers/LexAPDL.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,7 @@ void FoldAPDLDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int /*initStyle

if (startPos == lineStartNext) {
const FoldLineState foldNext(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (foldCurrent.lineComment) {
levelNext += foldNext.lineComment - foldPrev.lineComment;
} else if (foldCurrent.dataLine) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexAsm.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -450,6 +450,7 @@ void FoldAsmDoc(Sci_PositionU startPos, Sci_Position length, int initStyle, Lexe
}
}
if (atEOL || (i == endPos - 1)) {
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
const int levelUse = levelCurrent;
int lev = levelUse | levelNext << 16;
if (levelUse < levelNext)
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexAsymptote.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,7 @@ void FoldAsyDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, L
}
if (startPos == lineStartNext) {
const FoldLineState foldNext(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (foldCurrent.lineComment) {
levelNext += foldNext.lineComment - foldPrev.lineComment;
} else if (foldCurrent.moduleImport) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexAutoHotkey.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -834,6 +834,7 @@ void FoldAHKDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, L
}
if (startPos == lineStartNext) {
const int lineCommentNext = GetLineCommentState(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (lineCommentCurrent) {
levelNext += lineCommentNext - lineCommentPrev;
} else if (visibleChars) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexAutoIt3.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -721,6 +721,7 @@ void FoldAU3Doc(Sci_PositionU startPos, Sci_Position length, int, LexerWordList,
levelCurrent--;
}
}
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
const int levelUse = levelCurrent;
int lev = levelUse | levelNext << 16;
if (levelUse < levelNext) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexAviSynth.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,7 @@ void FoldAvsDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, L
}
if (startPos == lineStartNext) {
const int lineCommentNext = GetLineCommentState(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (lineCommentCurrent) {
levelNext += lineCommentNext - lineCommentPrev;
} else if (visibleChars) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexAwk.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -444,6 +444,7 @@ void FoldAwkDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int /*initStyle*
}
if (++startPos == lineStartNext) {
const FoldLineState foldNext(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (foldCurrent.lineComment) {
levelNext += foldNext.lineComment - foldPrev.lineComment;
} else if (foldCurrent.fileInclude) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexBash.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -955,6 +955,7 @@ void FoldBashDoc(Sci_PositionU startPos, Sci_Position length, int initStyle, Lex
}

if (startPos == lineStartNext) {
levelCurrent = sci::max(levelCurrent, SC_FOLDLEVELBASE);
// Comment folding
if (IsCommentLine(lineCurrent)) {
levelCurrent += IsCommentLine(lineCurrent + 1) - IsCommentLine(lineCurrent - 1);
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexBatch.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -643,6 +643,7 @@ void ColouriseBatchDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initS
}
}

levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
const int levelUse = levelCurrent;
int lev = levelUse | levelNext << 16;
if (levelUse < levelNext) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexCIL.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ void FoldCILDoc(Sci_PositionU startPos, Sci_Position length, int initStyle, Lexe
}

if (atEOL || (i == endPos - 1)) {
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
const int levelUse = levelCurrent;
int lev = levelUse | levelNext << 16;
if (levelUse < levelNext)
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexCMake.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,7 @@ void FoldCMakeDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle,

if (++startPos == lineStartNext) {
const int lineCommentNext = GetLineCommentState(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (lineCommentCurrent) {
levelNext += lineCommentNext - lineCommentPrev;
}
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexCPP.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -965,6 +965,7 @@ void FoldCppDoc(Sci_PositionU startPos, Sci_Position length, int initStyle, Lexe
if (visibleChars == 0 && !isspacechar(ch))
visibleChars++;
if (atEOL || (i == endPos - 1)) {
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
const int levelUse = levelCurrent;
int lev = levelUse | levelNext << 16;
if (levelUse < levelNext)
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexCSS.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,7 @@ void ColouriseCssDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initSty
}
if (sc.atLineEnd) {
if (fold) {
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
const int levelUse = levelCurrent;
int lev = levelUse | levelNext << 16;
if (levelUse < levelNext) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexCSharp.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -883,6 +883,7 @@ void FoldCSharpDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle
}
if (++startPos == lineStartNext) {
const FoldLineState foldNext(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (foldCurrent.lineComment) {
levelNext += foldNext.lineComment - foldPrev.lineComment;
} else if (foldCurrent.usingName) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexConfig.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,7 @@ void FoldConfDoc(Sci_PositionU startPos, Sci_Position length, int /*initStyle*/,
visibleChars++;
}
if (atEOL || (i == endPos - 1)) {
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
const int levelUse = levelCurrent;
int lev = levelUse | levelNext << 16;
if (levelUse < levelNext)
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexD.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -739,6 +739,7 @@ void FoldDDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, Lex
}
if (startPos == lineStartNext) {
const FoldLineState foldNext(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (foldCurrent.lineComment) {
levelNext += foldNext.lineComment - foldPrev.lineComment;
} else if (foldCurrent.packageImport) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexDart.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -537,6 +537,7 @@ void FoldDartDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle,
}
if (startPos == lineStartNext) {
const FoldLineState foldNext(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (foldCurrent.lineComment) {
levelNext += foldNext.lineComment - foldPrev.lineComment;
} else if (foldCurrent.packageImport) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexFortran.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,7 @@ void FoldFortranDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int /*initSt

if (++startPos == lineStartNext) {
const int lineCommentNext = GetLineCommentState(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (lineCommentCurrent) {
levelNext += lineCommentNext - lineCommentPrev;
}
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexGo.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -616,6 +616,7 @@ void FoldGoDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, Le
}
if (startPos == lineStartNext) {
const int lineCommentNext = GetLineCommentState(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (lineCommentCurrent) {
levelNext += lineCommentNext - lineCommentPrev;
} else if (visibleChars) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexGraphViz.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,7 @@ void ColouriseGraphVizDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int in
styler.SetLineState(sc.currentLine, (htmlTagLevel << 4) | htmlCommentStyle);
visibleChars = 0;
if (fold) {
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
const int levelUse = levelCurrent;
int lev = levelUse | levelNext << 16;
if (levelUse < levelNext) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexGroovy.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -651,6 +651,7 @@ void FoldGroovyDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle
}
if (startPos == lineStartNext) {
const FoldLineState foldNext(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (foldCurrent.lineComment) {
levelNext += foldNext.lineComment - foldPrev.lineComment;
} else if (foldCurrent.packageImport) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexHTML.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -511,6 +511,7 @@ void ColouriseHyperTextDoc(Sci_PositionU startPos, Sci_Position length, int init
// Avoid triggering two times on Dos/Win
// New line -> record any line state onto /next/ line
if (fold) {
levelCurrent = sci::max(levelCurrent, SC_FOLDLEVELBASE);
int lev = levelPrev;
if ((levelCurrent > levelPrev))
lev |= SC_FOLDLEVELHEADERFLAG;
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexHaxe.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -474,6 +474,7 @@ void FoldHaxeDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle,
}
if (startPos == lineStartNext) {
const FoldLineState foldNext(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (foldCurrent.lineComment) {
levelNext += foldNext.lineComment - foldPrev.lineComment;
} else if (foldCurrent.packageImport) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexInno.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -505,6 +505,7 @@ void FoldInnoDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle,

if (startPos == lineStartNext) {
const int lineStateNext = styler.GetLineState(lineCurrent + 1);
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (lineState & InnoLineStateSectionHeader) {
levelCurrent = SC_FOLDLEVELBASE;
levelNext = SC_FOLDLEVELBASE + 1;
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexJSON.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,7 @@ void ColouriseJSONDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initSt
atLineStart = startPos == lineStartNext;
if (atLineStart) {
if (fold) {
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
const int levelUse = levelCurrent;
int lev = levelUse | levelNext << 16;
if (levelUse < levelNext) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexJam.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,7 @@ void FoldJamDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, L
}
if (startPos == lineStartNext) {
const FoldLineState foldNext(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (foldCurrent.lineComment) {
levelNext += foldNext.lineComment - foldPrev.lineComment;
} else if (foldCurrent.moduleImport) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexJava.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -658,6 +658,7 @@ void FoldJavaDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle,
}
if (startPos == lineStartNext) {
const FoldLineState foldNext(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (foldCurrent.lineComment) {
levelNext += foldNext.lineComment - foldPrev.lineComment;
} else if (foldCurrent.packageImport) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexJavaScript.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -676,6 +676,7 @@ void FoldJsDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, Le
}
if (startPos == lineStartNext) {
const FoldLineState foldNext(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (foldCurrent.lineComment) {
levelNext += foldNext.lineComment - foldPrev.lineComment;
} else if (foldCurrent.packageImport) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexJulia.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -647,6 +647,7 @@ void FoldJuliaDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle,

if (startPos == lineStartNext) {
const int lineCommentNext = GetLineCommentState(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (lineCommentCurrent) {
levelNext += lineCommentNext - lineCommentPrev;
}
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexKotlin.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -461,6 +461,7 @@ void FoldKotlinDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle
}
if (startPos == lineStartNext) {
const FoldLineState foldNext(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (foldCurrent.lineComment) {
levelNext += foldNext.lineComment - foldPrev.lineComment;
} else if (foldCurrent.packageImport) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexLaTeX.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,7 @@ void FoldLatexDoc(Sci_PositionU startPos, Sci_Position length, int /*initStyle*/
}

if (atEOL || (i == endPos - 1)) {
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
const int levelUse = levelCurrent;
int lev = levelUse | levelNext << 16;
if (levelUse < levelNext)
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexLisp.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@ void FoldListDoc(Sci_PositionU startPos, Sci_Position length, int initStyle, Lex
}

if (atEOL || (i == endPos - 1)) {
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
const int levelUse = levelCurrent;
int lev = levelUse | levelNext << 16;
if (levelUse < levelNext)
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexLua.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -433,6 +433,7 @@ void FoldLuaDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, L

if (startPos == lineStartNext) {
const int lineCommentNext = GetLineCommentState(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (lineCommentCurrent) {
levelNext += lineCommentNext - lineCommentPrev;
}
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexMakefile.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,7 @@ void FoldMakeDoc(Sci_PositionU startPos, Sci_Position length, int initStyle, Lex
visibleChars++;

if (atEOL || (i == endPos - 1)) {
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
const int levelUse = levelCurrent;
int lev = levelUse | levelNext << 16;
if (levelUse < levelNext)
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexMathematica.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ void ColouriseMathematicaDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int
}
if (sc.atLineEnd) {
if (fold) {
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
const int levelUse = levelCurrent;
int lev = levelUse | levelNext << 16;
if (levelUse < levelNext) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexMatlab.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,7 @@ void FoldMatlabDoc(Sci_PositionU startPos, Sci_Position length, int initStyle, L
visibleChars++;

if (atEOL || (i == endPos - 1)) {
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
const int levelUse = levelCurrent;
int lev = levelUse | levelNext << 16;
if (levelUse < levelNext)
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexNSIS.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,7 @@ void FoldNSISDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle,

if (startPos == lineStartNext) {
const int lineTypeNext = styler.GetLineState(lineCurrent + 1) & NsisLineTypeMask;
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (lineTypeCurrent) {
levelNext += (lineTypeNext == lineTypeCurrent) - (lineTypePrev == lineTypeCurrent);
}
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexPHP.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -1550,6 +1550,7 @@ void FoldPHPDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, L
}
if (startPos == lineStartNext) {
const FoldLineState foldNext(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (foldCurrent.lineComment) {
levelNext += foldNext.lineComment - foldPrev.lineComment;
} else if (foldCurrent.useNamespace) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexPascal.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -420,6 +420,7 @@ void FoldPascalDoc(Sci_PositionU startPos, Sci_Position length, int initStyle, L

if (atEOL || (i == endPos - 1)) {
int lev = levelPrev;
levelCurrent = sci::max(levelCurrent, SC_FOLDLEVELBASE);
if ((levelCurrent > levelPrev))
lev |= SC_FOLDLEVELHEADERFLAG;
styler.SetLevel(lineCurrent, lev);
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexPerl.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -1655,6 +1655,7 @@ void FoldPerlDoc(Sci_PositionU startPos, Sci_Position length, int /*initStyle*/,
atLineStart = startPos == lineStartNext;
if (atLineStart) {
// Comment folding
levelCurrent = sci::max(levelCurrent, SC_FOLDLEVELBASE);
if (IsCommentLine(lineCurrent)) {
levelCurrent += IsCommentLine(lineCurrent + 1) - IsCommentLine(lineCurrent - 1);
}
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexPowerShell.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,7 @@ void FoldPowerShellDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initS
}
if (startPos == lineStartNext) {
const int lineCommentNext = GetLineCommentState(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (lineCommentCurrent) {
levelNext += lineCommentNext - lineCommentPrev;
} else if (visibleChars) {
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexR.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,7 @@ void FoldSimpleDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int /*initSty

if (++startPos == lineStartNext) {
const int lineCommentNext = GetLineCommentState(styler.GetLineState(lineCurrent + 1));
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (lineCommentCurrent) {
levelNext += lineCommentNext - lineCommentPrev;
}
Expand Down
1 change: 1 addition & 0 deletions scintilla/lexers/LexRebol.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,7 @@ void FoldRebolDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int /*initStyl

if (++startPos == lineStartNext) {
const int lineTypeNext = styler.GetLineState(lineCurrent + 1) & RebolLineTypeMask;
levelNext = sci::max(levelNext, SC_FOLDLEVELBASE);
if (lineTypeCurrent) {
levelNext += (lineTypeNext == lineTypeCurrent) - (lineTypePrev == lineTypeCurrent);
}
Expand Down
14 changes: 5 additions & 9 deletions scintilla/lexers/LexRuby.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -1741,7 +1741,7 @@ void FoldRbDoc(Sci_PositionU startPos, Sci_Position length, int initStyle, Lexer
synchronizeDocStart(startPos, length, initStyle, styler, false);
const Sci_PositionU endPos = startPos + length;
Sci_Line lineCurrent = styler.GetLine(startPos);
int levelPrev = startPos == 0 ? 0 : (styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK & ~SC_FOLDLEVELBASE);
int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
int levelCurrent = levelPrev;
uint8_t chPrev = '\0';
uint8_t chNext = styler[startPos];
Expand Down Expand Up @@ -1779,20 +1779,15 @@ void FoldRbDoc(Sci_PositionU startPos, Sci_Position length, int initStyle, Lexer
if (ch == '(' || ch == '{' || ch == '[') {
levelCurrent++;
} else if (ch == ')' || ch == '}' || ch == ']') {
// Don't decrement below 0
if (levelCurrent > 0) {
levelCurrent--;
}
levelCurrent--;
}
} else if (style == SCE_RB_WORD && styleNext != SCE_RB_WORD) {
// Look at the keyword on the left and decide what to do
char prevWord[MAX_KEYWORD_LENGTH + 1]; // 1 byte for zero
prevWord[0] = 0;
getPrevWord(startPos - 1, prevWord, styler, SCE_RB_WORD);
if (StrEqual(prevWord, "end")) {
// Don't decrement below 0
if (levelCurrent > 0)
levelCurrent--;
levelCurrent--;
} else if (StrEqual(prevWord, "def")) {
levelCurrent++;
method_definition = MethodDefinition::Define;
Expand Down Expand Up @@ -1868,14 +1863,15 @@ void FoldRbDoc(Sci_PositionU startPos, Sci_Position length, int initStyle, Lexer
chPrev = ch;
stylePrev = style;
if (startPos == lineStartNext) {
levelCurrent = sci::max(levelCurrent, SC_FOLDLEVELBASE);
if (IsCommentLine(lineCurrent)) {
levelCurrent += IsCommentLine(lineCurrent + 1) - IsCommentLine(lineCurrent - 1);
}

int lev = levelPrev;
if ((levelCurrent > levelPrev))
lev |= SC_FOLDLEVELHEADERFLAG;
styler.SetLevel(lineCurrent, lev | SC_FOLDLEVELBASE);
styler.SetLevel(lineCurrent, lev);
lineCurrent++;
lineStartNext = styler.LineStart(lineCurrent + 1);
lineStartNext = sci::min(lineStartNext, endPos);
Expand Down
Loading

0 comments on commit 0c6f1ba

Please sign in to comment.