%aX should have been %ax..

setup the skinupdater to allow options (currently only -m to set mono display because the viewport definition is different on mono).
still not completly working


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26346 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jonathan Gordon 2010-05-28 02:30:27 +00:00
parent 27d4d9747e
commit 20dcf0b523
3 changed files with 83 additions and 15 deletions

View file

@ -6,6 +6,14 @@
#define PUTCH(out, c) fprintf(out, "%c", c)
extern struct tag_info legal_tags[];
/** Command line setting **/
bool is_mono_display = false;
/* dump "count" args to output replacing '|' with ',' except after the last count.
* return the amount of chars read. (start+return will be after the last | )
*/
@ -30,8 +38,9 @@ int dump_arg(FILE* out, const char* start, int count, bool close)
}
return l;
}
#define MATCH(s) (!strcmp(tag->name, s))
int parse_tag(FILE* out, const char* start)
int parse_tag(FILE* out, const char* start, bool in_conditional)
{
struct tag_info *tag;
int len = 0;
@ -49,11 +58,11 @@ int parse_tag(FILE* out, const char* start)
len += strlen(tag->name);
start += len;
/* handle individual tags which accept params */
if (MATCH("bl") || MATCH("pb") || MATCH("pv"))
if ((MATCH("bl") || MATCH("pb") || MATCH("pv")) && !in_conditional)
{
start++; len++;
if (*start == '|')
{
len++; start++;
PUTCH(out, '(');
/* TODO: need to verify that we are actually using the long form... */
len += dump_arg(out, start, 5, true);
@ -76,8 +85,16 @@ int parse_tag(FILE* out, const char* start)
}
else if (MATCH("xl"))
{
/* THIS IS BLOODY WRONG! */
PUTCH(out, '(');
len += 1+dump_arg(out, start+1, 5, true);
len += 1+dump_arg(out, start+1, 4, false);
start += len+1;
if (*start>= '0' && *start <= '9')
{
PUTCH(out, ',');
len += dump_arg(out, start, 1, false);
}
PUTCH(out, ')');
}
else if (MATCH("xd"))
{
@ -86,7 +103,9 @@ int parse_tag(FILE* out, const char* start)
PUTCH(out, *start++); len++;
if ((*start >= 'a' && *start <= 'z') ||
(*start >= 'A' && *start <= 'Z'))
PUTCH(out, *start); len++;
{
PUTCH(out, *start); len++;
}
PUTCH(out, ')');
}
else if (MATCH("x"))
@ -119,12 +138,12 @@ int parse_tag(FILE* out, const char* start)
else if (MATCH("Vl") || MATCH("Vi"))
{
PUTCH(out, '(');
len += 1+dump_arg(out, start+1, 8, true);
len += 1+dump_arg(out, start+1, is_mono_display?6:8, true);
}
else if (MATCH("V"))
{
PUTCH(out, '(');
len += 1+dump_arg(out, start+1, 7, true);
len += 1+dump_arg(out, start+1, is_mono_display?5:7, true);
}
else if (MATCH("X"))
{
@ -156,6 +175,8 @@ int parse_tag(FILE* out, const char* start)
void parse_text(const char* in, FILE* out)
{
const char* end = in+strlen(in);
int level = 0;
int len;
top:
while (in < end && *in)
{
@ -178,7 +199,25 @@ top:
PUTCH(out, *in++);
break;
}
in += parse_tag(out, in);
len = parse_tag(out, in, level>0);
if (len < 0)
{
PUTCH(out, *in++);
}
else
{
in += len;
}
}
else if (*in == '<')
{
level++;
PUTCH(out, *in++);
}
else if (*in == '>')
{
level--;
PUTCH(out, *in++);
}
else if (*in == '#')
{
@ -198,28 +237,57 @@ int main(int argc, char* argv[])
{
char buffer[10*1024], temp[512];
FILE *in, *out = stdout;
int filearg = 1, i=0;
if( (argc < 2) ||
strcmp(argv[1],"-h") == 0 ||
strcmp(argv[1],"--help") == 0 )
{
printf("Usage: %s infile [outfile]\n", argv[0]);
printf("Usage: %s [OPTIONS] infile [outfile]\n", argv[0]);
printf("\nOPTIONS:\n");
printf("\t-m\tSkin is for a mono display (different viewport tags)\n");
return 0;
}
in = fopen(argv[1], "r");
while ((argc > filearg) && argv[filearg][0] == '-')
{
i=1;
while (argv[filearg][i])
{
switch(argv[filearg][i])
{
case 'm': /* skin is for a mono display */
is_mono_display = true;
break;
}
i++;
}
filearg++;
}
if (argc == filearg)
{
printf("Missing input filename\n");
return 1;
}
in = fopen(argv[filearg], "r");
if (!in)
return 1;
while (fgets(temp, 512, in))
strcat(buffer, temp);
fclose(in);
filearg++;
if (argc == 3)
if (argc > filearg)
{
out = fopen(argv[2], "w");
out = fopen(argv[filearg], "w");
if (!out)
{
printf("Couldn't open %s\n", argv[filearg]);
return 1;
}
}
parse_text(buffer, out);
fclose(in);
if (out != stdout)
fclose(out);
return 0;

View file

@ -31,7 +31,7 @@ struct tag_info legal_tags[] =
{ "aL", "" },
{ "ar", "" },
{ "aR", "" },
{ "aX", "" },
{ "ax", "" },
{ "bl" , "*fIIII" },
{ "bv", "" },