diff options
| author | Robert Bieber <robby@bieberphoto.com> | 2010-06-11 08:03:32 +0000 |
|---|---|---|
| committer | Robert Bieber <robby@bieberphoto.com> | 2010-06-11 08:03:32 +0000 |
| commit | 1b613f583d3f9d525a9ee3730de863fc21f3f8c4 (patch) | |
| tree | a2158aac7220319414818e18d75494c8ed14dc82 /utils/themeeditor | |
| parent | 2f7bb96c3dbd462dabd13f75c1a97e4140f093e5 (diff) | |
| download | rockbox-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.cpp | 21 | ||||
| -rw-r--r-- | utils/themeeditor/skin_parser.c | 31 |
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; |