diff options
-rw-r--r-- | apps/gui/skin_engine/skin_parser.c | 59 | ||||
-rw-r--r-- | apps/gui/skin_engine/skin_tokens.c | 3 | ||||
-rw-r--r-- | apps/gui/skin_engine/skin_tokens.h | 1 | ||||
-rw-r--r-- | apps/gui/skin_engine/wps_debug.c | 3 | ||||
-rw-r--r-- | apps/language.c | 13 | ||||
-rw-r--r-- | apps/language.h | 3 |
6 files changed, 64 insertions, 18 deletions
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index efe9f5228a..e62d473405 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c | |||
@@ -40,6 +40,7 @@ | |||
40 | #endif /*WPSEDITOR*/ | 40 | #endif /*WPSEDITOR*/ |
41 | #else | 41 | #else |
42 | #include "debug.h" | 42 | #include "debug.h" |
43 | #include "language.h" | ||
43 | #endif /*__PCTOOL__*/ | 44 | #endif /*__PCTOOL__*/ |
44 | 45 | ||
45 | #include <ctype.h> | 46 | #include <ctype.h> |
@@ -132,7 +133,7 @@ static int parse_progressbar(const char *wps_bufptr, | |||
132 | struct wps_token *token, struct wps_data *wps_data); | 133 | struct wps_token *token, struct wps_data *wps_data); |
133 | static int parse_dir_level(const char *wps_bufptr, | 134 | static int parse_dir_level(const char *wps_bufptr, |
134 | struct wps_token *token, struct wps_data *wps_data); | 135 | struct wps_token *token, struct wps_data *wps_data); |
135 | static int parse_setting(const char *wps_bufptr, | 136 | static int parse_setting_and_lang(const char *wps_bufptr, |
136 | struct wps_token *token, struct wps_data *wps_data); | 137 | struct wps_token *token, struct wps_data *wps_data); |
137 | 138 | ||
138 | #ifdef HAVE_LCD_BITMAP | 139 | #ifdef HAVE_LCD_BITMAP |
@@ -349,8 +350,11 @@ static const struct wps_tag all_tags[] = { | |||
349 | #endif | 350 | #endif |
350 | #endif | 351 | #endif |
351 | 352 | ||
352 | { WPS_TOKEN_SETTING, "St", WPS_REFRESH_DYNAMIC, parse_setting }, | 353 | { WPS_TOKEN_SETTING, "St", WPS_REFRESH_DYNAMIC, |
353 | 354 | parse_setting_and_lang }, | |
355 | { WPS_TOKEN_TRANSLATEDSTRING, "Sx", WPS_REFRESH_STATIC, | ||
356 | parse_setting_and_lang }, | ||
357 | |||
354 | { WPS_TOKEN_LASTTOUCH, "Tl", WPS_REFRESH_DYNAMIC, parse_timeout }, | 358 | { WPS_TOKEN_LASTTOUCH, "Tl", WPS_REFRESH_DYNAMIC, parse_timeout }, |
355 | { WPS_NO_TOKEN, "T", 0, parse_touchregion }, | 359 | { WPS_NO_TOKEN, "T", 0, parse_touchregion }, |
356 | 360 | ||
@@ -746,14 +750,20 @@ static int parse_image_special(const char *wps_bufptr, | |||
746 | 750 | ||
747 | #endif /* HAVE_LCD_BITMAP */ | 751 | #endif /* HAVE_LCD_BITMAP */ |
748 | 752 | ||
749 | static int parse_setting(const char *wps_bufptr, | 753 | static int parse_setting_and_lang(const char *wps_bufptr, |
750 | struct wps_token *token, | 754 | struct wps_token *token, |
751 | struct wps_data *wps_data) | 755 | struct wps_data *wps_data) |
752 | { | 756 | { |
757 | /* NOTE: both the string validations that happen in here will | ||
758 | * automatically PASS on checkwps because its too hard to get | ||
759 | * settings_list.c and englinsh.lang built for it. | ||
760 | * If that ever changes remove the #ifndef __PCTOOL__'s here | ||
761 | */ | ||
753 | (void)wps_data; | 762 | (void)wps_data; |
754 | const char *ptr = wps_bufptr; | 763 | const char *ptr = wps_bufptr; |
755 | const char *end; | 764 | const char *end; |
756 | int i; | 765 | int i = 0; |
766 | char temp[64]; | ||
757 | 767 | ||
758 | /* Find the setting's cfg_name */ | 768 | /* Find the setting's cfg_name */ |
759 | if (*ptr != '|') | 769 | if (*ptr != '|') |
@@ -762,17 +772,30 @@ static int parse_setting(const char *wps_bufptr, | |||
762 | end = strchr(ptr,'|'); | 772 | end = strchr(ptr,'|'); |
763 | if (!end) | 773 | if (!end) |
764 | return WPS_ERROR_INVALID_PARAM; | 774 | return WPS_ERROR_INVALID_PARAM; |
765 | 775 | strlcpy(temp, ptr,end-ptr+1); | |
766 | /* Find the setting */ | 776 | |
767 | for (i=0; i<nb_settings; i++) | 777 | if (token->type == WPS_TOKEN_TRANSLATEDSTRING) |
768 | if (settings[i].cfg_name && | 778 | { |
769 | !strncmp(settings[i].cfg_name,ptr,end-ptr) && | 779 | #ifndef __PCTOOL__ |
770 | /* prevent matches on cfg_name prefixes */ | 780 | i = lang_english_to_id(temp); |
771 | strlen(settings[i].cfg_name)==(size_t)(end-ptr)) | 781 | if (i < 0) |
772 | break; | 782 | return WPS_ERROR_INVALID_PARAM; |
773 | if (i == nb_settings) | 783 | #endif |
774 | return WPS_ERROR_INVALID_PARAM; | 784 | } |
775 | 785 | else | |
786 | { | ||
787 | /* Find the setting */ | ||
788 | for (i=0; i<nb_settings; i++) | ||
789 | if (settings[i].cfg_name && | ||
790 | !strncmp(settings[i].cfg_name,ptr,end-ptr) && | ||
791 | /* prevent matches on cfg_name prefixes */ | ||
792 | strlen(settings[i].cfg_name)==(size_t)(end-ptr)) | ||
793 | break; | ||
794 | #ifndef __PCTOOL__ | ||
795 | if (i == nb_settings) | ||
796 | return WPS_ERROR_INVALID_PARAM; | ||
797 | #endif | ||
798 | } | ||
776 | /* Store the setting number */ | 799 | /* Store the setting number */ |
777 | token->value.i = i; | 800 | token->value.i = i; |
778 | 801 | ||
diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c index 94d8eb4dc6..758a8c1b04 100644 --- a/apps/gui/skin_engine/skin_tokens.c +++ b/apps/gui/skin_engine/skin_tokens.c | |||
@@ -170,6 +170,9 @@ const char *get_token_value(struct gui_wps *gwps, | |||
170 | 170 | ||
171 | case WPS_TOKEN_STRING: | 171 | case WPS_TOKEN_STRING: |
172 | return (char*)token->value.data; | 172 | return (char*)token->value.data; |
173 | |||
174 | case WPS_TOKEN_TRANSLATEDSTRING: | ||
175 | return (char*)P2STR(ID2P(token->value.i)); | ||
173 | 176 | ||
174 | case WPS_TOKEN_TRACK_TIME_ELAPSED: | 177 | case WPS_TOKEN_TRACK_TIME_ELAPSED: |
175 | format_time(buf, buf_size, | 178 | format_time(buf, buf_size, |
diff --git a/apps/gui/skin_engine/skin_tokens.h b/apps/gui/skin_engine/skin_tokens.h index ad016047ba..86425424d9 100644 --- a/apps/gui/skin_engine/skin_tokens.h +++ b/apps/gui/skin_engine/skin_tokens.h | |||
@@ -32,6 +32,7 @@ enum wps_token_type { | |||
32 | /* Markers */ | 32 | /* Markers */ |
33 | WPS_TOKEN_CHARACTER, | 33 | WPS_TOKEN_CHARACTER, |
34 | WPS_TOKEN_STRING, | 34 | WPS_TOKEN_STRING, |
35 | WPS_TOKEN_TRANSLATEDSTRING, | ||
35 | 36 | ||
36 | /* Alignment */ | 37 | /* Alignment */ |
37 | WPS_TOKEN_ALIGN_LEFT, | 38 | WPS_TOKEN_ALIGN_LEFT, |
diff --git a/apps/gui/skin_engine/wps_debug.c b/apps/gui/skin_engine/wps_debug.c index df96548e9e..e06ce00219 100644 --- a/apps/gui/skin_engine/wps_debug.c +++ b/apps/gui/skin_engine/wps_debug.c | |||
@@ -76,6 +76,9 @@ static char *get_token_desc(struct wps_token *token, char *buf, | |||
76 | snprintf(buf, bufsize, "String '%s'", | 76 | snprintf(buf, bufsize, "String '%s'", |
77 | (char*)token->value.data); | 77 | (char*)token->value.data); |
78 | break; | 78 | break; |
79 | case WPS_TOKEN_TRANSLATEDSTRING: | ||
80 | snprintf(buf, bufsize, "String ID '%d'", token->value.i); | ||
81 | break; | ||
79 | 82 | ||
80 | #ifdef HAVE_LCD_BITMAP | 83 | #ifdef HAVE_LCD_BITMAP |
81 | case WPS_TOKEN_ALIGN_LEFT: | 84 | case WPS_TOKEN_ALIGN_LEFT: |
diff --git a/apps/language.c b/apps/language.c index 7253ec275b..73ed0fe39b 100644 --- a/apps/language.c +++ b/apps/language.c | |||
@@ -98,3 +98,16 @@ int lang_load(const char *filename) | |||
98 | close(fd); | 98 | close(fd); |
99 | return retcode; | 99 | return retcode; |
100 | } | 100 | } |
101 | |||
102 | int lang_english_to_id(const char* english) | ||
103 | { | ||
104 | int i; | ||
105 | unsigned char *ptr = (unsigned char *) language_builtin; | ||
106 | |||
107 | for (i = 0; i < LANG_LAST_INDEX_IN_ARRAY; i++) { | ||
108 | if (!strcmp(ptr, english)) | ||
109 | return i; | ||
110 | ptr += strlen((char *)ptr) + 1; /* advance pointer to next string */ | ||
111 | } | ||
112 | return -1; | ||
113 | } | ||
diff --git a/apps/language.h b/apps/language.h index a35387cf49..06769a3dd9 100644 --- a/apps/language.h +++ b/apps/language.h | |||
@@ -27,4 +27,7 @@ void lang_init(void); | |||
27 | /* load a given language file */ | 27 | /* load a given language file */ |
28 | int lang_load(const char *filename); | 28 | int lang_load(const char *filename); |
29 | 29 | ||
30 | /* get the ID of an english string so it can be localised */ | ||
31 | int lang_english_to_id(const char* english); | ||
32 | |||
30 | #endif | 33 | #endif |