1 /***************************************************************************
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
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 ****************************************************************************/
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;
34 /* Global error variables */
38 /* Debugging functions */
39 void skin_error(enum skin_errorcode error
)
42 error_line
= skin_line
;
46 case MEMORY_LIMIT_EXCEEDED
:
47 error_message
= "Memory limit exceeded";
49 case NEWLINE_EXPECTED
:
50 error_message
= "Newline expected";
53 error_message
= "Illegal tag";
55 case ARGLIST_EXPECTED
:
56 error_message
= "Argument list expected";
59 error_message
= "Too many arguments given";
61 case DEFAULT_NOT_ALLOWED
:
62 error_message
= "Argument can not be set to default";
64 case UNEXPECTED_NEWLINE
:
65 error_message
= "Unexpected newline";
67 case INSUFFICIENT_ARGS
:
68 error_message
= "Not enough arguments";
71 error_message
= "Expected integer";
73 case SEPERATOR_EXPECTED
:
74 error_message
= "Expected argument seperator";
77 error_message
= "Expected list close";
79 case MULTILINE_EXPECTED
:
80 error_message
= "Expected subline seperator";
91 char* skin_error_message()
96 void skin_clear_errors()
103 void skin_debug_tree(struct skin_element
* root
)
108 struct skin_element
* current
= root
;
114 switch(current
->type
)
117 printf("[ Unknown element.. error\n]");
121 printf("[ Viewport \n");
123 debug_indent_level
++;
124 skin_debug_tree(current
->children
[0]);
125 debug_indent_level
--;
131 text
= current
->data
;
132 printf("[ Plain text on line %d : %s ]\n", current
->line
, text
);
136 text
= current
->data
;
137 printf("[ Comment on line %d: ", current
->line
);
138 for(i
= 0; i
< (int)strlen(text
); i
++)
143 printf("%c", text
[i
]);
149 printf("[ %s tag on line %d with %d arguments\n",
151 current
->line
, current
->params_count
);
152 debug_indent_level
++;
153 skin_debug_params(current
->params_count
, current
->params
);
154 debug_indent_level
--;
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
--;
175 printf("[ Conditional tag on line %d with %d enumerations \n",
176 current
->line
, current
->children_count
- 1);
177 debug_indent_level
++;
180 printf("[ Condition tag \n");
181 debug_indent_level
++;
182 skin_debug_tree(current
->children
[0]);
183 debug_indent_level
--;
187 for(i
= 1; i
< current
->children_count
; i
++)
190 printf("[ Enumeration %d\n", i
- 1);
191 debug_indent_level
++;
192 skin_debug_tree(current
->children
[i
]);
193 debug_indent_level
--;
198 debug_indent_level
--;
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
--;
217 current
= current
->next
;
222 void skin_debug_params(int count
, struct skin_tag_parameter params
[])
225 for(i
= 0; i
< count
; i
++)
229 switch(params
[i
].type
)
236 printf("[%s]", params
[i
].data
.text
);
240 printf("[%d]", params
[i
].data
.numeric
);
244 printf("[ WPS Code: \n");
245 debug_indent_level
++;
246 skin_debug_tree(params
[i
].data
.code
);
247 debug_indent_level
--;
258 void skin_debug_indent()
261 for(i
= 0; i
< debug_indent_level
; i
++)