diff options
author | Neil <nyamatongwe@gmail.com> | 2014-09-06 09:27:08 +1000 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2014-09-06 09:27:08 +1000 |
commit | 2fffff0d5d691f314829b0b3c8ecd59707afdb38 (patch) | |
tree | 954a9b0b6056a8ac02667b4ca5638b2c959d24f0 | |
parent | 0e0844fb3f9defe64b4dd4c3103efde3ee917b9a (diff) | |
download | scintilla-mirror-2fffff0d5d691f314829b0b3c8ecd59707afdb38.tar.gz |
Support the q-quote operator as SCE_SQL_QOPERATOR.
From Michael Staszewski.
-rw-r--r-- | doc/ScintillaHistory.html | 4 | ||||
-rw-r--r-- | include/SciLexer.h | 1 | ||||
-rw-r--r-- | include/Scintilla.iface | 1 | ||||
-rw-r--r-- | lexers/LexSQL.cxx | 32 |
4 files changed, 37 insertions, 1 deletions
diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html index b14e6458c..b2fa52fb2 100644 --- a/doc/ScintillaHistory.html +++ b/doc/ScintillaHistory.html @@ -458,6 +458,7 @@ </tr><tr> <td>danselmi</td> <td>Mat Berchtold</td> + <td>Michael Staszewski</td> </tr> </table> <p> @@ -481,6 +482,9 @@ <a href="http://sourceforge.net/p/scintilla/feature-requests/1071/">Feature #1071.</a> </li> <li> + SQL lexer supports the q-quote operator as SCE_SQL_QOPERATOR(24). + </li> + <li> VHDL lexer supports block comments. <a href="http://sourceforge.net/p/scintilla/bugs/1527/">Bug #1527</a>. </li> diff --git a/include/SciLexer.h b/include/SciLexer.h index acb9eacc3..dc75a98b6 100644 --- a/include/SciLexer.h +++ b/include/SciLexer.h @@ -1117,6 +1117,7 @@ #define SCE_SQL_USER3 21 #define SCE_SQL_USER4 22 #define SCE_SQL_QUOTEDIDENTIFIER 23 +#define SCE_SQL_QOPERATOR 24 #define SCE_ST_DEFAULT 0 #define SCE_ST_STRING 1 #define SCE_ST_NUMBER 2 diff --git a/include/Scintilla.iface b/include/Scintilla.iface index a30ed897f..134078786 100644 --- a/include/Scintilla.iface +++ b/include/Scintilla.iface @@ -3827,6 +3827,7 @@ val SCE_SQL_USER2=20 val SCE_SQL_USER3=21 val SCE_SQL_USER4=22 val SCE_SQL_QUOTEDIDENTIFIER=23 +val SCE_SQL_QOPERATOR=24 # Lexical states for SCLEX_SMALLTALK lex Smalltalk=SCLEX_SMALLTALK SCE_ST_ val SCE_ST_DEFAULT=0 diff --git a/lexers/LexSQL.cxx b/lexers/LexSQL.cxx index fa22f8e63..b9f15ea1a 100644 --- a/lexers/LexSQL.cxx +++ b/lexers/LexSQL.cxx @@ -444,6 +444,8 @@ void SCI_METHOD LexerSQL::Lex(unsigned int startPos, int length, int initStyle, StyleContext sc(startPos, length, initStyle, styler); int styleBeforeDCKeyword = SCE_SQL_DEFAULT; int offset = 0; + char qOperator = 0x00; + for (; sc.More(); sc.Forward(), offset++) { // Determine if the current state should terminate. switch (sc.state) { @@ -556,11 +558,39 @@ void SCI_METHOD LexerSQL::Lex(unsigned int startPos, int length, int initStyle, } } break; + case SCE_SQL_QOPERATOR: + if (qOperator == 0x00) { + qOperator = sc.ch; + } else { + char qComplement = 0x00; + + if (qOperator == '<') { + qComplement = '>'; + } else if (qOperator == '(') { + qComplement = ')'; + } else if (qOperator == '{') { + qComplement = '}'; + } else if (qOperator == '[') { + qComplement = ']'; + } else { + qComplement = qOperator; + } + + if (sc.Match(qComplement, '\'')) { + sc.Forward(); + sc.ForwardSetState(SCE_SQL_DEFAULT); + qOperator = 0x00; + } + } + break; } // Determine if a new state should be entered. if (sc.state == SCE_SQL_DEFAULT) { - if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) { + if (sc.Match('q', '\'') || sc.Match('Q', '\'')) { + sc.SetState(SCE_SQL_QOPERATOR); + sc.Forward(); + } else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) { sc.SetState(SCE_SQL_NUMBER); } else if (IsAWordStart(sc.ch)) { sc.SetState(SCE_SQL_IDENTIFIER); |