Skip to content

Commit

Permalink
Refactoring LookbackNonWhite(), especially for PHP lexer.
Browse files Browse the repository at this point in the history
  • Loading branch information
zufuliu committed Mar 30, 2023
1 parent 89f1a9f commit 7849b30
Show file tree
Hide file tree
Showing 10 changed files with 28 additions and 23 deletions.
3 changes: 1 addition & 2 deletions scintilla/lexers/LexCSharp.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -238,8 +238,7 @@ void ColouriseCSharpDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int init
lineStateLineType = CSharpLineStateMaskLineComment;
}
} else if (IsSpaceEquiv(initStyle)) {
int stylePrevNonWhite = SCE_CSHARP_DEFAULT;
LookbackNonWhite(styler, startPos, SCE_CSHARP_TASKMARKER, chPrevNonWhite, stylePrevNonWhite);
LookbackNonWhite(styler, startPos, SCE_CSHARP_TASKMARKER, chPrevNonWhite, initStyle);
}

while (sc.More()) {
Expand Down
3 changes: 1 addition & 2 deletions scintilla/lexers/LexD.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -320,8 +320,7 @@ void ColouriseDDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle
lineStateLineType = DLineStateMaskLineComment;
}
} else if (IsSpaceEquiv(initStyle)) {
int stylePrevNonWhite = SCE_D_DEFAULT;
LookbackNonWhite(styler, startPos, SCE_D_TASKMARKER, chPrevNonWhite, stylePrevNonWhite);
LookbackNonWhite(styler, startPos, SCE_D_TASKMARKER, chPrevNonWhite, initStyle);
}

while (sc.More()) {
Expand Down
3 changes: 1 addition & 2 deletions scintilla/lexers/LexDart.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,7 @@ void ColouriseDartDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initSt
lineStateLineType = DartLineStateMaskLineComment;
}
} else if (IsSpaceEquiv(initStyle)) {
int stylePrevNonWhite = SCE_DART_DEFAULT;
LookbackNonWhite(styler, startPos, SCE_DART_TASKMARKER, chPrevNonWhite, stylePrevNonWhite);
LookbackNonWhite(styler, startPos, SCE_DART_TASKMARKER, chPrevNonWhite, initStyle);
}

while (sc.More()) {
Expand Down
3 changes: 1 addition & 2 deletions scintilla/lexers/LexGo.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -266,8 +266,7 @@ void ColouriseGoDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyl

StyleContext sc(startPos, lengthDoc, initStyle, styler);
if (startPos != 0 && IsSpaceEquiv(initStyle)) {
int stylePrevNonWhite = SCE_GO_DEFAULT;
LookbackNonWhite(styler, startPos, SCE_GO_TASKMARKER, chPrevNonWhite, stylePrevNonWhite);
LookbackNonWhite(styler, startPos, SCE_GO_TASKMARKER, chPrevNonWhite, initStyle);
}

Sci_Position identifierStartPos = 0;
Expand Down
3 changes: 1 addition & 2 deletions scintilla/lexers/LexJava.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -203,8 +203,7 @@ void ColouriseJavaDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initSt
lineStateLineType = JavaLineStateMaskLineComment;
}
} else if (IsSpaceEquiv(initStyle)) {
int stylePrevNonWhite = SCE_JAVA_DEFAULT;
LookbackNonWhite(styler, startPos, SCE_JAVA_TASKMARKER, chPrevNonWhite, stylePrevNonWhite);
LookbackNonWhite(styler, startPos, SCE_JAVA_TASKMARKER, chPrevNonWhite, initStyle);
}

while (sc.More()) {
Expand Down
16 changes: 12 additions & 4 deletions scintilla/lexers/LexPHP.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -853,11 +853,19 @@ void ColourisePHPDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initSty
sc.SetState(SCE_PHP_COMMENTLINE);
sc.Forward();
}
} else if (IsJsSpaceEquiv(initStyle)) {
} else {
unsigned marker = SCE_H_DEFAULT;
// look back for better regex colouring
LookbackNonWhite(styler, startPos, js_style(SCE_JS_TASKMARKER), chPrevNonWhite, stylePrevNonWhite);
} else if (IsCssSpaceEquiv(initStyle)) {
LookbackNonWhite(styler, startPos, css_style(SCE_CSS_CDO_CDC), chPrevNonWhite, stylePrevNonWhite);
if (IsJsSpaceEquiv(initStyle)) {
marker = (js_style(SCE_JS_DEFAULT) << 8) | js_style(SCE_JS_TASKMARKER);
} else if (IsCssSpaceEquiv(initStyle)) {
marker = (css_style(SCE_CSS_DEFAULT) << 8) | css_style(SCE_CSS_CDO_CDC);
} else if (IsSpaceEquiv(initStyle)) {
marker = (SCE_PHP_DEFAULT << 8) | SCE_PHP_TASKMARKER;
}
if (marker != SCE_H_DEFAULT) {
LookbackNonWhite(styler, startPos, marker, chPrevNonWhite, stylePrevNonWhite);
}
}

while (sc.More()) {
Expand Down
4 changes: 1 addition & 3 deletions scintilla/lexers/LexPython.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -384,7 +384,6 @@ void ColourisePyDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyl
int visibleCharsBefore = 0;
int chBefore = 0;
int chPrevNonWhite = 0;
int stylePrevNonWhite = SCE_PY_DEFAULT;
int prevIndentCount = 0;
int indentCount = 0;
int parenCount = 0;
Expand Down Expand Up @@ -413,7 +412,7 @@ void ColourisePyDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyl
}
if (startPos != 0 && IsSpaceEquiv(initStyle)) {
// look back for better dict key colouring
LookbackNonWhite(styler, startPos, SCE_PY_TASKMARKER, chPrevNonWhite, stylePrevNonWhite);
LookbackNonWhite(styler, startPos, SCE_PY_TASKMARKER, chPrevNonWhite, initStyle);
}

while (sc.More()) {
Expand Down Expand Up @@ -834,7 +833,6 @@ void ColourisePyDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyl
visibleChars++;
if (!IsSpaceEquiv(sc.state)) {
chPrevNonWhite = sc.ch;
stylePrevNonWhite = sc.state;
}
}
if (sc.atLineEnd) {
Expand Down
3 changes: 1 addition & 2 deletions scintilla/lexers/LexVHDL.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,7 @@ void ColouriseVHDLDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initSt
lineState &= VHDLLineStateMaskAttribute | VHDLLineStateMaskCodeFolding;
}
if (startPos != 0 && IsSpaceEquiv(initStyle)) {
int stylePrevNonWhite = SCE_VHDL_DEFAULT;
LookbackNonWhite(styler, startPos, SCE_VHDL_TASKMARKER, chPrevNonWhite, stylePrevNonWhite);
LookbackNonWhite(styler, startPos, SCE_VHDL_TASKMARKER, chPrevNonWhite, initStyle);
}

while (sc.More()) {
Expand Down
11 changes: 8 additions & 3 deletions scintilla/lexlib/LexAccessor.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -247,15 +247,20 @@ void BacktrackToStart(const LexAccessor &styler, int stateMask, Sci_PositionU &s
}
}

Sci_PositionU LookbackNonWhite(LexAccessor &styler, Sci_PositionU startPos, int maxSpaceStyle, int &chPrevNonWhite, int &stylePrevNonWhite) noexcept {
do {
Sci_PositionU LookbackNonWhite(LexAccessor &styler, Sci_PositionU startPos, unsigned maxSpaceStyle, int &chPrevNonWhite, int &stylePrevNonWhite) noexcept {
const unsigned startStyle = maxSpaceStyle >> 8;
maxSpaceStyle &= 0xff;
do {
--startPos;
const int style = styler.StyleAt(startPos);
const unsigned style = styler.StyleAt(startPos);
if (style > maxSpaceStyle) {
stylePrevNonWhite = style;
chPrevNonWhite = static_cast<unsigned char>(styler[startPos]);
break;
}
if (style < startStyle) {
break;
}
} while (startPos != 0);
return startPos;
}
Expand Down
2 changes: 1 addition & 1 deletion scintilla/lexlib/LexAccessor.h
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,7 @@ inline int GetMatchedDelimiterCount(LexAccessor &styler, Sci_PositionU pos, int
}

void BacktrackToStart(const LexAccessor &styler, int stateMask, Sci_PositionU &startPos, Sci_Position &lengthDoc, int &initStyle) noexcept;
Sci_PositionU LookbackNonWhite(LexAccessor &styler, Sci_PositionU startPos, int maxSpaceStyle, int &chPrevNonWhite, int &stylePrevNonWhite) noexcept;
Sci_PositionU LookbackNonWhite(LexAccessor &styler, Sci_PositionU startPos, unsigned maxSpaceStyle, int &chPrevNonWhite, int &stylePrevNonWhite) noexcept;
Sci_PositionU CheckBraceOnNextLine(LexAccessor &styler, Sci_Line line, int operatorStyle, int maxSpaceStyle, int ignoreStyle = 0) noexcept;

}

0 comments on commit 7849b30

Please sign in to comment.