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 befc843891..0be88f4e69 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, | |||
739 | token->value.i = i; | 739 | token->value.i = i; |
740 | return 0; | 740 | return 0; |
741 | } | 741 | } |
742 | |||
743 | static int parse_logical_andor(struct skin_element *element, | ||
744 | struct wps_token *token, | ||
745 | struct wps_data *wps_data) | ||
746 | { | ||
747 | (void)wps_data; | ||
748 | token->value.data = PTRTOSKINOFFSET(skin_buffer, element); | ||
749 | return 0; | ||
750 | } | ||
751 | |||
742 | static int parse_logical_if(struct skin_element *element, | 752 | static int parse_logical_if(struct skin_element *element, |
743 | struct wps_token *token, | 753 | struct wps_token *token, |
744 | struct wps_data *wps_data) | 754 | struct wps_data *wps_data) |
@@ -1946,6 +1956,10 @@ static int skin_element_callback(struct skin_element* element, void* data) | |||
1946 | case SKIN_TOKEN_LOGICAL_IF: | 1956 | case SKIN_TOKEN_LOGICAL_IF: |
1947 | function = parse_logical_if; | 1957 | function = parse_logical_if; |
1948 | break; | 1958 | break; |
1959 | case SKIN_TOKEN_LOGICAL_AND: | ||
1960 | case SKIN_TOKEN_LOGICAL_OR: | ||
1961 | function = parse_logical_andor; | ||
1962 | break; | ||
1949 | case SKIN_TOKEN_SUBSTRING: | 1963 | case SKIN_TOKEN_SUBSTRING: |
1950 | function = parse_substring_tag; | 1964 | function = parse_substring_tag; |
1951 | break; | 1965 | break; |
diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c index bae8ae8f8e..82d96f6993 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, | |||
887 | return get_lif_token_value(gwps, lif, offset, buf, buf_size); | 887 | return get_lif_token_value(gwps, lif, offset, buf, buf_size); |
888 | } | 888 | } |
889 | break; | 889 | break; |
890 | case SKIN_TOKEN_LOGICAL_AND: | ||
891 | case SKIN_TOKEN_LOGICAL_OR: | ||
892 | { | ||
893 | int i = 0, truecount = 0; | ||
894 | char *skinbuffer = get_skin_buffer(data); | ||
895 | struct skin_element *element = | ||
896 | SKINOFFSETTOPTR(skinbuffer, token->value.data); | ||
897 | struct skin_tag_parameter* params = | ||
898 | SKINOFFSETTOPTR(skinbuffer, element->params); | ||
899 | struct skin_tag_parameter* thistag; | ||
900 | for (i=0; i<element->params_count; i++) | ||
901 | { | ||
902 | thistag = ¶ms[i]; | ||
903 | struct skin_element *tokenelement = | ||
904 | SKINOFFSETTOPTR(skinbuffer, thistag->data.code); | ||
905 | out_text = get_token_value(gwps, | ||
906 | SKINOFFSETTOPTR(skinbuffer, tokenelement->data), | ||
907 | offset, buf, buf_size, intval); | ||
908 | if (out_text && *out_text) | ||
909 | truecount++; | ||
910 | else if (token->type == SKIN_TOKEN_LOGICAL_AND) | ||
911 | return NULL; | ||
912 | } | ||
913 | return truecount ? "true" : NULL; | ||
914 | } | ||
915 | break; | ||
890 | case SKIN_TOKEN_SUBSTRING: | 916 | case SKIN_TOKEN_SUBSTRING: |
891 | { | 917 | { |
892 | struct substring *ss = SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); | 918 | struct substring *ss = SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); |