From 98fba9dcdd0b734e0788de4d731bd3dcf5ee9fc0 Mon Sep 17 00:00:00 2001 From: Neil Date: Mon, 13 Apr 2020 08:06:56 +1000 Subject: Hide implementation of EscapeSequence and use const. Add tests for escape sequences. --- lexers/LexCPP.cxx | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) (limited to 'lexers') diff --git a/lexers/LexCPP.cxx b/lexers/LexCPP.cxx index af60dce3a..09e5b1cb4 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; } -- cgit v1.2.3