summaryrefslogtreecommitdiff
path: root/utils/themeeditor
diff options
context:
space:
mode:
authorRobert Bieber <robby@bieberphoto.com>2010-06-11 08:03:32 +0000
committerRobert Bieber <robby@bieberphoto.com>2010-06-11 08:03:32 +0000
commit1b613f583d3f9d525a9ee3730de863fc21f3f8c4 (patch)
treea2158aac7220319414818e18d75494c8ed14dc82 /utils/themeeditor
parent2f7bb96c3dbd462dabd13f75c1a97e4140f093e5 (diff)
downloadrockbox-1b613f583d3f9d525a9ee3730de863fc21f3f8c4.zip
rockbox-1b613f583d3f9d525a9ee3730de863fc21f3f8c4.tar.gz
rockbox-1b613f583d3f9d525a9ee3730de863fc21f3f8c4.tar.bz2
rockbox-1b613f583d3f9d525a9ee3730de863fc21f3f8c4.tar.xz
Theme Editor: Modified parser to integrate the %V tag into the VIEWPORT element, in the same style as CONDITIONAL
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26762 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'utils/themeeditor')
-rw-r--r--utils/themeeditor/parsetreenode.cpp21
-rw-r--r--utils/themeeditor/skin_parser.c31
2 files changed, 33 insertions, 19 deletions
diff --git a/utils/themeeditor/parsetreenode.cpp b/utils/themeeditor/parsetreenode.cpp
index 6f61540..df4e770 100644
--- a/utils/themeeditor/parsetreenode.cpp
+++ b/utils/themeeditor/parsetreenode.cpp
@@ -56,6 +56,7 @@ ParseTreeNode::ParseTreeNode(struct skin_element* data, ParseTreeNode* parent)
}
break;
+ case VIEWPORT:
case CONDITIONAL:
for(int i = 0; i < element->params_count; i++)
children.append(new ParseTreeNode(&data->params[i], this));
@@ -70,7 +71,6 @@ ParseTreeNode::ParseTreeNode(struct skin_element* data, ParseTreeNode* parent)
}
break;
- case VIEWPORT:
case LINE:
for(int i = 0; i < data->children_count; i++)
{
@@ -104,10 +104,23 @@ QString ParseTreeNode::genCode() const
{
case VIEWPORT:
- buffer.append(children[0]->genCode());
- if(children[0]->element->type == TAG)
+ /* Generating the Viewport tag, if necessary */
+ if(element->tag)
+ {
+ buffer.append(TAGSYM);
+ buffer.append(element->tag->name);
+ buffer.append(ARGLISTOPENSYM);
+ for(int i = 0; i < element->params_count; i++)
+ {
+ buffer.append(children[i]->genCode());
+ if(i != element->params_count - 1)
+ buffer.append(ARGLISTSEPERATESYM);
+ }
+ buffer.append(ARGLISTCLOSESYM);
buffer.append('\n');
- for(int i = 1; i < children.count(); i++)
+ }
+
+ for(int i = element->params_count; i < children.count(); i++)
buffer.append(children[i]->genCode());
break;
diff --git a/utils/themeeditor/skin_parser.c b/utils/themeeditor/skin_parser.c
index f17f688..e6a6350 100644
--- a/utils/themeeditor/skin_parser.c
+++ b/utils/themeeditor/skin_parser.c
@@ -124,24 +124,19 @@ static struct skin_element* skin_parse_viewport(char** document)
/* Parsing out the viewport tag if there is one */
if(check_viewport(cursor))
{
- retval->children_count = 2;
- retval->children = skin_alloc_children(2);
- retval->children[0] = skin_alloc_element();
- skin_parse_tag(retval->children[0], &cursor);
+ skin_parse_tag(retval, &cursor);
if(*cursor == '\n')
{
cursor++;
skin_line++;
}
}
- else
- {
- retval->children_count = 1;
- retval->children = skin_alloc_children(1);
- }
+
+ retval->children_count = 1;
+ retval->children = skin_alloc_children(1);
- while(*cursor != '\0' && !(check_viewport(cursor) && cursor != *document))
+ do
{
/* First, we check to see if this line will contain sublines */
@@ -217,10 +212,11 @@ static struct skin_element* skin_parse_viewport(char** document)
skin_line++;
}
}
+ while(*cursor != '\0' && !(check_viewport(cursor) && cursor != *document));
*document = cursor;
- retval->children[retval->children_count - 1] = root;
+ retval->children[0] = root;
return retval;
}
@@ -253,8 +249,11 @@ static struct skin_element* skin_parse_line_optional(char** document,
retval = skin_alloc_element();
retval->type = LINE;
retval->line = skin_line;
- retval->children_count = 1;
- retval->children = skin_alloc_children(1);
+ if(*cursor != '\0')
+ retval->children_count = 1;
+ else retval->children_count = 0;
+ if(retval->children_count > 0)
+ retval->children = skin_alloc_children(1);
while(*cursor != '\n' && *cursor != '\0' && *cursor != MULTILINESYM
&& !((*cursor == ARGLISTSEPERATESYM
@@ -302,7 +301,8 @@ static struct skin_element* skin_parse_line_optional(char** document,
/* Moving up the calling function's pointer */
*document = cursor;
- retval->children[0] = root;
+ if(root)
+ retval->children[0] = root;
return retval;
}
@@ -432,7 +432,7 @@ static int skin_parse_tag(struct skin_element* element, char** document)
}
/* Copying basic tag info */
- if(element->type != CONDITIONAL)
+ if(element->type != CONDITIONAL && element->type != VIEWPORT)
element->type = TAG;
element->tag = tag;
tag_args = tag->params;
@@ -851,6 +851,7 @@ struct skin_element* skin_alloc_element()
struct skin_element* retval = (struct skin_element*)
skin_alloc(sizeof(struct skin_element));
retval->next = NULL;
+ retval->tag = NULL;
retval->params_count = 0;
retval->children_count = 0;