diff options
| author | Robert Bieber <robby@bieberphoto.com> | 2010-06-17 05:37:01 +0000 |
|---|---|---|
| committer | Robert Bieber <robby@bieberphoto.com> | 2010-06-17 05:37:01 +0000 |
| commit | ca564287ee3f48945d45c7d92be7a83452f53745 (patch) | |
| tree | d6e502bb604f925240a742b3bac2c813a98c447b /utils/themeeditor/parser/skin_debug.c | |
| parent | ba07b2055c7eb8f2add96f55cb52b40b9ccb3d63 (diff) | |
| download | rockbox-ca564287ee3f48945d45c7d92be7a83452f53745.zip rockbox-ca564287ee3f48945d45c7d92be7a83452f53745.tar.gz rockbox-ca564287ee3f48945d45c7d92be7a83452f53745.tar.bz2 rockbox-ca564287ee3f48945d45c7d92be7a83452f53745.tar.xz | |
Theme Editor: Moved source files into subdirectories
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26876 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'utils/themeeditor/parser/skin_debug.c')
| -rw-r--r-- | utils/themeeditor/parser/skin_debug.c | 262 |
1 files changed, 262 insertions, 0 deletions
diff --git a/utils/themeeditor/parser/skin_debug.c b/utils/themeeditor/parser/skin_debug.c new file mode 100644 index 0000000..549f7b9 --- /dev/null +++ b/utils/themeeditor/parser/skin_debug.c @@ -0,0 +1,262 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2010 Robert Bieber + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "skin_parser.h" +#include "skin_debug.h" +#include "tag_table.h" + +/* Global variables for debug output */ +int debug_indent_level = 0; +extern int skin_line; + +/* Global error variables */ +int error_line; +char* error_message; + +/* Debugging functions */ +void skin_error(enum skin_errorcode error) +{ + + error_line = skin_line; + + switch(error) + { + case MEMORY_LIMIT_EXCEEDED: + error_message = "Memory limit exceeded"; + break; + case NEWLINE_EXPECTED: + error_message = "Newline expected"; + break; + case ILLEGAL_TAG: + error_message = "Illegal tag"; + break; + case ARGLIST_EXPECTED: + error_message = "Argument list expected"; + break; + case TOO_MANY_ARGS: + error_message = "Too many arguments given"; + break; + case DEFAULT_NOT_ALLOWED: + error_message = "Argument can not be set to default"; + break; + case UNEXPECTED_NEWLINE: + error_message = "Unexpected newline"; + break; + case INSUFFICIENT_ARGS: + error_message = "Not enough arguments"; + break; + case INT_EXPECTED: + error_message = "Expected integer"; + break; + case SEPERATOR_EXPECTED: + error_message = "Expected argument seperator"; + break; + case CLOSE_EXPECTED: + error_message = "Expected list close"; + break; + case MULTILINE_EXPECTED: + error_message = "Expected subline seperator"; + break; + }; + +} + +int skin_error_line() +{ + return error_line; +} + +char* skin_error_message() +{ + return error_message; +} + +void skin_clear_errors() +{ + error_line = 0; + error_message = NULL; +} + +void skin_debug_tree(struct skin_element* root) +{ + int i; + char *text; + + struct skin_element* current = root; + + while(current) + { + skin_debug_indent(); + + switch(current->type) + { + case UNKNOWN: + printf("[ Unknown element.. error\n]"); + break; + + case VIEWPORT: + printf("[ Viewport \n"); + + debug_indent_level++; + skin_debug_tree(current->children[0]); + debug_indent_level--; + + printf("]"); + break; + + case TEXT: + text = current->data; + printf("[ Plain text on line %d : %s ]\n", current->line, text); + break; + + case COMMENT: + text = current->data; + printf("[ Comment on line %d: ", current->line); + for(i = 0; i < (int)strlen(text); i++) + { + if(text[i] == '\n') + printf("\\n"); + else + printf("%c", text[i]); + } + printf(" ]\n"); + break; + + case TAG: + printf("[ %s tag on line %d with %d arguments\n", + current->tag->name, + current->line, current->params_count); + debug_indent_level++; + skin_debug_params(current->params_count, current->params); + debug_indent_level--; + skin_debug_indent(); + printf("]\n"); + + break; + + case SUBLINES: + printf("[ Alternator on line %d with %d sublines \n", current->line, + current->children_count); + debug_indent_level++; + for(i = 0; i < current->children_count; i++) + { + skin_debug_tree(current->children[i]); + } + debug_indent_level--; + + skin_debug_indent(); + printf("]\n"); + break; + + case CONDITIONAL: + printf("[ Conditional tag on line %d with %d enumerations \n", + current->line, current->children_count - 1); + debug_indent_level++; + + skin_debug_indent(); + printf("[ Condition tag \n"); + debug_indent_level++; + skin_debug_tree(current->children[0]); + debug_indent_level--; + skin_debug_indent(); + printf("]\n"); + + for(i = 1; i < current->children_count; i++) + { + skin_debug_indent(); + printf("[ Enumeration %d\n", i - 1); + debug_indent_level++; + skin_debug_tree(current->children[i]); + debug_indent_level--; + skin_debug_indent(); + printf("]\n"); + } + + debug_indent_level--; + skin_debug_indent(); + printf("]\n"); + + + break; + + case LINE: + printf("[ Logical line on line %d\n", current->line); + + debug_indent_level++; + skin_debug_tree(current->children[0]); + debug_indent_level--; + + skin_debug_indent(); + printf("]\n"); + break; + } + + current = current->next; + } + +} + +void skin_debug_params(int count, struct skin_tag_parameter params[]) +{ + int i; + for(i = 0; i < count; i++) + { + + skin_debug_indent(); + switch(params[i].type) + { + case DEFAULT: + printf("[-]"); + break; + + case STRING: + printf("[%s]", params[i].data.text); + break; + + case NUMERIC: + printf("[%d]", params[i].data.numeric); + break; + + case CODE: + printf("[ WPS Code: \n"); + debug_indent_level++; + skin_debug_tree(params[i].data.code); + debug_indent_level--; + skin_debug_indent(); + printf("]"); + break; + } + + printf("\n"); + + } +} + +void skin_debug_indent() +{ + int i; + for(i = 0; i < debug_indent_level; i++) + printf(" "); +} |