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; }