diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Accessor.cxx | 28 | ||||
| -rw-r--r-- | src/KeyWords.cxx | 465 | 
2 files changed, 196 insertions, 297 deletions
| diff --git a/src/Accessor.cxx b/src/Accessor.cxx index 57b7e4dc4..60c5968c5 100644 --- a/src/Accessor.cxx +++ b/src/Accessor.cxx @@ -63,35 +63,31 @@ void StylingContext::StartAt(unsigned int start, char chMask) {  	Platform::SendScintilla(id, SCI_STARTSTYLING, start, chMask);  } -void StylingContext::ColourSegment(unsigned int start, unsigned int end, int chAttr) { +void StylingContext::StartSegment(unsigned int pos) { +	startSeg = pos; +} + +void StylingContext::ColourTo(unsigned int pos, int chAttr) {  	// Only perform styling if non empty range -	if (end != start - 1) { -		if (end < start) { -			Platform::DebugPrintf("Bad colour positions %d - %d\n", start, end); +	if (pos != startSeg - 1) { +		if (pos < startSeg) { +			Platform::DebugPrintf("Bad colour positions %d - %d\n", startSeg, pos);  		} -		if (validLen + (end - start + 1) >= bufferSize) +		if (validLen + (pos - startSeg + 1) >= bufferSize)  			Flush(); -		if (validLen + (end - start + 1) >= bufferSize) { +		if (validLen + (pos - startSeg + 1) >= bufferSize) {  			// Too big for buffer so send directly -			Platform::SendScintilla(id, SCI_SETSTYLING, end - start + 1, chAttr); +			Platform::SendScintilla(id, SCI_SETSTYLING, pos - startSeg + 1, chAttr);  		} else {  			if (chAttr != chWhile)  				chFlags = 0;  			chAttr |= chFlags; -			for (unsigned int i = start; i <= end; i++) { +			for (unsigned int i = startSeg; i <= pos; i++) {  				styleBuf[validLen++] = chAttr;  			}  		}  	} -} - -void StylingContext::StartSegment(unsigned int pos) { -	startSeg = pos; -} - -void StylingContext::ColourTo(unsigned int pos, int chAttr) { -	ColourSegment(startSeg, pos, chAttr);  	startSeg = pos+1;  } diff --git a/src/KeyWords.cxx b/src/KeyWords.cxx index 029db8064..cf5b3c0d6 100644 --- a/src/KeyWords.cxx +++ b/src/KeyWords.cxx @@ -113,7 +113,7 @@ static void classifyWordCpp(unsigned int start, unsigned int end, WordList &keyw  		if (keywords.InList(s))  			chAttr = SCE_C_WORD;  	} -	styler.ColourSegment(start, end, chAttr); +	styler.ColourTo(end, chAttr);  }  static void ColouriseCppDoc(int codePage, int startPos, int length, @@ -127,9 +127,9 @@ static void ColouriseCppDoc(int codePage, int startPos, int length,  	int state = initStyle;  	char chPrev = ' ';  	char chNext = styler[startPos]; -	int startSeg = startPos;  	unsigned int lengthDoc = startPos + length;  	int visChars = 0; +	styler.StartSegment(startPos);  	for (unsigned int i = startPos; i <= lengthDoc; i++) {  		char ch = chNext;  		chNext = styler.SafeGetCharAt(i + 1); @@ -157,52 +157,43 @@ static void ColouriseCppDoc(int codePage, int startPos, int length,  		if (state == SCE_C_STRINGEOL) {  			if (ch != '\r' && ch != '\n') { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i-1, state);  				state = SCE_C_DEFAULT; -				startSeg = i;  			}  		}  		if (state == SCE_C_DEFAULT) {  			if (iswordstart(ch)) { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i-1, state);  				state = SCE_C_WORD; -				startSeg = i;  			} else if (ch == '/' && chNext == '*') { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i-1, state);  				if (styler.SafeGetCharAt(i + 2) == '*')  					state = SCE_C_COMMENTDOC;  				else  					state = SCE_C_COMMENT; -				startSeg = i;  			} else if (ch == '/' && chNext == '/') { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i-1, state);  				state = SCE_C_COMMENTLINE; -				startSeg = i;  			} else if (ch == '\"') { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i-1, state);  				state = SCE_C_STRING; -				startSeg = i;  			} else if (ch == '\'') { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i-1, state);  				state = SCE_C_CHARACTER; -				startSeg = i;  			} else if (ch == '#') { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i-1, state);  				state = SCE_C_PREPROCESSOR; -				startSeg = i;  			} else if (isoperator(ch)) { -				styler.ColourSegment(startSeg, i - 1, state); -				styler.ColourSegment(i, i, SCE_C_OPERATOR); -				startSeg = i + 1; +				styler.ColourTo(i-1, state); +				styler.ColourTo(i, SCE_C_OPERATOR);  				if ((ch == '{') || (ch == '}')) {  					levelCurrent += (ch == '{') ? 1 : -1;  				}  			}  		} else if (state == SCE_C_WORD) {  			if (!iswordchar(ch)) { -				classifyWordCpp(startSeg, i - 1, keywords, styler); +				classifyWordCpp(styler.GetStartSegment(), i - 1, keywords, styler);  				state = SCE_C_DEFAULT; -				startSeg = i;  				if (ch == '/' && chNext == '*') {  					if (styler.SafeGetCharAt(i + 2) == '*')  						state = SCE_C_COMMENTDOC; @@ -217,8 +208,7 @@ static void ColouriseCppDoc(int codePage, int startPos, int length,  				} else if (ch == '#') {  					state = SCE_C_PREPROCESSOR;  				} else if (isoperator(ch)) { -					styler.ColourSegment(startSeg, i, SCE_C_OPERATOR); -					startSeg = i + 1; +					styler.ColourTo(i, SCE_C_OPERATOR);  					if ((ch == '{') || (ch == '}')) {  						levelCurrent += (ch == '{') ? 1 : -1;  					} @@ -227,35 +217,36 @@ static void ColouriseCppDoc(int codePage, int startPos, int length,  		} else {  			if (state == SCE_C_PREPROCESSOR) {  				if ((ch == '\r' || ch == '\n') && (chPrev != '\\')) { -					styler.ColourSegment(startSeg, i - 1, state); +					styler.ColourTo(i-1, state);  					state = SCE_C_DEFAULT; -					startSeg = i;  				}  			} else if (state == SCE_C_COMMENT) { -				if (ch == '/' && chPrev == '*' && ( -				            (i > startSeg + 2) || ((initStyle == SCE_C_COMMENT) && (startSeg == startPos)))) { -					styler.ColourSegment(startSeg, i, state); -					state = SCE_C_DEFAULT; -					startSeg = i + 1; +				if (ch == '/' && chPrev == '*') { +					if (((i > styler.GetStartSegment() + 2) || ( +						(initStyle == SCE_C_COMMENT) &&  +						(styler.GetStartSegment() == startPos)))) { +						styler.ColourTo(i, state); +						state = SCE_C_DEFAULT; +					}  				}  			} else if (state == SCE_C_COMMENTDOC) { -				if (ch == '/' && chPrev == '*' && ( -				            (i > startSeg + 3) || ((initStyle == SCE_C_COMMENTDOC) && (startSeg == startPos)))) { -					styler.ColourSegment(startSeg, i, state); -					state = SCE_C_DEFAULT; -					startSeg = i + 1; +				if (ch == '/' && chPrev == '*') { +					if (((i > styler.GetStartSegment() + 3) || ( +						(initStyle == SCE_C_COMMENTDOC) &&  +						(styler.GetStartSegment() == startPos)))) { +						styler.ColourTo(i, state); +						state = SCE_C_DEFAULT; +					}  				}  			} else if (state == SCE_C_COMMENTLINE) {  				if (ch == '\r' || ch == '\n') { -					styler.ColourSegment(startSeg, i - 1, state); +					styler.ColourTo(i-1, state);  					state = SCE_C_DEFAULT; -					startSeg = i;  				}  			} else if (state == SCE_C_STRING) {  				if ((ch == '\r' || ch == '\n') && (chPrev != '\\')) { -					styler.ColourSegment(startSeg, i - 1, state); +					styler.ColourTo(i-1, state);  					state = SCE_C_STRINGEOL; -					startSeg = i;  				} else if (ch == '\\') {  					if (chNext == '\"' || chNext == '\'' || chNext == '\\') {  						i++; @@ -263,18 +254,16 @@ static void ColouriseCppDoc(int codePage, int startPos, int length,  						chNext = styler.SafeGetCharAt(i + 1);  					}  				} else if (ch == '\"') { -					styler.ColourSegment(startSeg, i, state); +					styler.ColourTo(i, state);  					state = SCE_C_DEFAULT;  					i++;  					ch = chNext;  					chNext = styler.SafeGetCharAt(i + 1); -					startSeg = i;  				}  			} else if (state == SCE_C_CHARACTER) {  				if ((ch == '\r' || ch == '\n') && (chPrev != '\\')) { -					styler.ColourSegment(startSeg, i - 1, state); +					styler.ColourTo(i-1, state);  					state = SCE_C_STRINGEOL; -					startSeg = i;  				} else if (ch == '\\') {  					if (chNext == '\"' || chNext == '\'' || chNext == '\\') {  						i++; @@ -282,12 +271,11 @@ static void ColouriseCppDoc(int codePage, int startPos, int length,  						chNext = styler.SafeGetCharAt(i + 1);  					}  				} else if (ch == '\'') { -					styler.ColourSegment(startSeg, i, state); +					styler.ColourTo(i, state);  					state = SCE_C_DEFAULT;  					i++;  					ch = chNext;  					chNext = styler.SafeGetCharAt(i + 1); -					startSeg = i;  				}  			}  			if (state == SCE_C_DEFAULT) {    // One of the above succeeded @@ -307,8 +295,7 @@ static void ColouriseCppDoc(int codePage, int startPos, int length,  				} else if (iswordstart(ch)) {  					state = SCE_C_WORD;  				} else if (isoperator(ch)) { -					styler.ColourSegment(startSeg, i, SCE_C_OPERATOR); -					startSeg = i + 1; +					styler.ColourTo(i, SCE_C_OPERATOR);  					if ((ch == '{') || (ch == '}')) {  						levelCurrent += (ch == '{') ? 1 : -1;  					} @@ -317,8 +304,8 @@ static void ColouriseCppDoc(int codePage, int startPos, int length,  		}  		chPrev = ch;  	} -	if (startSeg < lengthDoc) -		styler.ColourSegment(startSeg, lengthDoc - 1, state); +	styler.ColourTo(lengthDoc - 1, state); +  	// Fill in the real level of the next line, keeping the current flags as they will be filled in later  	if (fold) {  		int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK; @@ -356,7 +343,7 @@ static int classifyWordPerl(unsigned int start, unsigned int end, WordList &keyw  		if (keywords.InList(s))  			chAttr = SCE_PL_WORD;  	} -	styler.ColourSegment(start, end, chAttr); +	styler.ColourTo(end, chAttr);  	return chAttr;  } @@ -423,7 +410,7 @@ static void ColourisePerlDoc(int codePage, int startPos, int length, int initSty  	styler.StartAt(startPos);  	char chPrev = ' ';  	char chNext = styler[startPos]; -	int startSeg = startPos; +	styler.StartSegment(startPos);  	for (int i = startPos; i <= lengthDoc; i++) {  		char ch = chNext;  		chNext = styler.SafeGetCharAt(i + 1); @@ -438,33 +425,29 @@ static void ColourisePerlDoc(int codePage, int startPos, int length, int initSty  		if (state == SCE_PL_DEFAULT) {  			if (iswordstart(ch)) { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				if (ch == 's' && !isalnum(chNext)) {  					state = SCE_PL_REGSUBST;  					quotes = 0;  					quoteUp = '\0';  					quoteDown = '\0';  					quoteRep = 2; -					startSeg = i;  				} else if (ch == 'm' && !isalnum(chNext)) {  					state = SCE_PL_REGEX;  					quotes = 0;  					quoteUp = '\0';  					quoteDown = '\0';  					quoteRep = 1; -					startSeg = i;  				} else if (ch == 't' && chNext == 'r' && !isalnum(chNext2)) {  					state = SCE_PL_REGSUBST;  					quotes = 0;  					quoteUp = '\0';  					quoteDown = '\0';  					quoteRep = 2; -					startSeg = i;  					i++;  					chNext = chNext2;  				} else if (ch == 'q' && (chNext == 'q' || chNext == 'r' || chNext == 'w' || chNext == 'x') && !isalnum(chNext2)) {  					state = SCE_PL_LONGQUOTE; -					startSeg = i;  					i++;  					chNext = chNext2;  					quotes = 0; @@ -473,93 +456,75 @@ static void ColourisePerlDoc(int codePage, int startPos, int length, int initSty  					quoteRep = 1;  				} else {  					state = SCE_PL_WORD; -					startSeg = i;  					preferRE = false;  				}  			} else if (ch == '#') { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				state = SCE_PL_COMMENTLINE; -				startSeg = i;  			} else if (ch == '\"') { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				state = SCE_PL_STRING; -				startSeg = i;  			} else if (ch == '\'') {  				if (chPrev == '&') {  					// Archaic call -					styler.ColourSegment(i, i, state); -					startSeg = i + 1; +					styler.ColourTo(i, state);  				} else { -					styler.ColourSegment(startSeg, i - 1, state); +					styler.ColourTo(i - 1, state);  					state = SCE_PL_CHARACTER; -					startSeg = i;  				}  			} else if (ch == '`') { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				state = SCE_PL_BACKTICKS; -				startSeg = i;  			} else if (ch == '$') {  				preferRE = false; -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				if (isalnum(chNext) || chNext == '#' || chNext == '$' || chNext == '_') {  					state = SCE_PL_SCALAR; -					startSeg = i;  				} else if (chNext != '{' && chNext != '[') { -					styler.ColourSegment(i - 1, i, SCE_PL_SCALAR); +					styler.ColourTo(i, SCE_PL_SCALAR);  					i++; -					startSeg = i + 1;  					ch = ' ';  					chNext = ' ';  				} else { -					styler.ColourSegment(i, i, SCE_PL_SCALAR); -					startSeg = i + 1; +					styler.ColourTo(i, SCE_PL_SCALAR);  				}  			} else if (ch == '@') {  				preferRE = false; -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				if (isalpha(chNext) || chNext == '#' || chNext == '$' || chNext == '_') {  					state = SCE_PL_ARRAY; -					startSeg = i;  				} else if (chNext != '{' && chNext != '[') { -					styler.ColourSegment(i - 1, i, SCE_PL_ARRAY); +					styler.ColourTo(i, SCE_PL_ARRAY);  					i++; -					startSeg = i + 1;  					ch = ' ';  				} else { -					styler.ColourSegment(i, i, SCE_PL_ARRAY); -					startSeg = i + 1; +					styler.ColourTo(i, SCE_PL_ARRAY);  				}  			} else if (ch == '%') {  				preferRE = false; -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				if (isalpha(chNext) || chNext == '#' || chNext == '$' || chNext == '_') {  					state = SCE_PL_HASH; -					startSeg = i;  				} else if (chNext != '{' && chNext != '[') { -					styler.ColourSegment(i - 1, i, SCE_PL_HASH); +					styler.ColourTo(i, SCE_PL_HASH);  					i++; -					startSeg = i + 1;  					ch = ' ';  				} else { -					styler.ColourSegment(i, i, SCE_PL_HASH); -					startSeg = i + 1; +					styler.ColourTo(i, SCE_PL_HASH);  				}  			} else if (ch == '*') { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				state = SCE_PL_SYMBOLTABLE; -				startSeg = i;  			} else if (ch == '/' && preferRE) { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				state = SCE_PL_REGEX;  				quoteUp = '/';  				quoteDown = '/';  				quotes = 1;  				quoteRep = 1; -				startSeg = i;  			} else if (ch == '<' && chNext == '<') { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				state = SCE_PL_HERE; -				startSeg = i;  				i++;  				ch = chNext;  				chNext = chNext2; @@ -567,9 +532,8 @@ static void ColourisePerlDoc(int codePage, int startPos, int length, int initSty  				sookedpos = 0;  				sooked[sookedpos] = '\0';  			} else if (ch == '=' && isalpha(chNext)) { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				state = SCE_PL_POD; -				startSeg = i;  				quotes = 0;  				sookedpos = 0;  				sooked[sookedpos] = '\0'; @@ -578,23 +542,21 @@ static void ColourisePerlDoc(int codePage, int startPos, int length, int initSty  					preferRE = false;  				else  					preferRE = true; -				styler.ColourSegment(startSeg, i - 1, state); -				styler.ColourSegment(i, i, SCE_PL_OPERATOR); -				startSeg = i + 1; +				styler.ColourTo(i - 1, state); +				styler.ColourTo(i, SCE_PL_OPERATOR);  			}  		} else if (state == SCE_PL_WORD) {  			if (!iswordchar(ch) && ch != '\'') {	// Archaic Perl has quotes inside names -				if (isMatch(styler, lengthDoc, startSeg, "__DATA__")) { -					styler.ColourSegment(startSeg, i, SCE_PL_DATASECTION); +				if (isMatch(styler, lengthDoc, styler.GetStartSegment(), "__DATA__")) { +					styler.ColourTo(i, SCE_PL_DATASECTION);  					state = SCE_PL_DATASECTION; -				} else if (isMatch(styler, lengthDoc, startSeg, "__END__")) { -					styler.ColourSegment(startSeg, i, SCE_PL_DATASECTION); +				} else if (isMatch(styler, lengthDoc, styler.GetStartSegment(), "__END__")) { +					styler.ColourTo(i, SCE_PL_DATASECTION);  					state = SCE_PL_DATASECTION;  				} else { -					if (classifyWordPerl(startSeg, i - 1, keywords, styler) == SCE_PL_WORD) +					if (classifyWordPerl(styler.GetStartSegment(), i - 1, keywords, styler) == SCE_PL_WORD)  						preferRE = true;  					state = SCE_PL_DEFAULT; -					startSeg = i;  					if (ch == '#') {  						state = SCE_PL_COMMENTLINE;  					} else if (ch == '\"') { @@ -604,7 +566,6 @@ static void ColourisePerlDoc(int codePage, int startPos, int length, int initSty  					} else if (ch == '<' && chNext == '<') {  						state = SCE_PL_HERE;  						quotes = 0; -						startSeg = i;  						sookedpos = 0;  						sooked[sookedpos] = '\0';  					} else if (isPerlOperator(ch)) { @@ -612,18 +573,16 @@ static void ColourisePerlDoc(int codePage, int startPos, int length, int initSty  							preferRE = false;  						else  							preferRE = true; -						styler.ColourSegment(startSeg, i, SCE_PL_OPERATOR); +						styler.ColourTo(i, SCE_PL_OPERATOR);  						state = SCE_PL_DEFAULT; -						startSeg = i + 1;  					}  				}  			}  		} else {  			if (state == SCE_PL_COMMENTLINE) {  				if (ch == '\r' || ch == '\n') { -					styler.ColourSegment(startSeg, i - 1, state); +					styler.ColourTo(i - 1, state);  					state = SCE_PL_DEFAULT; -					startSeg = i;  				}  			} else if (state == SCE_PL_HERE) {  				if (isalnum(ch) && quotes < 2) { @@ -636,10 +595,9 @@ static void ColourisePerlDoc(int codePage, int startPos, int length, int initSty  				}  				if (quotes > 1 && isMatch(styler, lengthDoc, i, sooked)) { -					styler.ColourSegment(startSeg, i + sookedpos - 1, SCE_PL_HERE); +					styler.ColourTo(i + sookedpos - 1, SCE_PL_HERE);  					state = SCE_PL_DEFAULT;  					i += sookedpos; -					startSeg = i;  					chNext = ' ';  				}  			} else if (state == SCE_PL_STRING) { @@ -650,12 +608,11 @@ static void ColourisePerlDoc(int codePage, int startPos, int length, int initSty  						chNext = styler.SafeGetCharAt(i + 1);  					}  				} else if (ch == '\"') { -					styler.ColourSegment(startSeg, i, state); +					styler.ColourTo(i, state);  					state = SCE_PL_DEFAULT;  					i++;  					ch = chNext;  					chNext = styler.SafeGetCharAt(i + 1); -					startSeg = i;  				}  			} else if (state == SCE_PL_CHARACTER) {  				if (ch == '\\') { @@ -665,28 +622,25 @@ static void ColourisePerlDoc(int codePage, int startPos, int length, int initSty  						chNext = styler.SafeGetCharAt(i + 1);  					}  				} else if (ch == '\'') { -					styler.ColourSegment(startSeg, i, state); +					styler.ColourTo(i, state);  					state = SCE_PL_DEFAULT;  					i++;  					ch = chNext;  					chNext = styler.SafeGetCharAt(i + 1); -					startSeg = i;  				}  			} else if (state == SCE_PL_BACKTICKS) {  				if (ch == '`') { -					styler.ColourSegment(startSeg, i, state); +					styler.ColourTo(i, state);  					state = SCE_PL_DEFAULT;  					i++;  					ch = chNext;  					chNext = styler.SafeGetCharAt(i + 1); -					startSeg = i;  				}  			} else if (state == SCE_PL_POD) {  				if (ch == '=') {  					if (isMatch(styler, lengthDoc, i, "=cut")) { -						styler.ColourSegment(startSeg, i - 1 + 4, state); +						styler.ColourTo(i - 1 + 4, state);  						i += 4; -						startSeg = i;  						state = SCE_PL_DEFAULT;  						chNext = ' ';  						ch = ' '; @@ -694,32 +648,27 @@ static void ColourisePerlDoc(int codePage, int startPos, int length, int initSty  				}  			} else if (state == SCE_PL_SCALAR) {  				if (isEndVar(ch)) { -					styler.ColourSegment(startSeg, i - 1, state); -					startSeg = i; +					styler.ColourTo(i - 1, state);  					state = SCE_PL_DEFAULT;  				}  			} else if (state == SCE_PL_ARRAY) {  				if (isEndVar(ch)) { -					styler.ColourSegment(startSeg, i - 1, state); -					startSeg = i; +					styler.ColourTo(i - 1, state);  					state = SCE_PL_DEFAULT;  				}  			} else if (state == SCE_PL_HASH) {  				if (isEndVar(ch)) { -					styler.ColourSegment(startSeg, i - 1, state); -					startSeg = i; +					styler.ColourTo(i - 1, state);  					state = SCE_PL_DEFAULT;  				}  			} else if (state == SCE_PL_SYMBOLTABLE) {  				if (isEndVar(ch)) { -					styler.ColourSegment(startSeg, i - 1, state); -					startSeg = i; +					styler.ColourTo(i - 1, state);  					state = SCE_PL_DEFAULT;  				}  			} else if (state == SCE_PL_REF) {  				if (isEndVar(ch)) { -					styler.ColourSegment(startSeg, i - 1, state); -					startSeg = i; +					styler.ColourTo(i - 1, state);  					state = SCE_PL_DEFAULT;  				}  			} else if (state == SCE_PL_REGEX) { @@ -738,8 +687,7 @@ static void ColourisePerlDoc(int codePage, int startPos, int length, int initSty  						}  						if (!isalpha(chNext)) {  							if (quoteRep <= 0) { -								styler.ColourSegment(startSeg, i, state); -								startSeg = i + 1; +								styler.ColourTo(i, state);  								state = SCE_PL_DEFAULT;  								ch = ' ';  							} @@ -748,8 +696,7 @@ static void ColourisePerlDoc(int codePage, int startPos, int length, int initSty  						quotes++;  					} else if (!isalpha(chNext)) {  						if (quoteRep <= 0) { -							styler.ColourSegment(startSeg, i, state); -							startSeg = i + 1; +							styler.ColourTo(i, state);  							state = SCE_PL_DEFAULT;  							ch = ' ';  						} @@ -768,8 +715,7 @@ static void ColourisePerlDoc(int codePage, int startPos, int length, int initSty  						}  						if (!isalpha(chNext)) {  							if (quoteRep <= 0) { -								styler.ColourSegment(startSeg, i, state); -								startSeg = i + 1; +								styler.ColourTo(i, state);  								state = SCE_PL_DEFAULT;  								ch = ' ';  							} @@ -781,8 +727,7 @@ static void ColourisePerlDoc(int codePage, int startPos, int length, int initSty  						quotes++;  					} else if (!isalpha(chNext)) {  						if (quoteRep <= 0) { -							styler.ColourSegment(startSeg, i, state); -							startSeg = i + 1; +							styler.ColourTo(i, state);  							state = SCE_PL_DEFAULT;  							ch = ' ';  						} @@ -798,8 +743,7 @@ static void ColourisePerlDoc(int codePage, int startPos, int length, int initSty  					if (quotes == 0) {  						quoteRep--;  						if (quoteRep <= 0) { -							styler.ColourSegment(startSeg, i, state); -							startSeg = i + 1; +							styler.ColourTo(i, state);  							state = SCE_PL_DEFAULT;  							ch = ' ';  						} @@ -823,15 +767,13 @@ static void ColourisePerlDoc(int codePage, int startPos, int length, int initSty  					state = SCE_PL_WORD;  					preferRE = false;  				} else if (isoperator(ch)) { -					styler.ColourSegment(startSeg, i, SCE_PL_OPERATOR); -					startSeg = i + 1; +					styler.ColourTo(i, SCE_PL_OPERATOR);  				}  			}  		}  		chPrev = ch;  	} -	if (startSeg < lengthDoc) -		styler.ColourSegment(startSeg, lengthDoc, state); +	styler.ColourTo(lengthDoc, state);  } @@ -852,7 +794,7 @@ static int classifyWordVB(unsigned int start, unsigned int end, WordList &keywor  				chAttr = SCE_C_COMMENTLINE;  		}  	} -	styler.ColourSegment(start, end, chAttr); +	styler.ColourTo(end, chAttr);  	if (chAttr == SCE_C_COMMENTLINE)  		return SCE_C_COMMENTLINE;  	else @@ -863,7 +805,7 @@ static void ColouriseVBDoc(int codePage, int startPos, int length, int initStyle                             WordList &keywords, StylingContext &styler) {  	int state = initStyle;  	char chNext = styler[startPos]; -	int startSeg = startPos; +	styler.StartSegment(startPos);  	int lengthDoc = startPos + length;  	for (int i = startPos; i < lengthDoc; i++) {  		char ch = chNext; @@ -877,23 +819,19 @@ static void ColouriseVBDoc(int codePage, int startPos, int length, int initStyle  		if (state == SCE_C_DEFAULT) {  			if (iswordstart(ch)) { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				state = SCE_C_WORD; -				startSeg = i;  			} else if (ch == '\'') { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				state = SCE_C_COMMENTLINE; -				startSeg = i;  			} else if (ch == '\"') { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				state = SCE_C_STRING; -				startSeg = i;  			}  		} else if (state == SCE_C_WORD) {  			if (!iswordchar(ch)) { -				state = classifyWordVB(startSeg, i - 1, keywords, styler); +				state = classifyWordVB(styler.GetStartSegment(), i - 1, keywords, styler);  				if (state == SCE_C_DEFAULT) { -					startSeg = i;  					if (ch == '\'') {  						state = SCE_C_COMMENTLINE;  					} else if (ch == '\"') { @@ -904,19 +842,17 @@ static void ColouriseVBDoc(int codePage, int startPos, int length, int initStyle  		} else {  			if (state == SCE_C_COMMENTLINE) {  				if (ch == '\r' || ch == '\n') { -					styler.ColourSegment(startSeg, i - 1, state); +					styler.ColourTo(i - 1, state);  					state = SCE_C_DEFAULT; -					startSeg = i;  				}  			} else if (state == SCE_C_STRING) {  				// VB doubles quotes to preserve them  				if (ch == '\"') { -					styler.ColourSegment(startSeg, i, state); +					styler.ColourTo(i, state);  					state = SCE_C_DEFAULT;  					i++;  					ch = chNext;  					chNext = styler.SafeGetCharAt(i + 1); -					startSeg = i;  				}  			}  			if (state == SCE_C_DEFAULT) {    // One of the above succeeded @@ -930,8 +866,7 @@ static void ColouriseVBDoc(int codePage, int startPos, int length, int initStyle  			}  		}  	} -	if (startSeg < lengthDoc) -		styler.ColourSegment(startSeg, lengthDoc, state); +	styler.ColourTo(lengthDoc, state);  }  static void classifyWordPy(unsigned int start, unsigned int end, WordList &keywords, StylingContext &styler, char *prevWord) { @@ -950,7 +885,7 @@ static void classifyWordPy(unsigned int start, unsigned int end, WordList &keywo  		chAttr = SCE_P_NUMBER;  	else if (keywords.InList(s))  		chAttr = SCE_P_WORD; -	styler.ColourSegment(start, end, chAttr); +	styler.ColourTo(end, chAttr);  	strcpy(prevWord, s);  } @@ -976,7 +911,7 @@ static void ColourisePyDoc(int codePage, int startPos, int length, int initStyle  	char chPrev2 = ' ';  	char chNext = styler[startPos];  	char chNext2 = styler[startPos]; -	int startSeg = startPos; +	styler.StartSegment(startPos);  	int lengthDoc = startPos + length;  	bool atStartLine = true;  	for (int i = startPos; i <= lengthDoc; i++) { @@ -1002,8 +937,7 @@ static void ColourisePyDoc(int codePage, int startPos, int length, int initStyle  			if ((state == SCE_P_DEFAULT) || (state == SCE_P_TRIPLE) || (state == SCE_P_TRIPLEDOUBLE)) {  				// Perform colourisation of white space and triple quoted strings at end of each line to allow  				// tab marking to work inside white space and triple quoted strings -				styler.ColourSegment(startSeg, i, state); -				startSeg = i + 1; +				styler.ColourTo(i, state);  			}  			int lev = indentCurrent; @@ -1032,23 +966,19 @@ static void ColourisePyDoc(int codePage, int startPos, int length, int initStyle  		if (state == SCE_P_STRINGEOL) {  			if (ch != '\r' && ch != '\n') { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				state = SCE_P_DEFAULT; -				startSeg = i;  			}  		}  		if (state == SCE_P_DEFAULT) {  			if (iswordstart(ch)) { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				state = SCE_P_WORD; -				startSeg = i;  			} else if (ch == '#') { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				state = chNext == '#' ? SCE_P_COMMENTBLOCK : SCE_P_COMMENTLINE; -				startSeg = i;  			} else if (ch == '\"') { -				styler.ColourSegment(startSeg, i - 1, state); -				startSeg = i; +				styler.ColourTo(i - 1, state);  				if (chNext == '\"' && chNext2 == '\"') {  					i += 2;  					state = SCE_P_TRIPLEDOUBLE; @@ -1059,8 +989,7 @@ static void ColourisePyDoc(int codePage, int startPos, int length, int initStyle  					state = SCE_P_STRING;  				}  			} else if (ch == '\'') { -				styler.ColourSegment(startSeg, i - 1, state); -				startSeg = i; +				styler.ColourTo(i - 1, state);  				if (chNext == '\'' && chNext2 == '\'') {  					i += 2;  					state = SCE_P_TRIPLE; @@ -1071,15 +1000,13 @@ static void ColourisePyDoc(int codePage, int startPos, int length, int initStyle  					state = SCE_P_CHARACTER;  				}  			} else if (isoperator(ch)) { -				styler.ColourSegment(startSeg, i - 1, state); -				styler.ColourSegment(i, i, SCE_P_OPERATOR); -				startSeg = i + 1; +				styler.ColourTo(i - 1, state); +				styler.ColourTo(i, SCE_P_OPERATOR);  			}  		} else if (state == SCE_P_WORD) {  			if (!iswordchar(ch)) { -				classifyWordPy(startSeg, i - 1, keywords, styler, prevWord); +				classifyWordPy(styler.GetStartSegment(), i - 1, keywords, styler, prevWord);  				state = SCE_P_DEFAULT; -				startSeg = i;  				if (ch == '#') {  					state = chNext == '#' ? SCE_P_COMMENTBLOCK : SCE_P_COMMENTLINE;  				} else if (ch == '\"') { @@ -1103,22 +1030,19 @@ static void ColourisePyDoc(int codePage, int startPos, int length, int initStyle  						state = SCE_P_CHARACTER;  					}  				} else if (isoperator(ch)) { -					styler.ColourSegment(startSeg, i, SCE_P_OPERATOR); -					startSeg = i + 1; +					styler.ColourTo(i, SCE_P_OPERATOR);  				}  			}  		} else {  			if (state == SCE_P_COMMENTLINE || state == SCE_P_COMMENTBLOCK) {  				if (ch == '\r' || ch == '\n') { -					styler.ColourSegment(startSeg, i - 1, state); +					styler.ColourTo(i - 1, state);  					state = SCE_P_DEFAULT; -					startSeg = i;  				}  			} else if (state == SCE_P_STRING) {  				if ((ch == '\r' || ch == '\n') && (chPrev != '\\')) { -					styler.ColourSegment(startSeg, i - 1, state); +					styler.ColourTo(i - 1, state);  					state = SCE_P_STRINGEOL; -					startSeg = i;  				} else if (ch == '\\') {  					if (chNext == '\"' || chNext == '\'' || chNext == '\\') {  						i++; @@ -1126,15 +1050,13 @@ static void ColourisePyDoc(int codePage, int startPos, int length, int initStyle  						chNext = styler.SafeGetCharAt(i + 1);  					}  				} else if (ch == '\"') { -					styler.ColourSegment(startSeg, i, state); +					styler.ColourTo(i, state);  					state = SCE_P_DEFAULT; -					startSeg = i + 1;  				}  			} else if (state == SCE_P_CHARACTER) {  				if ((ch == '\r' || ch == '\n') && (chPrev != '\\')) { -					styler.ColourSegment(startSeg, i - 1, state); +					styler.ColourTo(i - 1, state);  					state = SCE_P_STRINGEOL; -					startSeg = i;  				} else if (ch == '\\') {  					if (chNext == '\"' || chNext == '\'' || chNext == '\\') {  						i++; @@ -1142,76 +1064,60 @@ static void ColourisePyDoc(int codePage, int startPos, int length, int initStyle  						chNext = styler.SafeGetCharAt(i + 1);  					}  				} else if (ch == '\'') { -					styler.ColourSegment(startSeg, i, state); +					styler.ColourTo(i, state);  					state = SCE_P_DEFAULT; -					startSeg = i + 1;  				}  			} else if (state == SCE_P_TRIPLE) {  				if (ch == '\'' && chPrev == '\'' && chPrev2 == '\'') { -					styler.ColourSegment(startSeg, i, state); +					styler.ColourTo(i, state);  					state = SCE_P_DEFAULT; -					startSeg = i + 1;  				}  			} else if (state == SCE_P_TRIPLEDOUBLE) {  				if (ch == '\"' && chPrev == '\"' && chPrev2 == '\"') { -					styler.ColourSegment(startSeg, i, state); +					styler.ColourTo(i, state);  					state = SCE_P_DEFAULT; -					startSeg = i + 1;  				}  			}  		}  		chPrev2 = chPrev;  		chPrev = ch;  	} -	if (startSeg <= lengthDoc) { -		if (state == SCE_P_DEFAULT) { -			styler.ColourSegment(startSeg, lengthDoc, state); -		} else if (state == SCE_P_WORD) { -			classifyWordPy(startSeg, lengthDoc, keywords, styler, prevWord); -		} else if (state == SCE_P_COMMENTLINE) { -			styler.ColourSegment(startSeg, lengthDoc, state); -		} else if (state == SCE_P_COMMENTBLOCK) { -			styler.ColourSegment(startSeg, lengthDoc, state); -		} else if (state == SCE_P_STRING) { -			styler.ColourSegment(startSeg, lengthDoc, state); -		} else if (state == SCE_P_CHARACTER) { -			styler.ColourSegment(startSeg, lengthDoc, state); -		} else if (state == SCE_P_TRIPLE) { -			styler.ColourSegment(startSeg, lengthDoc, state); -		} else if (state == SCE_P_TRIPLEDOUBLE) { -			styler.ColourSegment(startSeg, lengthDoc, state); -		} +	if (state == SCE_P_WORD) { +		classifyWordPy(styler.GetStartSegment(), lengthDoc, keywords, styler, prevWord); +	} else { +		styler.ColourTo(lengthDoc, state);  	}  } -static void ColouriseBatchLine(char *lineBuffer, int lengthLine, StylingContext &styler) { +static void ColouriseBatchLine(char *lineBuffer, int endLine, StylingContext &styler) {  	if (0 == strncmp(lineBuffer, "REM", 3)) { -		styler.ColourSegment(0, lengthLine - 1, 1); +		styler.ColourTo(endLine, 1);  	} else if (0 == strncmp(lineBuffer, "rem", 3)) { -		styler.ColourSegment(0, lengthLine - 1, 1); +		styler.ColourTo(endLine, 1);  	} else if (0 == strncmp(lineBuffer, "SET", 3)) { -		styler.ColourSegment(0, lengthLine - 1, 2); +		styler.ColourTo(endLine, 2);  	} else if (0 == strncmp(lineBuffer, "set", 3)) { -		styler.ColourSegment(0, lengthLine - 1, 2); +		styler.ColourTo(endLine, 2);  	} else if (lineBuffer[0] == ':') { -		styler.ColourSegment(0, lengthLine - 1, 3); +		styler.ColourTo(endLine, 3);  	} else { -		styler.ColourSegment(0, lengthLine - 1, 0); +		styler.ColourTo(endLine, 0);  	}  }  static void ColouriseBatchDoc(int startPos, int length, int, StylingContext &styler) {  	char lineBuffer[1024]; +	styler.StartSegment(startPos);  	unsigned int linePos = 0;  	for (int i = startPos; i < startPos + length; i++) {  		lineBuffer[linePos++] = styler[i];  		if (styler[i] == '\r' || styler[i] == '\n' || (linePos >= sizeof(lineBuffer) - 1)) { -			ColouriseBatchLine(lineBuffer, linePos, styler); +			ColouriseBatchLine(lineBuffer, i, styler);  			linePos = 0;  		}  	}  	if (linePos > 0) -		ColouriseBatchLine(lineBuffer, linePos, styler); +		ColouriseBatchLine(lineBuffer, startPos + length, styler);  }  enum { eScriptNone, eScriptJS, eScriptVBS, eScriptPython }; @@ -2327,85 +2233,90 @@ static void ColouriseHyperTextDoc(int codePage, int startPos, int length,  	styler.ColourTo(lengthDoc - 1, state);  } -static void ColourisePropsLine(char *lineBuffer, int lengthLine, StylingContext &styler) { +static void ColourisePropsLine(char *lineBuffer, int lengthLine, int startLine, int endPos, StylingContext &styler) {  	int i = 0;  	while (isspace(lineBuffer[i]) && (i < lengthLine))	// Skip initial spaces  		i++;  	if (lineBuffer[i] == '#' || lineBuffer[i] == '!' || lineBuffer[i] == ';') { -		styler.ColourSegment(0, lengthLine - 1, 1); +		styler.ColourTo(endPos, 1);  	} else if (lineBuffer[i] == '[') { -		styler.ColourSegment(0, lengthLine - 1, 2); +		styler.ColourTo(endPos, 2);  	} else if (lineBuffer[i] == '@') { -		styler.ColourSegment(0, i, 4); +		styler.ColourTo(startLine+i, 4);  		if (lineBuffer[++i] == '=') -			styler.ColourSegment(i, i, 3); -		if (++i < lengthLine) -			styler.ColourSegment(i, lengthLine - 1, 0); +			styler.ColourTo(startLine+i, 3); +		styler.ColourTo(endPos, 0);  	} else {  		while (lineBuffer[i] != '=' && (i < lengthLine))	// Search the '=' character  			i++;  		if (lineBuffer[i] == '=') { -			styler.ColourSegment(0, i - 1, 0); -			styler.ColourSegment(i, i, 3); -			if (++i < lengthLine) -				styler.ColourSegment(i, lengthLine - 1, 0); -		} else -			styler.ColourSegment(0, lengthLine - 1, 0); +			styler.ColourTo(startLine+i-1, 0); +			styler.ColourTo(startLine+i, 3); +			styler.ColourTo(endPos, 0); +		} else { +			styler.ColourTo(endPos, 0); +		}  	}  }  static void ColourisePropsDoc(int startPos, int length, int, StylingContext &styler) {  	char lineBuffer[1024]; +	styler.StartSegment(startPos);  	unsigned int linePos = 0; +	int startLine = startPos;  	for (int i = startPos; i <= startPos + length; i++) {  		lineBuffer[linePos++] = styler[i]; -		if (styler[i] == '\r' || styler[i] == '\n' || (linePos >= sizeof(lineBuffer) - 1)) { +		if ((styler[i] == '\r' && styler.SafeGetCharAt(i+1) != '\n') ||  +			styler[i] == '\n' ||  +			(linePos >= sizeof(lineBuffer) - 1)) {  			lineBuffer[linePos] = '\0'; -			ColourisePropsLine(lineBuffer, linePos, styler); +			ColourisePropsLine(lineBuffer, linePos, startLine, i, styler);  			linePos = 0; +			startLine = i+1;  		}  	}  	if (linePos > 0) -		ColourisePropsLine(lineBuffer, linePos, styler); +		ColourisePropsLine(lineBuffer, linePos, startLine, startPos + length, styler);  } -static void ColouriseMakeLine(char *lineBuffer, int lengthLine, StylingContext &styler) { +static void ColouriseMakeLine(char *lineBuffer, int lengthLine, int endPos, StylingContext &styler) {  	int i = 0;  	while (isspace(lineBuffer[i]) && (i < lengthLine))  		i++;  	if (lineBuffer[i] == '#' || lineBuffer[i] == '!') { -		styler.ColourSegment(0, lengthLine - 1, 1); +		styler.ColourTo(endPos, 1);  	} else { -		styler.ColourSegment(0, lengthLine - 1, 0); +		styler.ColourTo(endPos, 0);  	}  }  static void ColouriseMakeDoc(int startPos, int length, int, StylingContext &styler) {  	char lineBuffer[1024]; +	styler.StartSegment(startPos);  	unsigned int linePos = 0;  	for (int i = startPos; i <= startPos + length; i++) {  		lineBuffer[linePos++] = styler[i];  		if (styler[i] == '\r' || styler[i] == '\n' || (linePos >= sizeof(lineBuffer) - 1)) { -			ColouriseMakeLine(lineBuffer, linePos, styler); +			ColouriseMakeLine(lineBuffer, linePos, i, styler);  			linePos = 0;  		}  	}  	if (linePos > 0) -		ColouriseMakeLine(lineBuffer, linePos, styler); +		ColouriseMakeLine(lineBuffer, linePos, startPos + length, styler);  } -static void ColouriseErrorListLine(char *lineBuffer, int lengthLine, StylingContext &styler) { +static void ColouriseErrorListLine(char *lineBuffer, int lengthLine, int endPos, StylingContext &styler) {  	if (lineBuffer[0] == '>') {  		// Command or return status -		styler.ColourSegment(0, lengthLine - 1, 4); +		styler.ColourTo(endPos, 4);  	} else if (strstr(lineBuffer, "File \"") && strstr(lineBuffer, ", line ")) { -		styler.ColourSegment(0, lengthLine - 1, 1); +		styler.ColourTo(endPos, 1);  	} else if (0 == strncmp(lineBuffer, "Error ", strlen("Error "))) {  		// Borland error message -		styler.ColourSegment(0, lengthLine - 1, 5); +		styler.ColourTo(endPos, 5);  	} else if (0 == strncmp(lineBuffer, "Warning ", strlen("Warning "))) {  		// Borland warning message -		styler.ColourSegment(0, lengthLine - 1, 5); +		styler.ColourTo(endPos, 5);  	} else {  		// Look for <filename>:<line>:message  		// Look for <filename>(line)message @@ -2440,27 +2351,28 @@ static void ColouriseErrorListLine(char *lineBuffer, int lengthLine, StylingCont  			}  		}  		if (state == 3) { -			styler.ColourSegment(0, lengthLine - 1, 2); +			styler.ColourTo(endPos, 2);  		} else if ((state == 14) || (state == 15)) { -			styler.ColourSegment(0, lengthLine - 1, 3); +			styler.ColourTo(endPos, 3);  		} else { -			styler.ColourSegment(0, lengthLine - 1, 0); +			styler.ColourTo(endPos, 0);  		}  	}  }  static void ColouriseErrorListDoc(int startPos, int length, int, StylingContext &styler) {  	char lineBuffer[1024]; +	styler.StartSegment(startPos);  	unsigned int linePos = 0;  	for (int i = startPos; i <= startPos + length; i++) {  		lineBuffer[linePos++] = styler[i];  		if (styler[i] == '\r' || styler[i] == '\n' || (linePos >= sizeof(lineBuffer) - 1)) { -			ColouriseErrorListLine(lineBuffer, linePos, styler); +			ColouriseErrorListLine(lineBuffer, linePos, i, styler);  			linePos = 0;  		}  	}  	if (linePos > 0) -		ColouriseErrorListLine(lineBuffer, linePos, styler); +		ColouriseErrorListLine(lineBuffer, linePos, startPos + length, styler);  }  static void classifyWordSQL(unsigned int start, unsigned int end, WordList &keywords, StylingContext &styler) { @@ -2477,7 +2389,7 @@ static void classifyWordSQL(unsigned int start, unsigned int end, WordList &keyw  		if (keywords.InList(s))  			chAttr = SCE_C_WORD;  	} -	styler.ColourSegment(start, end, chAttr); +	styler.ColourTo(end, chAttr);  }  static void ColouriseSQLDoc(int codePage, int startPos, int length, @@ -2491,7 +2403,7 @@ static void ColouriseSQLDoc(int codePage, int startPos, int length,  	int state = initStyle;  	char chPrev = ' ';  	char chNext = styler[startPos]; -	int startSeg = startPos; +	styler.StartSegment(startPos);  	int lengthDoc = startPos + length;  	bool prevCr = false;  	for (int i = startPos; i <= lengthDoc; i++) { @@ -2522,31 +2434,25 @@ static void ColouriseSQLDoc(int codePage, int startPos, int length,  		if (state == SCE_C_DEFAULT) {  			if (iswordstart(ch)) { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				state = SCE_C_WORD; -				startSeg = i;  			} else if (ch == '/' && chNext == '*') { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				state = SCE_C_COMMENT; -				startSeg = i;  			} else if (ch == '-' && chNext == '-') { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				state = SCE_C_COMMENTLINE; -				startSeg = i;  			} else if (ch == '\'') { -				styler.ColourSegment(startSeg, i - 1, state); +				styler.ColourTo(i - 1, state);  				state = SCE_C_STRING; -				startSeg = i;  			} else if (isoperator(ch)) { -				styler.ColourSegment(startSeg, i - 1, state); -				styler.ColourSegment(i, i, SCE_C_OPERATOR); -				startSeg = i + 1; +				styler.ColourTo(i - 1, state); +				styler.ColourTo(i, SCE_C_OPERATOR);  			}  		} else if (state == SCE_C_WORD) {  			if (!iswordchar(ch)) { -				classifyWordSQL(startSeg, i - 1, keywords, styler); +				classifyWordSQL(styler.GetStartSegment(), i - 1, keywords, styler);  				state = SCE_C_DEFAULT; -				startSeg = i;  				if (ch == '/' && chNext == '*') {  					state = SCE_C_COMMENT;  				} else if (ch == '-' && chNext == '-') { @@ -2554,33 +2460,31 @@ static void ColouriseSQLDoc(int codePage, int startPos, int length,  				} else if (ch == '\'') {  					state = SCE_C_STRING;  				} else if (isoperator(ch)) { -					styler.ColourSegment(startSeg, i, SCE_C_OPERATOR); -					startSeg = i + 1; +					styler.ColourTo(i, SCE_C_OPERATOR);  				}  			}  		} else {  			if (state == SCE_C_COMMENT) { -				if (ch == '/' && chPrev == '*' && ( -				            (i > startSeg + 2) || ((initStyle == SCE_C_COMMENT) && (startSeg == startPos)))) { -					state = SCE_C_DEFAULT; -					styler.ColourSegment(startSeg, i, state); -					startSeg = i + 1; +				if (ch == '/' && chPrev == '*') { +					if (((i > styler.GetStartSegment() + 2) || ((initStyle == SCE_C_COMMENT) && +					    (styler.GetStartSegment() == startPos)))) { +						state = SCE_C_DEFAULT; +						styler.ColourTo(i, state); +					}  				}  			} else if (state == SCE_C_COMMENTLINE) {  				if (ch == '\r' || ch == '\n') { -					styler.ColourSegment(startSeg, i - 1, state); +					styler.ColourTo(i - 1, state);  					state = SCE_C_DEFAULT; -					startSeg = i;  				}  			} else if (state == SCE_C_STRING) {  				if (ch == '\'') {  					if ( chNext == '\'' ) {  						i++;  					} else { -						styler.ColourSegment(startSeg, i, state); +						styler.ColourTo(i, state);  						state = SCE_C_DEFAULT;  						i++; -						startSeg = i;  					}  					ch = chNext;  					chNext = styler.SafeGetCharAt(i + 1); @@ -2596,15 +2500,13 @@ static void ColouriseSQLDoc(int codePage, int startPos, int length,  				} else if (iswordstart(ch)) {  					state = SCE_C_WORD;  				} else if (isoperator(ch)) { -					styler.ColourSegment(startSeg, i, SCE_C_OPERATOR); -					startSeg = i + 1; +					styler.ColourTo(i, SCE_C_OPERATOR);  				}  			}  		}  		chPrev = ch;  	} -	if (startSeg < lengthDoc) -		styler.ColourSegment(startSeg, lengthDoc - 1, state); +	styler.ColourTo(lengthDoc - 1, state);  }  void ColouriseDoc(int codePage, int startPos, int lengthDoc, int initStyle, @@ -2642,7 +2544,8 @@ void ColouriseDoc(int codePage, int startPos, int lengthDoc, int initStyle,  		} else {  			// Null language means all style bytes are 0 so just mark the end - no need to fill in.  			styler.StartAt(startPos + lengthDoc - 1); -			styler.ColourSegment(0, 0, 0); +			styler.StartSegment(startPos + lengthDoc - 1); +			styler.ColourTo(startPos + lengthDoc - 1, 0);  		}  	}  } | 
