diff options
Diffstat (limited to 'src/Document.cxx')
| -rw-r--r-- | src/Document.cxx | 62 | 
1 files changed, 23 insertions, 39 deletions
| diff --git a/src/Document.cxx b/src/Document.cxx index a88468cb1..92be92691 100644 --- a/src/Document.cxx +++ b/src/Document.cxx @@ -15,6 +15,7 @@  #include "Scintilla.h"  #include "SVector.h"  #include "CellBuffer.h" +#include "CharClassify.h"  #include "Document.h"  #include "RESearch.h" @@ -50,7 +51,6 @@ Document::Document() {  	stylingBits = 5;  	stylingBitsMask = 0x1F;  	stylingMask = 0; -	SetDefaultCharClasses(true);  	endStyled = 0;  	styleClock = 0;  	enteredCount = 0; @@ -836,10 +836,10 @@ int Document::ParaDown(int pos) {  		return LineEnd(line-1);  } -Document::charClassification Document::WordCharClass(unsigned char ch) { +CharClassify::cc Document::WordCharClass(unsigned char ch) {  	if ((SC_CP_UTF8 == dbcsCodePage) && (ch >= 0x80)) -		return ccWord; -	return charClass[ch]; +		return CharClassify::ccWord; +	return charClass.GetClass(ch);  }  /** @@ -847,7 +847,7 @@ Document::charClassification Document::WordCharClass(unsigned char ch) {   * Finds the start of word at pos when delta < 0 or the end of the word when delta >= 0.   */  int Document::ExtendWordSelect(int pos, int delta, bool onlyWordCharacters) { -	charClassification ccStart = ccWord; +	CharClassify::cc ccStart = CharClassify::ccWord;  	if (delta < 0) {  		if (!onlyWordCharacters)  			ccStart = WordCharClass(cb.CharAt(pos-1)); @@ -871,19 +871,19 @@ int Document::ExtendWordSelect(int pos, int delta, bool onlyWordCharacters) {   */  int Document::NextWordStart(int pos, int delta) {  	if (delta < 0) { -		while (pos > 0 && (WordCharClass(cb.CharAt(pos - 1)) == ccSpace)) +		while (pos > 0 && (WordCharClass(cb.CharAt(pos - 1)) == CharClassify::ccSpace))  			pos--;  		if (pos > 0) { -			charClassification ccStart = WordCharClass(cb.CharAt(pos-1)); +			CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos-1));  			while (pos > 0 && (WordCharClass(cb.CharAt(pos - 1)) == ccStart)) {  				pos--;  			}  		}  	} else { -		charClassification ccStart = WordCharClass(cb.CharAt(pos)); +		CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos));  		while (pos < (Length()) && (WordCharClass(cb.CharAt(pos)) == ccStart))  			pos++; -		while (pos < (Length()) && (WordCharClass(cb.CharAt(pos)) == ccSpace)) +		while (pos < (Length()) && (WordCharClass(cb.CharAt(pos)) == CharClassify::ccSpace))  			pos++;  	}  	return pos; @@ -899,22 +899,22 @@ int Document::NextWordStart(int pos, int delta) {  int Document::NextWordEnd(int pos, int delta) {  	if (delta < 0) {  		if (pos > 0) { -			charClassification ccStart = WordCharClass(cb.CharAt(pos-1)); -			if (ccStart != ccSpace) { +			CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos-1)); +			if (ccStart != CharClassify::ccSpace) {  				while (pos > 0 && WordCharClass(cb.CharAt(pos - 1)) == ccStart) {  					pos--;  				}  			} -			while (pos > 0 && WordCharClass(cb.CharAt(pos - 1)) == ccSpace) { +			while (pos > 0 && WordCharClass(cb.CharAt(pos - 1)) == CharClassify::ccSpace) {  				pos--;  			}  		}  	} else { -		while (pos < Length() && WordCharClass(cb.CharAt(pos)) == ccSpace) { +		while (pos < Length() && WordCharClass(cb.CharAt(pos)) == CharClassify::ccSpace) {  			pos++;  		}  		if (pos < Length()) { -			charClassification ccStart = WordCharClass(cb.CharAt(pos)); +			CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos));  			while (pos < Length() && WordCharClass(cb.CharAt(pos)) == ccStart) {  				pos++;  			} @@ -929,8 +929,8 @@ int Document::NextWordEnd(int pos, int delta) {   */  bool Document::IsWordStartAt(int pos) {  	if (pos > 0) { -		charClassification ccPos = WordCharClass(CharAt(pos)); -		return (ccPos == ccWord || ccPos == ccPunctuation) && +		CharClassify::cc ccPos = WordCharClass(CharAt(pos)); +		return (ccPos == CharClassify::ccWord || ccPos == CharClassify::ccPunctuation) &&  			(ccPos != WordCharClass(CharAt(pos - 1)));  	}  	return true; @@ -942,8 +942,8 @@ bool Document::IsWordStartAt(int pos) {   */  bool Document::IsWordEndAt(int pos) {  	if (pos < Length()) { -		charClassification ccPrev = WordCharClass(CharAt(pos-1)); -		return (ccPrev == ccWord || ccPrev == ccPunctuation) && +		CharClassify::cc ccPrev = WordCharClass(CharAt(pos-1)); +		return (ccPrev == CharClassify::ccWord || ccPrev == CharClassify::ccPunctuation) &&  			(ccPrev != WordCharClass(CharAt(pos)));  	}  	return true; @@ -1004,7 +1004,7 @@ long Document::FindText(int minPos, int maxPos, const char *s,                          int *length) {  	if (regExp) {  		if (!pre) -			pre = new RESearch(); +			pre = new RESearch(&charClass);  		if (!pre)  			return -1; @@ -1266,27 +1266,11 @@ void Document::ChangeCase(Range r, bool makeUpperCase) {  }  void Document::SetDefaultCharClasses(bool includeWordClass) { -	// Initialize all char classes to default values -	for (int ch = 0; ch < 256; ch++) { -		if (ch == '\r' || ch == '\n') -			charClass[ch] = ccNewLine; -		else if (ch < 0x20 || ch == ' ') -			charClass[ch] = ccSpace; -		else if (includeWordClass && (ch >= 0x80 || isalnum(ch) || ch == '_')) -			charClass[ch] = ccWord; -		else -			charClass[ch] = ccPunctuation; -	} +    charClass.SetDefaultCharClasses(includeWordClass);  } -void Document::SetCharClasses(const unsigned char *chars, charClassification newCharClass) { -	// Apply the newCharClass to the specifed chars -	if (chars) { -		while (*chars) { -			charClass[*chars] = newCharClass; -			chars++; -		} -	} +void Document::SetCharClasses(const unsigned char *chars, CharClassify::cc newCharClass) { +    charClass.SetCharClasses(chars, newCharClass);  }  void Document::SetStylingBits(int bits) { @@ -1430,7 +1414,7 @@ void Document::NotifyModified(DocModification mh) {  }  bool Document::IsWordPartSeparator(char ch) { -	return (WordCharClass(ch) == ccWord) && IsPunctuation(ch); +	return (WordCharClass(ch) == CharClassify::ccWord) && IsPunctuation(ch);  }  int Document::WordPartLeft(int pos) { | 
