From 4a23dbe93d4c0375b85caf795ba4a1a04b97fcae Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Thu, 9 Oct 2014 17:26:49 +0200 Subject: [PATCH] fixed handling of some non-ASCII character elements in level editor --- src/conftime.h | 2 +- src/libgame/misc.c | 37 ++++++++++++++++++++++++++++++++++++- src/libgame/text.h | 22 +++++++++++----------- 3 files changed, 48 insertions(+), 13 deletions(-) diff --git a/src/conftime.h b/src/conftime.h index ac6e95e0..7eb8292b 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "2014-10-09 16:40" +#define COMPILE_DATE_STRING "2014-10-09 17:21" diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 883dd7d2..cd9d3e93 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -1418,7 +1418,7 @@ void translate_keyname(Key *keysym, char **x11name, char **name, int mode) { KSYM_braceright, "XK_braceright", "brace right" }, { KSYM_asciitilde, "XK_asciitilde", "~" }, - /* special (non-ASCII) keys (ISO-Latin-1) */ + /* special (non-ASCII) keys */ { KSYM_degree, "XK_degree", "degree" }, { KSYM_Adiaeresis, "XK_Adiaeresis", "A umlaut" }, { KSYM_Odiaeresis, "XK_Odiaeresis", "O umlaut" }, @@ -1699,6 +1699,26 @@ Key getKeyFromX11KeyName(char *x11name) char getCharFromKey(Key key) { + static struct + { + Key key; + byte key_char; + } translate_key_char[] = + { + /* special (non-ASCII) keys (ISO-8859-1) */ + { KSYM_degree, CHAR_BYTE_DEGREE }, + { KSYM_Adiaeresis, CHAR_BYTE_UMLAUT_A }, + { KSYM_Odiaeresis, CHAR_BYTE_UMLAUT_O }, + { KSYM_Udiaeresis, CHAR_BYTE_UMLAUT_U }, + { KSYM_adiaeresis, CHAR_BYTE_UMLAUT_a }, + { KSYM_odiaeresis, CHAR_BYTE_UMLAUT_o }, + { KSYM_udiaeresis, CHAR_BYTE_UMLAUT_u }, + { KSYM_ssharp, CHAR_BYTE_SHARP_S }, + + /* end-of-array identifier */ + { 0, 0 } + }; + char *keyname = getKeyNameFromKey(key); char c = 0; @@ -1706,6 +1726,21 @@ char getCharFromKey(Key key) c = keyname[0]; else if (strEqual(keyname, "space")) c = ' '; + else + { + int i = 0; + + do + { + if (key == translate_key_char[i].key) + { + c = translate_key_char[i].key_char; + + break; + } + } + while (translate_key_char[++i].key_char); + } return c; } diff --git a/src/libgame/text.h b/src/libgame/text.h index 1273f399..08d14cdb 100644 --- a/src/libgame/text.h +++ b/src/libgame/text.h @@ -31,17 +31,17 @@ #define MAX_OUTPUT_LINESIZE 1024 /* special constants for old ISO-8859-1 character byte values */ -#define CHAR_BYTE_UMLAUT_A (0xc4) -#define CHAR_BYTE_UMLAUT_O (0xd6) -#define CHAR_BYTE_UMLAUT_U (0xdc) -#define CHAR_BYTE_UMLAUT_a (0xe4) -#define CHAR_BYTE_UMLAUT_o (0xf6) -#define CHAR_BYTE_UMLAUT_u (0xfc) -#define CHAR_BYTE_SHARP_S (0xdf) -#define CHAR_BYTE_COPYRIGHT (0xa9) -#define CHAR_BYTE_REGISTERED (0xae) -#define CHAR_BYTE_DEGREE (0xb0) -#define CHAR_BYTE_CURSOR (0xa0) +#define CHAR_BYTE_UMLAUT_A ((char)0xc4) +#define CHAR_BYTE_UMLAUT_O ((char)0xd6) +#define CHAR_BYTE_UMLAUT_U ((char)0xdc) +#define CHAR_BYTE_UMLAUT_a ((char)0xe4) +#define CHAR_BYTE_UMLAUT_o ((char)0xf6) +#define CHAR_BYTE_UMLAUT_u ((char)0xfc) +#define CHAR_BYTE_SHARP_S ((char)0xdf) +#define CHAR_BYTE_COPYRIGHT ((char)0xa9) +#define CHAR_BYTE_REGISTERED ((char)0xae) +#define CHAR_BYTE_DEGREE ((char)0xb0) +#define CHAR_BYTE_CURSOR ((char)0xa0) /* special character mapping for default fonts */ #define FONT_ASCII_CURSOR ((char)160) -- 2.34.1