diff options
| -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); | 
