mirror of
https://github.com/weechat/weechat.git
synced 2026-06-27 21:36:37 +02:00
api: add callback in function string_replace_regex
This commit is contained in:
@@ -1268,14 +1268,17 @@ This function is not available in scripting API.
|
||||
|
||||
_WeeChat ≥ 0.4.4._
|
||||
|
||||
Replace text in a string using a regular expression and replacement text.
|
||||
Replace text in a string using a regular expression, replacement text and
|
||||
optional callback.
|
||||
|
||||
Prototype:
|
||||
|
||||
[source,C]
|
||||
----
|
||||
char *weechat_string_replace_regex (const char *string, void *regex,
|
||||
const char *replace, const char reference_char);
|
||||
const char *replace, const char reference_char,
|
||||
char *(*callback)(void *data, const char *text),
|
||||
void *callback_data);
|
||||
----
|
||||
|
||||
Arguments:
|
||||
@@ -1291,6 +1294,13 @@ Arguments:
|
||||
** `$.*N`: match `N` (can be `+` or `0` to `99`), with all chars replaced by `*`
|
||||
(the `*` char can be any char between space (32) and `~` (126))
|
||||
* 'reference_char': the char used for reference to match (commonly '$')
|
||||
* 'callback': an optional callback called for each reference in 'replace'
|
||||
(except for matches replaced by a char); the callback must return:
|
||||
** newly allocated string: it is used as replacement text (it is freed after
|
||||
use)
|
||||
** NULL: the text received in callback is used as replacement text (without
|
||||
changes)
|
||||
* 'callback_data': pointer given to callback when it is called
|
||||
|
||||
Return value:
|
||||
|
||||
@@ -1307,7 +1317,7 @@ if (weechat_string_regcomp (&my_regex, "([0-9]{4})-([0-9]{2})-([0-9]{2})",
|
||||
REG_EXTENDED) == 0)
|
||||
{
|
||||
string = weechat_string_replace_regex ("date: 2014-02-14", &my_regex,
|
||||
"$3/$2/$1", '$');
|
||||
"$3/$2/$1", '$', NULL, NULL);
|
||||
/* string == "date: 14/02/2014" */
|
||||
if (string)
|
||||
free (string);
|
||||
|
||||
@@ -1286,15 +1286,17 @@ Cette fonction n'est pas disponible dans l'API script.
|
||||
|
||||
_WeeChat ≥ 0.4.4._
|
||||
|
||||
Remplacer du texte dans une chaîne en utilisant une expression régulière et du
|
||||
texte de remplacement.
|
||||
Remplacer du texte dans une chaîne en utilisant une expression régulière, du
|
||||
texte de remplacement et un "callback" optionnel.
|
||||
|
||||
Prototype :
|
||||
|
||||
[source,C]
|
||||
----
|
||||
char *weechat_string_replace_regex (const char *string, void *regex,
|
||||
const char *replace, const char reference_char);
|
||||
const char *replace, const char reference_char,
|
||||
char *(*callback)(void *data, const char *text),
|
||||
void *callback_data);
|
||||
----
|
||||
|
||||
Paramètres :
|
||||
@@ -1314,6 +1316,14 @@ Paramètres :
|
||||
caractère entre l'espace (32) et `~` (126))
|
||||
* 'reference_char' : le caractère utilisé pour les références aux
|
||||
correspondances (en général '$')
|
||||
* 'callback' : un "callback" optionnel appelé pour chaque référence dans
|
||||
'replace' (sauf pour les correspondances remplacées par un caractère); le
|
||||
"callback" doit retourner :
|
||||
** une chaîne nouvellement allouée : elle est utilisée en texte de remplacement
|
||||
(elle est libérée après utilisation)
|
||||
** NULL : le texte reçu dans le "callback" est utilisé comme texte de
|
||||
remplacement (sans changement)
|
||||
* 'callback_data' : pointeur donné au "callback" lorsqu'il est appelé
|
||||
|
||||
Valeur de retour :
|
||||
|
||||
@@ -1330,7 +1340,7 @@ if (weechat_string_regcomp (&my_regex, "([0-9]{4})-([0-9]{2})-([0-9]{2})",
|
||||
REG_EXTENDED) == 0)
|
||||
{
|
||||
string = weechat_string_replace_regex ("date: 2014-02-14", &my_regex,
|
||||
"$3/$2/$1", '$');
|
||||
"$3/$2/$1", '$', NULL, NULL);
|
||||
/* string == "date: 14/02/2014" */
|
||||
if (string)
|
||||
free (string);
|
||||
|
||||
@@ -1302,14 +1302,17 @@ Questa funzione non è disponibile nelle API per lo scripting.
|
||||
_WeeChat ≥ 0.4.4._
|
||||
|
||||
// TRANSLATION MISSING
|
||||
Replace text in a string using a regular expression and replacement text.
|
||||
Replace text in a string using a regular expression, replacement text and
|
||||
optional callback.
|
||||
|
||||
Prototipo:
|
||||
|
||||
[source,C]
|
||||
----
|
||||
char *weechat_string_replace_regex (const char *string, void *regex,
|
||||
const char *replace, const char reference_char);
|
||||
const char *replace, const char reference_char,
|
||||
char *(*callback)(void *data, const char *text),
|
||||
void *callback_data);
|
||||
----
|
||||
|
||||
Argomenti:
|
||||
@@ -1326,6 +1329,13 @@ Argomenti:
|
||||
** `$.*N`: match `N` (can be `+` or `0` to `99`), with all chars replaced by `*`
|
||||
(the `*` char can be any char between space (32) and `~` (126))
|
||||
* 'reference_char': the char used for reference to match (commonly '$')
|
||||
* 'callback': an optional callback called for each reference in 'replace'
|
||||
(except for matches replaced by a char); the callback must return:
|
||||
** newly allocated string: it is used as replacement text (it is freed after
|
||||
use)
|
||||
** NULL: the text received in callback is used as replacement text (without
|
||||
changes)
|
||||
* 'callback_data': pointer given to callback when it is called
|
||||
|
||||
Valore restituito:
|
||||
|
||||
@@ -1343,7 +1353,7 @@ if (weechat_string_regcomp (&my_regex, "([0-9]{4})-([0-9]{2})-([0-9]{2})",
|
||||
REG_EXTENDED) == 0)
|
||||
{
|
||||
string = weechat_string_replace_regex ("date: 2014-02-14", &my_regex,
|
||||
"$3/$2/$1", '$');
|
||||
"$3/$2/$1", '$', NULL, NULL);
|
||||
/* string == "date: 14/02/2014" */
|
||||
if (string)
|
||||
free (string);
|
||||
|
||||
@@ -1269,14 +1269,17 @@ free (str);
|
||||
_WeeChat バージョン 0.4.4 以上で利用可。_
|
||||
|
||||
// TRANSLATION MISSING
|
||||
Replace text in a string using a regular expression and replacement text.
|
||||
Replace text in a string using a regular expression, replacement text and
|
||||
optional callback.
|
||||
|
||||
プロトタイプ:
|
||||
|
||||
[source,C]
|
||||
----
|
||||
char *weechat_string_replace_regex (const char *string, void *regex,
|
||||
const char *replace, const char reference_char);
|
||||
const char *replace, const char reference_char,
|
||||
char *(*callback)(void *data, const char *text),
|
||||
void *callback_data);
|
||||
----
|
||||
|
||||
引数:
|
||||
@@ -1293,6 +1296,13 @@ char *weechat_string_replace_regex (const char *string, void *regex,
|
||||
** `$.*N`: match `N` (can be `+` or `0` to `99`), with all chars replaced by `*`
|
||||
(the `*` char can be any char between space (32) and `~` (126))
|
||||
* 'reference_char': the char used for reference to match (commonly '$')
|
||||
* 'callback': an optional callback called for each reference in 'replace'
|
||||
(except for matches replaced by a char); the callback must return:
|
||||
** newly allocated string: it is used as replacement text (it is freed after
|
||||
use)
|
||||
** NULL: the text received in callback is used as replacement text (without
|
||||
changes)
|
||||
* 'callback_data': pointer given to callback when it is called
|
||||
|
||||
戻り値:
|
||||
|
||||
@@ -1310,7 +1320,7 @@ if (weechat_string_regcomp (&my_regex, "([0-9]{4})-([0-9]{2})-([0-9]{2})",
|
||||
REG_EXTENDED) == 0)
|
||||
{
|
||||
string = weechat_string_replace_regex ("date: 2014-02-14", &my_regex,
|
||||
"$3/$2/$1", '$');
|
||||
"$3/$2/$1", '$', NULL, NULL);
|
||||
/* string == "date: 14/02/2014" */
|
||||
if (string)
|
||||
free (string);
|
||||
|
||||
+37
-6
@@ -1154,7 +1154,9 @@ string_replace (const char *string, const char *search, const char *replace)
|
||||
char *
|
||||
string_replace_regex_get_replace (const char *string, regmatch_t *regex_match,
|
||||
int last_match, const char *replace,
|
||||
const char reference_char)
|
||||
const char reference_char,
|
||||
char *(*callback)(void *data, const char *text),
|
||||
void *callback_data)
|
||||
{
|
||||
int length, length_current, length_add, match;
|
||||
const char *ptr_replace, *ptr_add;
|
||||
@@ -1208,8 +1210,26 @@ string_replace_regex_get_replace (const char *string, regmatch_t *regex_match,
|
||||
}
|
||||
if (regex_match[match].rm_so >= 0)
|
||||
{
|
||||
ptr_add = string + regex_match[match].rm_so;
|
||||
length_add = regex_match[match].rm_eo - regex_match[match].rm_so;
|
||||
if (callback)
|
||||
{
|
||||
temp = string_strndup (string + regex_match[match].rm_so,
|
||||
regex_match[match].rm_eo - regex_match[match].rm_so);
|
||||
if (temp)
|
||||
{
|
||||
modified_replace = (*callback) (callback_data, temp);
|
||||
if (modified_replace)
|
||||
{
|
||||
ptr_add = modified_replace;
|
||||
length_add = strlen (modified_replace);
|
||||
}
|
||||
free (temp);
|
||||
}
|
||||
}
|
||||
if (!ptr_add)
|
||||
{
|
||||
ptr_add = string + regex_match[match].rm_so;
|
||||
length_add = regex_match[match].rm_eo - regex_match[match].rm_so;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((ptr_replace[1] == '.')
|
||||
@@ -1308,6 +1328,11 @@ string_replace_regex_get_replace (const char *string, regmatch_t *regex_match,
|
||||
* (the char '*' can be replaced by any char between space (32)
|
||||
* and '~' (126))
|
||||
*
|
||||
* If the callback is not NULL, it is called for every reference to a match
|
||||
* (except for matches replaced by a char).
|
||||
* If not NULL, the string returned by the callback (which must have been newly
|
||||
* allocated) is used and freed after use.
|
||||
*
|
||||
* Examples:
|
||||
*
|
||||
* string | regex | replace | result
|
||||
@@ -1322,7 +1347,9 @@ string_replace_regex_get_replace (const char *string, regmatch_t *regex_match,
|
||||
|
||||
char *
|
||||
string_replace_regex (const char *string, void *regex, const char *replace,
|
||||
const char reference_char)
|
||||
const char reference_char,
|
||||
char *(*callback)(void *data, const char *text),
|
||||
void *callback_data)
|
||||
{
|
||||
char *result, *result2, *str_replace;
|
||||
int length, length_replace, start_offset, i, rc, end, last_match;
|
||||
@@ -1373,9 +1400,13 @@ string_replace_regex (const char *string, void *regex, const char *replace,
|
||||
/* check if the regex matched the end of string */
|
||||
end = !result[regex_match[0].rm_eo];
|
||||
|
||||
str_replace = string_replace_regex_get_replace (result, regex_match,
|
||||
str_replace = string_replace_regex_get_replace (result,
|
||||
regex_match,
|
||||
last_match,
|
||||
replace, reference_char);
|
||||
replace,
|
||||
reference_char,
|
||||
callback,
|
||||
callback_data);
|
||||
length_replace = (str_replace) ? strlen (str_replace) : 0;
|
||||
|
||||
length = regex_match[0].rm_so + length_replace +
|
||||
|
||||
@@ -59,7 +59,9 @@ extern int string_has_highlight_regex_compiled (const char *string,
|
||||
extern int string_has_highlight_regex (const char *string, const char *regex);
|
||||
extern char *string_replace_regex (const char *string, void *regex,
|
||||
const char *replace,
|
||||
const char reference_char);
|
||||
const char reference_char,
|
||||
char *(*callback)(void *data, const char *text),
|
||||
void *callback_data);
|
||||
extern char **string_split (const char *string, const char *separators,
|
||||
int keep_eol, int num_items_max, int *num_items);
|
||||
extern char **string_split_shared (const char *string, const char *separators,
|
||||
|
||||
@@ -213,7 +213,8 @@ trigger_callback_replace_regex (struct t_trigger *trigger,
|
||||
value = weechat_string_replace_regex (ptr_value,
|
||||
trigger->regex[i].regex,
|
||||
replace_eval,
|
||||
'$');
|
||||
'$',
|
||||
NULL, NULL);
|
||||
if (value)
|
||||
{
|
||||
/* display debug info on trigger buffer */
|
||||
|
||||
@@ -57,7 +57,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 "20140311-01"
|
||||
#define WEECHAT_PLUGIN_API_VERSION "20140313-01"
|
||||
|
||||
/* macros for defining plugin infos */
|
||||
#define WEECHAT_PLUGIN_NAME(__name) \
|
||||
@@ -250,7 +250,9 @@ struct t_weechat_plugin
|
||||
int (*string_has_highlight_regex) (const char *string, const char *regex);
|
||||
char *(*string_replace_regex) (const char *string, void *regex,
|
||||
const char *replace,
|
||||
const char reference_char);
|
||||
const char reference_char,
|
||||
char *(*callback)(void *data, const char *text),
|
||||
void *callback_data);
|
||||
char **(*string_split) (const char *string, const char *separators,
|
||||
int keep_eol, int num_items_max, int *num_items);
|
||||
char **(*string_split_shell) (const char *string, int *num_items);
|
||||
@@ -1017,9 +1019,11 @@ extern int weechat_plugin_end (struct t_weechat_plugin *plugin);
|
||||
#define weechat_string_has_highlight_regex(__string, __regex) \
|
||||
weechat_plugin->string_has_highlight_regex(__string, __regex)
|
||||
#define weechat_string_replace_regex(__string, __regex, __replace, \
|
||||
__reference_char) \
|
||||
__reference_char, __callback, \
|
||||
__callback_data) \
|
||||
weechat_plugin->string_replace_regex(__string, __regex, __replace, \
|
||||
__reference_char)
|
||||
__reference_char, __callback, \
|
||||
__callback_data)
|
||||
#define weechat_string_split(__string, __separator, __eol, __max, \
|
||||
__num_items) \
|
||||
weechat_plugin->string_split(__string, __separator, __eol, \
|
||||
|
||||
Reference in New Issue
Block a user