1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-01 15:26:37 +02:00

Add utf8_charcmp in plugin API, fix bug with utf8_charcasecmp

This commit is contained in:
Sebastien Helleu
2009-04-11 23:34:32 +02:00
parent 741ca8fb6a
commit a3841b12e4
4 changed files with 39 additions and 1 deletions
+34 -1
View File
@@ -370,6 +370,39 @@ utf8_strlen_screen (const char *string)
return length;
}
/*
* utf8_charcmp: compare two utf8 chars (case sensitive)
*/
int
utf8_charcmp (const char *string1, const char *string2)
{
int length1, length2, i, diff;
if (!string1 || !string2)
return (string1) ? 1 : ((string2) ? -1 : 0);
length1 = utf8_char_size (string1);
length2 = utf8_char_size (string2);
i = 0;
while ((i < length1) && (i < length2))
{
diff = (int)((unsigned char) string1[i]) - (int)((unsigned char) string2[i]);
if (diff != 0)
return diff;
i++;
}
/* string1 == string2 ? */
if ((i == length1) && (i == length2))
return 0;
/* string1 < string2 ? */
if (i == length1)
return 1;
/* string1 > string2 */
return -1;
}
/*
* utf8_charcasecmp: compare two utf8 chars (case is ignored)
*/
@@ -401,7 +434,7 @@ utf8_charcasecmp (const char *string1, const char *string2)
i = 1;
while ((i < length1) && (i < length2))
{
diff = (int)((unsigned char) string1[0]) - (int)((unsigned char) string2[0]);
diff = (int)((unsigned char) string1[i]) - (int)((unsigned char) string2[i]);
if (diff != 0)
return diff;
i++;
+1
View File
@@ -43,6 +43,7 @@ extern int utf8_char_size (const char *string);
extern int utf8_strlen (const char *string);
extern int utf8_strnlen (const char *string, int bytes);
extern int utf8_strlen_screen (const char *string);
extern int utf8_charcmp (const char *string1, const char *string2);
extern int utf8_charcasecmp (const char *string1, const char *string2);
extern int utf8_char_size_screen (const char *string);
extern char *utf8_add_offset (const char *string, int offset);
+1
View File
@@ -382,6 +382,7 @@ plugin_load (const char *filename)
new_plugin->utf8_strlen = &utf8_strlen;
new_plugin->utf8_strnlen = &utf8_strnlen;
new_plugin->utf8_strlen_screen = &utf8_strlen_screen;
new_plugin->utf8_charcmp = &utf8_charcmp;
new_plugin->utf8_charcasecmp = &utf8_charcasecmp;
new_plugin->utf8_char_size_screen = &utf8_char_size_screen;
new_plugin->utf8_add_offset = &utf8_add_offset;
+3
View File
@@ -180,6 +180,7 @@ struct t_weechat_plugin
int (*utf8_strlen) (const char *string);
int (*utf8_strnlen) (const char *string, int bytes);
int (*utf8_strlen_screen) (const char *string);
int (*utf8_charcmp) (const char *string1, const char *string2);
int (*utf8_charcasecmp) (const char *string1, const char *string2);
int (*utf8_char_size_screen) (const char *string);
char *(*utf8_add_offset) (const char *string, int offset);
@@ -722,6 +723,8 @@ extern int weechat_plugin_end (struct t_weechat_plugin *plugin);
weechat_plugin->utf8_strnlen(__string, __bytes)
#define weechat_utf8_strlen_screen(__string) \
weechat_plugin->utf8_strlen_screen(__string)
#define weechat_utf8_charcmp(__string1, __string2) \
weechat_plugin->utf8_charcmp(__string1, __string2)
#define weechat_utf8_charcasecmp(__string1, __string2) \
weechat_plugin->utf8_charcasecmp(__string1, __string2)
#define weechat_utf8_char_size_screen(__string) \