diff options
author | John Ehresman <unknown> | 2016-03-16 10:30:22 +1100 |
---|---|---|
committer | John Ehresman <unknown> | 2016-03-16 10:30:22 +1100 |
commit | 263292431cc87c6941b7474ddee8baa111bde6bf (patch) | |
tree | 78c404d06986087e343aa6563d422f6c2bf3efd1 /lexers/LexPython.cxx | |
parent | 54997bcaaccc3abc35b48fdbb2cbadb8a2add964 (diff) | |
download | scintilla-mirror-263292431cc87c6941b7474ddee8baa111bde6bf.tar.gz |
Support Python 3.5 '@' operator.
Diffstat (limited to 'lexers/LexPython.cxx')
-rw-r--r-- | lexers/LexPython.cxx | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/lexers/LexPython.cxx b/lexers/LexPython.cxx index 7cd3bc8de..19dd0ca3b 100644 --- a/lexers/LexPython.cxx +++ b/lexers/LexPython.cxx @@ -117,6 +117,17 @@ inline bool IsAWordStart(int ch) { return (ch < 0x80) && (isalnum(ch) || ch == '_'); } +static bool IsFirstNonWhitespace(Sci_Position pos, Accessor &styler) { + Sci_Position line = styler.GetLine(pos); + Sci_Position start_pos = styler.LineStart(line); + for (Sci_Position i = start_pos; i < pos; i++) { + char ch = styler[i]; + if (!(ch == ' ' || ch == '\t')) + return false; + } + return true; +} + // Options used for LexerPython struct OptionsPython { int whingeLevel; @@ -560,7 +571,10 @@ void SCI_METHOD LexerPython::Lex(Sci_PositionU startPos, Sci_Position length, in } else if (sc.ch == '#') { sc.SetState(sc.chNext == '#' ? SCE_P_COMMENTBLOCK : SCE_P_COMMENTLINE); } else if (sc.ch == '@') { - sc.SetState(SCE_P_DECORATOR); + if (IsFirstNonWhitespace(sc.currentPos, styler)) + sc.SetState(SCE_P_DECORATOR); + else + sc.SetState(SCE_P_OPERATOR); } else if (IsPyStringStart(sc.ch, sc.chNext, sc.GetRelative(2), allowedLiterals)) { Sci_PositionU nextIndex = 0; sc.SetState(GetPyStringState(styler, sc.currentPos, &nextIndex, allowedLiterals)); |