]> git.localhorst.tv Git - l2e.git/commitdiff
added support for arrays of property lists
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Sun, 26 Aug 2012 19:54:48 +0000 (21:54 +0200)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Sun, 26 Aug 2012 19:54:48 +0000 (21:54 +0200)
src/loader/ParsedSource.cpp
src/loader/ParsedSource.h
src/loader/Parser.cpp

index 75d7efbc1bfa2dbc49ff404a89245dcb7fee2382..9d0f597e3d7c10ca0328586d8941f1f29ac48ff6 100644 (file)
@@ -98,7 +98,17 @@ Literal::Literal(const vector<Value *> &v)
 , i1(0), i2(0)
 , i3(0), i4(0)
 , b(false)
-, type(ARRAY) {
+, type(ARRAY_VALUES) {
+
+}
+
+Literal::Literal(const std::vector<PropertyList *> &pls)
+: props(0)
+, propertyLists(pls)
+, i1(0), i2(0)
+, i3(0), i4(0)
+, b(false)
+, type(ARRAY_PROPS) {
 
 }
 
index ebcc853ced570f7728b202f995cc993b8af53792..f78a49e7b66d402b11b46924ed2595d2c12ee366 100644 (file)
@@ -22,7 +22,8 @@ class Value;
 class Literal {
 
        enum Type {
-               ARRAY,
+               ARRAY_VALUES,
+               ARRAY_PROPS,
                BOOLEAN,
                COLOR,
                NUMBER,
@@ -33,6 +34,7 @@ class Literal {
 
 public:
        explicit Literal(const std::vector<Value *> &);
+       explicit Literal(const std::vector<PropertyList *> &);
        explicit Literal(bool);
        Literal(int r, int g, int b, int a = 255);
        Literal(const std::string &);
@@ -43,6 +45,7 @@ private:
        PropertyList *props;
        std::string str;
        std::vector<Value *> values;
+       std::vector<PropertyList *> propertyLists;
        int i1, i2, i3, i4;
        bool b;
        Type type;
index 39f0f876ef819c6f15ae27514c94e4497e50a9c0..68fb32674dcebcbae2464d6fc55c24c7d2ede687 100644 (file)
@@ -216,19 +216,34 @@ Literal *Parser::ParseArray() {
        Tokenizer::Token t(GetToken());
        AssertTokenType(t.type, Tokenizer::Token::BRACKET_OPEN);
 
-       vector<Value *> values;
-
-       while (t.type != Tokenizer::Token::ANGLE_BRACKET_CLOSE) {
-               Value *value(ParseValue());
-               values.push_back(value);
-
-               t = GetToken();
-               if (t.type != Tokenizer::Token::BRACKET_CLOSE && t.type != Tokenizer::Token::COMMA) {
-                       throw Error(file, tok.Line(), string("unexpected token ") + TokenTypeToString(t.type) + ", expected , or ]");
+       Tokenizer::Token probe(GetToken());
+       tok.Putback(probe);
+
+       if (probe.type == Tokenizer::Token::ANGLE_BRACKET_OPEN) {
+               vector<PropertyList *> values;
+               while (t.type != Tokenizer::Token::BRACKET_CLOSE) {
+                       PropertyList *value(ParsePropertyList());
+                       values.push_back(value);
+
+                       t = GetToken();
+                       if (t.type != Tokenizer::Token::BRACKET_CLOSE && t.type != Tokenizer::Token::COMMA) {
+                               throw Error(file, tok.Line(), string("unexpected token ") + TokenTypeToString(t.type) + ", expected , or ]");
+                       }
                }
+               return new Literal(values);
+       } else {
+               vector<Value *> values;
+               while (t.type != Tokenizer::Token::BRACKET_CLOSE) {
+                       Value *value(ParseValue());
+                       values.push_back(value);
+
+                       t = GetToken();
+                       if (t.type != Tokenizer::Token::BRACKET_CLOSE && t.type != Tokenizer::Token::COMMA) {
+                               throw Error(file, tok.Line(), string("unexpected token ") + TokenTypeToString(t.type) + ", expected , or ]");
+                       }
+               }
+               return new Literal(values);
        }
-
-       return new Literal(values);
 }
 
 Literal *Parser::ParseColor() {