Adding the new WPS parser, code works but need to build the tag table

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26281 a1c6a512-1295-4272-9138-f99709370657
diff --git a/utils/themeeditor/skin_parser.h b/utils/themeeditor/skin_parser.h
new file mode 100644
index 0000000..a6fd1aa
--- /dev/null
+++ b/utils/themeeditor/skin_parser.h
@@ -0,0 +1,124 @@
+/***************************************************************************
+ *             __________               __   ___.
+ *   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.
+ *
+ ****************************************************************************/
+
+#ifndef GENERIC_PARSER_H
+#define GENERIC_PARSER_H
+
+#define SKIN_MAX_MEMORY 1048576
+
+/********************************************************************
+ ******  A global buffer will be used to store the parse tree *******
+ *******************************************************************/
+extern char skin_parse_tree[];
+
+/********************************************************************
+ ****** Data Structures *********************************************
+ *******************************************************************/
+
+/* Possible types of element in a WPS file */
+enum skin_element_type
+{
+    TEXT,
+    NEWLINE,
+    COMMENT,
+    TAG,
+    CONDITIONAL,
+    SUBLINES
+};
+
+enum skin_errorcode
+{
+    MEMORY_LIMIT_EXCEEDED,
+    NEWLINE_EXPECTED,
+    ILLEGAL_TAG,
+    ARGLIST_EXPECTED,
+    TOO_MANY_ARGS,
+    DEFAULT_NOT_ALLOWED,
+    UNEXPECTED_NEWLINE,
+    INSUFFICIENT_ARGS,
+    INT_EXPECTED,
+    SEPERATOR_EXPECTED,
+    CLOSE_EXPECTED,
+    MULTILINE_EXPECTED
+};
+
+/* Holds a tag parameter, either numeric or text */
+struct skin_tag_parameter
+{
+    enum
+    {
+        NUMERIC,
+        STRING,
+        CODE,
+        DEFAULT
+    } type;
+
+    union
+    {
+        int numeric;
+        char* text;
+        struct skin_element* code;
+    } data;
+            
+};
+
+/* Defines an element of a SKIN file */
+struct skin_element
+{
+    /* Defines what type of element it is */
+    enum skin_element_type type;
+
+    /* The line on which it's defined in the source file */
+    int line;
+
+    /* Text for comments and plaintext */
+    char* text;
+
+    /* The tag or conditional name */
+    char* name;
+
+    /* Pointer to and size of an array of parameters */
+    int params_count;
+    struct skin_tag_parameter* params;
+
+    /* Pointer to and size of an array of children */
+    int children_count;
+    struct skin_element** children;
+
+    /* Link to the next element */
+    struct skin_element* next;
+};
+
+/***********************************************************************
+ ***** Functions *******************************************************
+ **********************************************************************/
+
+/* Parses a WPS document and returns a list of skin_element
+   structures. */
+struct skin_element* skin_parse(char* document);
+
+/* Memory management functions */
+struct skin_element* skin_alloc_element();
+struct skin_element** skin_alloc_children(int count);
+struct skin_tag_parameter* skin_alloc_params(int count);
+char* skin_alloc_string(int length);
+
+#endif /* GENERIC_PARSER_H */