summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utils/themeeditor/main.cpp14
-rw-r--r--utils/themeeditor/parsetreemodel.cpp1
-rw-r--r--utils/themeeditor/parsetreenode.cpp30
-rw-r--r--utils/themeeditor/parsetreenode.h4
-rw-r--r--utils/themeeditor/skin_debug.c19
-rw-r--r--utils/themeeditor/skin_parser.c14
-rw-r--r--utils/themeeditor/skin_parser.h3
7 files changed, 58 insertions, 27 deletions
diff --git a/utils/themeeditor/main.cpp b/utils/themeeditor/main.cpp
index b43b419143..49e870c369 100644
--- a/utils/themeeditor/main.cpp
+++ b/utils/themeeditor/main.cpp
@@ -19,13 +19,10 @@
19 * 19 *
20 ****************************************************************************/ 20 ****************************************************************************/
21 21
22namespace wps 22extern "C"
23{ 23{
24 extern "C"
25 {
26#include "skin_parser.h" 24#include "skin_parser.h"
27#include "skin_debug.h" 25#include "skin_debug.h"
28 }
29} 26}
30 27
31#include <cstdlib> 28#include <cstdlib>
@@ -39,13 +36,14 @@ namespace wps
39int main(int argc, char* argv[]) 36int main(int argc, char* argv[])
40{ 37{
41 38
42 char* doc = "%Vd(U)\n\n%?bl(test,3,5,2,1)<param2|param3>"; 39 char doc[] = "%Vd(U);Hey\n%?bl(test,3,5,2,1)<param2|param3>";
43 40
44 struct wps::skin_element* test = wps::skin_parse(doc); 41 struct skin_element* test = skin_parse(doc);
45 42
46 wps::skin_debug_tree(test); 43 skin_debug_tree(test);
44
45 skin_free_tree(test);
47 46
48 wps::skin_free_tree(test);
49 47
50 QApplication app(argc, argv); 48 QApplication app(argc, argv);
51 49
diff --git a/utils/themeeditor/parsetreemodel.cpp b/utils/themeeditor/parsetreemodel.cpp
index cf6af14a5e..aa5fb5cdb8 100644
--- a/utils/themeeditor/parsetreemodel.cpp
+++ b/utils/themeeditor/parsetreemodel.cpp
@@ -27,7 +27,6 @@ ParseTreeModel::ParseTreeModel(char* wps, QObject* parent):
27 QAbstractItemModel(parent) 27 QAbstractItemModel(parent)
28{ 28{
29 this->wps = skin_parse(wps); 29 this->wps = skin_parse(wps);
30 skin_debug_tree(this->wps);
31 this->root = new ParseTreeNode(this->wps, 0, true); 30 this->root = new ParseTreeNode(this->wps, 0, true);
32} 31}
33 32
diff --git a/utils/themeeditor/parsetreenode.cpp b/utils/themeeditor/parsetreenode.cpp
index 97cb559906..77ec897dd7 100644
--- a/utils/themeeditor/parsetreenode.cpp
+++ b/utils/themeeditor/parsetreenode.cpp
@@ -1,16 +1,34 @@
1#include "parsetreenode.h" 1#include "parsetreenode.h"
2 2
3ParseTreeNode::ParseTreeNode(struct skin_element* data, ParseTreeNode* parent, 3ParseTreeNode::ParseTreeNode(struct skin_element* data, ParseTreeNode* parent,
4 bool stop): 4 bool tree)
5 parentLink(parent), element(data)
6{ 5{
7 6
8 if(stop) 7 if(tree)
9 return; 8 {
10 for(int i = 0; i < 5; i++) 9 while(data)
11 appendChild(new ParseTreeNode(data, this, true)); 10 {
11 appendChild(new ParseTreeNode(data, this, false));
12 data = data->next;
13 }
14 parentLink = 0;
15 }
16 else
17 {
18 element = data;
19 parentLink = parent;
20 }
21
12} 22}
13 23
24ParseTreeNode::ParseTreeNode(struct skin_tag_parameter* param,
25 ParseTreeNode* parent)
26 :parentLink(parent), element(0), param(param)
27{
28
29}
30
31
14ParseTreeNode::~ParseTreeNode() 32ParseTreeNode::~ParseTreeNode()
15{ 33{
16 qDeleteAll(children); 34 qDeleteAll(children);
diff --git a/utils/themeeditor/parsetreenode.h b/utils/themeeditor/parsetreenode.h
index bc091b9aa4..c3372e0a20 100644
--- a/utils/themeeditor/parsetreenode.h
+++ b/utils/themeeditor/parsetreenode.h
@@ -13,7 +13,8 @@ extern "C"
13class ParseTreeNode 13class ParseTreeNode
14{ 14{
15public: 15public:
16 ParseTreeNode(struct skin_element* data, ParseTreeNode* parent, bool stop = false); 16 ParseTreeNode(struct skin_element* data, ParseTreeNode* parent, bool tree);
17 ParseTreeNode(struct skin_tag_parameter* param, ParseTreeNode* parent);
17 virtual ~ParseTreeNode(); 18 virtual ~ParseTreeNode();
18 19
19 void appendChild(ParseTreeNode* child); 20 void appendChild(ParseTreeNode* child);
@@ -29,6 +30,7 @@ private:
29 ParseTreeNode* parentLink; 30 ParseTreeNode* parentLink;
30 QList<ParseTreeNode*> children; 31 QList<ParseTreeNode*> children;
31 struct skin_element* element; 32 struct skin_element* element;
33 struct skin_tag_parameter* param;
32 34
33}; 35};
34 36
diff --git a/utils/themeeditor/skin_debug.c b/utils/themeeditor/skin_debug.c
index f275b0403d..5d37f64a11 100644
--- a/utils/themeeditor/skin_debug.c
+++ b/utils/themeeditor/skin_debug.c
@@ -129,17 +129,10 @@ void skin_debug_tree(struct skin_element* root)
129 debug_indent_level++; 129 debug_indent_level++;
130 for(i = 0; i < current->children_count; i++) 130 for(i = 0; i < current->children_count; i++)
131 { 131 {
132 skin_debug_indent();
133 printf("[ Subline %d\n", i);
134
135 debug_indent_level++;
136 skin_debug_tree(current->children[i]); 132 skin_debug_tree(current->children[i]);
137 debug_indent_level--;
138
139 skin_debug_indent();
140 printf("]\n");
141 } 133 }
142 debug_indent_level--; 134 debug_indent_level--;
135
143 skin_debug_indent(); 136 skin_debug_indent();
144 printf("]\n"); 137 printf("]\n");
145 break; 138 break;
@@ -175,6 +168,16 @@ void skin_debug_tree(struct skin_element* root)
175 168
176 break; 169 break;
177 170
171 case LINE:
172 printf("[ Logical line on line %d\n", current->line);
173
174 debug_indent_level++;
175 skin_debug_tree(current->children[0]);
176 debug_indent_level--;
177
178 skin_debug_indent();
179 printf("]\n");
180 break;
178 } 181 }
179 182
180 current = current->next; 183 current = current->next;
diff --git a/utils/themeeditor/skin_parser.c b/utils/themeeditor/skin_parser.c
index dd061a1ac9..a6c5ea41a2 100644
--- a/utils/themeeditor/skin_parser.c
+++ b/utils/themeeditor/skin_parser.c
@@ -151,6 +151,14 @@ struct skin_element* skin_parse_line_optional(char** document, int conditional)
151 151
152 struct skin_element* root = NULL; 152 struct skin_element* root = NULL;
153 struct skin_element* current = NULL; 153 struct skin_element* current = NULL;
154 struct skin_element* retval = NULL;
155
156 /* A wrapper for the line */
157 retval = skin_alloc_element();
158 retval->type = LINE;
159 retval->line = skin_line;
160 retval->children_count = 1;
161 retval->children = skin_alloc_children(1);
154 162
155 while(*cursor != '\n' && *cursor != '\0' && *cursor != MULTILINESYM 163 while(*cursor != '\n' && *cursor != '\0' && *cursor != MULTILINESYM
156 && !((*cursor == ARGLISTSEPERATESYM 164 && !((*cursor == ARGLISTSEPERATESYM
@@ -214,7 +222,8 @@ struct skin_element* skin_parse_line_optional(char** document, int conditional)
214 /* Moving up the calling function's pointer */ 222 /* Moving up the calling function's pointer */
215 *document = cursor; 223 *document = cursor;
216 224
217 return root; 225 retval->children[0] = root;
226 return retval;
218} 227}
219 228
220struct skin_element* skin_parse_sublines(char** document) 229struct skin_element* skin_parse_sublines(char** document)
@@ -233,6 +242,7 @@ struct skin_element* skin_parse_sublines_optional(char** document,
233 retval = skin_alloc_element(); 242 retval = skin_alloc_element();
234 retval->type = SUBLINES; 243 retval->type = SUBLINES;
235 retval->next = NULL; 244 retval->next = NULL;
245 retval->line = skin_line;
236 246
237 /* First we count the sublines */ 247 /* First we count the sublines */
238 while(*cursor != '\0' && *cursor != '\n' 248 while(*cursor != '\0' && *cursor != '\n'
@@ -276,7 +286,7 @@ struct skin_element* skin_parse_sublines_optional(char** document,
276 skin_error(MULTILINE_EXPECTED); 286 skin_error(MULTILINE_EXPECTED);
277 return NULL; 287 return NULL;
278 } 288 }
279 else 289 else if(i != sublines - 1)
280 { 290 {
281 cursor++; 291 cursor++;
282 } 292 }
diff --git a/utils/themeeditor/skin_parser.h b/utils/themeeditor/skin_parser.h
index 50980023b5..7de726bbfc 100644
--- a/utils/themeeditor/skin_parser.h
+++ b/utils/themeeditor/skin_parser.h
@@ -41,7 +41,8 @@ enum skin_element_type
41 COMMENT, 41 COMMENT,
42 TAG, 42 TAG,
43 CONDITIONAL, 43 CONDITIONAL,
44 SUBLINES 44 SUBLINES,
45 LINE
45}; 46};
46 47
47enum skin_errorcode 48enum skin_errorcode