예제 #1
0
        private static List <V4f> ParseMFRotation(Tokenizer t)
        {
            List <V4f> result = new List <V4f>();

            Tokenizer.Token token = t.NextToken();
            if (token.IsBracketOpen)
            {
                token = t.NextToken();
                while (!token.IsBracketClose)
                {
                    float x = token.ToFloat();
                    float y = t.NextToken().ToFloat();
                    float z = t.NextToken().ToFloat();
                    float w = t.NextToken().ToFloat();
                    result.Add(new V4f(x, y, z, w));

                    token = t.NextToken();
                }
            }
            else
            {
                float x = token.ToFloat();
                float y = t.NextToken().ToFloat();
                float z = t.NextToken().ToFloat();
                float w = t.NextToken().ToFloat();
                result.Add(new V4f(x, y, z, w));
            }

            return(result);
        }
예제 #2
0
        private static SymMapBase ParseUnknownNode(Tokenizer t)
        {
            ExpectBraceOpen(t);
            int level = 1;

            StringBuilder sb = new StringBuilder("{");

            do
            {
                Tokenizer.Token token = t.NextToken();
                sb.Append(" " + token);

                if (token.IsBraceOpen)
                {
                    level++;
                }
                if (token.IsBraceClose)
                {
                    level--;
                }
            }while (level > 0);

            SymMapBase result = new SymMapBase();

            result["unknownNode"] = true;
            result["content"]     = sb.ToString();
            return(result);
        }
예제 #3
0
        private static SymMapBase ParseGenericNode(
            Tokenizer t,
            NodeParseInfo info
            )
        {
            SymMapBase result = new SymMapBase();

            ExpectBraceOpen(t);

            // populate fields with default values
            foreach (var kvp in info.FieldDefs)
            {
                if (kvp.Value.E1 == null)
                {
                    continue;
                }
                result[kvp.Key] = kvp.Value.E1;
            }

            Tokenizer.Token token = t.NextToken();
            while (!token.IsBraceClose)
            {
                string fieldName = token.ToString();
                result[fieldName] = info.FieldParser(fieldName)(t);

                token = t.NextToken();
                Thread.Sleep(0);
            }

            return(result);
        }
예제 #4
0
        private static List <C3f> ParseMFColor(Tokenizer t)
        {
            List <C3f> result = new List <C3f>();

            Tokenizer.Token token = t.NextToken();
            if (token.IsBracketOpen)
            {
                token = t.NextToken();
                while (!token.IsBracketClose)
                {
                    float r = token.ToFloat();
                    float g = t.NextToken().ToFloat();
                    float b = t.NextToken().ToFloat();
                    result.Add(new C3f(r, g, b));

                    token = t.NextToken();
                }
            }
            else
            {
                float r = token.ToFloat();
                float g = t.NextToken().ToFloat();
                float b = t.NextToken().ToFloat();
                result.Add(new C3f(r, g, b));
            }

            return(result);
        }
예제 #5
0
        private static void ExpectBraceClose(Tokenizer t)
        {
            Tokenizer.Token token = t.NextToken();
            if (token.IsBraceClose)
            {
                return;
            }

            throw new ParseException(
                      "Token '}' expected. Found " + token.ToString() + " instead!"
                      );
        }
예제 #6
0
        private static List <string> ParseMFString(Tokenizer t)
        {
            List <string> result = new List <string>();

            Tokenizer.Token token = t.NextToken();
            if (token.IsBracketOpen)
            {
                token = t.NextToken();
                while (!token.IsBracketClose)
                {
                    result.Add(token.GetCheckedUnquotedString());
                    token = t.NextToken();
                }
            }
            else
            {
                result.Add(token.GetCheckedUnquotedString());
            }

            return(result);
        }
예제 #7
0
        private static List <int> ParseMFInt32(Tokenizer t)
        {
            List <int> result = new List <int>();

            Tokenizer.Token token = t.NextToken();
            if (token.IsBracketOpen)
            {
                token = t.NextToken();
                while (!token.IsBracketClose)
                {
                    result.Add(token.ToInt32());
                    token = t.NextToken();
                }
            }
            else
            {
                result.Add(token.ToInt32());
            }

            return(result);
        }
예제 #8
0
        private static List <SymMapBase> ParseMFNode(Tokenizer t)
        {
            List <SymMapBase> result = new List <SymMapBase>();

            Tokenizer.Token token = t.NextToken();
            if (token.IsBracketOpen)
            {
                token = t.NextToken();
                while (!token.IsBracketClose)
                {
                    t.PushBack(token);
                    result.Add(ParseNode(t));
                    token = t.NextToken();
                }
            }
            else
            {
                t.PushBack(token);
                result.Add(ParseNode(t));
            }

            return(result);
        }
예제 #9
0
 private static string ParseSFString(Tokenizer t)
 {
     Tokenizer.Token token = t.NextToken();
     return(token.GetCheckedUnquotedString());
 }
예제 #10
0
 private static object ParseSFInt32(Tokenizer t)
 {
     Tokenizer.Token token = t.NextToken();
     return(token.ToInt32());
 }
예제 #11
0
 private static object ParseSFFloat(Tokenizer t)
 {
     Tokenizer.Token token = t.NextToken();
     return(token.ToFloat());
 }
예제 #12
0
 private static object ParseSFBool(Tokenizer t)
 {
     Tokenizer.Token token = t.NextToken();
     return(token.ToBool());
 }