diff options
Diffstat (limited to 'apps')
| -rw-r--r-- | apps/gui/skin_engine/skin_parser.c | 14 | ||||
| -rw-r--r-- | apps/gui/skin_engine/skin_tokens.c | 26 |
2 files changed, 40 insertions, 0 deletions
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index befc843..0be88f4 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c @@ -739,6 +739,16 @@ static int parse_setting_and_lang(struct skin_element *element, token->value.i = i; return 0; } + +static int parse_logical_andor(struct skin_element *element, + struct wps_token *token, + struct wps_data *wps_data) +{ + (void)wps_data; + token->value.data = PTRTOSKINOFFSET(skin_buffer, element); + return 0; +} + static int parse_logical_if(struct skin_element *element, struct wps_token *token, struct wps_data *wps_data) @@ -1946,6 +1956,10 @@ static int skin_element_callback(struct skin_element* element, void* data) case SKIN_TOKEN_LOGICAL_IF: function = parse_logical_if; break; + case SKIN_TOKEN_LOGICAL_AND: + case SKIN_TOKEN_LOGICAL_OR: + function = parse_logical_andor; + break; case SKIN_TOKEN_SUBSTRING: function = parse_substring_tag; break; diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c index bae8ae8..82d96f6 100644 --- a/apps/gui/skin_engine/skin_tokens.c +++ b/apps/gui/skin_engine/skin_tokens.c @@ -887,6 +887,32 @@ const char *get_token_value(struct gui_wps *gwps, return get_lif_token_value(gwps, lif, offset, buf, buf_size); } break; + case SKIN_TOKEN_LOGICAL_AND: + case SKIN_TOKEN_LOGICAL_OR: + { + int i = 0, truecount = 0; + char *skinbuffer = get_skin_buffer(data); + struct skin_element *element = + SKINOFFSETTOPTR(skinbuffer, token->value.data); + struct skin_tag_parameter* params = + SKINOFFSETTOPTR(skinbuffer, element->params); + struct skin_tag_parameter* thistag; + for (i=0; i<element->params_count; i++) + { + thistag = ¶ms[i]; + struct skin_element *tokenelement = + SKINOFFSETTOPTR(skinbuffer, thistag->data.code); + out_text = get_token_value(gwps, + SKINOFFSETTOPTR(skinbuffer, tokenelement->data), + offset, buf, buf_size, intval); + if (out_text && *out_text) + truecount++; + else if (token->type == SKIN_TOKEN_LOGICAL_AND) + return NULL; + } + return truecount ? "true" : NULL; + } + break; case SKIN_TOKEN_SUBSTRING: { struct substring *ss = SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); |