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"
29 /* Global variables for debug output */
30 int debug_indent_level
= 0;
33 /* Debugging functions */
34 void skin_error(enum skin_errorcode error
)
37 fprintf(stderr
, "Error on line %d: ", skin_line
);
41 case MEMORY_LIMIT_EXCEEDED
:
42 fprintf(stderr
, "Memory limit exceeded\n");
44 case NEWLINE_EXPECTED
:
45 fprintf(stderr
, "Newline expected\n");
48 fprintf(stderr
, "Illegal tag\n");
50 case ARGLIST_EXPECTED
:
51 fprintf(stderr
, "Argument list expected\n");
54 fprintf(stderr
, "Too many arguments given\n");
56 case DEFAULT_NOT_ALLOWED
:
57 fprintf(stderr
, "Argument can not be set to default\n");
59 case UNEXPECTED_NEWLINE
:
60 fprintf(stderr
, "Unexpected newline\n");
62 case INSUFFICIENT_ARGS
:
63 fprintf(stderr
, "Not enough arguments\n");
66 fprintf(stderr
, "Expected integer\n");
68 case SEPERATOR_EXPECTED
:
69 fprintf(stderr
, "Expected argument seperator\n");
72 fprintf(stderr
, "Expected list close\n");
74 case MULTILINE_EXPECTED
:
75 fprintf(stderr
, "Expected subline seperator\n");
81 void skin_debug_tree(struct skin_element
* root
)
85 struct skin_element
* current
= root
;
95 printf("[ Viewport \n");
98 skin_debug_tree(current
->children
[0]);
105 printf("[ Plain text on line %d : %s ]\n", current
->line
,
110 printf("[ Newline on line %d ]\n", current
->line
);
114 printf("[ Comment on line %d: ", current
->line
);
115 for(i
= 0; i
< (int)strlen(current
->text
); i
++)
117 if(current
->text
[i
] == '\n')
120 printf("%c", current
->text
[i
]);
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
--;
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
--;
151 printf("[ Conditional tag on line %d with %d enumerations \n",
152 current
->line
, current
->children_count
- 1);
153 debug_indent_level
++;
156 printf("[ Condition tag \n");
157 debug_indent_level
++;
158 skin_debug_tree(current
->children
[0]);
159 debug_indent_level
--;
163 for(i
= 1; i
< current
->children_count
; i
++)
166 printf("[ Enumeration %d\n", i
- 1);
167 debug_indent_level
++;
168 skin_debug_tree(current
->children
[i
]);
169 debug_indent_level
--;
174 debug_indent_level
--;
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
--;
193 current
= current
->next
;
198 void skin_debug_params(int count
, struct skin_tag_parameter params
[])
201 for(i
= 0; i
< count
; i
++)
205 switch(params
[i
].type
)
212 printf("[%s]", params
[i
].data
.text
);
216 printf("[%d]", params
[i
].data
.numeric
);
220 printf("[ WPS Code: \n");
221 debug_indent_level
++;
222 skin_debug_tree(params
[i
].data
.code
);
223 debug_indent_level
--;
234 void skin_debug_indent()
237 for(i
= 0; i
< debug_indent_level
; i
++)