Theme Editor: Changed anged error reporting method in parser, added error messages...
[kugel-rb.git] / utils / themeeditor / skin_debug.c
blob4a2ef32206052c571efc9abc6019a75f051572c6
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_debug_tree(struct skin_element* root)
98 int i;
100 struct skin_element* current = root;
102 while(current)
104 skin_debug_indent();
106 switch(current->type)
109 case VIEWPORT:
110 printf("[ Viewport \n");
112 debug_indent_level++;
113 skin_debug_tree(current->children[0]);
114 debug_indent_level--;
116 printf("]");
117 break;
119 case TEXT:
120 printf("[ Plain text on line %d : %s ]\n", current->line,
121 current->text);
122 break;
124 case COMMENT:
125 printf("[ Comment on line %d: ", current->line);
126 for(i = 0; i < (int)strlen(current->text); i++)
128 if(current->text[i] == '\n')
129 printf("\\n");
130 else
131 printf("%c", current->text[i]);
133 printf(" ]\n");
134 break;
136 case TAG:
137 printf("[ %s tag on line %d with %d arguments\n",
138 current->tag->name,
139 current->line, current->params_count);
140 debug_indent_level++;
141 skin_debug_params(current->params_count, current->params);
142 debug_indent_level--;
143 skin_debug_indent();
144 printf("]\n");
146 break;
148 case SUBLINES:
149 printf("[ Alternator on line %d with %d sublines \n", current->line,
150 current->children_count);
151 debug_indent_level++;
152 for(i = 0; i < current->children_count; i++)
154 skin_debug_tree(current->children[i]);
156 debug_indent_level--;
158 skin_debug_indent();
159 printf("]\n");
160 break;
162 case CONDITIONAL:
163 printf("[ Conditional tag on line %d with %d enumerations \n",
164 current->line, current->children_count - 1);
165 debug_indent_level++;
167 skin_debug_indent();
168 printf("[ Condition tag \n");
169 debug_indent_level++;
170 skin_debug_tree(current->children[0]);
171 debug_indent_level--;
172 skin_debug_indent();
173 printf("]\n");
175 for(i = 1; i < current->children_count; i++)
177 skin_debug_indent();
178 printf("[ Enumeration %d\n", i - 1);
179 debug_indent_level++;
180 skin_debug_tree(current->children[i]);
181 debug_indent_level--;
182 skin_debug_indent();
183 printf("]\n");
186 debug_indent_level--;
187 skin_debug_indent();
188 printf("]\n");
191 break;
193 case LINE:
194 printf("[ Logical line on line %d\n", current->line);
196 debug_indent_level++;
197 skin_debug_tree(current->children[0]);
198 debug_indent_level--;
200 skin_debug_indent();
201 printf("]\n");
202 break;
205 current = current->next;
210 void skin_debug_params(int count, struct skin_tag_parameter params[])
212 int i;
213 for(i = 0; i < count; i++)
216 skin_debug_indent();
217 switch(params[i].type)
219 case DEFAULT:
220 printf("[-]");
221 break;
223 case STRING:
224 printf("[%s]", params[i].data.text);
225 break;
227 case NUMERIC:
228 printf("[%d]", params[i].data.numeric);
229 break;
231 case CODE:
232 printf("[ WPS Code: \n");
233 debug_indent_level++;
234 skin_debug_tree(params[i].data.code);
235 debug_indent_level--;
236 skin_debug_indent();
237 printf("]");
238 break;
241 printf("\n");
246 void skin_debug_indent()
248 int i;
249 for(i = 0; i < debug_indent_level; i++)
250 printf(" ");