Ripped out remaining I18N/UTF-8 stuff that a) didn't work, or b) didn't make any sense (or both!).
Writing non-ASCII characters using the text tool doesn't work. (But it didn't before this update either.)
This commit is contained in:
parent
36941a1cd2
commit
85aa989fee
1 changed files with 5 additions and 210 deletions
215
src/tuxpaint.c
215
src/tuxpaint.c
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
|
|
||||||
#define VER_VERSION "0.9.14"
|
#define VER_VERSION "0.9.14"
|
||||||
#define VER_DATE "2004-08-19"
|
#define VER_DATE "2004-08-23"
|
||||||
|
|
||||||
|
|
||||||
/* #define DEBUG */
|
/* #define DEBUG */
|
||||||
|
|
@ -673,13 +673,6 @@ void handle_keymouse(SDLKey key, Uint8 updown);
|
||||||
void move_keymouse(void);
|
void move_keymouse(void);
|
||||||
void handle_active(SDL_Event * event);
|
void handle_active(SDL_Event * event);
|
||||||
char * remove_slash(char * path);
|
char * remove_slash(char * path);
|
||||||
unsigned char * utf8_decode(unsigned char * str);
|
|
||||||
|
|
||||||
void convert_open(const char * from);
|
|
||||||
void convert_close();
|
|
||||||
char * convert2utf8(char c);
|
|
||||||
int converts();
|
|
||||||
int delete_utf8_char(char * utf8_str, int len);
|
|
||||||
void anti_carriage_return(int left, int right, int cur_top, int new_top,
|
void anti_carriage_return(int left, int right, int cur_top, int new_top,
|
||||||
int cur_bot, int line_width);
|
int cur_bot, int line_width);
|
||||||
int mySDL_WaitEvent(SDL_Event *event);
|
int mySDL_WaitEvent(SDL_Event *event);
|
||||||
|
|
@ -1131,16 +1124,9 @@ void mainloop(void)
|
||||||
|
|
||||||
if (texttool_len > 0)
|
if (texttool_len > 0)
|
||||||
{
|
{
|
||||||
if (converts())
|
texttool_len--;
|
||||||
{
|
texttool_str[texttool_len] = '\0';
|
||||||
texttool_len = delete_utf8_char(texttool_str, texttool_len);
|
playsound(0, SND_KEYCLICK, 1);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
texttool_len--;
|
|
||||||
texttool_str[texttool_len] = '\0';
|
|
||||||
playsound(0, SND_KEYCLICK, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
do_render_cur_text(0);
|
do_render_cur_text(0);
|
||||||
}
|
}
|
||||||
|
|
@ -1177,24 +1163,7 @@ void mainloop(void)
|
||||||
key_down, key_unicode, key_unicode);
|
key_down, key_unicode, key_unicode);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
texttool_str[texttool_len++] = key_unicode;
|
||||||
if (converts())
|
|
||||||
{
|
|
||||||
char * str = convert2utf8(key_unicode);
|
|
||||||
int i;
|
|
||||||
size_t len = strlen(str);
|
|
||||||
|
|
||||||
for (i = 0; i < len; i++)
|
|
||||||
{
|
|
||||||
texttool_str[texttool_len++] = str[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
free(str);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
texttool_str[texttool_len++] = key_unicode;
|
|
||||||
}
|
|
||||||
|
|
||||||
texttool_str[texttool_len] = '\0';
|
texttool_str[texttool_len] = '\0';
|
||||||
playsound(0, SND_KEYCLICK, 1);
|
playsound(0, SND_KEYCLICK, 1);
|
||||||
|
|
@ -4695,36 +4664,6 @@ void setup(int argc, char * argv[])
|
||||||
|
|
||||||
language = current_language();
|
language = current_language();
|
||||||
|
|
||||||
if (language == LANG_JA)
|
|
||||||
{
|
|
||||||
putenv("OUTPUT_CHARSET=ja_JP.UTF-8");
|
|
||||||
}
|
|
||||||
else if (language == LANG_HE)
|
|
||||||
{
|
|
||||||
putenv("OUTPUT_CHARSET=he_IL");
|
|
||||||
convert_open("ISO8859-8");
|
|
||||||
}
|
|
||||||
else if (language == LANG_PL)
|
|
||||||
{
|
|
||||||
putenv("OUTPUT_CHARSET=pl_PL.UTF-8");
|
|
||||||
convert_open("ISO8859-2");
|
|
||||||
}
|
|
||||||
else if (language == LANG_HR)
|
|
||||||
{
|
|
||||||
putenv("OUTPUT_CHARSET=hr_HR.UTF-8");
|
|
||||||
convert_open("ISO8859-2");
|
|
||||||
}
|
|
||||||
else if (language == LANG_LT)
|
|
||||||
{
|
|
||||||
putenv("OUTPUT_CHARSET=lt_LT.UTF-8");
|
|
||||||
convert_open("ISO8859-13");
|
|
||||||
}
|
|
||||||
else if (language == LANG_TA)
|
|
||||||
{
|
|
||||||
putenv("OUTPUT_CHARSET=ta_IN.UTF-8");
|
|
||||||
convert_open("ISO8859-1");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("DEBUG: Language is %s (%d)\n", lang_prefixes[language], language);
|
printf("DEBUG: Language is %s (%d)\n", lang_prefixes[language], language);
|
||||||
|
|
@ -8773,7 +8712,6 @@ void cleanup(void)
|
||||||
TTF_Quit();
|
TTF_Quit();
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
|
|
||||||
convert_close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -12308,149 +12246,6 @@ char *remove_slash( char *path )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Decode a UTF8 string */
|
|
||||||
|
|
||||||
unsigned char * utf8_decode(unsigned char * str)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
unsigned char utf8_char[4];
|
|
||||||
unsigned char utf8_str[1024];
|
|
||||||
|
|
||||||
|
|
||||||
utf8_str[0] = '\0';
|
|
||||||
|
|
||||||
for (i = 0; i < strlen(str); i++)
|
|
||||||
{
|
|
||||||
/* How many bytes does this character need? */
|
|
||||||
|
|
||||||
if (str[i] < 128) /* 0xxx xxxx - 1 byte */
|
|
||||||
{
|
|
||||||
utf8_char[0] = str[i];
|
|
||||||
utf8_char[1] = '\0';
|
|
||||||
}
|
|
||||||
else if ((str[i] & 0xE0) == 0xC0) /* 110x xxxx - 2 bytes */
|
|
||||||
{
|
|
||||||
utf8_char[0] = str[i];
|
|
||||||
utf8_char[1] = str[i + 1];
|
|
||||||
utf8_char[2] = '\0';
|
|
||||||
i = i + 1;
|
|
||||||
}
|
|
||||||
else if ((str[i] & 0xF0) == 0xE0) /* 1110 xxxx - 3 bytes */
|
|
||||||
{
|
|
||||||
utf8_char[0] = str[i];
|
|
||||||
utf8_char[1] = str[i + 1];
|
|
||||||
utf8_char[2] = str[i + 2];
|
|
||||||
utf8_char[3] = '\0';
|
|
||||||
i = i + 2;
|
|
||||||
}
|
|
||||||
else /* 1111 0xxx - 4 bytes */
|
|
||||||
{
|
|
||||||
utf8_char[0] = str[i];
|
|
||||||
utf8_char[1] = str[i + 1];
|
|
||||||
utf8_char[2] = str[i + 2];
|
|
||||||
utf8_char[3] = str[i + 3];
|
|
||||||
utf8_char[4] = '\0';
|
|
||||||
i = i + 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
strcat(utf8_str, utf8_char);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(strdup(utf8_str));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static iconv_t cd = (iconv_t)(-1);
|
|
||||||
|
|
||||||
int converts()
|
|
||||||
{
|
|
||||||
if ( cd == (iconv_t)(-1) )
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void convert_open(const char *from)
|
|
||||||
{
|
|
||||||
cd = iconv_open ("UTF-8", from);
|
|
||||||
if (cd == (iconv_t)(-1))
|
|
||||||
{
|
|
||||||
/* FIXME: Error! */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void convert_close()
|
|
||||||
{
|
|
||||||
if (cd != (iconv_t)(-1))
|
|
||||||
iconv_close(cd);
|
|
||||||
}
|
|
||||||
|
|
||||||
char * convert2utf8(char c)
|
|
||||||
{
|
|
||||||
char inbuf[1];
|
|
||||||
char outbuf[4];
|
|
||||||
|
|
||||||
char *inptr;
|
|
||||||
char *outptr;
|
|
||||||
size_t inbytes_left, outbytes_left;
|
|
||||||
int count;
|
|
||||||
|
|
||||||
inbuf[0]=c;
|
|
||||||
memset(outbuf, 0, 4);
|
|
||||||
inbytes_left = 1;
|
|
||||||
outbytes_left = 4;
|
|
||||||
inptr = inbuf;
|
|
||||||
outptr = (char *) outbuf;
|
|
||||||
|
|
||||||
count = iconv (cd, &inptr, &inbytes_left, &outptr, &outbytes_left);
|
|
||||||
/*
|
|
||||||
if (count < 0)
|
|
||||||
{
|
|
||||||
printf ("Error!\n");
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
return strdup(outbuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* in:
|
|
||||||
char *utf8_str - buffer containing a well-formed utf8 string
|
|
||||||
int len - length of the above string in bytes; len >= 1
|
|
||||||
out:
|
|
||||||
int result - length of the above string in bytes after removing
|
|
||||||
last utf8 char
|
|
||||||
*/
|
|
||||||
|
|
||||||
int delete_utf8_char(char *utf8_str, int len)
|
|
||||||
{
|
|
||||||
/* from man utf-8:
|
|
||||||
The first byte of a multi-byte sequence which represents a single
|
|
||||||
non-ASCII UCS character is always in the range 0xc0 to 0xfd and indi-
|
|
||||||
cates how long this multi-byte sequence is. All further bytes in a
|
|
||||||
multi-byte sequence are in the range 0x80 to 0xbf.
|
|
||||||
*/
|
|
||||||
|
|
||||||
unsigned char *current_char_ptr = utf8_str + len - 1;
|
|
||||||
unsigned char current_char = *current_char_ptr;
|
|
||||||
|
|
||||||
while ( (current_char >= 0x80) && (current_char <= 0xbf) )
|
|
||||||
{
|
|
||||||
/* part of the utf8 multibyte char but not the first byte */
|
|
||||||
|
|
||||||
len--;
|
|
||||||
current_char_ptr--;
|
|
||||||
current_char = *current_char_ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* we have 1 char to remove */
|
|
||||||
*current_char_ptr = '\0';
|
|
||||||
len--;
|
|
||||||
|
|
||||||
return len;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* For right-to-left languages, when word-wrapping, we need to
|
/* For right-to-left languages, when word-wrapping, we need to
|
||||||
make sure the text doesn't end up going from bottom-to-top, too! */
|
make sure the text doesn't end up going from bottom-to-top, too! */
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue