diff options
author | Thomas Linder Puls <unknown> | 2016-01-09 14:30:17 +1100 |
---|---|---|
committer | Thomas Linder Puls <unknown> | 2016-01-09 14:30:17 +1100 |
commit | f554b26f3e76801fec59a8f317a9e25142c634ea (patch) | |
tree | 134b862b31ea3f9016adb9417b7621e323e666f0 /lexers/LexVisualProlog.cxx | |
parent | a30c4477f69d63ef7088b33ae9a62d9ce54a590a (diff) | |
download | scintilla-mirror-f554b26f3e76801fec59a8f317a9e25142c634ea.tar.gz |
Recognize numbers more accurately and allow non-ASCII verbatim quoting
characters.
Diffstat (limited to 'lexers/LexVisualProlog.cxx')
-rw-r--r-- | lexers/LexVisualProlog.cxx | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/lexers/LexVisualProlog.cxx b/lexers/LexVisualProlog.cxx index d05413d7b..79b5f5d07 100644 --- a/lexers/LexVisualProlog.cxx +++ b/lexers/LexVisualProlog.cxx @@ -162,6 +162,11 @@ static bool isAlphaNum(int ch){ return (ccLu == cc || ccLl == cc || ccLt == cc || ccLm == cc || ccLo == cc || ccNd == cc || ccNl == cc || ccNo == cc); } +static bool isStringVerbatimOpenClose(int ch){ + CharacterCategory cc = CategoriseCharacter(ch); + return (ccPc <= cc && cc <= ccSo); +} + static bool isIdChar(int ch){ return ('_') == ch || isAlphaNum(ch); } @@ -198,11 +203,11 @@ static bool isOpenStringVerbatim(int next, int &closingQuote){ case L';': return false; default: - if (isAlphaNum(next)) { - return false; - } else { + if (isStringVerbatimOpenClose(next)) { closingQuote = next; return true; + } else { + return false; } } } @@ -247,7 +252,7 @@ static void forwardEscapeLiteral(StyleContext &sc, int EscapeState) { void SCI_METHOD LexerVisualProlog::Lex(Sci_PositionU startPos, Sci_Position length, int initStyle, IDocument *pAccess) { LexAccessor styler(pAccess); CharacterSet setDoxygen(CharacterSet::setAlpha, ""); - CharacterSet setNumber(CharacterSet::setNone, "+-.0123456789abcdefABCDEFxoXO"); + CharacterSet setNumber(CharacterSet::setNone, "0123456789abcdefABCDEFxoXO"); StyleContext sc(startPos, length, initStyle, styler, 0x7f); @@ -273,7 +278,7 @@ void SCI_METHOD LexerVisualProlog::Lex(Sci_PositionU startPos, Sci_Position leng break; case SCE_VISUALPROLOG_NUMBER: // We accept almost anything because of hex. and number suffixes - if (!(setNumber.Contains(sc.ch))) { + if (!(setNumber.Contains(sc.ch)) || (sc.Match('.') && IsADigit(sc.chNext))) { sc.SetState(SCE_VISUALPROLOG_DEFAULT); } break; |