1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-09 03:03:12 +02:00

api: add function string_translate_chars

This commit is contained in:
Sébastien Helleu
2022-10-03 20:07:08 +02:00
parent 03899e5ea5
commit bc2fb071e2
10 changed files with 299 additions and 1 deletions
+55
View File
@@ -1902,6 +1902,61 @@ string_replace_regex (const char *string, void *regex, const char *replace,
return result;
}
/*
* Translates chars by other ones in a string.
*
* Note: result must be freed after use.
*/
char *
string_translate_chars (const char *string,
const char *chars1, const char *chars2)
{
int length, length2, translated;
const char *ptr_string, *ptr_chars1, *ptr_chars2;
char **result, *ptr_result;
if (!string)
return NULL;
length = (chars1) ? utf8_strlen (chars1) : 0;
length2 = (chars2) ? utf8_strlen (chars2) : 0;
if (!chars1 || !chars2 || (length != length2))
return strdup (string);
result = string_dyn_alloc (strlen (string) + 1);
if (!result)
return strdup (string);
ptr_string = string;
while (ptr_string && ptr_string[0])
{
translated = 0;
ptr_chars1 = chars1;
ptr_chars2 = chars2;
while (ptr_chars1 && ptr_chars1[0] && ptr_chars2 && ptr_chars2[0])
{
if (utf8_charcmp (ptr_chars1, ptr_string) == 0)
{
string_dyn_concat (result, ptr_chars2, utf8_char_size (ptr_chars2));
translated = 1;
break;
}
ptr_chars1 = utf8_next_char (ptr_chars1);
ptr_chars2 = utf8_next_char (ptr_chars2);
}
if (!translated)
string_dyn_concat (result, ptr_string, utf8_char_size (ptr_string));
ptr_string = utf8_next_char (ptr_string);
}
ptr_result = *result;
string_dyn_free (result, 0);
return ptr_result;
}
/*
* Splits a string according to separators.
*
+2
View File
@@ -88,6 +88,8 @@ extern char *string_replace_regex (const char *string, void *regex,
const char reference_char,
char *(*callback)(void *data, const char *text),
void *callback_data);
extern char *string_translate_chars (const char *string,
const char *chars1, const char *chars2);
extern char **string_split (const char *string, const char *separators,
const char *strip_items, int flags,
int num_items_max, int *num_items);
+1
View File
@@ -626,6 +626,7 @@ plugin_load (const char *filename, int init_plugin, int argc, char **argv)
new_plugin->string_has_highlight = &string_has_highlight;
new_plugin->string_has_highlight_regex = &string_has_highlight_regex;
new_plugin->string_replace_regex = &string_replace_regex;
new_plugin->string_translate_chars = &string_translate_chars;
new_plugin->string_split = &string_split;
new_plugin->string_split_shell = &string_split_shell;
new_plugin->string_free_split = &string_free_split;
+6 -1
View File
@@ -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 "20220926-01"
#define WEECHAT_PLUGIN_API_VERSION "20221003-01"
/* macros for defining plugin infos */
#define WEECHAT_PLUGIN_NAME(__name) \
@@ -327,6 +327,8 @@ struct t_weechat_plugin
char *(*callback)(void *data,
const char *text),
void *callback_data);
char *(*string_translate_chars) (const char *string, const char *chars1,
const char *chars2);
char **(*string_split) (const char *string, const char *separators,
const char *strip_items, int flags,
int num_items_max, int *num_items);
@@ -1282,6 +1284,9 @@ extern int weechat_plugin_end (struct t_weechat_plugin *plugin);
__reference_char, \
__callback, \
__callback_data)
#define weechat_string_translate_chars(__string, __chars1, __chars2) \
(weechat_plugin->string_translate_chars)(__string, __chars1, \
__chars2);
#define weechat_string_split(__string, __separators, __strip_items, \
__flags, __max, __num_items) \
(weechat_plugin->string_split)(__string, __separators, \