diff options
-rw-r--r-- | ChangeLog.adoc | 3 | ||||
-rw-r--r-- | ReleaseNotes.adoc | 6 | ||||
-rw-r--r-- | doc/en/weechat_plugin_api.en.adoc | 150 | ||||
-rw-r--r-- | doc/fr/weechat_plugin_api.fr.adoc | 150 | ||||
-rw-r--r-- | doc/it/weechat_plugin_api.it.adoc | 164 | ||||
-rw-r--r-- | doc/ja/weechat_plugin_api.ja.adoc | 160 | ||||
-rw-r--r-- | doc/sr/weechat_plugin_api.sr.adoc | 160 | ||||
-rw-r--r-- | src/core/wee-string.c | 123 | ||||
-rw-r--r-- | src/core/wee-string.h | 4 | ||||
-rw-r--r-- | src/core/wee-utf8.c | 91 | ||||
-rw-r--r-- | src/core/wee-utf8.h | 4 | ||||
-rw-r--r-- | src/gui/gui-completion.c | 8 | ||||
-rw-r--r-- | src/gui/gui-key.c | 2 | ||||
-rw-r--r-- | src/plugins/plugin.c | 4 | ||||
-rw-r--r-- | src/plugins/trigger/trigger.c | 2 | ||||
-rw-r--r-- | src/plugins/weechat-plugin.h | 14 | ||||
-rw-r--r-- | tests/unit/core/test-core-string.cpp | 56 | ||||
-rw-r--r-- | tests/unit/core/test-core-utf8.cpp | 54 |
18 files changed, 579 insertions, 576 deletions
diff --git a/ChangeLog.adoc b/ChangeLog.adoc index 73e923a0e..da21a1a33 100644 --- a/ChangeLog.adoc +++ b/ChangeLog.adoc @@ -26,7 +26,8 @@ New features:: * core: add signals "buffer_user_input_xxx" and "buffer_user_closing_xxx" for buffers created with `/buffer add` (issue #1848) * core: add identifier in buffer lines (issue #901) * core: add option `unicode` in command `/debug` - * api: return arithmetic difference between chars in functions string_strcasecmp, string_strcasecmp_range, string_strncasecmp, string_strncasecmp_range, string_strcmp_ignore_chars, utf8_charcmp, utf8_charcasecmp, utf8_charcasecmp_range + * api: rename char comparison functions "utf8_char*" to "string_char*" + * api: return arithmetic difference between chars in functions string_charcmp, string_charcasecmp, string_charcasecmp_range, string_strcasecmp, string_strcasecmp_range, string_strncasecmp, string_strncasecmp_range, string_strcmp_ignore_chars * api: return newly allocated string in functions string_tolower and string_toupper * api: add function utf8_strncpy * trigger: add regex command "y" to translate chars, set default regex command to "s" (regex replace) (issue #1510) diff --git a/ReleaseNotes.adoc b/ReleaseNotes.adoc index 3ac46d248..6a24620d4 100644 --- a/ReleaseNotes.adoc +++ b/ReleaseNotes.adoc @@ -26,14 +26,14 @@ https://weechat.org/files/changelog/ChangeLog-devel.html[ChangeLog] The following functions now return arithmetic result of subtracting the last compared char in string2 from the last compared char in string1: +* string_charcmp +* string_charcasecmp +* string_charcasecmp_range * string_strcasecmp * string_strcasecmp_range * string_strncasecmp * string_strncasecmp_range * string_strcmp_ignore_chars -* utf8_charcmp -* utf8_charcasecmp -* utf8_charcasecmp_range Example with WeeChat 3.8: diff --git a/doc/en/weechat_plugin_api.en.adoc b/doc/en/weechat_plugin_api.en.adoc index 9000d55d3..53a67b965 100644 --- a/doc/en/weechat_plugin_api.en.adoc +++ b/doc/en/weechat_plugin_api.en.adoc @@ -692,6 +692,81 @@ free (str); [NOTE] This function is not available in scripting API. +==== string_charcmp + +_Updated in 1.0, 3.8._ + +Compare two chars. + +Prototype: + +[source,c] +---- +int weechat_string_charcmp (const char *string1, const char *string2); +---- + +Arguments: + +* _string1_: first string for comparison +* _string2_: second string for comparison + +Return value: arithmetic result of subtracting the first char in _string2_ from +the first char in _string1_: + +* < 0 if char1 < char2 +* 0 if char1 == char2 +* > 0 if char1 > char2 + +C example: + +[source,c] +---- +int diff = weechat_string_charcmp ("aaa", "ccc"); /* == -2 */ +---- + +[NOTE] +This function is not available in scripting API. + +==== string_charcasecmp + +_Updated in 1.0, 3.8._ + +Compare two chars, ignoring case. + +[NOTE] +Behavior has changed in version 3.8: now all uppercase letters are properly +converted to lowercase (by calling function `towlower`), in addition to the +range `A` to `Z`. + +Prototype: + +[source,c] +---- +int weechat_string_charcasecmp (const char *string1, const char *string2); +---- + +Arguments: + +* _string1_: first string for comparison +* _string2_: second string for comparison + +Return value: arithmetic result of subtracting the first char in _string2_ +(converted to lowercase) from the first char in _string1_ (converted to lowercase): + +* < 0 if char1 < char2 +* 0 if char1 == char2 +* > 0 if char1 > char2 + +C example: + +[source,c] +---- +int diff = weechat_string_charcasecmp ("aaa", "CCC"); /* == -2 */ +---- + +[NOTE] +This function is not available in scripting API. + ==== strcasecmp _Updated in 1.0, 3.8._ @@ -3637,81 +3712,6 @@ int length_on_screen = weechat_utf8_strlen_screen ("é"); /* == 1 */ [NOTE] This function is not available in scripting API. -==== utf8_charcmp - -_Updated in 1.0, 3.8._ - -Compare two UTF-8 chars. - -Prototype: - -[source,c] ----- -int weechat_utf8_charcmp (const char *string1, const char *string2); ----- - -Arguments: - -* _string1_: first string for comparison -* _string2_: second string for comparison - -Return value: arithmetic result of subtracting the first char in _string2_ from -the first char in _string1_: - -* < 0 if char1 < char2 -* 0 if char1 == char2 -* > 0 if char1 > char2 - -C example: - -[source,c] ----- -int diff = weechat_utf8_charcmp ("aaa", "ccc"); /* == -2 */ ----- - -[NOTE] -This function is not available in scripting API. - -==== utf8_charcasecmp - -_Updated in 1.0, 3.8._ - -Compare two UTF-8 chars, ignoring case. - -[NOTE] -Behavior has changed in version 3.8: now all uppercase letters are properly -converted to lowercase (by calling function `towlower`), in addition to the -range `A` to `Z`. - -Prototype: - -[source,c] ----- -int weechat_utf8_charcasecmp (const char *string1, const char *string2); ----- - -Arguments: - -* _string1_: first string for comparison -* _string2_: second string for comparison - -Return value: arithmetic result of subtracting the first char in _string2_ -(converted to lowercase) from the first char in _string1_ (converted to lowercase): - -* < 0 if char1 < char2 -* 0 if char1 == char2 -* > 0 if char1 > char2 - -C example: - -[source,c] ----- -int diff = weechat_utf8_charcasecmp ("aaa", "CCC"); /* == -2 */ ----- - -[NOTE] -This function is not available in scripting API. - ==== utf8_char_size_screen _Updated in 3.8._ diff --git a/doc/fr/weechat_plugin_api.fr.adoc b/doc/fr/weechat_plugin_api.fr.adoc index b07389d15..6105b8062 100644 --- a/doc/fr/weechat_plugin_api.fr.adoc +++ b/doc/fr/weechat_plugin_api.fr.adoc @@ -706,6 +706,81 @@ free (str); [NOTE] Cette fonction n'est pas disponible dans l'API script. +==== string_charcmp + +_Mis à jour dans la 1.0, 3.8._ + +Comparer deux caractères. + +Prototype : + +[source,c] +---- +int weechat_string_charcmp (const char *string1, const char *string2); +---- + +Paramètres : + +* _string1_ : première chaîne pour la comparaison +* _string2_ : seconde chaîne pour la comparaison + +Valeur de retour : résultat de la soustraction du premier caractère dans _string2_ +du premier caractère dans _string1_ : + +* < 0 si char1 < char2 +* 0 si char1 == char2 +* > 0 si char1 > char2 + +Exemple en C : + +[source,c] +---- +int diff = weechat_string_charcmp ("aaa", "ccc"); /* == -2 */ +---- + +[NOTE] +Cette fonction n'est pas disponible dans l'API script. + +==== string_charcasecmp + +_Mis à jour dans la 1.0, 3.8._ + +Comparer deux caractères en ignorant la casse. + +[NOTE] +Le comportement a changé dans la version 3.8 : désormais toutes les lettres en +majuscules sont correctement converties en minuscules (par appel à la fonction +`towlower`), en plus de l'intervalle de `A` à `Z`. + +Prototype : + +[source,c] +---- +int weechat_string_charcasecmp (const char *string1, const char *string2); +---- + +Paramètres : + +* _string1_ : première chaîne pour la comparaison +* _string2_ : seconde chaîne pour la comparaison + +Valeur de retour : résultat de la soustraction du premier caractère dans _string2_ +(converti en minuscule) du premier caractère dans _string1_ (converti en minuscule) : + +* < 0 si char1 < char2 +* 0 si char1 == char2 +* > 0 si char1 > char2 + +Exemple en C : + +[source,c] +---- +int diff = weechat_string_charcasecmp ("aaa", "CCC"); /* == -2 */ +---- + +[NOTE] +Cette fonction n'est pas disponible dans l'API script. + ==== strcasecmp _Mis à jour dans la 1.0, 3.8._ @@ -3703,81 +3778,6 @@ int length_on_screen = weechat_utf8_strlen_screen ("é"); /* == 1 */ [NOTE] Cette fonction n'est pas disponible dans l'API script. -==== utf8_charcmp - -_Mis à jour dans la 1.0, 3.8._ - -Comparer deux caractères UTF-8. - -Prototype : - -[source,c] ----- -int weechat_utf8_charcmp (const char *string1, const char *string2); ----- - -Paramètres : - -* _string1_ : première chaîne pour la comparaison -* _string2_ : seconde chaîne pour la comparaison - -Valeur de retour : résultat de la soustraction du premier caractère dans _string2_ -du premier caractère dans _string1_ : - -* < 0 si char1 < char2 -* 0 si char1 == char2 -* > 0 si char1 > char2 - -Exemple en C : - -[source,c] ----- -int diff = weechat_utf8_charcmp ("aaa", "ccc"); /* == -2 */ ----- - -[NOTE] -Cette fonction n'est pas disponible dans l'API script. - -==== utf8_charcasecmp - -_Mis à jour dans la 1.0, 3.8._ - -Comparer deux caractères UTF-8 en ignorant la casse. - -[NOTE] -Le comportement a changé dans la version 3.8 : désormais toutes les lettres en -majuscules sont correctement converties en minuscules (par appel à la fonction -`towlower`), en plus de l'intervalle de `A` à `Z`. - -Prototype : - -[source,c] ----- -int weechat_utf8_charcasecmp (const char *string1, const char *string2); ----- - -Paramètres : - -* _string1_ : première chaîne pour la comparaison -* _string2_ : seconde chaîne pour la comparaison - -Valeur de retour : résultat de la soustraction du premier caractère dans _string2_ -(converti en minuscule) du premier caractère dans _string1_ (converti en minuscule) : - -* < 0 si char1 < char2 -* 0 si char1 == char2 -* > 0 si char1 > char2 - -Exemple en C : - -[source,c] ----- -int diff = weechat_utf8_charcasecmp ("aaa", "CCC"); /* == -2 */ ----- - -[NOTE] -Cette fonction n'est pas disponible dans l'API script. - ==== utf8_char_size_screen _Mis à jour dans la 3.8._ diff --git a/doc/it/weechat_plugin_api.it.adoc b/doc/it/weechat_plugin_api.it.adoc index afbf3b5bf..4ccb9029f 100644 --- a/doc/it/weechat_plugin_api.it.adoc +++ b/doc/it/weechat_plugin_api.it.adoc @@ -734,6 +734,88 @@ free (str); [NOTE] Questa funzione non è disponibile nelle API per lo scripting. +==== string_charcmp + +// TRANSLATION MISSING +_Updated in 1.0, 3.8._ + +Confronta due caratteri. + +Prototipo: + +[source,c] +---- +int weechat_string_charcmp (const char *string1, const char *string2); +---- + +Argomenti: + +* _string1_: prima stringa da comparare +* _string2_: seconda stringa da comparare + +// TRANSLATION MISSING +Return value: arithmetic result of subtracting the first char in _string2_ from +the first char in _string1_: + +// TRANSLATION MISSING +* < 0 if char1 < char2 +* 0 if char1 == char2 +* > 0 if char1 > char2 + +Esempio in C: + +[source,c] +---- +int diff = weechat_string_charcmp ("aaa", "ccc"); /* == -2 */ +---- + +[NOTE] +Questa funzione non è disponibile nelle API per lo scripting. + +==== string_charcasecmp + +// TRANSLATION MISSING +_Updated in 1.0, 3.8._ + +Confronta due caratteri, ignorando la sensibilità alle maiuscole. + +// TRANSLATION MISSING +[NOTE] +Behavior has changed in version 3.8: now all uppercase letters are properly +converted to lowercase (by calling function `towlower`), in addition to the +range `A` to `Z`. + +Prototipo: + +[source,c] +---- +int weechat_string_charcasecmp (const char *string1, const char *string2); +---- + +Argomenti: + +* _string1_: prima stringa da comparare +* _string2_: seconda stringa da comparare + +// TRANSLATION MISSING +Return value: arithmetic result of subtracting the first char in _string2_ +(converted to lowercase) from the first char in _string1_ (converted to lowercase): + +// TRANSLATION MISSING +* < 0 if char1 < char2 +* 0 if char1 == char2 +* > 0 if char1 > char2 + +Esempio in C: + +[source,c] +---- +int diff = weechat_string_charcasecmp ("aaa", "CCC"); /* == -2 */ +---- + +[NOTE] +Questa funzione non è disponibile nelle API per lo scripting. + ==== strcasecmp // TRANSLATION MISSING @@ -3803,88 +3885,6 @@ int length_on_screen = weechat_utf8_strlen_screen ("é"); /* == 1 */ [NOTE] Questa funzione non è disponibile nelle API per lo scripting. -==== utf8_charcmp - -// TRANSLATION MISSING -_Updated in 1.0, 3.8._ - -Confronta due caratteri UTF-8. - -Prototipo: - -[source,c] ----- -int weechat_utf8_charcmp (const char *string1, const char *string2); ----- - -Argomenti: - -* _string1_: prima stringa da comparare -* _string2_: seconda stringa da comparare - -// TRANSLATION MISSING -Return value: arithmetic result of subtracting the first char in _string2_ from -the first char in _string1_: - -// TRANSLATION MISSING -* < 0 if char1 < char2 -* 0 if char1 == char2 -* > 0 if char1 > char2 - -Esempio in C: - -[source,c] ----- -int diff = weechat_utf8_charcmp ("aaa", "ccc"); /* == -2 */ ----- - -[NOTE] -Questa funzione non è disponibile nelle API per lo scripting. - -==== utf8_charcasecmp - -// TRANSLATION MISSING -_Updated in 1.0, 3.8._ - -Confronta due caratteri UTF-8, ignorando la sensibilità alle maiuscole. - -// TRANSLATION MISSING -[NOTE] -Behavior has changed in version 3.8: now all uppercase letters are properly -converted to lowercase (by calling function `towlower`), in addition to the -range `A` to `Z`. - -Prototipo: - -[source,c] ----- -int weechat_utf8_charcasecmp (const char *string1, const char *string2); ----- - -Argomenti: - -* _string1_: prima stringa da comparare -* _string2_: seconda stringa da comparare - -// TRANSLATION MISSING -Return value: arithmetic result of subtracting the first char in _string2_ -(converted to lowercase) from the first char in _string1_ (converted to lowercase): - -// TRANSLATION MISSING -* < 0 if char1 < char2 -* 0 if char1 == char2 -* > 0 if char1 > char2 - -Esempio in C: - -[source,c] ----- -int diff = weechat_utf8_charcasecmp ("aaa", "CCC"); /* == -2 */ ----- - -[NOTE] -Questa funzione non è disponibile nelle API per lo scripting. - ==== utf8_char_size_screen // TRANSLATION MISSING diff --git a/doc/ja/weechat_plugin_api.ja.adoc b/doc/ja/weechat_plugin_api.ja.adoc index 2de5fdf9c..0c776ba22 100644 --- a/doc/ja/weechat_plugin_api.ja.adoc +++ b/doc/ja/weechat_plugin_api.ja.adoc @@ -710,6 +710,86 @@ free (str); [NOTE] スクリプト API ではこの関数を利用できません。 +==== string_charcmp + +_WeeChat バージョン 1.0, 3.8 で更新。_ + +2 つの 文字を比較。 + +プロトタイプ: + +[source,c] +---- +int weechat_string_charcmp (const char *string1, const char *string2); +---- + +引数: + +* _string1_: 1 番目の比較文字列 +* _string2_: 2 番目の比較文字列 + +// TRANSLATION MISSING +Return value: arithmetic result of subtracting the first char in _string2_ from +the first char in _string1_: + +// TRANSLATION MISSING +* < 0 if char1 < char2 +* 0 if char1 == char2 +* > 0 if char1 > char2 + +C 言語での使用例: + +[source,c] +---- +int diff = weechat_string_charcmp ("aaa", "ccc"); /* == -2 */ +---- + +[NOTE] +スクリプト API ではこの関数を利用できません。 + +==== string_charcasecmp + +_WeeChat バージョン 1.0, 3.8 で更新。_ + +大文字小文字の違いを無視して、2 つの 文字を比較。 + +// TRANSLATION MISSING +[NOTE] +Behavior has changed in version 3.8: now all uppercase letters are properly +converted to lowercase (by calling function `towlower`), in addition to the +range `A` to `Z`. + +プロトタイプ: + +[source,c] +---- +int weechat_string_charcasecmp (const char *string1, const char *string2); +---- + +引数: + +* _string1_: 1 番目の比較文字列 +* _string2_: 2 番目の比較文字列 + +// TRANSLATION MISSING +Return value: arithmetic result of subtracting the first char in _string2_ +(converted to lowercase) from the first char in _string1_ (converted to lowercase): + +// TRANSLATION MISSING +* < 0 if char1 < char2 +* 0 if char1 == char2 +* > 0 if char1 > char2 + +C 言語での使用例: + +[source,c] +---- +int diff = weechat_string_charcasecmp ("aaa", "CCC"); /* == -2 */ +---- + +[NOTE] +スクリプト API ではこの関数を利用できません。 + ==== strcasecmp _WeeChat バージョン 1.0, 3.8 で更新。_ @@ -3731,86 +3811,6 @@ int length_on_screen = weechat_utf8_strlen_screen ("é"); /* == 1 */ [NOTE] スクリプト API ではこの関数を利用できません。 -==== utf8_charcmp - -_WeeChat バージョン 1.0, 3.8 で更新。_ - -2 つの UTF-8 文字を比較。 - -プロトタイプ: - -[source,c] ----- -int weechat_utf8_charcmp (const char *string1, const char *string2); ----- - -引数: - -* _string1_: 1 番目の比較文字列 -* _string2_: 2 番目の比較文字列 - -// TRANSLATION MISSING -Return value: arithmetic result of subtracting the first char in _string2_ from -the first char in _string1_: - -// TRANSLATION MISSING -* < 0 if char1 < char2 -* 0 if char1 == char2 -* > 0 if char1 > char2 - -C 言語での使用例: - -[source,c] ----- -int diff = weechat_utf8_charcmp ("aaa", "ccc"); /* == -2 */ ----- - -[NOTE] -スクリプト API ではこの関数を利用できません。 - -==== utf8_charcasecmp - -_WeeChat バージョン 1.0, 3.8 で更新。_ - -大文字小文字の違いを無視して、2 つの UTF-8 文字を比較。 - -// TRANSLATION MISSING -[NOTE] -Behavior has changed in version 3.8: now all uppercase letters are properly -converted to lowercase (by calling function `towlower`), in addition to the -range `A` to `Z`. - -プロトタイプ: - -[source,c] ----- -int weechat_utf8_charcasecmp (const char *string1, const char *string2); ----- - -引数: - -* _string1_: 1 番目の比較文字列 -* _string2_: 2 番目の比較文字列 - -// TRANSLATION MISSING -Return value: arithmetic result of subtracting the first char in _string2_ -(converted to lowercase) from the first char in _string1_ (converted to lowercase): - -// TRANSLATION MISSING -* < 0 if char1 < char2 -* 0 if char1 == char2 -* > 0 if char1 > char2 - -C 言語での使用例: - -[source,c] ----- -int diff = weechat_utf8_charcasecmp ("aaa", "CCC"); /* == -2 */ ----- - -[NOTE] -スクリプト API ではこの関数を利用できません。 - ==== utf8_char_size_screen _WeeChat バージョン 3.8 で更新。_ diff --git a/doc/sr/weechat_plugin_api.sr.adoc b/doc/sr/weechat_plugin_api.sr.adoc index 15ef3ba83..2095b564e 100644 --- a/doc/sr/weechat_plugin_api.sr.adoc +++ b/doc/sr/weechat_plugin_api.sr.adoc @@ -671,6 +671,86 @@ free (str); [NOTE] Ова функција није доступна у API скриптовања. +==== string_charcmp + +_Ажурирано у верзији 1.0, 3.8._ + +Пореди два карактера. + +Прототип: + +[source,c] +---- +int weechat_string_charcmp (const char *string1, const char *string2); +---- + +Аргументи: + +* _string1_: први стринг за поређење +* _string2_: други стринг за поређење + +// TRANSLATION MISSING +Return value: arithmetic result of subtracting the first char in _string2_ from +the first char in _string1_: + +// TRANSLATION MISSING +* < 0 if char1 < char2 +* 0 if char1 == char2 +* > 0 if char1 > char2 + +C пример: + +[source,c] +---- +int diff = weechat_string_charcmp ("aaa", "ccc"); /* == -2 */ +---- + +[NOTE] +Ова функција није доступна у API скриптовања. + +==== string_charcasecmp + +_Ажурирано у верзији 1.0, 3.8._ + +Пореди два карактера, уз игнорисање разлике у величини слова. + +// TRANSLATION MISSING +[NOTE] +Behavior has changed in version 3.8: now all uppercase letters are properly +converted to lowercase (by calling function `towlower`), in addition to the +range `A` to `Z`. + +Прототип: + +[source,c] +---- +int weechat_string_charcasecmp (const char *string1, const char *string2); +---- + +Аргументи: + +* _string1_: први стринг за поређење +* _string2_: други стринг за поређење + +// TRANSLATION MISSING +Return value: arithmetic result of subtracting the first char in _string2_ +(converted to lowercase) from the first char in _string1_ (converted to lowercase): + +// TRANSLATION MISSING +* < 0 if char1 < char2 +* 0 if char1 == char2 +* > 0 if char1 > char2 + +C пример: + +[source,c] +---- +int diff = weechat_string_charcasecmp ("aaa", "CCC"); /* == -2 */ +---- + +[NOTE] +Ова функција није доступна у API скриптовања. + ==== strcasecmp _Ажурирано у верзији 1.0, 3.8._ @@ -3540,86 +3620,6 @@ int length_on_screen = weechat_utf8_strlen_screen ("é"); /* == 1 */ [NOTE] Ова функција није доступна у API скриптовања. -==== utf8_charcmp - -_Ажурирано у верзији 1.0, 3.8._ - -Пореди два UTF-8 карактера. - -Прототип: - -[source,c] ----- -int weechat_utf8_charcmp (const char *string1, const char *string2); ----- - -Аргументи: - -* _string1_: први стринг за поређење -* _string2_: други стринг за поређење - -// TRANSLATION MISSING -Return value: arithmetic result of subtracting the first char in _string2_ from -the first char in _string1_: - -// TRANSLATION MISSING -* < 0 if char1 < char2 -* 0 if char1 == char2 -* > 0 if char1 > char2 - -C пример: - -[source,c] ----- -int diff = weechat_utf8_charcmp ("aaa", "ccc"); /* == -2 */ ----- - -[NOTE] -Ова функција није доступна у API скриптовања. - -==== utf8_charcasecmp - -_Ажурирано у верзији 1.0, 3.8._ - -Пореди два UTF-8 карактера, уз игнорисање разлике у величини слова. - -// TRANSLATION MISSING -[NOTE] -Behavior has changed in version 3.8: now all uppercase letters are properly -converted to lowercase (by calling function `towlower`), in addition to the -range `A` to `Z`. - -Прототип: - -[source,c] ----- -int weechat_utf8_charcasecmp (const char *string1, const char *string2); ----- - -Аргументи: - -* _string1_: први стринг за поређење -* _string2_: други стринг за поређење - -// TRANSLATION MISSING -Return value: arithmetic result of subtracting the first char in _string2_ -(converted to lowercase) from the first char in _string1_ (converted to lowercase): - -// TRANSLATION MISSING -* < 0 if char1 < char2 -* 0 if char1 == char2 -* > 0 if char1 > char2 - -C пример: - -[source,c] ----- -int diff = weechat_utf8_charcasecmp ("aaa", "CCC"); /* == -2 */ ----- - -[NOTE] -Ова функција није доступна у API скриптовања. - ==== utf8_char_size_screen _Ажурирано у верзији 3.8._ diff --git a/src/core/wee-string.c b/src/core/wee-string.c index 3c258ec94..391d23db3 100644 --- a/src/core/wee-string.c +++ b/src/core/wee-string.c @@ -394,6 +394,97 @@ string_toupper (const char *string) } /* + * Compares two chars (case sensitive). + * + * Returns: arithmetic result of subtracting the first char in string2 + * from the first char in string1: + * < 0: string1 < string2 + * 0: string1 == string2 + * > 0: string1 > string2 + */ + +int +string_charcmp (const char *string1, const char *string2) +{ + return utf8_char_int (string1) - utf8_char_int (string2); +} + +/* + * Compares two chars (case insensitive). + * + * Returns: arithmetic result of subtracting the first char in string2 + * (converted to lowercase) from the first char in string1 (converted + * to lowercase): + * < 0: string1 < string2 + * 0: string1 == string2 + * > 0: string1 > string2 + */ + +int +string_charcasecmp (const char *string1, const char *string2) +{ + wint_t wchar1, wchar2; + + /* + * optimization for single-byte chars: only letters A-Z must be converted + * to lowercase; this is faster than calling `towlower` + */ + if (string1 && !((unsigned char)(string1[0]) & 0x80) + && string2 && !((unsigned char)(string2[0]) & 0x80)) + { + wchar1 = string1[0]; + if ((wchar1 >= 'A') && (wchar1 <= 'Z')) + wchar1 += ('a' - 'A'); + wchar2 = string2[0]; + if ((wchar2 >= 'A') && (wchar2 <= 'Z')) + wchar2 += ('a' - 'A'); + } + else + { + wchar1 = towlower (utf8_char_int (string1)); + wchar2 = towlower (utf8_char_int (string2)); + } + + return wchar1 - wchar2; +} + +/* + * Compares two chars (case insensitive using a range). + * + * The range is the number of chars which can be converted from upper to lower + * case. For example 26 = all letters of alphabet, 29 = all letters + 3 chars. + * + * Examples: + * - range = 26: A-Z ==> a-z + * - range = 29: A-Z [ \ ] ==> a-z { | } + * - range = 30: A-Z [ \ ] ^ ==> a-z { | } ~ + * (ranges 29 and 30 are used by some protocols like IRC) + * + * Returns: arithmetic result of subtracting the last compared char in string2 + * (converted to lowercase) from the last compared char in string1 (converted + * to lowercase): + * < 0: string1 < string2 + * 0: string1 == string2 + * > 0: string1 > string2 + */ + +int +string_charcasecmp_range (const char *string1, const char *string2, int range) +{ + wchar_t wchar1, wchar2; + + wchar1 = utf8_char_int (string1); + if ((wchar1 >= (wchar_t)'A') && (wchar1 < (wchar_t)('A' + range))) + wchar1 += ('a' - 'A'); + + wchar2 = utf8_char_int (string2); + if ((wchar2 >= (wchar_t)'A') && (wchar2 < (wchar_t)('A' + range))) + wchar2 += ('a' - 'A'); + + return wchar1 - wchar2; +} + +/* * Compares two strings (case insensitive). * * Returns: arithmetic result of subtracting the last compared char in string2 @@ -411,7 +502,7 @@ string_strcasecmp (const char *string1, const char *string2) while (string1 && string1[0] && string2 && string2[0]) { - diff = utf8_charcasecmp (string1, string2); + diff = string_charcasecmp (string1, string2); if (diff != 0) return diff; @@ -419,7 +510,7 @@ string_strcasecmp (const char *string1, const char *string2) string2 = utf8_next_char (string2); } - return utf8_charcasecmp (string1, string2); + return string_charcasecmp (string1, string2); } /* @@ -449,7 +540,7 @@ string_strcasecmp_range (const char *string1, const char *string2, int range) while (string1 && string1[0] && string2 && string2[0]) { - diff = utf8_charcasecmp_range (string1, string2, range); + diff = string_charcasecmp_range (string1, string2, range); if (diff != 0) return diff; @@ -457,7 +548,7 @@ string_strcasecmp_range (const char *string1, const char *string2, int range) string2 = utf8_next_char (string2); } - return utf8_charcasecmp_range (string1, string2, range); + return string_charcasecmp_range (string1, string2, range); } /* @@ -479,7 +570,7 @@ string_strncasecmp (const char *string1, const char *string2, int max) count = 0; while ((count < max) && string1 && string1[0] && string2 && string2[0]) { - diff = utf8_charcasecmp (string1, string2); + diff = string_charcasecmp (string1, string2); if (diff != 0) return diff; @@ -491,7 +582,7 @@ string_strncasecmp (const char *string1, const char *string2, int max) if (count >= max) return 0; else - return utf8_charcasecmp (string1, string2); + return string_charcasecmp (string1, string2); } /* @@ -523,7 +614,7 @@ string_strncasecmp_range (const char *string1, const char *string2, int max, count = 0; while ((count < max) && string1 && string1[0] && string2 && string2[0]) { - diff = utf8_charcasecmp_range (string1, string2, range); + diff = string_charcasecmp_range (string1, string2, range); if (diff != 0) return diff; @@ -535,7 +626,7 @@ string_strncasecmp_range (const char *string1, const char *string2, int max, if (count >= max) return 0; else - return utf8_charcasecmp_range (string1, string2, range); + return string_charcasecmp_range (string1, string2, range); } /* @@ -572,13 +663,14 @@ string_strcmp_ignore_chars (const char *string1, const char *string2, if (!string1 || !string1[0] || !string2 || !string2[0]) { return (case_sensitive) ? - utf8_charcmp (string1, string2) : - utf8_charcasecmp (string1, string2); + string_charcmp (string1, string2) : + string_charcasecmp (string1, string2); } /* look at diff */ diff = (case_sensitive) ? - utf8_charcmp (string1, string2) : utf8_charcasecmp (string1, string2); + string_charcmp (string1, string2) : + string_charcasecmp (string1, string2); if (diff != 0) return diff; @@ -596,7 +688,8 @@ string_strcmp_ignore_chars (const char *string1, const char *string2, } } return (case_sensitive) ? - utf8_charcmp (string1, string2) : utf8_charcasecmp (string1, string2); + string_charcmp (string1, string2) : + string_charcasecmp (string1, string2); } /* @@ -1984,7 +2077,7 @@ string_translate_chars (const char *string, ptr_chars2 = chars2; while (ptr_chars1 && ptr_chars1[0] && ptr_chars2 && ptr_chars2[0]) { - if (utf8_charcmp (ptr_chars1, ptr_string) == 0) + if (string_charcmp (ptr_chars1, ptr_string) == 0) { string_dyn_concat (result, ptr_chars2, utf8_char_size (ptr_chars2)); translated = 1; @@ -3736,7 +3829,7 @@ string_is_command_char (const char *string) while (ptr_command_chars && ptr_command_chars[0]) { - if (utf8_charcmp (ptr_command_chars, string) == 0) + if (string_charcmp (ptr_command_chars, string) == 0) return 1; ptr_command_chars = utf8_next_char (ptr_command_chars); } @@ -3798,7 +3891,7 @@ string_input_for_buffer (const char *string) return string; /* check if first char is doubled: if yes, then it's not a command */ - if (utf8_charcmp (string, next_char) == 0) + if (string_charcmp (string, next_char) == 0) return next_char; /* string is a command */ diff --git a/src/core/wee-string.h b/src/core/wee-string.h index 59cb4fb64..303238d8f 100644 --- a/src/core/wee-string.h +++ b/src/core/wee-string.h @@ -44,6 +44,10 @@ extern char *string_reverse_screen (const char *string); extern char *string_repeat (const char *string, int count); extern char *string_tolower (const char *string); extern char *string_toupper (const char *string); +extern int string_charcmp (const char *string1, const char *string2); +extern int string_charcasecmp (const char *string1, const char *string2); +extern int string_charcasecmp_range (const char *string1, const char *string2, + int range); extern int string_strcasecmp (const char *string1, const char *string2); extern int string_strcasecmp_range (const char *string1, const char *string2, int range); diff --git a/src/core/wee-utf8.c b/src/core/wee-utf8.c index 557fc592d..0cb78405f 100644 --- a/src/core/wee-utf8.c +++ b/src/core/wee-utf8.c @@ -529,97 +529,6 @@ utf8_strlen_screen (const char *string) } /* - * Compares two UTF-8 chars (case sensitive). - * - * Returns: arithmetic result of subtracting the first char in string2 - * from the first char in string1: - * < 0: string1 < string2 - * 0: string1 == string2 - * > 0: string1 > string2 - */ - -int -utf8_charcmp (const char *string1, const char *string2) -{ - return utf8_char_int (string1) - utf8_char_int (string2); -} - -/* - * Compares two UTF-8 chars (case insensitive). - * - * Returns: arithmetic result of subtracting the first char in string2 - * (converted to lowercase) from the first char in string1 (converted - * to lowercase): - * < 0: string1 < string2 - * 0: string1 == string2 - * > 0: string1 > string2 - */ - -int -utf8_charcasecmp (const char *string1, const char *string2) -{ - wint_t wchar1, wchar2; - - /* - * optimization for single-byte chars: only letters A-Z must be converted - * to lowercase; this is faster than calling `towlower` - */ - if (string1 && !((unsigned char)(string1[0]) & 0x80) - && string2 && !((unsigned char)(string2[0]) & 0x80)) - { - wchar1 = string1[0]; - if ((wchar1 >= 'A') && (wchar1 <= 'Z')) - wchar1 += ('a' - 'A'); - wchar2 = string2[0]; - if ((wchar2 >= 'A') && (wchar2 <= 'Z')) - wchar2 += ('a' - 'A'); - } - else - { - wchar1 = towlower (utf8_char_int (string1)); - wchar2 = towlower (utf8_char_int (string2)); - } - - return wchar1 - wchar2; -} - -/* - * Compares two UTF-8 chars (case insensitive using a range). - * - * The range is the number of chars which can be converted from upper to lower - * case. For example 26 = all letters of alphabet, 29 = all letters + 3 chars. - * - * Examples: - * - range = 26: A-Z ==> a-z - * - range = 29: A-Z [ \ ] ==> a-z { | } - * - range = 30: A-Z [ \ ] ^ ==> a-z { | } ~ - * (ranges 29 and 30 are used by some protocols like IRC) - * - * Returns: arithmetic result of subtracting the last compared char in string2 - * (converted to lowercase) from the last compared char in string1 (converted - * to lowercase): - * < 0: string1 < string2 - * 0: string1 == string2 - * > 0: string1 > string2 - */ - -int -utf8_charcasecmp_range (const char *string1, const char *string2, int range) -{ - wchar_t wchar1, wchar2; - - wchar1 = utf8_char_int (string1); - if ((wchar1 >= (wchar_t)'A') && (wchar1 < (wchar_t)('A' + range))) - wchar1 += ('a' - 'A'); - - wchar2 = utf8_char_int (string2); - if ((wchar2 >= (wchar_t)'A') && (wchar2 < (wchar_t)('A' + range))) - wchar2 += ('a' - 'A'); - - return wchar1 - wchar2; -} - -/* * Moves forward N chars in an UTF-8 string. * * Returns pointer to the new position in string. diff --git a/src/core/wee-utf8.h b/src/core/wee-utf8.h index 9507ea05d..72f4afe3c 100644 --- a/src/core/wee-utf8.h +++ b/src/core/wee-utf8.h @@ -41,10 +41,6 @@ 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_charcasecmp_range (const char *string1, const char *string2, - int range); extern int utf8_char_size_screen (const char *string); extern const char *utf8_add_offset (const char *string, int offset); extern int utf8_real_pos (const char *string, int pos); diff --git a/src/gui/gui-completion.c b/src/gui/gui-completion.c index 5e07861f1..2348fdbee 100644 --- a/src/gui/gui-completion.c +++ b/src/gui/gui-completion.c @@ -1034,11 +1034,11 @@ gui_completion_common_prefix_size (struct t_arraylist *list, ptr_completion_word = (struct t_gui_completion_word *)(list->data[i]); if (!utf_char - || (utf8_charcasecmp (utf_char, - ptr_completion_word->word) == 0)) + || (string_charcasecmp (utf_char, + ptr_completion_word->word) == 0)) { if ((ptr_completion_word->word[ptr_char - ptr_first_item] == '\0') - || (utf8_charcasecmp ( + || (string_charcasecmp ( ptr_char, ptr_completion_word->word + (ptr_char - ptr_first_item)) != 0)) { @@ -1112,7 +1112,7 @@ gui_completion_partial_build_list (struct t_gui_completion *completion, { ptr_completion_word = (struct t_gui_completion_word *)list_temp->data[index]; - if (utf8_charcasecmp (utf_char, ptr_completion_word->word) == 0) + if (string_charcasecmp (utf_char, ptr_completion_word->word) == 0) { arraylist_remove (list_temp, index); items_count++; diff --git a/src/gui/gui-key.c b/src/gui/gui-key.c index 4d31716c7..232841083 100644 --- a/src/gui/gui-key.c +++ b/src/gui/gui-key.c @@ -731,7 +731,7 @@ gui_key_cmp (const char *key, const char *search, int context) while (search[0]) { - diff = utf8_charcmp (key, search); + diff = string_charcmp (key, search); if (diff != 0) return diff; key = utf8_next_char (key); diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c index b9b7584fb..6013c20ec 100644 --- a/src/plugins/plugin.c +++ b/src/plugins/plugin.c @@ -605,6 +605,8 @@ plugin_load (const char *filename, int init_plugin, int argc, char **argv) new_plugin->string_cut = &string_cut; new_plugin->string_tolower = &string_tolower; new_plugin->string_toupper = &string_toupper; + new_plugin->string_charcmp = &string_charcmp; + new_plugin->string_charcasecmp = &string_charcasecmp; new_plugin->strcasecmp = &string_strcasecmp; new_plugin->strcasecmp_range = &string_strcasecmp_range; new_plugin->strncasecmp = &string_strncasecmp; @@ -658,8 +660,6 @@ plugin_load (const char *filename, int init_plugin, int argc, char **argv) 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; new_plugin->utf8_real_pos = &utf8_real_pos; diff --git a/src/plugins/trigger/trigger.c b/src/plugins/trigger/trigger.c index 43518c291..7d3895217 100644 --- a/src/plugins/trigger/trigger.c +++ b/src/plugins/trigger/trigger.c @@ -701,7 +701,7 @@ trigger_regex_split (const char *str_regex, /* search the delimiter (which can be more than one char) */ pos = weechat_utf8_next_char (ptr_regex); - while (pos[0] && (weechat_utf8_charcmp (ptr_regex, pos) == 0)) + while (pos[0] && (weechat_string_charcmp (ptr_regex, pos) == 0)) { pos = weechat_utf8_next_char (pos); } diff --git a/src/plugins/weechat-plugin.h b/src/plugins/weechat-plugin.h index 229c3aba8..dc1439d50 100644 --- a/src/plugins/weechat-plugin.h +++ b/src/plugins/weechat-plugin.h @@ -68,7 +68,7 @@ struct timeval; * please change the date with current one; for a second change at same * date, increment the 01, otherwise please keep 01. */ -#define WEECHAT_PLUGIN_API_VERSION "20221218-01" +#define WEECHAT_PLUGIN_API_VERSION "20221224-01" /* macros for defining plugin infos */ #define WEECHAT_PLUGIN_NAME(__name) \ @@ -289,6 +289,8 @@ struct t_weechat_plugin int screen, const char *cut_suffix); char *(*string_tolower) (const char *string); char *(*string_toupper) (const char *string); + int (*string_charcmp) (const char *string1, const char *string2); + int (*string_charcasecmp) (const char *string1, const char *string2); int (*strcasecmp) (const char *string1, const char *string2); int (*strcasecmp_range) (const char *string1, const char *string2, int range); @@ -372,8 +374,6 @@ 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); const char *(*utf8_add_offset) (const char *string, int offset); int (*utf8_real_pos) (const char *string, int pos); @@ -1229,6 +1229,10 @@ extern int weechat_plugin_end (struct t_weechat_plugin *plugin); (weechat_plugin->string_tolower)(__string) #define weechat_string_toupper(__string) \ (weechat_plugin->string_toupper)(__string) +#define weechat_string_charcmp(__string1, __string2) \ + (weechat_plugin->string_charcmp)(__string1, __string2) +#define weechat_string_charcasecmp(__string1, __string2) \ + (weechat_plugin->string_charcasecmp)(__string1, __string2) #define weechat_strcasecmp(__string1, __string2) \ (weechat_plugin->strcasecmp)(__string1, __string2) #define weechat_strcasecmp_range(__string1, __string2, __range) \ @@ -1365,10 +1369,6 @@ 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) \ (weechat_plugin->utf8_char_size_screen)(__string) #define weechat_utf8_add_offset(__string, __offset) \ diff --git a/tests/unit/core/test-core-string.cpp b/tests/unit/core/test-core-string.cpp index 540e241b5..78670cc2c 100644 --- a/tests/unit/core/test-core-string.cpp +++ b/tests/unit/core/test-core-string.cpp @@ -457,6 +457,60 @@ TEST(CoreString, Repeat) /* * Tests functions: + * string_charcmp + * string_charcasecmp + * string_charcasecmp_range + */ + +TEST(CoreString, CharComparison) +{ + /* case-sensitive comparison */ + LONGS_EQUAL(0, string_charcmp (NULL, NULL)); + LONGS_EQUAL(-97, string_charcmp (NULL, "abc")); + LONGS_EQUAL(97, string_charcmp ("abc", NULL)); + LONGS_EQUAL(0, string_charcmp ("axx", "azz")); + LONGS_EQUAL(-2, string_charcmp ("A", "C")); + LONGS_EQUAL(2, string_charcmp ("C", "A")); + LONGS_EQUAL(-32, string_charcmp ("A", "a")); + LONGS_EQUAL(-8129, string_charcmp ("ë", "€")); + LONGS_EQUAL(235, string_charcmp ("ë", "")); + LONGS_EQUAL(-235, string_charcmp ("", "ë")); + + /* case-insensitive comparison */ + LONGS_EQUAL(0, string_charcasecmp (NULL, NULL)); + LONGS_EQUAL(-97, string_charcasecmp (NULL, "abc")); + LONGS_EQUAL(97, string_charcasecmp ("abc", NULL)); + LONGS_EQUAL(0, string_charcasecmp ("axx", "azz")); + LONGS_EQUAL(-2, string_charcasecmp ("A", "C")); + LONGS_EQUAL(2, string_charcasecmp ("C", "A")); + LONGS_EQUAL(0, string_charcasecmp ("A", "a")); + LONGS_EQUAL(-8129, string_charcasecmp ("ë", "€")); + + /* case-insensitive comparison with a range */ + LONGS_EQUAL(0, string_charcasecmp_range (NULL, NULL, 30)); + LONGS_EQUAL(-97, string_charcasecmp_range (NULL, "abc", 30)); + LONGS_EQUAL(97, string_charcasecmp_range ("abc", NULL, 30)); + LONGS_EQUAL(0, string_charcasecmp_range ("axx", "azz", 30)); + LONGS_EQUAL(-2, string_charcasecmp_range ("A", "C", 30)); + LONGS_EQUAL(2, string_charcasecmp_range ("C", "A", 30)); + LONGS_EQUAL(0, string_charcasecmp_range ("A", "a", 30)); + LONGS_EQUAL(-8129, string_charcasecmp_range ("ë", "€", 30)); + LONGS_EQUAL(0, string_charcasecmp_range ("[", "{", 30)); + LONGS_EQUAL(0, string_charcasecmp_range ("]", "}", 30)); + LONGS_EQUAL(0, string_charcasecmp_range ("\\", "|", 30)); + LONGS_EQUAL(0, string_charcasecmp_range ("^", "~", 30)); + LONGS_EQUAL(-32, string_charcasecmp_range ("[", "{", 26)); + LONGS_EQUAL(32, string_charcasecmp_range ("{", "[", 26)); + LONGS_EQUAL(-32, string_charcasecmp_range ("]", "}", 26)); + LONGS_EQUAL(32, string_charcasecmp_range ("}", "]", 26)); + LONGS_EQUAL(-32, string_charcasecmp_range ("\\", "|", 26)); + LONGS_EQUAL(32, string_charcasecmp_range ("|", "\\", 26)); + LONGS_EQUAL(-32, string_charcasecmp_range ("^", "~", 26)); + LONGS_EQUAL(32, string_charcasecmp_range ("~", "^", 26)); +} + +/* + * Tests functions: * string_strcasecmp * string_strncasecmp * string_strcasecmp_range @@ -464,7 +518,7 @@ TEST(CoreString, Repeat) * string_strcmp_ignore_chars */ -TEST(CoreString, Comparison) +TEST(CoreString, StringComparison) { /* case-insensitive comparison */ LONGS_EQUAL(0, string_strcasecmp (NULL, NULL)); diff --git a/tests/unit/core/test-core-utf8.cpp b/tests/unit/core/test-core-utf8.cpp index cd330eadf..d6eda985a 100644 --- a/tests/unit/core/test-core-utf8.cpp +++ b/tests/unit/core/test-core-utf8.cpp @@ -593,60 +593,6 @@ TEST(CoreUtf8, Size) /* * Tests functions: - * utf8_charcmp - * utf8_charcasecmp - * utf8_charcasecmp_range - */ - -TEST(CoreUtf8, Comparison) -{ - /* case-sensitive comparison */ - LONGS_EQUAL(0, utf8_charcmp (NULL, NULL)); - LONGS_EQUAL(-97, utf8_charcmp (NULL, "abc")); - LONGS_EQUAL(97, utf8_charcmp ("abc", NULL)); - LONGS_EQUAL(0, utf8_charcmp ("axx", "azz")); - LONGS_EQUAL(-2, utf8_charcmp ("A", "C")); - LONGS_EQUAL(2, utf8_charcmp ("C", "A")); - LONGS_EQUAL(-32, utf8_charcmp ("A", "a")); - LONGS_EQUAL(-8129, utf8_charcmp ("ë", "€")); - LONGS_EQUAL(235, utf8_charcmp ("ë", "")); - LONGS_EQUAL(-235, utf8_charcmp ("", "ë")); - - /* case-insensitive comparison */ - LONGS_EQUAL(0, utf8_charcasecmp (NULL, NULL)); - LONGS_EQUAL(-97, utf8_charcasecmp (NULL, "abc")); - LONGS_EQUAL(97, utf8_charcasecmp ("abc", NULL)); - LONGS_EQUAL(0, utf8_charcasecmp ("axx", "azz")); - LONGS_EQUAL(-2, utf8_charcasecmp ("A", "C")); - LONGS_EQUAL(2, utf8_charcasecmp ("C", "A")); - LONGS_EQUAL(0, utf8_charcasecmp ("A", "a")); - LONGS_EQUAL(-8129, utf8_charcasecmp ("ë", "€")); - - /* case-insensitive comparison with a range */ - LONGS_EQUAL(0, utf8_charcasecmp_range (NULL, NULL, 30)); - LONGS_EQUAL(-97, utf8_charcasecmp_range (NULL, "abc", 30)); - LONGS_EQUAL(97, utf8_charcasecmp_range ("abc", NULL, 30)); - LONGS_EQUAL(0, utf8_charcasecmp_range ("axx", "azz", 30)); - LONGS_EQUAL(-2, utf8_charcasecmp_range ("A", "C", 30)); - LONGS_EQUAL(2, utf8_charcasecmp_range ("C", "A", 30)); - LONGS_EQUAL(0, utf8_charcasecmp_range ("A", "a", 30)); - LONGS_EQUAL(-8129, utf8_charcasecmp_range ("ë", "€", 30)); - LONGS_EQUAL(0, utf8_charcasecmp_range ("[", "{", 30)); - LONGS_EQUAL(0, utf8_charcasecmp_range ("]", "}", 30)); - LONGS_EQUAL(0, utf8_charcasecmp_range ("\\", "|", 30)); - LONGS_EQUAL(0, utf8_charcasecmp_range ("^", "~", 30)); - LONGS_EQUAL(-32, utf8_charcasecmp_range ("[", "{", 26)); - LONGS_EQUAL(32, utf8_charcasecmp_range ("{", "[", 26)); - LONGS_EQUAL(-32, utf8_charcasecmp_range ("]", "}", 26)); - LONGS_EQUAL(32, utf8_charcasecmp_range ("}", "]", 26)); - LONGS_EQUAL(-32, utf8_charcasecmp_range ("\\", "|", 26)); - LONGS_EQUAL(32, utf8_charcasecmp_range ("|", "\\", 26)); - LONGS_EQUAL(-32, utf8_charcasecmp_range ("^", "~", 26)); - LONGS_EQUAL(32, utf8_charcasecmp_range ("~", "^", 26)); -} - -/* - * Tests functions: * utf8_strndup */ |