Index: tools/checkwps/checkwps.c
===================================================================
--- tools/checkwps/checkwps.c (revision 26245)
+++ tools/checkwps/checkwps.c (working copy)
@@ -229,6 +229,8 @@
}
#endif
+FILE* updatefile = NULL;
+
int main(int argc, char **argv)
{
int res;
@@ -246,6 +248,7 @@
{
printf("Usage: checkwps [OPTIONS] filename.wps [filename2.wps]...\n");
printf("\nOPTIONS:\n");
+ printf("\t-u FILENAME\t\tUpdate skin to new format, output to FILENAME\n");
printf("\t-v\t\tverbose\n");
printf("\t-vv\t\tmore verbose\n");
printf("\t-vvv\t\tvery verbose\n");
@@ -260,6 +263,16 @@
i++;
wps_verbose_level++;
}
+ if (argv[1][i] == 'u')
+ {
+ updatefile = fopen(argv[2], "w");
+ if (!updatefile)
+ {
+ printf("Couldnt open '%s'\n", argv[2]);
+ return 1;
+ }
+ filearg++;
+ }
}
skin_buffer_init();
Index: apps/gui/skin_engine/skin_parser.c
===================================================================
--- apps/gui/skin_engine/skin_parser.c (revision 26245)
+++ apps/gui/skin_engine/skin_parser.c (working copy)
@@ -39,9 +39,12 @@
#define lang_is_rtl() (false)
#define DEBUGF printf
#endif /*WPSEDITOR*/
+extern FILE* updatefile;
+#define UPDATE_SKIN(...) fprintf(updatefile, __VA_ARGS__)
#else
#include "debug.h"
#include "language.h"
+#define UPDATE_SKIN(...)
#endif /*__PCTOOL__*/
#include <ctype.h>
@@ -147,6 +150,19 @@
return 0;
}
+static void dump_new_args(const char *start, const char *end, bool printend)
+{
+ UPDATE_SKIN("(");
+ while (start != end)
+ {
+ UPDATE_SKIN("%c", (*start == '|')?',':*start);
+ start++;
+ }
+ if (printend)
+ UPDATE_SKIN(")");
+}
+
+
#ifdef HAVE_LCD_BITMAP
static int parse_viewport_display(const char *wps_bufptr,
struct wps_token *token, struct wps_data *wps_data);
@@ -507,6 +523,7 @@
immediately after the first eol, i.e. to the start of the next line */
static int skip_end_of_line(const char *wps_bufptr)
{
+ UPDATE_SKIN("\n");
line_number++;
int skip = 0;
while(*(wps_bufptr + skip) != '\n')
@@ -655,12 +672,13 @@
{
if (subimage >= img->num_subimages)
return WPS_ERROR_INVALID_PARAM;
-
+ UPDATE_SKIN("(%c%c)", label, wps_bufptr[1]);
/* Store sub-image number to display in high bits */
token->value.i = label | (subimage << 8);
return 2; /* We have consumed 2 bytes */
} else {
token->value.i = label;
+ UPDATE_SKIN("(%c)", label);
return 1; /* We have consumed 1 byte */
}
}
@@ -689,7 +707,7 @@
if (!(ptr = parse_list("ssdd", NULL, '|', ptr, &id, &filename, &x, &y)))
return WPS_ERROR_INVALID_PARAM;
-
+ dump_new_args(wps_bufptr+1, ptr, (token->type == WPS_TOKEN_IMAGE_DISPLAY));
/* Check there is a terminating | */
if (*ptr != '|')
return WPS_ERROR_INVALID_PARAM;
@@ -729,6 +747,7 @@
if (img->num_subimages <= 0)
return WPS_ERROR_INVALID_PARAM;
+ UPDATE_SKIN(",%d)", img->num_subimages);
}
struct skin_token_list *item = new_skin_token_list_item(NULL, img);
if (!item)
@@ -758,7 +777,7 @@
if (!(ptr = parse_list("ds", NULL, '|', ptr, &id, &filename)))
return WPS_ERROR_INVALID_PARAM;
-
+ dump_new_args(wps_bufptr+1, ptr, true);
/* Check there is a terminating | */
if (*ptr != '|')
return WPS_ERROR_INVALID_PARAM;
@@ -796,10 +815,12 @@
return WPS_ERROR_INVALID_PARAM;
}
token->value.i = letter;
+ UPDATE_SKIN("(%c)", letter);
return 1;
}
#ifdef HAVE_LCD_BITMAP
+/* FIXME for the skin updater */
static int parse_playlistview_text(struct playlistviewer *viewer,
enum info_line_type line, char* text)
{
@@ -910,10 +931,12 @@
length = parse_playlistview_text(viewer, TRACK_HAS_INFO, ptr);
if (length < 0)
return WPS_ERROR_INVALID_PARAM;
- length = parse_playlistview_text(viewer, TRACK_HAS_NO_INFO, ptr+length);
+ ptr+=length;
+ length = parse_playlistview_text(viewer, TRACK_HAS_NO_INFO, ptr);
if (length < 0)
return WPS_ERROR_INVALID_PARAM;
-
+ ptr+=length;
+ dump_new_args(wps_bufptr+1, ptr, true);
return skip_end_of_line(wps_bufptr);
}
#endif
@@ -924,6 +947,7 @@
{
(void)token; /* Kill warnings */
const char *ptr = wps_bufptr;
+ const char* params_start;
struct skin_viewport *skin_vp = skin_buffer_alloc(sizeof(struct skin_viewport));
@@ -944,6 +968,8 @@
if (*ptr == 'i')
{
+ UPDATE_SKIN("i");
+ params_start = ptr+2;
if (*(ptr+1) == '|')
{
char label = *(ptr+2);
@@ -966,8 +992,10 @@
}
else if (*ptr == 'l')
{
+ UPDATE_SKIN("l");
if (*(ptr+1) == '|')
{
+ params_start = ptr+2;
char label = *(ptr+2);
if (label >= 'a' && label <= 'z')
{
@@ -979,6 +1007,8 @@
ptr += 3;
}
}
+ else
+ params_start = ptr+1;
if (*ptr != '|')
return WPS_ERROR_INVALID_PARAM;
@@ -987,7 +1017,7 @@
/* format: %V|x|y|width|height|font|fg_pattern|bg_pattern| */
if (!(ptr = viewport_parse_viewport(vp, curr_screen, ptr, '|')))
return WPS_ERROR_INVALID_PARAM;
-
+ dump_new_args(params_start, ptr, true);
/* Check for trailing | */
if (*ptr != '|')
return WPS_ERROR_INVALID_PARAM;
@@ -1031,11 +1061,15 @@
/* format: %X|filename.bmp| or %Xd */
if (*(wps_bufptr) == 'd')
{
+ UPDATE_SKIN("(d)");
wps_data->backdrop = NULL;
return skip_end_of_line(wps_bufptr);
}
else if (!error)
+ {
+ dump_new_args(wps_bufptr+1, strchr(wps_bufptr+1, '|'), true);
wps_data->backdrop = (char*)wps_bufptr + 1;
+ }
}
#endif
if (error)
@@ -1070,6 +1104,7 @@
if (!end || (size_t)(end-ptr+1) > sizeof temp)
return WPS_ERROR_INVALID_PARAM;
strlcpy(temp, ptr,end-ptr+1);
+ dump_new_args(wps_bufptr+1, end, true);
if (token->type == WPS_TOKEN_TRANSLATEDSTRING)
{
@@ -1105,6 +1140,7 @@
{
char val[] = { *wps_bufptr, '\0' };
token->value.i = atoi(val);
+ UPDATE_SKIN("(%d)", token->value.i);
(void)wps_data; /* Kill warnings */
return 1;
}
@@ -1158,6 +1194,8 @@
break;
}
}
+ else
+ UPDATE_SKIN("(%d)", token->value.i);
token->value.i = val;
return skip;
@@ -1226,6 +1264,7 @@
return 0;
return WPS_ERROR_INVALID_PARAM;
}
+ dump_new_args(wps_bufptr+1, ptr, true);
if (LIST_VALUE_PARSED(set, PB_FILENAME)) /* filename */
pb->bm.data = (char*)filename;
@@ -1326,6 +1365,10 @@
/* format: %Cl|x|y|[[l|c|r]mwidth]|[[t|c|b]mheight]| */
newline = strchr(wps_bufptr, '\n');
+ const char* args_end = newline;
+ while (args_end > wps_bufptr+1 && *args_end!='|')
+ args_end--;
+ dump_new_args(wps_bufptr+1,args_end, true);
_pos = wps_bufptr;
@@ -1542,7 +1585,7 @@
if (!(ptr = parse_list("dddds", NULL, '|', ptr, &x, &y, &w, &h, &action)))
return WPS_ERROR_INVALID_PARAM;
-
+ dump_new_args(wps_bufptr+1, ptr, true);
/* Check there is a terminating | */
if (*ptr != '|')
return WPS_ERROR_INVALID_PARAM;
@@ -1621,6 +1664,7 @@
case ';':
case '#':
/* escaped characters */
+ UPDATE_SKIN("%c", *wps_bufptr);
token->type = WPS_TOKEN_CHARACTER;
token->value.c = *wps_bufptr;
taglen = 1;
@@ -1629,6 +1673,7 @@
case '?':
/* conditional tag */
+ UPDATE_SKIN("?");
token->type = WPS_TOKEN_CONDITIONAL;
level++;
condindex[level] = wps_data->num_tokens;
@@ -1648,6 +1693,7 @@
taglen = (tag->type != WPS_TOKEN_UNKNOWN) ? strlen(tag->name) : 2;
token->type = tag->type;
curr_line->curr_subline->line_type |= tag->refresh_type;
+ UPDATE_SKIN("%s", tag->name);
/* if the tag has a special parsing function, we call it */
if (tag->parse_func)
@@ -1820,6 +1866,7 @@
/* Regular tag */
case '%':
+ UPDATE_SKIN("%%");
if ((ret = parse_token(wps_bufptr, data)) < 0)
{
fail = PARSE_FAIL_COND_INVALID_PARAM;
@@ -1840,7 +1887,7 @@
fail = PARSE_FAIL_UNCLOSED_COND;
break;
}
-
+ UPDATE_SKIN(";");
if (!skin_start_new_subline(curr_line, data->num_tokens))
fail = PARSE_FAIL_LIMITS_EXCEEDED;
@@ -1853,6 +1900,7 @@
fail = PARSE_FAIL_COND_SYNTAX_ERROR;
break;
}
+ UPDATE_SKIN("<");
wps_bufptr += check_feature_tag(wps_bufptr,
data->tokens[data->num_tokens-1].type);
data->tokens[data->num_tokens].type = WPS_TOKEN_CONDITIONAL_START;
@@ -1866,6 +1914,7 @@
fail = PARSE_FAIL_INVALID_CHAR;
break;
}
+ UPDATE_SKIN(">");
data->tokens[data->num_tokens].type = WPS_TOKEN_CONDITIONAL_END;
if (lastcond[level])
@@ -1889,6 +1938,7 @@
fail = PARSE_FAIL_INVALID_CHAR;
break;
}
+ UPDATE_SKIN("|");
data->tokens[data->num_tokens].type = WPS_TOKEN_CONDITIONAL_OPTION;
if (lastcond[level])
@@ -1911,8 +1961,17 @@
fail = PARSE_FAIL_UNCLOSED_COND;
break;
}
-
- wps_bufptr += skip_end_of_line(wps_bufptr);
+ else
+ {
+ UPDATE_SKIN("#");
+ while(*wps_bufptr != '\n')
+ {
+ UPDATE_SKIN("%c", *wps_bufptr);
+ wps_bufptr++;
+ }
+ UPDATE_SKIN("\n");
+ wps_bufptr++;
+ }
break;
/* End of this line */
@@ -1926,6 +1985,7 @@
data->tokens[data->num_tokens].type = WPS_TOKEN_CHARACTER;
data->tokens[data->num_tokens].value.c = '\n';
data->tokens[data->num_tokens].next = false;
+ UPDATE_SKIN("\n");
data->num_tokens++;
if (!skin_start_new_line(curr_vp, data->num_tokens))
@@ -1994,6 +2054,7 @@
/* another occurrence of an existing string */
data->tokens[data->num_tokens].value.data = list->token->value.data;
}
+ UPDATE_SKIN("%s", (char*)data->tokens[data->num_tokens].value.data);
data->tokens[data->num_tokens].type = WPS_TOKEN_STRING;
data->num_tokens++;
}