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_debug_tree(struct skin_element
* root
)
100 struct skin_element
* current
= root
;
106 switch(current
->type
)
110 printf("[ Viewport \n");
112 debug_indent_level
++;
113 skin_debug_tree(current
->children
[0]);
114 debug_indent_level
--;
120 printf("[ Plain text on line %d : %s ]\n", current
->line
,
125 printf("[ Comment on line %d: ", current
->line
);
126 for(i
= 0; i
< (int)strlen(current
->text
); i
++)
128 if(current
->text
[i
] == '\n')
131 printf("%c", current
->text
[i
]);
137 printf("[ %s tag on line %d with %d arguments\n",
139 current
->line
, current
->params_count
);
140 debug_indent_level
++;
141 skin_debug_params(current
->params_count
, current
->params
);
142 debug_indent_level
--;
149 printf("[ Alternator on line %d with %d sublines \n", current
->line
,
150 current
->children_count
);
151 debug_indent_level
++;
152 for(i
= 0; i
< current
->children_count
; i
++)
154 skin_debug_tree(current
->children
[i
]);
156 debug_indent_level
--;
163 printf("[ Conditional tag on line %d with %d enumerations \n",
164 current
->line
, current
->children_count
- 1);
165 debug_indent_level
++;
168 printf("[ Condition tag \n");
169 debug_indent_level
++;
170 skin_debug_tree(current
->children
[0]);
171 debug_indent_level
--;
175 for(i
= 1; i
< current
->children_count
; i
++)
178 printf("[ Enumeration %d\n", i
- 1);
179 debug_indent_level
++;
180 skin_debug_tree(current
->children
[i
]);
181 debug_indent_level
--;
186 debug_indent_level
--;
194 printf("[ Logical line on line %d\n", current
->line
);
196 debug_indent_level
++;
197 skin_debug_tree(current
->children
[0]);
198 debug_indent_level
--;
205 current
= current
->next
;
210 void skin_debug_params(int count
, struct skin_tag_parameter params
[])
213 for(i
= 0; i
< count
; i
++)
217 switch(params
[i
].type
)
224 printf("[%s]", params
[i
].data
.text
);
228 printf("[%d]", params
[i
].data
.numeric
);
232 printf("[ WPS Code: \n");
233 debug_indent_level
++;
234 skin_debug_tree(params
[i
].data
.code
);
235 debug_indent_level
--;
246 void skin_debug_indent()
249 for(i
= 0; i
< debug_indent_level
; i
++)