summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog.adoc3
-rw-r--r--ReleaseNotes.adoc6
-rw-r--r--doc/en/weechat_plugin_api.en.adoc150
-rw-r--r--doc/fr/weechat_plugin_api.fr.adoc150
-rw-r--r--doc/it/weechat_plugin_api.it.adoc164
-rw-r--r--doc/ja/weechat_plugin_api.ja.adoc160
-rw-r--r--doc/sr/weechat_plugin_api.sr.adoc160
-rw-r--r--src/core/wee-string.c123
-rw-r--r--src/core/wee-string.h4
-rw-r--r--src/core/wee-utf8.c91
-rw-r--r--src/core/wee-utf8.h4
-rw-r--r--src/gui/gui-completion.c8
-rw-r--r--src/gui/gui-key.c2
-rw-r--r--src/plugins/plugin.c4
-rw-r--r--src/plugins/trigger/trigger.c2
-rw-r--r--src/plugins/weechat-plugin.h14
-rw-r--r--tests/unit/core/test-core-string.cpp56
-rw-r--r--tests/unit/core/test-core-utf8.cpp54
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
*/