diff options
author | nyamatongwe <unknown> | 2009-08-26 10:52:06 +0000 |
---|---|---|
committer | nyamatongwe <unknown> | 2009-08-26 10:52:06 +0000 |
commit | bba3a93ea7acdf2b12593c6fc427f948833541f1 (patch) | |
tree | 4507c22c8479b2fd85eeea7d2f00147f362944db | |
parent | a98dc4fbced60a016511e407ebc77eb37ec3b8cf (diff) | |
download | scintilla-mirror-bba3a93ea7acdf2b12593c6fc427f948833541f1.tar.gz |
Made Japanese and Chinese code pages 932, 936 and 950 work on 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) { |