diff options
Diffstat (limited to 'gtk')
| -rw-r--r-- | gtk/PlatGTK.cxx | 33 | ||||
| -rw-r--r-- | gtk/ScintillaGTK.cxx | 7 | 
2 files changed, 32 insertions, 8 deletions
| diff --git a/gtk/PlatGTK.cxx b/gtk/PlatGTK.cxx index 97b085587..eb11b504b 100644 --- a/gtk/PlatGTK.cxx +++ b/gtk/PlatGTK.cxx @@ -2733,16 +2733,35 @@ long Platform::SendScintillaPointer(  	                              reinterpret_cast<sptr_t>(lParam));  } -bool Platform::IsDBCSLeadByte(int /* codePage */, char /* ch */) { +bool Platform::IsDBCSLeadByte(int codePage, char ch) { +	// Byte ranges found in Wikipedia articles with relevant search strings in each case +	unsigned char uch = static_cast<unsigned char>(ch); +	switch (codePage) { +		case 932: +			// Shift_jis +			return ((uch >= 0x81) && (uch <= 0x9F)) || +				((uch >= 0xE0) && (uch <= 0xEF)); +		case 936: +			// GBK +			return (uch >= 0x81) && (uch <= 0xFE); +		case 950: +			// Big5 +			return (uch >= 0x81) && (uch <= 0xFE); +		// Korean EUC-KR may be code page 949. +	}  	return false;  } -int Platform::DBCSCharLength(int, const char *s) { -	int bytes = mblen(s, MB_CUR_MAX); -	if (bytes >= 1) -		return bytes; -	else -		return 1; +int Platform::DBCSCharLength(int codePage, const char *s) { +	if (codePage == 932 || codePage == 936 || codePage == 950) { +		return IsDBCSLeadByte(codePage, s[0]) ? 2 : 1; +	} else { +		int bytes = mblen(s, MB_CUR_MAX); +		if (bytes >= 1) +			return bytes; +		else +			return 1; +	}  }  int Platform::DBCSCharMaxLength() { diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx index b490975e8..ab9c9d58a 100644 --- a/gtk/ScintillaGTK.cxx +++ b/gtk/ScintillaGTK.cxx @@ -1001,7 +1001,12 @@ int ScintillaGTK::EncodedFromUTF8(char *utf8, char *encoded) {  }  bool ScintillaGTK::ValidCodePage(int codePage) const { -	return codePage == 0 || codePage == SC_CP_UTF8 || codePage == SC_CP_DBCS; +	return codePage == 0  +	|| codePage == SC_CP_UTF8  +	|| codePage == 932 +	|| codePage == 936 +	|| codePage == 950 +	|| codePage == SC_CP_DBCS;  }  sptr_t ScintillaGTK::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { | 
