Mercurial > pidgin.yaz
diff libpurple/util.c @ 24838:0d7c21b5f1d7
propagate from branch 'im.pidgin.pidgin' (head c06356e8e8d2c586f0192a5564053c2584020da8)
to branch 'im.pidgin.pidgin.openq' (head a7077bc12b850d60ea7d768f4b9d4ee6ae6ad2c1)
author | SHiNE CsyFeK <csyfek@gmail.com> |
---|---|
date | Thu, 25 Dec 2008 14:06:10 +0000 |
parents | 3d3376237a7c |
children | 43b721aa4b76 fb89c9f6e57a 45434c3fd878 |
line wrap: on
line diff
--- a/libpurple/util.c Wed Dec 17 13:52:00 2008 +0000 +++ b/libpurple/util.c Thu Dec 25 14:06:10 2008 +0000 @@ -1676,20 +1676,18 @@ size = "xx-small"; break; case 2: - size = "x-small"; + size = "small"; break; case 3: - size = "small"; + size = "medium"; break; case 4: - size = "medium"; + size = "large"; break; case 5: - size = "large"; + size = "x-large"; break; case 6: - size = "x-large"; - break; case 7: size = "xx-large"; break; @@ -4572,18 +4570,35 @@ purple_utf8_has_word(const char *haystack, const char *needle) { char *hay, *pin, *p; + const char *start, *prev_char; + gunichar before, after; int n; gboolean ret = FALSE; - hay = g_utf8_strdown(haystack, -1); + start = hay = g_utf8_strdown(haystack, -1); pin = g_utf8_strdown(needle, -1); n = strlen(pin); - if ((p = strstr(hay, pin)) != NULL) { - if ((p == hay || !isalnum(*(p - 1))) && !isalnum(*(p + n))) { + while ((p = strstr(start, pin)) != NULL) { + prev_char = g_utf8_find_prev_char(hay, p); + before = -2; + if (prev_char) { + before = g_utf8_get_char(prev_char); + } + after = g_utf8_get_char_validated(p + n, - 1); + + if ((p == hay || + /* The character before is a reasonable guess for a word boundary + ("!g_unichar_isalnum()" is not a valid way to determine word + boundaries, but it is the only reasonable thing to do here), + and isn't the '&' from a "&" or some such entity*/ + (before != -2 && !g_unichar_isalnum(before) && *(p - 1) != '&')) + && after != -2 && !g_unichar_isalnum(after)) { ret = TRUE; + break; } + start = p + 1; } g_free(pin);