private IEnumerable <Tag> FindIgnoredTags(Queue <Tag> orderedTags) { var tagStack = new Stack <Tag>(); foreach (var tag in orderedTags) { if (parsers.GetParserFromType(tag.Type).TagIgnorable(tagStack.Select(t => t.Type))) { yield return(tag); } if (tag.IsOpening) { tagStack.Push(tag); } if (tag.IsOpening || tagStack.Count == 0) { continue; } var upperTag = tagStack.Peek(); if (upperTag.Type == tag.Type) { tagStack.Pop(); } } }