initialise the element->type value so TAG types dont accidently get VIEWPORT if it...
[kugel-rb.git] / utils / themeeditor / skin_debug.c
blob549f7b9e6c353d5b72785604fba56f21a81f00b9
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2010 Robert Bieber
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <string.h>
26 #include "skin_parser.h"
27 #include "skin_debug.h"
28 #include "tag_table.h"
30 /* Global variables for debug output */
31 int debug_indent_level = 0;
32 extern int skin_line;
34 /* Global error variables */
35 int error_line;
36 char* error_message;
38 /* Debugging functions */
39 void skin_error(enum skin_errorcode error)
42 error_line = skin_line;
44 switch(error)
46 case MEMORY_LIMIT_EXCEEDED:
47 error_message = "Memory limit exceeded";
48 break;
49 case NEWLINE_EXPECTED:
50 error_message = "Newline expected";
51 break;
52 case ILLEGAL_TAG:
53 error_message = "Illegal tag";
54 break;
55 case ARGLIST_EXPECTED:
56 error_message = "Argument list expected";
57 break;
58 case TOO_MANY_ARGS:
59 error_message = "Too many arguments given";
60 break;
61 case DEFAULT_NOT_ALLOWED:
62 error_message = "Argument can not be set to default";
63 break;
64 case UNEXPECTED_NEWLINE:
65 error_message = "Unexpected newline";
66 break;
67 case INSUFFICIENT_ARGS:
68 error_message = "Not enough arguments";
69 break;
70 case INT_EXPECTED:
71 error_message = "Expected integer";
72 break;
73 case SEPERATOR_EXPECTED:
74 error_message = "Expected argument seperator";
75 break;
76 case CLOSE_EXPECTED:
77 error_message = "Expected list close";
78 break;
79 case MULTILINE_EXPECTED:
80 error_message = "Expected subline seperator";
81 break;
86 int skin_error_line()
88 return error_line;
91 char* skin_error_message()
93 return error_message;
96 void skin_clear_errors()
98 error_line = 0;
99 error_message = NULL;
102 void skin_debug_tree(struct skin_element* root)
104 int i;
105 char *text;
107 struct skin_element* current = root;
109 while(current)
111 skin_debug_indent();
113 switch(current->type)
115 case UNKNOWN:
116 printf("[ Unknown element.. error\n]");
117 break;
119 case VIEWPORT:
120 printf("[ Viewport \n");
122 debug_indent_level++;
123 skin_debug_tree(current->children[0]);
124 debug_indent_level--;
126 printf("]");
127 break;
129 case TEXT:
130 text = current->data;
131 printf("[ Plain text on line %d : %s ]\n", current->line, text);
132 break;
134 case COMMENT:
135 text = current->data;
136 printf("[ Comment on line %d: ", current->line);
137 for(i = 0; i < (int)strlen(text); i++)
139 if(text[i] == '\n')
140 printf("\\n");
141 else
142 printf("%c", text[i]);
144 printf(" ]\n");
145 break;
147 case TAG:
148 printf("[ %s tag on line %d with %d arguments\n",
149 current->tag->name,
150 current->line, current->params_count);
151 debug_indent_level++;
152 skin_debug_params(current->params_count, current->params);
153 debug_indent_level--;
154 skin_debug_indent();
155 printf("]\n");
157 break;
159 case SUBLINES:
160 printf("[ Alternator on line %d with %d sublines \n", current->line,
161 current->children_count);
162 debug_indent_level++;
163 for(i = 0; i < current->children_count; i++)
165 skin_debug_tree(current->children[i]);
167 debug_indent_level--;
169 skin_debug_indent();
170 printf("]\n");
171 break;
173 case CONDITIONAL:
174 printf("[ Conditional tag on line %d with %d enumerations \n",
175 current->line, current->children_count - 1);
176 debug_indent_level++;
178 skin_debug_indent();
179 printf("[ Condition tag \n");
180 debug_indent_level++;
181 skin_debug_tree(current->children[0]);
182 debug_indent_level--;
183 skin_debug_indent();
184 printf("]\n");
186 for(i = 1; i < current->children_count; i++)
188 skin_debug_indent();
189 printf("[ Enumeration %d\n", i - 1);
190 debug_indent_level++;
191 skin_debug_tree(current->children[i]);
192 debug_indent_level--;
193 skin_debug_indent();
194 printf("]\n");
197 debug_indent_level--;
198 skin_debug_indent();
199 printf("]\n");
202 break;
204 case LINE:
205 printf("[ Logical line on line %d\n", current->line);
207 debug_indent_level++;
208 skin_debug_tree(current->children[0]);
209 debug_indent_level--;
211 skin_debug_indent();
212 printf("]\n");
213 break;
216 current = current->next;
221 void skin_debug_params(int count, struct skin_tag_parameter params[])
223 int i;
224 for(i = 0; i < count; i++)
227 skin_debug_indent();
228 switch(params[i].type)
230 case DEFAULT:
231 printf("[-]");
232 break;
234 case STRING:
235 printf("[%s]", params[i].data.text);
236 break;
238 case NUMERIC:
239 printf("[%d]", params[i].data.numeric);
240 break;
242 case CODE:
243 printf("[ WPS Code: \n");
244 debug_indent_level++;
245 skin_debug_tree(params[i].data.code);
246 debug_indent_level--;
247 skin_debug_indent();
248 printf("]");
249 break;
252 printf("\n");
257 void skin_debug_indent()
259 int i;
260 for(i = 0; i < debug_indent_level; i++)
261 printf(" ");