manual: Play/Pause button for Clip keymap is 'Play'
[kugel-rb.git] / lib / skin_parser / skin_debug.c
blob4abe6252f0aba021c92604a06f4ee42594ac908b
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 DECIMAL_EXPECTED:
74 error_message = "Expected decimal";
75 break;
76 case SEPERATOR_EXPECTED:
77 error_message = "Expected argument seperator";
78 break;
79 case CLOSE_EXPECTED:
80 error_message = "Expected list close";
81 break;
82 case MULTILINE_EXPECTED:
83 error_message = "Expected subline seperator";
84 break;
89 int skin_error_line()
91 return error_line;
94 char* skin_error_message()
96 return error_message;
99 void skin_clear_errors()
101 error_line = 0;
102 error_message = NULL;
105 #ifndef ROCKBOX
106 void skin_debug_tree(struct skin_element* root)
108 int i;
109 char *text;
111 struct skin_element* current = root;
113 while(current)
115 skin_debug_indent();
117 switch(current->type)
119 case UNKNOWN:
120 printf("[ Unknown element.. error\n]");
121 break;
123 case VIEWPORT:
124 printf("[ Viewport \n");
126 debug_indent_level++;
127 skin_debug_tree(current->children[0]);
128 debug_indent_level--;
130 printf("]");
131 break;
133 case TEXT:
134 text = current->data;
135 printf("[ Plain text on line %d : %s ]\n", current->line, text);
136 break;
138 case COMMENT:
139 text = current->data;
140 printf("[ Comment on line %d: ", current->line);
141 for(i = 0; i < (int)strlen(text); i++)
143 if(text[i] == '\n')
144 printf("\\n");
145 else
146 printf("%c", text[i]);
148 printf(" ]\n");
149 break;
151 case TAG:
152 printf("[ %s tag on line %d with %d arguments\n",
153 current->tag->name,
154 current->line, current->params_count);
155 debug_indent_level++;
156 skin_debug_params(current->params_count, current->params);
157 debug_indent_level--;
158 skin_debug_indent();
159 printf("]\n");
161 break;
163 case LINE_ALTERNATOR:
164 printf("[ Alternator on line %d with %d sublines \n", current->line,
165 current->children_count);
166 debug_indent_level++;
167 for(i = 0; i < current->children_count; i++)
169 skin_debug_tree(current->children[i]);
171 debug_indent_level--;
173 skin_debug_indent();
174 printf("]\n");
175 break;
177 case CONDITIONAL:
178 printf("[ Conditional tag on line %d with %d enumerations \n",
179 current->line, current->children_count - 1);
180 debug_indent_level++;
182 skin_debug_indent();
183 printf("[ Condition tag \n");
184 debug_indent_level++;
185 skin_debug_tree(current->children[0]);
186 debug_indent_level--;
187 skin_debug_indent();
188 printf("]\n");
190 for(i = 1; i < current->children_count; i++)
192 skin_debug_indent();
193 printf("[ Enumeration %d\n", i - 1);
194 debug_indent_level++;
195 skin_debug_tree(current->children[i]);
196 debug_indent_level--;
197 skin_debug_indent();
198 printf("]\n");
201 debug_indent_level--;
202 skin_debug_indent();
203 printf("]\n");
206 break;
208 case LINE:
209 printf("[ Logical line on line %d\n", current->line);
211 debug_indent_level++;
212 skin_debug_tree(current->children[0]);
213 debug_indent_level--;
215 skin_debug_indent();
216 printf("]\n");
217 break;
220 current = current->next;
225 void skin_debug_params(int count, struct skin_tag_parameter params[])
227 int i;
228 for(i = 0; i < count; i++)
231 skin_debug_indent();
232 switch(params[i].type)
234 case DEFAULT:
235 printf("[-]");
236 break;
238 case STRING:
239 printf("[%s]", params[i].data.text);
240 break;
242 case INTEGER:
243 printf("[%d]", params[i].data.number);
244 break;
246 case DECIMAL:
247 printf("[%d.%d]", params[i].data.number/10,
248 params[i].data.number%10);
249 break;
251 case CODE:
252 printf("[ WPS Code: \n");
253 debug_indent_level++;
254 skin_debug_tree(params[i].data.code);
255 debug_indent_level--;
256 skin_debug_indent();
257 printf("]");
258 break;
261 printf("\n");
266 void skin_debug_indent()
268 int i;
269 for(i = 0; i < debug_indent_level; i++)
270 printf(" ");
272 #endif