mirror of
https://github.com/irssi/irssi.git
synced 2025-02-02 15:08:01 -05:00
Remove internal utf8 functions in favour of glib ones.
git-svn-id: file:///var/www/svn.irssi.org/SVN/irssi/trunk@4958 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
parent
cba6199958
commit
d71aea5b2b
@ -24,67 +24,3 @@
|
||||
|
||||
#include "module.h"
|
||||
|
||||
int strlen_utf8(const char *str)
|
||||
{
|
||||
const unsigned char *p = (const unsigned char *) str;
|
||||
int len;
|
||||
unichar chr_r;
|
||||
|
||||
len = 0;
|
||||
while (*p != '\0') {
|
||||
chr_r = g_utf8_get_char_validated(p, -1);
|
||||
if (chr_r & 0x80000000)
|
||||
break;
|
||||
len++;
|
||||
p = g_utf8_next_char(p);
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
void utf8_to_utf16(const char *str, unichar *out)
|
||||
{
|
||||
const unsigned char *p = (const unsigned char *) str;
|
||||
unichar result;
|
||||
|
||||
while (*p != '\0') {
|
||||
result = g_utf8_get_char_validated(p, -1);
|
||||
if (result & 0x80000000)
|
||||
break;
|
||||
|
||||
p = g_utf8_next_char(p);
|
||||
*out++ = result;
|
||||
}
|
||||
|
||||
*out = '\0';
|
||||
}
|
||||
|
||||
void utf16_to_utf8(const unichar *str, char *out)
|
||||
{
|
||||
int len;
|
||||
|
||||
while (*str != '\0') {
|
||||
len = g_unichar_to_utf8(*str, out);
|
||||
out += len;
|
||||
|
||||
str++;
|
||||
}
|
||||
*out = '\0';
|
||||
}
|
||||
|
||||
void utf16_to_utf8_with_pos(const unichar *str, int spos, char *out, int *opos)
|
||||
{
|
||||
int len;
|
||||
const unichar *sstart = str;
|
||||
char *ostart = out;
|
||||
|
||||
*opos = 0;
|
||||
while (*str != '\0') {
|
||||
len = g_unichar_to_utf8(*str, out);
|
||||
out += len;
|
||||
|
||||
str++;
|
||||
if(str - sstart == spos)
|
||||
*opos = out - ostart;
|
||||
}
|
||||
*out = '\0';
|
||||
}
|
||||
|
@ -1,20 +1,6 @@
|
||||
#ifndef __UTF8_H
|
||||
#define __UTF8_H
|
||||
|
||||
/* Returns length of UTF8 string */
|
||||
int strlen_utf8(const char *str);
|
||||
|
||||
/* UTF-8 -> unichar string. The NUL is copied as well. */
|
||||
void utf8_to_utf16(const char *str, unichar *out);
|
||||
|
||||
/* unichar -> UTF-8 string. The NUL is copied as well.
|
||||
Make sure out is at least 6 x length of str. */
|
||||
void utf16_to_utf8(const unichar *str, char *out);
|
||||
|
||||
/* unichar -> UTF-8 string with position transformed. The NUL is copied as well.
|
||||
Make sure out is at least 6 x length of str. */
|
||||
void utf16_to_utf8_with_pos(const unichar *str, int spos, char *out, int *opos);
|
||||
|
||||
/* XXX I didn't check the encoding range of big5+. This is standard big5. */
|
||||
#define is_big5_los(lo) (0x40 <= (lo) && (lo) <= 0x7E) /* standard */
|
||||
#define is_big5_lox(lo) (0x80 <= (lo) && (lo) <= 0xFE) /* extended */
|
||||
|
@ -400,10 +400,10 @@ char *gui_entry_get_text(GUI_ENTRY_REC *entry)
|
||||
|
||||
g_return_val_if_fail(entry != NULL, NULL);
|
||||
|
||||
buf = g_malloc(entry->text_len*6 + 1);
|
||||
if (entry->utf8)
|
||||
utf16_to_utf8(entry->text, buf);
|
||||
buf = g_ucs4_to_utf8(entry->text, -1, NULL, NULL, NULL);
|
||||
else {
|
||||
buf = g_malloc(entry->text_len*6 + 1);
|
||||
if (term_type == TERM_TYPE_BIG5)
|
||||
unichars_to_big5(entry->text, buf);
|
||||
else
|
||||
@ -420,10 +420,11 @@ char *gui_entry_get_text_and_pos(GUI_ENTRY_REC *entry, int *pos)
|
||||
|
||||
g_return_val_if_fail(entry != NULL, NULL);
|
||||
|
||||
buf = g_malloc(entry->text_len*6 + 1);
|
||||
if (entry->utf8)
|
||||
utf16_to_utf8_with_pos(entry->text, entry->pos, buf, pos);
|
||||
else {
|
||||
if (entry->utf8) {
|
||||
buf = g_ucs4_to_utf8(entry->text, -1, NULL, NULL, NULL);
|
||||
*pos = g_utf8_offset_to_pointer(buf, entry->pos) - buf;
|
||||
} else {
|
||||
buf = g_malloc(entry->text_len*6 + 1);
|
||||
if(term_type==TERM_TYPE_BIG5)
|
||||
unichars_to_big5_with_pos(entry->text, entry->pos, buf, pos);
|
||||
else
|
||||
@ -440,15 +441,17 @@ void gui_entry_insert_text(GUI_ENTRY_REC *entry, const char *str)
|
||||
{
|
||||
unichar chr;
|
||||
int i, len;
|
||||
const char *ptr;
|
||||
|
||||
g_return_if_fail(entry != NULL);
|
||||
g_return_if_fail(str != NULL);
|
||||
|
||||
gui_entry_redraw_from(entry, entry->pos);
|
||||
|
||||
if (entry->utf8)
|
||||
len = strlen_utf8(str);
|
||||
else if (term_type == TERM_TYPE_BIG5)
|
||||
if (entry->utf8) {
|
||||
g_utf8_validate(str, -1, &ptr);
|
||||
len = g_utf8_pointer_to_offset(str, ptr);
|
||||
} else if (term_type == TERM_TYPE_BIG5)
|
||||
len = strlen_big5(str);
|
||||
else
|
||||
len = strlen(str);
|
||||
@ -468,9 +471,11 @@ void gui_entry_insert_text(GUI_ENTRY_REC *entry, const char *str)
|
||||
entry->text[entry->pos + i] = str[i];
|
||||
}
|
||||
} else {
|
||||
chr = entry->text[entry->pos+len];
|
||||
utf8_to_utf16(str, entry->text+entry->pos);
|
||||
entry->text[entry->pos+len] = chr;
|
||||
ptr = str;
|
||||
for (i = 0; i < len; i++) {
|
||||
entry->text[entry->pos + i] = g_utf8_get_char(ptr);
|
||||
ptr = g_utf8_next_char(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
entry->text_len += len;
|
||||
@ -516,10 +521,10 @@ char *gui_entry_get_cutbuffer(GUI_ENTRY_REC *entry)
|
||||
if (entry->cutbuffer == NULL)
|
||||
return NULL;
|
||||
|
||||
buf = g_malloc(entry->cutbuffer_len*6 + 1);
|
||||
if (entry->utf8)
|
||||
utf16_to_utf8(entry->cutbuffer, buf);
|
||||
buf = g_ucs4_to_utf8(entry->cutbuffer, -1, NULL, NULL, NULL);
|
||||
else {
|
||||
buf = g_malloc(entry->cutbuffer_len*6 + 1);
|
||||
if (term_type == TERM_TYPE_BIG5)
|
||||
unichars_to_big5(entry->cutbuffer, buf);
|
||||
else
|
||||
|
Loading…
x
Reference in New Issue
Block a user