add backlight-target.h
[kugel-rb.git] / lib / skin_parser / skin_debug.c
blob496268f3cf3deabac6f57481c5ba4d0263c59ad1
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 #ifndef ROCKBOX
103 void skin_debug_tree(struct skin_element* root)
105 int i;
106 char *text;
108 struct skin_element* current = root;
110 while(current)
112 skin_debug_indent();
114 switch(current->type)
116 case UNKNOWN:
117 printf("[ Unknown element.. error\n]");
118 break;
120 case VIEWPORT:
121 printf("[ Viewport \n");
123 debug_indent_level++;
124 skin_debug_tree(current->children[0]);
125 debug_indent_level--;
127 printf("]");
128 break;
130 case TEXT:
131 text = current->data;
132 printf("[ Plain text on line %d : %s ]\n", current->line, text);
133 break;
135 case COMMENT:
136 text = current->data;
137 printf("[ Comment on line %d: ", current->line);
138 for(i = 0; i < (int)strlen(text); i++)
140 if(text[i] == '\n')
141 printf("\\n");
142 else
143 printf("%c", text[i]);
145 printf(" ]\n");
146 break;
148 case TAG:
149 printf("[ %s tag on line %d with %d arguments\n",
150 current->tag->name,
151 current->line, current->params_count);
152 debug_indent_level++;
153 skin_debug_params(current->params_count, current->params);
154 debug_indent_level--;
155 skin_debug_indent();
156 printf("]\n");
158 break;
160 case SUBLINES:
161 printf("[ Alternator on line %d with %d sublines \n", current->line,
162 current->children_count);
163 debug_indent_level++;
164 for(i = 0; i < current->children_count; i++)
166 skin_debug_tree(current->children[i]);
168 debug_indent_level--;
170 skin_debug_indent();
171 printf("]\n");
172 break;
174 case CONDITIONAL:
175 printf("[ Conditional tag on line %d with %d enumerations \n",
176 current->line, current->children_count - 1);
177 debug_indent_level++;
179 skin_debug_indent();
180 printf("[ Condition tag \n");
181 debug_indent_level++;
182 skin_debug_tree(current->children[0]);
183 debug_indent_level--;
184 skin_debug_indent();
185 printf("]\n");
187 for(i = 1; i < current->children_count; i++)
189 skin_debug_indent();
190 printf("[ Enumeration %d\n", i - 1);
191 debug_indent_level++;
192 skin_debug_tree(current->children[i]);
193 debug_indent_level--;
194 skin_debug_indent();
195 printf("]\n");
198 debug_indent_level--;
199 skin_debug_indent();
200 printf("]\n");
203 break;
205 case LINE:
206 printf("[ Logical line on line %d\n", current->line);
208 debug_indent_level++;
209 skin_debug_tree(current->children[0]);
210 debug_indent_level--;
212 skin_debug_indent();
213 printf("]\n");
214 break;
217 current = current->next;
222 void skin_debug_params(int count, struct skin_tag_parameter params[])
224 int i;
225 for(i = 0; i < count; i++)
228 skin_debug_indent();
229 switch(params[i].type)
231 case DEFAULT:
232 printf("[-]");
233 break;
235 case STRING:
236 printf("[%s]", params[i].data.text);
237 break;
239 case NUMERIC:
240 printf("[%d]", params[i].data.numeric);
241 break;
243 case CODE:
244 printf("[ WPS Code: \n");
245 debug_indent_level++;
246 skin_debug_tree(params[i].data.code);
247 debug_indent_level--;
248 skin_debug_indent();
249 printf("]");
250 break;
253 printf("\n");
258 void skin_debug_indent()
260 int i;
261 for(i = 0; i < debug_indent_level; i++)
262 printf(" ");
264 #endif