diff options
| author | Neil <nyamatongwe@gmail.com> | 2020-04-13 08:06:56 +1000 |
|---|---|---|
| committer | Neil <nyamatongwe@gmail.com> | 2020-04-13 08:06:56 +1000 |
| commit | ce2e58dee5c0c77bf67eb51ba4f933c611dbd844 (patch) | |
| tree | 97acc67846f0d77e6b81fe912772f01d266b2592 | |
| parent | 6a036ac8001e1a740fd28323ea22d6acfbd29877 (diff) | |
| download | scintilla-mirror-ce2e58dee5c0c77bf67eb51ba4f933c611dbd844.tar.gz | |
Backport: Hide implementation of EscapeSequence and use const. Add tests for escape
sequences.
Backport of changeset 8144:ce9d95250569.
| -rw-r--r-- | lexers/LexCPP.cxx | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/lexers/LexCPP.cxx b/lexers/LexCPP.cxx index 10e38c661..217a1da3f 100644 --- a/lexers/LexCPP.cxx +++ b/lexers/LexCPP.cxx @@ -163,18 +163,14 @@ void highlightTaskMarker(StyleContext &sc, LexAccessor &styler, } } -struct EscapeSequence { - int digitsLeft; - CharacterSet setHexDigits; - CharacterSet setOctDigits; - CharacterSet setNoneNumeric; - CharacterSet *escapeSetValid; - EscapeSequence() { - digitsLeft = 0; - escapeSetValid = nullptr; - setHexDigits = CharacterSet(CharacterSet::setDigits, "ABCDEFabcdef"); - setOctDigits = CharacterSet(CharacterSet::setNone, "01234567"); - } +class EscapeSequence { + const CharacterSet setHexDigits = CharacterSet(CharacterSet::setDigits, "ABCDEFabcdef"); + const CharacterSet setOctDigits = CharacterSet(CharacterSet::setNone, "01234567"); + const CharacterSet setNoneNumeric; + const CharacterSet *escapeSetValid = nullptr; + int digitsLeft = 0; +public: + EscapeSequence() = default; void resetEscapeState(int nextChar) { digitsLeft = 0; escapeSetValid = &setNoneNumeric; @@ -195,6 +191,9 @@ struct EscapeSequence { bool atEscapeEnd(int currChar) const { return (digitsLeft <= 0) || !escapeSetValid->Contains(currChar); } + void consumeDigit() noexcept { + digitsLeft--; + } }; std::string GetRestOfLine(LexAccessor &styler, Sci_Position start, bool allowSpace) { @@ -1107,7 +1106,7 @@ void SCI_METHOD LexerCPP::Lex(Sci_PositionU startPos, Sci_Position length, int i } break; case SCE_C_ESCAPESEQUENCE: - escapeSeq.digitsLeft--; + escapeSeq.consumeDigit(); if (!escapeSeq.atEscapeEnd(sc.ch)) { break; } |
