You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-23 15:16:17 +00:00
-work in progress resourceparser and .tscn parser. Still non-functional
-fixed theora so it can compile theoralib but not theora -fixed generation of windows icon in .rc, which didn't previously work in 32 bits
This commit is contained in:
100
core/variant_parser.h
Normal file
100
core/variant_parser.h
Normal file
@@ -0,0 +1,100 @@
|
||||
#ifndef VARIANT_PARSER_H
|
||||
#define VARIANT_PARSER_H
|
||||
|
||||
#include "variant.h"
|
||||
#include "os/file_access.h"
|
||||
#include "resource.h"
|
||||
|
||||
class VariantParser {
|
||||
public:
|
||||
|
||||
struct Stream {
|
||||
|
||||
virtual CharType get_char()=0;
|
||||
virtual bool is_utf8() const=0;
|
||||
virtual bool is_eof() const=0;
|
||||
|
||||
CharType saved;
|
||||
|
||||
Stream() { saved=0; }
|
||||
virtual ~Stream() {}
|
||||
};
|
||||
|
||||
struct StreamFile : public Stream {
|
||||
|
||||
FileAccess *f;
|
||||
|
||||
virtual CharType get_char();
|
||||
virtual bool is_utf8() const;
|
||||
virtual bool is_eof() const;
|
||||
|
||||
StreamFile() { f=NULL; }
|
||||
|
||||
};
|
||||
|
||||
typedef Error (*ParseResourceFunc)(void* p_self, Stream* p_stream,Ref<Resource>& r_res,int &line,String &r_err_str);
|
||||
|
||||
struct ResourceParser {
|
||||
|
||||
void *userdata;
|
||||
ParseResourceFunc func;
|
||||
|
||||
};
|
||||
|
||||
enum TokenType {
|
||||
TK_CURLY_BRACKET_OPEN,
|
||||
TK_CURLY_BRACKET_CLOSE,
|
||||
TK_BRACKET_OPEN,
|
||||
TK_BRACKET_CLOSE,
|
||||
TK_PARENTHESIS_OPEN,
|
||||
TK_PARENTHESIS_CLOSE,
|
||||
TK_IDENTIFIER,
|
||||
TK_STRING,
|
||||
TK_NUMBER,
|
||||
TK_COLON,
|
||||
TK_COMMA,
|
||||
TK_EQUAL,
|
||||
TK_EOF,
|
||||
TK_ERROR,
|
||||
TK_MAX
|
||||
};
|
||||
|
||||
enum Expecting {
|
||||
|
||||
EXPECT_OBJECT,
|
||||
EXPECT_OBJECT_KEY,
|
||||
EXPECT_COLON,
|
||||
EXPECT_OBJECT_VALUE,
|
||||
};
|
||||
|
||||
struct Token {
|
||||
|
||||
TokenType type;
|
||||
Variant value;
|
||||
};
|
||||
|
||||
struct Tag {
|
||||
|
||||
String name;
|
||||
Map<String,Variant> fields;
|
||||
};
|
||||
|
||||
private:
|
||||
static const char * tk_name[TK_MAX];
|
||||
|
||||
static Error _parse_construct(Stream *p_stream, Vector<float>& r_construct, int &line, String &r_err_str);
|
||||
static Error _parse_dictionary(Dictionary &object, Stream *p_stream, int &line, String &r_err_str,ResourceParser *p_res_parser=NULL);
|
||||
static Error _parse_array(Array &array, Stream *p_stream, int &line, String &r_err_str,ResourceParser *p_res_parser=NULL);
|
||||
static Error _parse_tag(Token& token,Stream *p_stream, int &line, String &r_err_str,Tag& r_tag);
|
||||
|
||||
public:
|
||||
|
||||
static Error parse_tag(Stream *p_stream, int &line, String &r_err_str,Tag& r_tag);
|
||||
static Error parse_tag_assign_eof(Stream *p_stream, int &line, String &r_err_str,Tag& r_tag,String &r_assign);
|
||||
|
||||
static Error parse_value(Token& token,Variant &value, Stream *p_stream, int &line, String &r_err_str,ResourceParser *p_res_parser=NULL);
|
||||
static Error get_token(Stream *p_stream,Token& r_token,int &line,String &r_err_str);
|
||||
static Error parse(Stream *p_stream, Variant &r_ret, String &r_err_str, int &r_err_line,ResourceParser *p_res_parser=NULL);
|
||||
};
|
||||
|
||||
#endif // VARIANT_PARSER_H
|
||||
Reference in New Issue
Block a user