diff options
Diffstat (limited to 'apps/gui/skin_engine/skin_tokens.c')
-rw-r--r-- | apps/gui/skin_engine/skin_tokens.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c index ed72241d34..371db46017 100644 --- a/apps/gui/skin_engine/skin_tokens.c +++ b/apps/gui/skin_engine/skin_tokens.c | |||
@@ -868,7 +868,34 @@ const char *get_token_value(struct gui_wps *gwps, | |||
868 | struct logical_if *lif = token->value.data; | 868 | struct logical_if *lif = token->value.data; |
869 | return get_lif_token_value(gwps, lif, offset, buf, buf_size); | 869 | return get_lif_token_value(gwps, lif, offset, buf, buf_size); |
870 | } | 870 | } |
871 | break; | 871 | break; |
872 | case SKIN_TOKEN_SUBSTRING: | ||
873 | { | ||
874 | struct substring *ss = token->value.data; | ||
875 | const char *token_val = get_token_value(gwps, ss->token, offset, | ||
876 | buf, buf_size, intval); | ||
877 | int ret_len = ss->length; | ||
878 | if (token_val) | ||
879 | { | ||
880 | int len = strlen(token_val); | ||
881 | if (len < ss->start) | ||
882 | return NULL; | ||
883 | if (ret_len < 0) | ||
884 | ret_len = strlen(token_val) - ss->start; | ||
885 | if (token_val != buf) | ||
886 | { | ||
887 | memcpy(buf, &token_val[ss->start], ret_len); | ||
888 | } | ||
889 | else | ||
890 | { | ||
891 | buf = &buf[ss->start]; | ||
892 | } | ||
893 | buf[ret_len] = '\0'; | ||
894 | return buf; | ||
895 | } | ||
896 | return NULL; | ||
897 | } | ||
898 | break; | ||
872 | 899 | ||
873 | case SKIN_TOKEN_CHARACTER: | 900 | case SKIN_TOKEN_CHARACTER: |
874 | if (token->value.c == '\n') | 901 | if (token->value.c == '\n') |