diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/CharClassify.cxx | 16 | ||||
| -rw-r--r-- | src/CharClassify.h | 1 | ||||
| -rw-r--r-- | src/Document.cxx | 4 | ||||
| -rw-r--r-- | src/Document.h | 1 | ||||
| -rw-r--r-- | src/Editor.cxx | 16 | 
5 files changed, 38 insertions, 0 deletions
| diff --git a/src/CharClassify.cxx b/src/CharClassify.cxx index c16af4547..7e3db737e 100644 --- a/src/CharClassify.cxx +++ b/src/CharClassify.cxx @@ -46,3 +46,19 @@ void CharClassify::SetCharClasses(const unsigned char *chars, cc newCharClass) {  		}  	}  } + +int CharClassify::GetCharsOfClass(cc characterClass, unsigned char *buffer) { +	// Get characters belonging to the given char class; return the number +	// of characters (if the buffer is NULL, don't write to it). +	int count = 0; +	for (int ch = maxChar - 1; ch >= 0; --ch) { +		if (charClass[ch] == characterClass) { +			++count; +			if (buffer) { +				*buffer = static_cast<unsigned char>(ch); +				buffer++; +			} +		} +	} +	return count; +} diff --git a/src/CharClassify.h b/src/CharClassify.h index e8b798ecb..5d2734c00 100644 --- a/src/CharClassify.h +++ b/src/CharClassify.h @@ -19,6 +19,7 @@ public:  	enum cc { ccSpace, ccNewLine, ccWord, ccPunctuation };  	void SetDefaultCharClasses(bool includeWordClass);  	void SetCharClasses(const unsigned char *chars, cc newCharClass); +	int GetCharsOfClass(cc charClass, unsigned char *buffer);  	cc GetClass(unsigned char ch) const { return static_cast<cc>(charClass[ch]);}  	bool IsWord(unsigned char ch) const { return static_cast<cc>(charClass[ch]) == ccWord;} diff --git a/src/Document.cxx b/src/Document.cxx index 244e96e4f..82b9e070b 100644 --- a/src/Document.cxx +++ b/src/Document.cxx @@ -1615,6 +1615,10 @@ void Document::SetCharClasses(const unsigned char *chars, CharClassify::cc newCh      charClass.SetCharClasses(chars, newCharClass);  } +int Document::GetCharsOfClass(CharClassify::cc characterClass, unsigned char *buffer) { +    return charClass.GetCharsOfClass(characterClass, buffer); +} +  void Document::SetStylingBits(int bits) {  	stylingBits = bits;  	stylingBitsMask = (1 << stylingBits) - 1; diff --git a/src/Document.h b/src/Document.h index 7e03f3d9e..30c6aee1c 100644 --- a/src/Document.h +++ b/src/Document.h @@ -364,6 +364,7 @@ public:  	void SetDefaultCharClasses(bool includeWordClass);  	void SetCharClasses(const unsigned char *chars, CharClassify::cc newCharClass); +	int GetCharsOfClass(CharClassify::cc charClass, unsigned char *buffer);  	void SetStylingBits(int bits);  	void SCI_METHOD StartStyling(int position, char mask);  	bool SCI_METHOD SetStyleFor(int length, char style); diff --git a/src/Editor.cxx b/src/Editor.cxx index d72ff302c..2bc89ba1f 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -7510,6 +7510,9 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		caret.period = wParam;  		break; +	case SCI_GETWORDCHARS: +		return pdoc->GetCharsOfClass(CharClassify::ccWord, reinterpret_cast<unsigned char *>(lParam)); +  	case SCI_SETWORDCHARS: {  			pdoc->SetDefaultCharClasses(false);  			if (lParam == 0) @@ -7518,6 +7521,9 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		}  		break; +	case SCI_GETWHITESPACECHARS: +		return pdoc->GetCharsOfClass(CharClassify::ccSpace, reinterpret_cast<unsigned char *>(lParam)); +  	case SCI_SETWHITESPACECHARS: {  			if (lParam == 0)  				return 0; @@ -7525,6 +7531,16 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		}  		break; +	case SCI_GETPUNCTUATIONCHARS: +		return pdoc->GetCharsOfClass(CharClassify::ccPunctuation, reinterpret_cast<unsigned char *>(lParam)); + +	case SCI_SETPUNCTUATIONCHARS: { +			if (lParam == 0) +				return 0; +			pdoc->SetCharClasses(reinterpret_cast<unsigned char *>(lParam), CharClassify::ccPunctuation); +		} +		break; +  	case SCI_SETCHARSDEFAULT:  		pdoc->SetDefaultCharClasses(true);  		break; | 
