diff -ur xchat-gnome-0.14-o/src/fe-gnome/xtext.c xchat-gnome-0.14/src/fe-gnome/xtext.c --- xchat-gnome-0.14-o/src/fe-gnome/xtext.c 2006-10-15 17:19:09.000000000 -0600 +++ xchat-gnome-0.14/src/fe-gnome/xtext.c 2006-10-28 21:55:54.000000000 -0600 @@ -64,9 +64,16 @@ #include "xg-marshal.h" /* is delimiter */ -#define is_del(c) \ - (c == ' ' || c == '\n' || c == ')' || c == '(' || \ - c == '>' || c == '<' || c == ATTR_RESET || c == ATTR_BOLD || c == 0) +int is_del(const char *c) { + int ret; + ret = 0; + ret = (c[0] == ' ' || c[0] == '\n' || c[0] == ')' || c[0] == '(' || + c[0] == '>' || c[0] == '<' || c[0] == ATTR_RESET || c[0] == ATTR_BOLD || c == 0); + if(!ret) { + ret = strncmp(c, "“", 3) == 0 || strncmp(c, "”", 3) == 0; + } + return ret; +} /* force scrolling off */ #define dontscroll(buf) (buf)->last_pixel_pos = 0x7fffffff @@ -1576,6 +1583,7 @@ int offset; unsigned char *str; unsigned char *word; + unsigned char *nstr; int len; int out_of_bounds = 0; @@ -1586,16 +1594,16 @@ str = ent->str + offset; - while (!is_del (*str) && str != ent->str) { - str--; - } - word = str + 1; + while (!is_del(str)) + str = g_utf8_prev_char(str); + word = g_utf8_next_char(str); len = 0; str = word; - while (!is_del (*str) && len != ent->str_len) { - str++; - len++; + while (!is_del(str) && len != ent->str_len) { + nstr = g_utf8_next_char(str); + len += nstr - str; + str = nstr; } if (len > 0 && word[len-1]=='.') { @@ -3452,7 +3460,7 @@ } /* keep a record of the last space, for wordwrapping */ - if (is_del (*str)) { + if (g_unichar_isspace(g_utf8_get_char(str))) { last_space = str; limit_offset = 0; } Only in xchat-gnome-0.14/src/fe-gnome: xtext.c~ Only in xchat-gnome-0.14/src/fe-gnome: xtext.c.orig Only in xchat-gnome-0.14/src/fe-gnome: xtext.c.rej