예제 #1
0
 public void MappingStart(string anchor, string tag)
 {
     var node = new YMapping(new YTag(tag));
     CurrentNode.Add(node);
     nodeStack.Push(node);
     SetAnchor(anchor, node);
 }
예제 #2
0
        public void MappingStart(string anchor, string tag)
        {
            var node = new YMapping(new YTag(tag));

            CurrentNode.Add(node);
            nodeStack.Push(node);
            SetAnchor(anchor, node);
        }
예제 #3
0
            private static void GenerateSubTypeEvents(IntPtr pNativeEmitter, YMapping node, IDictionary <YNode, string> aliases, string anchor, HashSet <YNode> visited)
            {
                const int IMPLICIT = 1;

                GenerateEvent(pNativeEmitter, x => CreateEventMappingStart((YamlEvent *)x, anchor, node.Tag.Value, IMPLICIT, YamlMappingStyle.YAML_ANY_MAPPING_STYLE));
                foreach (var pair in node.Mapping)
                {
                    GenerateNodeEvents(pNativeEmitter, pair.Key, aliases, visited);
                    GenerateNodeEvents(pNativeEmitter, pair.Value, aliases, visited);
                }
                GenerateEvent(pNativeEmitter, x => CreateEventMappingEnd((YamlEvent *)x));
            }
예제 #4
0
        private static void AliasTest()
        {
            var repeatNode = new YMapping(new Dictionary <YScalar, YNode> {
                { "f", new YSequence(new YScalar("g"), new YScalar("h")) },
                { "i", new YScalar("jk") }
            });
            var doc = new YDocument(
                new YMapping(new Dictionary <YScalar, YNode> {
                { "x", new YSequence(new YScalar("a"), new YScalar("b"), repeatNode) },
                { "y", repeatNode },
                { "z", repeatNode }
            })
                );
            string yaml = Yaml.Dump(doc);

            Console.WriteLine(yaml);
        }
예제 #5
0
        private YMapping GetMappingValueDependent(ITokenizer tokenizer)
        {
            switch (tokenizer.Current.Value.Kind)
            {
            case TokenKind.Indent when tokenizer.Current.Next?.Value.Kind == TokenKind.MappingKey:
            {
                var mappingNode = new YMapping(tokenizer.Current.Value.IndentLevel);
                var items       = new YKeyValueList();
                tokenizer.MoveNext();
                while (tokenizer.Current.Value.Kind == TokenKind.MappingKey)
                {
                    var keyValueNode = this.ParseMappingKey(tokenizer);
                    items.AddNode(keyValueNode);
                }

                while (tokenizer.Current.Value.Kind == TokenKind.Unindent)
                {
                    tokenizer.MoveNext();
                }

                mappingNode.Add(items.ToNodes());

                return(mappingNode);
            }

            case TokenKind.MappingValue:
            {
                var mappingNode = new YMapping(tokenizer.Current.Value.IndentLevel);
                tokenizer.MoveNext();
                var value = this.GetNodeValue(tokenizer);
                mappingNode.Add(value);

                return(mappingNode);
            }

            case TokenKind.Indent when tokenizer.Current.Next?.Next?.Value.Kind == TokenKind.MappingValue:
            {
                var mappingNode = new YMapping(tokenizer.Current.Value.IndentLevel);
                var items       = new YKeyValueList();
                tokenizer.MoveNext();

                // Добавлеяем элементы в список
                do
                {
                    var keyValueNode = this.ParseMappingKey(tokenizer);
                    items.AddNode(keyValueNode);
                } while (tokenizer.Current.Value.Kind != TokenKind.Unindent &&
                         tokenizer.Current.Value.Kind != TokenKind.Eof &&
                         tokenizer.Current.Value.Kind != TokenKind.Indent &&
                         tokenizer.Current.Value.IndentLevel >= mappingNode.IndentLevel);

                // Удаляем ненужные отступы
                while (tokenizer.Current.Value.Kind == TokenKind.Unindent)
                {
                    tokenizer.MoveNext();
                }

                // Проверяем уровень вложенности
                if (tokenizer.Current.Value.IndentLevel != 0 && tokenizer.Current.Value.Kind == TokenKind.Indent)
                {
                    while (tokenizer.Current.Value.IndentLevel == mappingNode.IndentLevel &&
                           tokenizer.Current.Value.Kind != TokenKind.Eof)
                    {
                        if (tokenizer.Current.Value.Kind == TokenKind.Indent)
                        {
                            tokenizer.MoveNext();
                        }

                        var keyValueNode = this.ParseMappingKey(tokenizer);
                        items.AddNode(keyValueNode);
                    }
                }

                mappingNode.Add(items.ToNodes());

                return(mappingNode);
            }

            case TokenKind.MappingBegin:
            {
                var mappingNode = new YMapping(tokenizer.Current.Value.IndentLevel);
                var items       = new YKeyValueList();
                tokenizer.MoveNext();
                do
                {
                    if (tokenizer.Current.Value.Kind == TokenKind.MappingEnd)
                    {
                        break;
                    }

                    var keyValueNode = this.ParseMappingKey(tokenizer);
                    items.AddNode(keyValueNode);
                } while (tokenizer.Current.Value.Kind == TokenKind.ItemDelimiter && tokenizer.MoveNext());

                if (tokenizer.Current.Value.Kind != TokenKind.MappingEnd)
                {
                    throw ParseException.UnexpectedToken(tokenizer, TokenKind.MappingEnd);
                }

                tokenizer.MoveNext();
                mappingNode.Add(items.ToNodes());

                return(mappingNode);
            }

            default:
                return(null);
            }
        }
예제 #6
0
 private static void GenerateSubTypeEvents(IntPtr pNativeEmitter, YMapping node, IDictionary<YNode, string> aliases, string anchor, HashSet<YNode> visited)
 {
     const int IMPLICIT = 1;
     GenerateEvent(pNativeEmitter, x => CreateEventMappingStart((YamlEvent*)x, anchor, node.Tag.Value, IMPLICIT, YamlMappingStyle.YAML_ANY_MAPPING_STYLE));
     foreach (var pair in node.Mapping)
     {
         GenerateNodeEvents(pNativeEmitter, pair.Key, aliases, visited);
         GenerateNodeEvents(pNativeEmitter, pair.Value, aliases, visited);
     }
     GenerateEvent(pNativeEmitter, x => CreateEventMappingEnd((YamlEvent*)x));
 }