diff options
Diffstat (limited to 'lexers/LexSQL.cxx')
| -rw-r--r-- | lexers/LexSQL.cxx | 28 | 
1 files changed, 13 insertions, 15 deletions
| diff --git a/lexers/LexSQL.cxx b/lexers/LexSQL.cxx index ccb88f8dc..dc4bf6697 100644 --- a/lexers/LexSQL.cxx +++ b/lexers/LexSQL.cxx @@ -122,13 +122,11 @@ public :  		return sqlStatesLine;  	} - -	unsigned short int IntoSelectStatement (unsigned short int sqlStatesLine, bool found) { +	unsigned short int IntoSelectStatementOrAssignment (unsigned short int sqlStatesLine, bool found) {  		if (found) -			sqlStatesLine |= MASK_INTO_SELECT_STATEMENT; +			sqlStatesLine |= MASK_INTO_SELECT_STATEMENT_OR_ASSIGNEMENT;  		else -			sqlStatesLine &= ~MASK_INTO_SELECT_STATEMENT; - +			sqlStatesLine &= ~MASK_INTO_SELECT_STATEMENT_OR_ASSIGNEMENT;  		return sqlStatesLine;  	} @@ -161,11 +159,9 @@ public :  	bool IsIntoExceptionBlock (unsigned short int sqlStatesLine) {  		return (sqlStatesLine & MASK_INTO_EXCEPTION) != 0;  	} - -	bool IsIntoSelectStatement (unsigned short int sqlStatesLine) { -		return (sqlStatesLine & MASK_INTO_SELECT_STATEMENT) != 0; +	bool IsIntoSelectStatementOrAssignment (unsigned short int sqlStatesLine) { +		return (sqlStatesLine & MASK_INTO_SELECT_STATEMENT_OR_ASSIGNEMENT) != 0;  	} -  	bool IsCaseMergeWithoutWhenFound (unsigned short int sqlStatesLine) {  		return (sqlStatesLine & MASK_CASE_MERGE_WITHOUT_WHEN_FOUND) != 0;  	} @@ -188,7 +184,7 @@ private :  	SparseState <unsigned short int> sqlStatement;  	enum {  		MASK_NESTED_CASES = 0x01FF, -		MASK_INTO_SELECT_STATEMENT = 0x0200, +		MASK_INTO_SELECT_STATEMENT_OR_ASSIGNEMENT = 0x0200,  		MASK_CASE_MERGE_WITHOUT_WHEN_FOUND = 0x0400,  		MASK_MERGE_STATEMENT = 0x0800,  		MASK_INTO_DECLARE = 0x1000, @@ -608,9 +604,12 @@ void SCI_METHOD LexerSQL::Fold(unsigned int startPos, int length, int initStyle,  				sqlStatesCurrentLine = sqlStates.IntoMergeStatement(sqlStatesCurrentLine, false);  				levelNext--;  			} -			if (sqlStates.IsIntoSelectStatement(sqlStatesCurrentLine)) -				sqlStatesCurrentLine = sqlStates.IntoSelectStatement(sqlStatesCurrentLine, false); +			if (sqlStates.IsIntoSelectStatementOrAssignment(sqlStatesCurrentLine)) +				sqlStatesCurrentLine = sqlStates.IntoSelectStatementOrAssignment(sqlStatesCurrentLine, false);  		} +		if (ch == ':' && chNext == '=' && !IsCommentStyle(style)) +			sqlStatesCurrentLine = sqlStates.IntoSelectStatementOrAssignment(sqlStatesCurrentLine, true); +  		if (options.foldComment && IsStreamCommentStyle(style)) {  			if (!IsStreamCommentStyle(stylePrev)) {  				levelNext++; @@ -666,10 +665,9 @@ void SCI_METHOD LexerSQL::Fold(unsigned int startPos, int length, int initStyle,  			} else {  				s[j] = '\0';  			} -  			if (!options.foldOnlyBegin &&  			        strcmp(s, "select") == 0) { -				sqlStatesCurrentLine = sqlStates.IntoSelectStatement(sqlStatesCurrentLine, true); +				sqlStatesCurrentLine = sqlStates.IntoSelectStatementOrAssignment(sqlStatesCurrentLine, true);  			} else if (strcmp(s, "if") == 0) {  				if (endFound) {  					endFound = false; @@ -766,7 +764,7 @@ void SCI_METHOD LexerSQL::Fold(unsigned int startPos, int length, int initStyle,  			           (strcmp(s, "endif") == 0)) {  				endFound = true;  				levelNext--; -				if (sqlStates.IsIntoSelectStatement(sqlStatesCurrentLine) && !sqlStates.IsCaseMergeWithoutWhenFound(sqlStatesCurrentLine)) +				if (sqlStates.IsIntoSelectStatementOrAssignment(sqlStatesCurrentLine) && !sqlStates.IsCaseMergeWithoutWhenFound(sqlStatesCurrentLine))  					levelNext--;  				if (levelNext < SC_FOLDLEVELBASE) {  					levelNext = SC_FOLDLEVELBASE; | 
