Example #1
0
        public object ReadYaml(IParser parser, Type type)
        {
            var env = new InternalEnvironmentVariables();

            parser.Expect <MappingStart>();

            do
            {
                var scalar = parser.Peek <Scalar>();

                if (scalar != null)
                {
                    if (scalar.Value == "matrix")
                    {
                        // discard "matrix" value itself
                        parser.Expect <Scalar>();

                        // discard SequenceStart
                        parser.Expect <SequenceStart>();

                        do
                        {
                            var matrixItemVariables = new List <InternalVariable>();

                            parser.Expect <MappingStart>();

                            do
                            {
                                matrixItemVariables.Add(deserializer.Deserialize <InternalVariable>(parser));
                            } while (!parser.Accept <MappingEnd>());

                            parser.Expect <MappingEnd>();

                            env.InternalMatrix.Add(matrixItemVariables.AsReadOnly());
                        } while (!parser.Accept <SequenceEnd>());

                        parser.Expect <SequenceEnd>();
                    }
                    else
                    {
                        var variable = deserializer.Deserialize <InternalVariable>(parser);
                        env.InternalCommonVariables.Add(variable);
                    }
                }
            } while (!parser.Accept <MappingEnd>());

            parser.Expect <MappingEnd>();

            return(env);
        }
        public object ReadYaml(IParser parser, Type type)
        {
            var env = new InternalEnvironmentVariables();

            parser.Consume <MappingStart>();

            do
            {
                parser.Accept <Scalar>(out var scalar);

                if (scalar != null)
                {
                    if (scalar.Value == "global")
                    {
                        // discard "global" value itself
                        parser.Consume <Scalar>();

                        // read global variables (common to all matrix items)
                        parser.Consume <MappingStart>();

                        do
                        {
                            env.InternalCommonVariables.Add(_deserializer.Deserialize <InternalVariable>(parser));
                        } while (!parser.Accept <MappingEnd>(out _));

                        parser.Consume <MappingEnd>();
                    }
                    else if (scalar.Value == "matrix")
                    {
                        // discard "matrix" value itself
                        parser.Consume <Scalar>();

                        // discard SequenceStart
                        parser.Consume <SequenceStart>();

                        do
                        {
                            var matrixItemVariables = new List <InternalVariable>();

                            parser.Consume <MappingStart>();

                            do
                            {
                                matrixItemVariables.Add(_deserializer.Deserialize <InternalVariable>(parser));
                            } while (!parser.Accept <MappingEnd>(out _));

                            parser.Consume <MappingEnd>();

                            env.InternalMatrix.Add(matrixItemVariables.AsReadOnly());
                        } while (!parser.Accept <SequenceEnd>(out _));

                        parser.Consume <SequenceEnd>();
                    }
                    else
                    {
                        var variable = _deserializer.Deserialize <InternalVariable>(parser);
                        env.InternalCommonVariables.Add(variable);
                    }
                }
            } while (!parser.Accept <MappingEnd>(out _));

            parser.Consume <MappingEnd>();

            return(env);
        }