/// <summary> /// Returns a collection containing this element and all ancestor elements. /// </summary> public static IEnumerable <Chameleon.Parsing.ASTNode> AncestorsAndSelf(this Chameleon.Parsing.ASTNode item) { yield return(item); foreach (var ancestor in item.Ancestors()) { yield return(ancestor); } }
/// <summary> /// Returns a collection of child elements. /// </summary> public static IEnumerable <Chameleon.Parsing.ASTNode> Elements(this Chameleon.Parsing.ASTNode item) { ILinqTree <Chameleon.Parsing.ASTNode> adapter = new Chameleon.Parsing.ASTNodeTreeAdapter(item); foreach (var child in adapter.Children()) { yield return(child); } }
/// <summary> /// Returns a collection containing this element and all descendant elements. /// </summary> public static IEnumerable <Chameleon.Parsing.ASTNode> DescendantsAndSelf(this Chameleon.Parsing.ASTNode item) { yield return(item); foreach (var child in item.Descendants()) { yield return(child); } }
/// <summary> /// Returns a collection of ancestor elements. /// </summary> public static IEnumerable <Chameleon.Parsing.ASTNode> Ancestors(this Chameleon.Parsing.ASTNode item) { ILinqTree <Chameleon.Parsing.ASTNode> adapter = new Chameleon.Parsing.ASTNodeTreeAdapter(item); var parent = adapter.Parent; while (parent != null) { yield return(parent); adapter = new Chameleon.Parsing.ASTNodeTreeAdapter(parent); parent = adapter.Parent; } }
/// <summary> /// Returns a collection of the sibling elements before this node, in document order. /// </summary> public static IEnumerable <Chameleon.Parsing.ASTNode> ElementsBeforeSelf(this Chameleon.Parsing.ASTNode item) { if (item.Ancestors().FirstOrDefault() == null) { yield break; } foreach (var child in item.Ancestors().First().Elements()) { if (child.Equals(item)) { break; } yield return(child); } }
/// <summary> /// Returns a collection of the elements after this node, in document order. /// </summary> public static IEnumerable <Chameleon.Parsing.ASTNode> ElementsAfterSelf(this Chameleon.Parsing.ASTNode item) { if (item.Ancestors().FirstOrDefault() == null) { yield break; } bool afterSelf = false; foreach (var child in item.Ancestors().First().Elements()) { if (afterSelf) { yield return(child); } if (child.Equals(item)) { afterSelf = true; } } }
/// <summary> /// Returns a collection containing this element and all child elements. /// which match the given type. /// </summary> public static IEnumerable <Chameleon.Parsing.ASTNode> ElementsAndSelf <T>(this Chameleon.Parsing.ASTNode item) { return(item.ElementsAndSelf().Where(i => i is T).Cast <Chameleon.Parsing.ASTNode>()); }
/// <summary> /// Returns a collection of ancestor elements which match the given type. /// </summary> public static IEnumerable <Chameleon.Parsing.ASTNode> Ancestors <T>(this Chameleon.Parsing.ASTNode item) { return(item.Ancestors().Where(i => i is T).Cast <Chameleon.Parsing.ASTNode>()); }
/// <summary> /// Returns a collection of descendant elements which match the given type. /// </summary> public static IEnumerable <Chameleon.Parsing.ASTNode> Descendants <T>(this Chameleon.Parsing.ASTNode item) { return(item.Descendants().Where(i => i is T).Cast <Chameleon.Parsing.ASTNode>()); }