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
This commit is contained in:
Timo Sirainen 2001-11-15 20:02:15 +00:00 committed by cras
commit fc91857029
3 changed files with 55 additions and 38 deletions

View file

@ -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;

View file

@ -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