diff options
author | Timo Sirainen <cras@irssi.org> | 2001-11-15 20:02:15 +0000 |
---|---|---|
committer | cras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564> | 2001-11-15 20:02:15 +0000 |
commit | fc918570293831f974e448afa54c6973f863e54d (patch) | |
tree | f1d092e89148e71ef1378c9b28ae58b2e67e829d /src/fe-common/core | |
parent | cda63f03d417e906f369efe4c966265db2fa5159 (diff) | |
download | irssi-fc918570293831f974e448afa54c6973f863e54d.zip |
Changed the escaping system - theme_format_expand_data()'s
EXPAND_FLAG_IGNORE_EMPTY now also checks if the argument is a $variable that
is empty. Statusbar now first expands the formats and after then expands
$variables. Should fix at least when trying to print #$$$ channel in
statusbar.
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@2023 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/fe-common/core')
-rw-r--r-- | src/fe-common/core/themes.c | 54 | ||||
-rw-r--r-- | src/fe-common/core/themes.h | 2 |
2 files changed, 45 insertions, 11 deletions
diff --git a/src/fe-common/core/themes.c b/src/fe-common/core/themes.c index 62c1ec8a..7e317fe6 100644 --- a/src/fe-common/core/themes.c +++ b/src/fe-common/core/themes.c @@ -235,6 +235,46 @@ static void theme_format_append_next(THEME_REC *theme, GString *str, (*format)++; } +/* returns TRUE if data is empty, or the data is a $variable which is empty */ +static int data_is_empty(const char **data) +{ + const char *p; + char *ret; + int free_ret, empty; + + p = *data; + while (*p == ' ') p++; + + if (*p == '}') { + /* empty */ + *data = p+1; + return TRUE; + } + + if (*p != '$') { + /* not empty */ + return FALSE; + } + + /* variable - check if it's empty */ + p++; + ret = parse_special((char **) &p, active_win->active_server, + active_win->active, NULL, &free_ret, NULL, 0); + p++; + + while (*p == ' ') p++; + empty = *p == '}' && (ret == NULL || *ret == '\0'); + if (free_ret) g_free(ret); + + if (empty) { + /* empty */ + *data = p+1; + return TRUE; + } + + return FALSE; +} + /* expand a single {abstract ...data... } */ static char *theme_format_expand_abstract(THEME_REC *theme, const char **formatp, @@ -261,17 +301,11 @@ static char *theme_format_expand_abstract(THEME_REC *theme, treated as arguments */ if (*p == ' ') { len++; - if ((flags & EXPAND_FLAG_IGNORE_EMPTY)) { - /* if the data is empty, ignore the abstract */ - p = format+len; - while (*p == ' ') p++; - if (*p == '}') { - *formatp = p+1; - g_free(abstract); - return NULL; - } + if ((flags & EXPAND_FLAG_IGNORE_EMPTY) && data_is_empty(&p)) { + *formatp = p; + g_free(abstract); + return NULL; } - } *formatp = format+len; diff --git a/src/fe-common/core/themes.h b/src/fe-common/core/themes.h index 3693d4f4..59d2810a 100644 --- a/src/fe-common/core/themes.h +++ b/src/fe-common/core/themes.h @@ -44,7 +44,7 @@ void theme_register_module(const char *module, FORMAT_REC *formats); void theme_unregister_module(const char *module); #define EXPAND_FLAG_IGNORE_REPLACES 0x01 /* don't use the character replaces when expanding */ -#define EXPAND_FLAG_IGNORE_EMPTY 0x02 /* if abstract's argument is empty, don't try to expand it (ie. {xx }, but not {xx}) */ +#define EXPAND_FLAG_IGNORE_EMPTY 0x02 /* if abstract's argument is empty, or the argument is a $variable that is empty, don't try to expand it (ie. {xx }, but not {xx}) */ #define EXPAND_FLAG_RECURSIVE_MASK 0x0f /* private */ #define EXPAND_FLAG_ROOT 0x10 |