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()
102 void skin_debug_tree(struct skin_element
* root
)
107 struct skin_element
* current
= root
;
113 switch(current
->type
)
116 printf("[ Unknown element.. error\n]");
120 printf("[ Viewport \n");
122 debug_indent_level
++;
123 skin_debug_tree(current
->children
[0]);
124 debug_indent_level
--;
130 text
= current
->data
;
131 printf("[ Plain text on line %d : %s ]\n", current
->line
, text
);
135 text
= current
->data
;
136 printf("[ Comment on line %d: ", current
->line
);
137 for(i
= 0; i
< (int)strlen(text
); i
++)
142 printf("%c", text
[i
]);
148 printf("[ %s tag on line %d with %d arguments\n",
150 current
->line
, current
->params_count
);
151 debug_indent_level
++;
152 skin_debug_params(current
->params_count
, current
->params
);
153 debug_indent_level
--;
160 printf("[ Alternator on line %d with %d sublines \n", current
->line
,
161 current
->children_count
);
162 debug_indent_level
++;
163 for(i
= 0; i
< current
->children_count
; i
++)
165 skin_debug_tree(current
->children
[i
]);
167 debug_indent_level
--;
174 printf("[ Conditional tag on line %d with %d enumerations \n",
175 current
->line
, current
->children_count
- 1);
176 debug_indent_level
++;
179 printf("[ Condition tag \n");
180 debug_indent_level
++;
181 skin_debug_tree(current
->children
[0]);
182 debug_indent_level
--;
186 for(i
= 1; i
< current
->children_count
; i
++)
189 printf("[ Enumeration %d\n", i
- 1);
190 debug_indent_level
++;
191 skin_debug_tree(current
->children
[i
]);
192 debug_indent_level
--;
197 debug_indent_level
--;
205 printf("[ Logical line on line %d\n", current
->line
);
207 debug_indent_level
++;
208 skin_debug_tree(current
->children
[0]);
209 debug_indent_level
--;
216 current
= current
->next
;
221 void skin_debug_params(int count
, struct skin_tag_parameter params
[])
224 for(i
= 0; i
< count
; i
++)
228 switch(params
[i
].type
)
235 printf("[%s]", params
[i
].data
.text
);
239 printf("[%d]", params
[i
].data
.numeric
);
243 printf("[ WPS Code: \n");
244 debug_indent_level
++;
245 skin_debug_tree(params
[i
].data
.code
);
246 debug_indent_level
--;
257 void skin_debug_indent()
260 for(i
= 0; i
< debug_indent_level
; i
++)