コード例 #1
0
ファイル: YamlVisitor.cs プロジェクト: dcvsling/Core.Lib
        public override void Visit(YamlScalarNode scalar)
        {
            switch (scalar.Anchor)
            {
            case "&":
                var visitor = new YamlConfigurationVisitor();
                scalar.Accept(visitor);
                _archors.Add(scalar.Value, visitor.Data);
                break;

            case "*":
                var archor = (Dictionary <string, object>)(_archors.ContainsKey(scalar.Value)
                        ? _archors[scalar.Value]
                        : throw new YamlException(scalar.Start, scalar.End, $"archor {scalar.Value} is not exist"));
                if (scalar.Tag != "<<")
                {
                    _path.Push(scalar.Tag);
                }
                archor.Each(x => Data.Add($"{CurrentPath}:{x.Key}", x.Value.ToString()));
                if (scalar.Tag != "<<")
                {
                    _path.Pop();
                }
                break;

            default:
                _buffer.Push(scalar.Value);
                break;
            }
        }
コード例 #2
0
        public override void Load(Stream stream)
        {
            var reader = new StreamReader(stream);
            var ys     = new YamlStream();

            ys.Load(new Parser(reader));
            var visitor = new YamlConfigurationVisitor(Data);

            visitor.Visit(ys);
            reader.Dispose();
        }