Beispiel #1
0
        protected virtual ITextNode Parse([NotNull] Tokenizer tokenizer)
        {
            if (tokenizer.Token == null)
            {
                return(null);
            }

            var attributes = new List <ITextNode>();
            var childNodes = new List <ITextNode>();
            var keyToken   = tokenizer.Token;
            var keyIndent  = tokenizer.Token.Indent;

            tokenizer.Match();

            while (tokenizer.Token != null && tokenizer.Token.Indent > keyIndent)
            {
                if (tokenizer.Token.IsNested)
                {
                    var childNode = Parse(tokenizer);
                    childNodes.AddIfNotNull(childNode);
                    continue;
                }

                var attribute = new YamlTextNode(this, tokenizer.Token.KeyTextSpan, tokenizer.Token.Key, tokenizer.Token.Value);
                attributes.Add(attribute);
                tokenizer.Match();
            }

            return(new YamlTextNode(this, keyToken.KeyTextSpan, keyToken.Key, keyToken.Value, attributes, childNodes));
        }
        protected ITextNode Parse([NotNull] Tokenizer tokenizer, [CanBeNull] YamlTextNode parentTreeNode)
        {
            if (tokenizer.Token == null)
            {
                return null;
            }

            var textNode = new YamlTextNode(this, tokenizer.Token.KeyTextSpan, tokenizer.Token.Key, tokenizer.Token.Value);

            var attributes = (ICollection<ITextNode>)textNode.Attributes;
            var childNodes = (ICollection<ITextNode>)textNode.ChildNodes;

            var startIndent = tokenizer.Token.Indent;

            tokenizer.Match();

            while (tokenizer.Token != null && tokenizer.Token.Indent > startIndent)
            {
                if (tokenizer.Token.IsNested)
                {
                    var childNode = Parse(tokenizer, textNode);
                    if (childNode != null)
                    {
                        childNodes.Add(childNode);
                    }

                    continue;
                }

                var attribute = new YamlTextNode(this, tokenizer.Token.KeyTextSpan, tokenizer.Token.Key, tokenizer.Token.Value);
                attributes.Add(attribute);
                tokenizer.Match();
            }

            return textNode;
        }