aboutsummaryrefslogtreecommitdiffhomepage
path: root/gtk/ScintillaGTK.cxx
diff options
context:
space:
mode:
authornyamatongwe <devnull@localhost>2003-04-27 07:44:19 +0000
committernyamatongwe <devnull@localhost>2003-04-27 07:44:19 +0000
commitdd8ef4dda4c28dc6273d7f1d0002e44d36d4eb29 (patch)
treec62e71bfbaadaf5e772f46465fe67b05a57736d6 /gtk/ScintillaGTK.cxx
parent7ec4d09df739591d81527e0d5103d52f7945088a (diff)
downloadscintilla-mirror-dd8ef4dda4c28dc6273d7f1d0002e44d36d4eb29.tar.gz
Using iconv to convert input into current character set.
Diffstat (limited to 'gtk/ScintillaGTK.cxx')
-rw-r--r--gtk/ScintillaGTK.cxx43
1 files changed, 35 insertions, 8 deletions
diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx
index d3753b5d2..4e7b62bb9 100644
--- a/gtk/ScintillaGTK.cxx
+++ b/gtk/ScintillaGTK.cxx
@@ -54,6 +54,8 @@
#if GTK_MAJOR_VERSION < 2
#define INTERNATIONAL_INPUT
+#else
+#include <iconv.h>
#endif
#ifdef _MSC_VER
@@ -846,18 +848,43 @@ void ScintillaGTK::NotifyURIDropped(const char *list) {
NotifyParent(scn);
}
+const char *CharacterSetID(int characterSet);
int ScintillaGTK::KeyDefault(int key, int modifiers) {
if (!(modifiers & SCI_CTRL) && !(modifiers & SCI_ALT)) {
#if GTK_MAJOR_VERSION >= 2
- if (IsUnicodeMode() && (key <= 0xFE00)) {
- char utfval[4]="\0\0\0";
- wchar_t wcs[2];
- wcs[0] = gdk_keyval_to_unicode(key);
- wcs[1] = 0;
- UTF8FromUCS2(wcs, 1, utfval, 3);
- AddCharUTF(utfval,strlen(utfval));
- return 1;
+ char utfVal[4]="\0\0\0";
+ wchar_t wcs[2];
+ wcs[0] = gdk_keyval_to_unicode(key);
+ wcs[1] = 0;
+ UTF8FromUCS2(wcs, 1, utfVal, 3);
+ if (key <= 0xFE00) {
+ if (IsUnicodeMode()) {
+ AddCharUTF(utfVal,strlen(utfVal));
+ return 1;
+ } else {
+ const char *source =
+ CharacterSetID(vs.styles[STYLE_DEFAULT].characterSet);
+ if (*source) {
+ iconv_t iconvh = iconv_open("UTF8", source);
+ if (iconvh != ((iconv_t)(-1))) {
+ char localeVal[4]="\0\0\0";
+ char *pin = utfVal;
+ size_t inLeft = strlen(utfVal);
+ char *pout = localeVal;
+ size_t outLeft = sizeof(localeVal);
+ size_t conversions = iconv(iconvh, &pin, &inLeft, &pout, &outLeft);
+ iconv_close(iconvh);
+ if (conversions != ((size_t)(-1))) {
+ *pout = '\0';
+ for (int i=0; localeVal[i]; i++) {
+ AddChar(localeVal[i]);
+ }
+ return 1;
+ }
+ }
+ }
+ }
}
#endif
if (key < 256) {