summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSébastien Helleu <flashcode@flashtux.org>2023-11-23 08:20:01 +0100
committerSébastien Helleu <flashcode@flashtux.org>2023-11-23 08:49:54 +0100
commit479ab5bc58ac006512187ceb839223abdea242fa (patch)
tree74710c7343465b92dc8312ec911ce206e9b05d76 /src
parent87f74e9f9544a7e3b7e4ffd0acc40841b8eb79e8 (diff)
downloadweechat-479ab5bc58ac006512187ceb839223abdea242fa.zip
core: evaluate expressions even when the suffix is missing (issue #2042, issue #1714)
Diffstat (limited to 'src')
-rw-r--r--src/core/wee-eval.c13
-rw-r--r--src/core/wee-string.c23
-rw-r--r--src/core/wee-string.h5
3 files changed, 23 insertions, 18 deletions
diff --git a/src/core/wee-eval.c b/src/core/wee-eval.c
index 4d8c0e7da..e436e26b0 100644
--- a/src/core/wee-eval.c
+++ b/src/core/wee-eval.c
@@ -1472,8 +1472,8 @@ end:
*/
char *
-eval_syntax_highlight_add_markers (const char *text,
- struct t_eval_context *eval_context)
+eval_syntax_highlight_add_markers (const char *prefix, const char *text,
+ const char *suffix)
{
char **value;
@@ -1482,10 +1482,10 @@ eval_syntax_highlight_add_markers (const char *text,
return NULL;
string_dyn_concat (value, EVAL_SYNTAX_HL_INC, -1);
- string_dyn_concat (value, eval_context->prefix, -1);
+ string_dyn_concat (value, prefix, -1);
if (text)
string_dyn_concat (value, text, -1);
- string_dyn_concat (value, eval_context->suffix, -1);
+ string_dyn_concat (value, suffix, -1);
string_dyn_concat (value, EVAL_SYNTAX_HL_DEC, -1);
return string_dyn_free (value, 0);
@@ -1625,7 +1625,8 @@ eval_syntax_highlight (const char *text, struct t_eval_context *eval_context)
*/
char *
-eval_replace_vars_cb (void *data, const char *text)
+eval_replace_vars_cb (void *data,
+ const char *prefix, const char *text, const char *suffix)
{
struct t_eval_context *eval_context;
struct t_config_option *ptr_option;
@@ -1641,7 +1642,7 @@ eval_replace_vars_cb (void *data, const char *text)
EVAL_DEBUG_MSG(1, "eval_replace_vars_cb(\"%s\")", text);
if (eval_context->syntax_highlight)
- return eval_syntax_highlight_add_markers (text, eval_context);
+ return eval_syntax_highlight_add_markers (prefix, text, suffix);
/* raw text (no evaluation at all), with syntax highlighting */
if (strncmp (text, "raw_hl:", 7) == 0)
diff --git a/src/core/wee-string.c b/src/core/wee-string.c
index f19699648..76567ae59 100644
--- a/src/core/wee-string.c
+++ b/src/core/wee-string.c
@@ -4139,7 +4139,10 @@ string_replace_with_callback (const char *string,
const char *prefix,
const char *suffix,
const char **list_prefix_no_replace,
- char *(*callback)(void *data, const char *text),
+ char *(*callback)(void *data,
+ const char *prefix,
+ const char *text,
+ const char *suffix),
void *callback_data,
int *errors)
{
@@ -4196,14 +4199,6 @@ string_replace_with_callback (const char *string,
}
pos_end_name++;
}
- /* prefix without matching suffix => error! */
- if (!pos_end_name[0])
- {
- result[index_result] = '\0';
- if (errors)
- (*errors)++;
- return result;
- }
key = string_strndup (string + index_string + length_prefix,
pos_end_name - (string + index_string + length_prefix));
if (key)
@@ -4241,7 +4236,10 @@ string_replace_with_callback (const char *string,
key = key2;
}
}
- value = (*callback) (callback_data, (key) ? key : "");
+ value = (*callback) (callback_data,
+ prefix,
+ (key) ? key : "",
+ (pos_end_name[0]) ? suffix : "");
if (value)
{
length_value = strlen (value);
@@ -4262,7 +4260,10 @@ string_replace_with_callback (const char *string,
strcpy (result + index_result, value);
index_result += length_value;
}
- index_string = pos_end_name - string + length_suffix;
+ if (pos_end_name[0])
+ index_string = pos_end_name - string + length_suffix;
+ else
+ index_string = pos_end_name - string;
free (value);
}
else
diff --git a/src/core/wee-string.h b/src/core/wee-string.h
index 716335e9a..fbb63fc56 100644
--- a/src/core/wee-string.h
+++ b/src/core/wee-string.h
@@ -147,7 +147,10 @@ extern char *string_replace_with_callback (const char *string,
const char *prefix,
const char *suffix,
const char **list_prefix_no_replace,
- char *(*callback)(void *data, const char *text),
+ char *(*callback)(void *data,
+ const char *prefix,
+ const char *text,
+ const char *suffix),
void *callback_data,
int *errors);
extern void string_get_priority_and_name (const char *string,