| | 344 | | static char *theme_format_expand_abstract(THEME_REC *theme, | | | 345 | | const char **formatp, | | | 346 | | char default_fg, char default_bg, | | | 347 | | int flags) | | | 348 | | { | | | 349 | | GString *str; | | | 350 | | const char *p, *format; | | | 351 | | char *abstract, *data, *ret; | | | 352 | | int len; | | | 353 | | | | | 354 | | format = *formatp; | | | 355 | | | | | 356 | | | | | 357 | | p = format; | | | 358 | | while (*p != '\0' && *p != ' ' && | | | 359 | | *p != '{' && *p != '}') p++; | | | 360 | | if (*p == '\0' || p == format) | | | 361 | | return NULL;
| | | 362 | | | | | 363 | | len = (int) (p-format); | | | 364 | | abstract = g_strndup(format, len); | | | 365 | | | | | 366 | | | | | 367 | | | | | 368 | | if (*p == ' ') { | | | 369 | | len++; | | | 370 | | if ((flags & EXPAND_FLAG_IGNORE_EMPTY) && data_is_empty(&p)) {
| | | 371 | | *formatp = p; | | | 372 | | g_free(abstract); | | | 373 | | return NULL;
| | | 374 | | } | | | 375 | | } | | | 376 | | *formatp = format+len; | | | 377 | | | | | 378 | | | | | 379 | | data = g_hash_table_lookup(theme->abstracts, abstract); | | | 380 | | g_free(abstract); | | | 381 | | if (data == NULL) {
| | | 382 | | | | | 383 | | data = "$0-"; | | | 384 | | } | | | 385 | | abstract = g_strdup(data); | | | 386 | | | | | 387 | | | | | 388 | | | | | 389 | | data = theme_format_expand_get(theme, formatp); | | | 390 | | len = strlen(data); | | | 391 | | | | | 392 | | if (len > 1 && i_isdigit(data[len-1]) && data[len-2] == '$') {
| | | 393 | | | | | 394 | | | | | 395 | | char digit, *tmp; | | | 396 | | | | | 397 | | tmp = data; | | | 398 | | digit = tmp[len-1]; | | | 399 | | tmp[len-1] = '\0'; | | | 400 | | | | | 401 | | data = g_strdup_printf("%s{%c}", tmp, digit); | | | 402 | | g_free(tmp); | | | 403 | | } | | | 404 | | | | | 405 | | ret = parse_special_string(abstract, NULL, NULL, data, NULL,
|
| | 482 | | | | char *parse_special_string(const char *cmd, SERVER_REC *server, void *item, | | | 483 | | | | const char *data, int *arg_used, int flags) | | | 484 | | | | { | | | 485 | | | | char code, **arglist, *ret; | | | 486 | | | | GString *str; | | | 487 | | | | int need_free, chr; | | | 488 | | | | | | true | 489 | | | | g_return_val_if_fail(cmd != NULL, NULL);
| | | 490 | | | | g_return_val_if_fail(data != NULL, NULL);
| | | 491 | | | | | | | 492 | | | | | | | 493 | | | | arglist = g_strsplit(data, " ", -1); | | | 494 | | | | | | | 495 | | | | if (arg_used != NULL) *arg_used = FALSE;
| | | 496 | | | | code = 0; | | | 497 | | | | str = g_string_new(NULL);
| | | 498 | | | | while (*cmd != '\0') { | | | 499 | | | | if (code == '\\') { | | | | | | | ... | | | 522 | | | | g_string_append_c(str, *cmd);
| | | 523 | | | | } | | | 524 | | | | | | | 525 | | | | cmd++; | | | 526 | | | | } | | | 527 | | | | g_strfreev(arglist); | | | 528 | | | | | | | 529 | | | | ret = str->str; | | | 530 | | | | g_string_free(str, FALSE);
| | | 531 | | | | return ret; | | parse_special_string$return <= 4095 | 532 | | | | } | Problem | | parse_special_string$return <= 4095 |
|
|