mirror of
https://github.com/weechat/weechat.git
synced 2026-07-05 01:03:14 +02:00
api: add arguments "index_start" and "index_end" in function string_rebuild_split_string
This commit is contained in:
@@ -44,7 +44,7 @@ char *
|
||||
hook_hsignal_get_description (struct t_hook *hook)
|
||||
{
|
||||
return string_rebuild_split_string (
|
||||
(const char **)(HOOK_HSIGNAL(hook, signals)), ";");
|
||||
(const char **)(HOOK_HSIGNAL(hook, signals)), ";", 0, -1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -167,7 +167,7 @@ hook_line_exec (struct t_gui_line *line)
|
||||
HASHTABLE_SET_STR_NOT_NULL("str_time", line->data->str_time);
|
||||
HASHTABLE_SET_INT("tags_count", line->data->tags_count);
|
||||
str_tags = string_rebuild_split_string (
|
||||
(const char **)line->data->tags_array, ",");
|
||||
(const char **)line->data->tags_array, ",", 0, -1);
|
||||
HASHTABLE_SET_STR_NOT_NULL("tags", str_tags);
|
||||
if (str_tags)
|
||||
free (str_tags);
|
||||
|
||||
@@ -44,7 +44,7 @@ char *
|
||||
hook_signal_get_description (struct t_hook *hook)
|
||||
{
|
||||
return string_rebuild_split_string (
|
||||
(const char **)(HOOK_SIGNAL(hook, signals)), ";");
|
||||
(const char **)(HOOK_SIGNAL(hook, signals)), ";", 0, -1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -5583,7 +5583,7 @@ COMMAND_CALLBACK(repeat)
|
||||
repeat_args[1] = strdup (argv_eol[arg_count + 1]);
|
||||
repeat_args[2] = (input_commands_allowed) ?
|
||||
string_rebuild_split_string (
|
||||
(const char **)input_commands_allowed, ",") : NULL;
|
||||
(const char **)input_commands_allowed, ",", 0, -1) : NULL;
|
||||
hook_timer (NULL, interval, 0, count - 1,
|
||||
&command_repeat_timer_cb, repeat_args, NULL);
|
||||
}
|
||||
|
||||
@@ -3388,7 +3388,7 @@ config_file_add_option_to_infolist (struct t_infolist *infolist,
|
||||
goto error;
|
||||
}
|
||||
string_values = string_rebuild_split_string (
|
||||
(const char **)option->string_values, "|");
|
||||
(const char **)option->string_values, "|", 0, -1);
|
||||
if (!infolist_new_var_string (ptr_item, "string_values", string_values))
|
||||
{
|
||||
if (string_values)
|
||||
|
||||
+1
-1
@@ -1036,5 +1036,5 @@ dir_get_string_home_dirs ()
|
||||
dirs[3] = weechat_runtime_dir;
|
||||
dirs[4] = NULL;
|
||||
|
||||
return string_rebuild_split_string ((const char **)dirs, ":");
|
||||
return string_rebuild_split_string ((const char **)dirs, ":", 0, -1);
|
||||
}
|
||||
|
||||
@@ -428,7 +428,7 @@ input_data_delayed (struct t_gui_buffer *buffer, const char *data,
|
||||
else if (input_commands_allowed)
|
||||
{
|
||||
new_commands_allowed = string_rebuild_split_string (
|
||||
(const char **)input_commands_allowed, ",");
|
||||
(const char **)input_commands_allowed, ",", 0, -1);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
+31
-12
@@ -2445,39 +2445,58 @@ string_free_split_shared (char **split_string)
|
||||
}
|
||||
|
||||
/*
|
||||
* Rebuilds a split string using a delimiter.
|
||||
* Rebuilds a split string using a delimiter and optional index of start/end
|
||||
* string.
|
||||
*
|
||||
* If index_end < 0, then all arguments are used until NULL is found.
|
||||
* If NULL is found before index_end, then the build stops there (at NULL).
|
||||
*
|
||||
* Note: result must be free after use.
|
||||
*/
|
||||
|
||||
char *
|
||||
string_rebuild_split_string (const char **split_string,
|
||||
const char *separator)
|
||||
const char *separator,
|
||||
int index_start, int index_end)
|
||||
{
|
||||
int i, length, length_separator;
|
||||
char *result;
|
||||
|
||||
if (!split_string)
|
||||
if (!split_string || (index_start < 0)
|
||||
|| ((index_end >= 0) && (index_end < index_start)))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
length = 0;
|
||||
length_separator = (separator) ? strlen (separator) : 0;
|
||||
|
||||
for (i = 0; split_string[i]; i++)
|
||||
{
|
||||
length += strlen (split_string[i]) + length_separator;
|
||||
if ((index_end >= 0) && (i > index_end))
|
||||
break;
|
||||
if (i >= index_start)
|
||||
length += strlen (split_string[i]) + length_separator;
|
||||
}
|
||||
|
||||
result = malloc (length + 1);
|
||||
if (result)
|
||||
{
|
||||
result[0] = '\0';
|
||||
if (length == 0)
|
||||
return strdup ("");
|
||||
|
||||
for (i = 0; split_string[i]; i++)
|
||||
result = malloc (length + 1);
|
||||
if (!result)
|
||||
return NULL;
|
||||
|
||||
result[0] = '\0';
|
||||
|
||||
for (i = index_start; split_string[i]; i++)
|
||||
{
|
||||
if ((index_end >= 0) && (i > index_end))
|
||||
break;
|
||||
strcat (result, split_string[i]);
|
||||
if (separator && ((index_end < 0) || (i + 1 <= index_end))
|
||||
&& split_string[i + 1])
|
||||
{
|
||||
strcat (result, split_string[i]);
|
||||
if (separator && split_string[i + 1])
|
||||
strcat (result, separator);
|
||||
strcat (result, separator);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -97,7 +97,8 @@ extern char **string_split_shell (const char *string, int *num_items);
|
||||
extern void string_free_split (char **split_string);
|
||||
extern void string_free_split_shared (char **split_string);
|
||||
extern char *string_rebuild_split_string (const char **split_string,
|
||||
const char *separator);
|
||||
const char *separator,
|
||||
int index_start, int index_end);
|
||||
extern char **string_split_command (const char *command, char separator);
|
||||
extern void string_free_split_command (char **split_command);
|
||||
extern char ***string_split_tags (const char *tags, int *num_tags);
|
||||
|
||||
@@ -4703,7 +4703,8 @@ gui_buffer_dump_hexa (struct t_gui_buffer *buffer)
|
||||
if (message_without_colors)
|
||||
free (message_without_colors);
|
||||
tags = string_rebuild_split_string ((const char **)ptr_line->data->tags_array,
|
||||
",");
|
||||
",",
|
||||
0, -1);
|
||||
log_printf (" tags: '%s', displayed: %d, highlight: %d",
|
||||
(tags) ? tags : "(none)",
|
||||
ptr_line->data->displayed,
|
||||
@@ -4921,7 +4922,8 @@ gui_buffer_print_log ()
|
||||
{
|
||||
num--;
|
||||
tags = string_rebuild_split_string ((const char **)ptr_line->data->tags_array,
|
||||
",");
|
||||
",",
|
||||
0, -1);
|
||||
log_printf (" line N-%05d: y:%d, str_time:'%s', tags:'%s', "
|
||||
"displayed:%d, highlight:%d, refresh_needed:%d, "
|
||||
"prefix:'%s'",
|
||||
|
||||
@@ -593,7 +593,8 @@ gui_filter_add_to_infolist (struct t_infolist *infolist,
|
||||
{
|
||||
snprintf (option_name, sizeof (option_name), "tag_%05d", i + 1);
|
||||
tags = string_rebuild_split_string ((const char **)filter->tags_array[i],
|
||||
"+");
|
||||
"+",
|
||||
0, -1);
|
||||
if (tags)
|
||||
{
|
||||
if (!infolist_new_var_string (ptr_item, option_name, tags))
|
||||
|
||||
+2
-1
@@ -201,7 +201,8 @@ gui_focus_to_hashtable (struct t_gui_focus_info *focus_info, const char *key)
|
||||
{
|
||||
str_time = gui_color_decode (((focus_info->chat_line)->data)->str_time, NULL);
|
||||
str_prefix = gui_color_decode (((focus_info->chat_line)->data)->prefix, NULL);
|
||||
str_tags = string_rebuild_split_string ((const char **)((focus_info->chat_line)->data)->tags_array, ",");
|
||||
str_tags = string_rebuild_split_string (
|
||||
(const char **)((focus_info->chat_line)->data)->tags_array, ",", 0, -1);
|
||||
str_message = gui_color_decode (((focus_info->chat_line)->data)->message, NULL);
|
||||
nick = gui_line_get_nick_tag (focus_info->chat_line);
|
||||
HASHTABLE_SET_POINTER("_chat_line", focus_info->chat_line);
|
||||
|
||||
@@ -571,7 +571,7 @@ fset_option_set_values (struct t_fset_option *fset_option,
|
||||
if (ptr_string_values)
|
||||
{
|
||||
fset_option->string_values = weechat_string_rebuild_split_string (
|
||||
ptr_string_values, ",");
|
||||
ptr_string_values, ",", 0, -1);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -2601,7 +2601,7 @@ weechat_guile_api_hook_print_cb (const void *pointer, void *data,
|
||||
func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg;
|
||||
func_argv[1] = (char *)API_PTR2STR(buffer);
|
||||
func_argv[2] = timebuffer;
|
||||
func_argv[3] = weechat_string_rebuild_split_string (tags, ",");
|
||||
func_argv[3] = weechat_string_rebuild_split_string (tags, ",", 0, -1);
|
||||
if (!func_argv[3])
|
||||
func_argv[3] = strdup ("");
|
||||
func_argv[4] = &displayed;
|
||||
|
||||
@@ -69,7 +69,7 @@ irc_mode_get_arguments (const char *arguments)
|
||||
argv2[argc] = NULL;
|
||||
|
||||
new_arguments = weechat_string_rebuild_split_string (
|
||||
(const char **)argv2, " ");
|
||||
(const char **)argv2, " ", 0, -1);
|
||||
|
||||
weechat_string_free_split (argv);
|
||||
free (argv2);
|
||||
|
||||
@@ -2521,7 +2521,7 @@ weechat_js_api_hook_print_cb (const void *pointer, void *data,
|
||||
func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg;
|
||||
func_argv[1] = (char *)API_PTR2STR(buffer);
|
||||
func_argv[2] = timebuffer;
|
||||
func_argv[3] = weechat_string_rebuild_split_string (tags, ",");
|
||||
func_argv[3] = weechat_string_rebuild_split_string (tags, ",", 0, -1);
|
||||
if (!func_argv[3])
|
||||
func_argv[3] = strdup ("");
|
||||
func_argv[4] = &displayed;
|
||||
|
||||
@@ -2736,7 +2736,7 @@ weechat_lua_api_hook_print_cb (const void *pointer, void *data,
|
||||
func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg;
|
||||
func_argv[1] = (char *)API_PTR2STR(buffer);
|
||||
func_argv[2] = timebuffer;
|
||||
func_argv[3] = weechat_string_rebuild_split_string (tags, ",");
|
||||
func_argv[3] = weechat_string_rebuild_split_string (tags, ",", 0, -1);
|
||||
if (!func_argv[3])
|
||||
func_argv[3] = strdup ("");
|
||||
func_argv[4] = &displayed;
|
||||
|
||||
@@ -2631,7 +2631,7 @@ weechat_perl_api_hook_print_cb (const void *pointer, void *data,
|
||||
func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg;
|
||||
func_argv[1] = (char *)API_PTR2STR(buffer);
|
||||
func_argv[2] = timebuffer;
|
||||
func_argv[3] = weechat_string_rebuild_split_string (tags, ",");
|
||||
func_argv[3] = weechat_string_rebuild_split_string (tags, ",", 0, -1);
|
||||
if (!func_argv[3])
|
||||
func_argv[3] = strdup ("");
|
||||
func_argv[4] = &displayed;
|
||||
|
||||
@@ -2642,7 +2642,7 @@ weechat_python_api_hook_print_cb (const void *pointer, void *data,
|
||||
func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg;
|
||||
func_argv[1] = (char *)API_PTR2STR(buffer);
|
||||
func_argv[2] = timebuffer;
|
||||
func_argv[3] = weechat_string_rebuild_split_string (tags, ",");
|
||||
func_argv[3] = weechat_string_rebuild_split_string (tags, ",", 0, -1);
|
||||
if (!func_argv[3])
|
||||
func_argv[3] = strdup ("");
|
||||
func_argv[4] = &displayed;
|
||||
|
||||
@@ -3216,7 +3216,7 @@ weechat_ruby_api_hook_print_cb (const void *pointer, void *data,
|
||||
func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg;
|
||||
func_argv[1] = (char *)API_PTR2STR(buffer);
|
||||
func_argv[2] = timebuffer;
|
||||
func_argv[3] = weechat_string_rebuild_split_string (tags, ",");
|
||||
func_argv[3] = weechat_string_rebuild_split_string (tags, ",", 0, -1);
|
||||
if (!func_argv[3])
|
||||
func_argv[3] = strdup ("");
|
||||
func_argv[4] = &displayed;
|
||||
|
||||
@@ -2936,7 +2936,7 @@ weechat_tcl_api_hook_print_cb (const void *pointer, void *data,
|
||||
func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg;
|
||||
func_argv[1] = (char *)API_PTR2STR(buffer);
|
||||
func_argv[2] = timebuffer;
|
||||
func_argv[3] = weechat_string_rebuild_split_string (tags, ",");
|
||||
func_argv[3] = weechat_string_rebuild_split_string (tags, ",", 0, -1);
|
||||
if (!func_argv[3])
|
||||
func_argv[3] = strdup ("");
|
||||
func_argv[4] = &displayed;
|
||||
|
||||
@@ -1030,7 +1030,7 @@ trigger_callback_print_cb (const void *pointer, void *data,
|
||||
free (str_no_color);
|
||||
}
|
||||
|
||||
str_tags = weechat_string_rebuild_split_string (tags, ",");
|
||||
str_tags = weechat_string_rebuild_split_string (tags, ",", 0, -1);
|
||||
if (str_tags)
|
||||
{
|
||||
/* build string with tags and commas around: ",tag1,tag2,tag3," */
|
||||
|
||||
@@ -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 "20220720-01"
|
||||
#define WEECHAT_PLUGIN_API_VERSION "20220720-02"
|
||||
|
||||
/* macros for defining plugin infos */
|
||||
#define WEECHAT_PLUGIN_NAME(__name) \
|
||||
@@ -333,7 +333,8 @@ struct t_weechat_plugin
|
||||
char **(*string_split_shell) (const char *string, int *num_items);
|
||||
void (*string_free_split) (char **split_string);
|
||||
char *(*string_rebuild_split_string) (const char **split_string,
|
||||
const char *separator);
|
||||
const char *separator,
|
||||
int index_start, int index_end);
|
||||
char **(*string_split_command) (const char *command, char separator);
|
||||
void (*string_free_split_command) (char **split_command);
|
||||
char *(*string_format_size) (unsigned long long size);
|
||||
@@ -1286,9 +1287,13 @@ extern int weechat_plugin_end (struct t_weechat_plugin *plugin);
|
||||
#define weechat_string_free_split(__split_string) \
|
||||
(weechat_plugin->string_free_split)(__split_string)
|
||||
#define weechat_string_rebuild_split_string(__split_string, \
|
||||
__separator) \
|
||||
__separator, \
|
||||
__index_start, \
|
||||
__index_end) \
|
||||
(weechat_plugin->string_rebuild_split_string)(__split_string, \
|
||||
__separator)
|
||||
__separator, \
|
||||
__index_start, \
|
||||
__index_end)
|
||||
#define weechat_string_split_command(__command, __separator) \
|
||||
(weechat_plugin->string_split_command)(__command, __separator)
|
||||
#define weechat_string_free_split_command(__split_command) \
|
||||
|
||||
Reference in New Issue
Block a user