version 1.15, 2019/03/14 09:53:52 |
version 1.16, 2019/03/14 10:19:52 |
|
|
int |
int |
style_parse(struct style *sy, const struct grid_cell *base, const char *in) |
style_parse(struct style *sy, const struct grid_cell *base, const char *in) |
{ |
{ |
struct grid_cell *gc = &sy->gc; |
struct style saved; |
struct grid_cell saved; |
const char delimiters[] = " ,"; |
const char delimiters[] = " ,"; |
char tmp[32]; |
char tmp[32]; |
int value, fg, bg, attr, flags; |
int value, fg, bg, attr, flags; |
size_t end; |
size_t end; |
|
|
|
if (*in == '\0') |
if (*in == '\0') |
return (0); |
return (0); |
if (strchr(delimiters, in[strlen(in) - 1]) != NULL) |
if (strchr(delimiters, in[strlen(in) - 1]) != NULL) |
return (-1); |
return (-1); |
memcpy(&saved, base, sizeof saved); |
style_copy(&saved, sy); |
|
|
fg = gc->fg; |
fg = sy->gc.fg; |
bg = gc->bg; |
bg = sy->gc.bg; |
attr = gc->attr; |
attr = sy->gc.attr; |
flags = gc->flags; |
flags = sy->gc.flags; |
|
|
do { |
do { |
end = strcspn(in, delimiters); |
end = strcspn(in, delimiters); |
|
|
in += end + strspn(in + end, delimiters); |
in += end + strspn(in + end, delimiters); |
} while (*in != '\0'); |
} while (*in != '\0'); |
|
|
gc->fg = fg; |
sy->gc.fg = fg; |
gc->bg = bg; |
sy->gc.bg = bg; |
gc->attr = attr; |
sy->gc.attr = attr; |
gc->flags = flags; |
sy->gc.flags = flags; |
|
|
return (0); |
return (0); |
|
|
error: |
error: |
memcpy(gc, &saved, sizeof *gc); |
style_copy(sy, &saved); |
return (-1); |
return (-1); |
} |
} |
|
|