Theme Editor: Made Viewport the top level parse tree element, along with a bugfix...
[kugel-rb.git] / utils / themeeditor / skin_debug.c
blob06764f90535be24a61472f8cdd89a86635aad85d
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"
29 /* Global variables for debug output */
30 int debug_indent_level = 0;
31 extern int skin_line;
33 /* Debugging functions */
34 void skin_error(enum skin_errorcode error)
37 fprintf(stderr, "Error on line %d: ", skin_line);
39 switch(error)
41 case MEMORY_LIMIT_EXCEEDED:
42 fprintf(stderr, "Memory limit exceeded\n");
43 break;
44 case NEWLINE_EXPECTED:
45 fprintf(stderr, "Newline expected\n");
46 break;
47 case ILLEGAL_TAG:
48 fprintf(stderr, "Illegal tag\n");
49 break;
50 case ARGLIST_EXPECTED:
51 fprintf(stderr, "Argument list expected\n");
52 break;
53 case TOO_MANY_ARGS:
54 fprintf(stderr, "Too many arguments given\n");
55 break;
56 case DEFAULT_NOT_ALLOWED:
57 fprintf(stderr, "Argument can not be set to default\n");
58 break;
59 case UNEXPECTED_NEWLINE:
60 fprintf(stderr, "Unexpected newline\n");
61 break;
62 case INSUFFICIENT_ARGS:
63 fprintf(stderr, "Not enough arguments\n");
64 break;
65 case INT_EXPECTED:
66 fprintf(stderr, "Expected integer\n");
67 break;
68 case SEPERATOR_EXPECTED:
69 fprintf(stderr, "Expected argument seperator\n");
70 break;
71 case CLOSE_EXPECTED:
72 fprintf(stderr, "Expected list close\n");
73 break;
74 case MULTILINE_EXPECTED:
75 fprintf(stderr, "Expected subline seperator\n");
76 break;
81 void skin_debug_tree(struct skin_element* root)
83 int i;
85 struct skin_element* current = root;
87 while(current)
89 skin_debug_indent();
91 switch(current->type)
94 case VIEWPORT:
95 printf("[ Viewport \n");
97 debug_indent_level++;
98 skin_debug_tree(current->children[0]);
99 debug_indent_level--;
101 printf("]");
102 break;
104 case TEXT:
105 printf("[ Plain text on line %d : %s ]\n", current->line,
106 current->text);
107 break;
109 case NEWLINE:
110 printf("[ Newline on line %d ]\n", current->line);
111 break;
113 case COMMENT:
114 printf("[ Comment on line %d: ", current->line);
115 for(i = 0; i < (int)strlen(current->text); i++)
117 if(current->text[i] == '\n')
118 printf("\\n");
119 else
120 printf("%c", current->text[i]);
122 printf(" ]\n");
123 break;
125 case TAG:
126 printf("[ %s tag on line %d with %d arguments\n", current->name,
127 current->line, current->params_count);
128 debug_indent_level++;
129 skin_debug_params(current->params_count, current->params);
130 debug_indent_level--;
131 skin_debug_indent();
132 printf("]\n");
134 break;
136 case SUBLINES:
137 printf("[ Alternator on line %d with %d sublines \n", current->line,
138 current->children_count);
139 debug_indent_level++;
140 for(i = 0; i < current->children_count; i++)
142 skin_debug_tree(current->children[i]);
144 debug_indent_level--;
146 skin_debug_indent();
147 printf("]\n");
148 break;
150 case CONDITIONAL:
151 printf("[ Conditional tag on line %d with %d enumerations \n",
152 current->line, current->children_count - 1);
153 debug_indent_level++;
155 skin_debug_indent();
156 printf("[ Condition tag \n");
157 debug_indent_level++;
158 skin_debug_tree(current->children[0]);
159 debug_indent_level--;
160 skin_debug_indent();
161 printf("]\n");
163 for(i = 1; i < current->children_count; i++)
165 skin_debug_indent();
166 printf("[ Enumeration %d\n", i - 1);
167 debug_indent_level++;
168 skin_debug_tree(current->children[i]);
169 debug_indent_level--;
170 skin_debug_indent();
171 printf("]\n");
174 debug_indent_level--;
175 skin_debug_indent();
176 printf("]\n");
179 break;
181 case LINE:
182 printf("[ Logical line on line %d\n", current->line);
184 debug_indent_level++;
185 skin_debug_tree(current->children[0]);
186 debug_indent_level--;
188 skin_debug_indent();
189 printf("]\n");
190 break;
193 current = current->next;
198 void skin_debug_params(int count, struct skin_tag_parameter params[])
200 int i;
201 for(i = 0; i < count; i++)
204 skin_debug_indent();
205 switch(params[i].type)
207 case DEFAULT:
208 printf("[-]");
209 break;
211 case STRING:
212 printf("[%s]", params[i].data.text);
213 break;
215 case NUMERIC:
216 printf("[%d]", params[i].data.numeric);
217 break;
219 case CODE:
220 printf("[ WPS Code: \n");
221 debug_indent_level++;
222 skin_debug_tree(params[i].data.code);
223 debug_indent_level--;
224 skin_debug_indent();
225 printf("]");
226 break;
229 printf("\n");
234 void skin_debug_indent()
236 int i;
237 for(i = 0; i < debug_indent_level; i++)
238 printf(" ");