예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        /// <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);
            }
        }
예제 #3
0
        /// <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);
            }
        }
예제 #4
0
        /// <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;
            }
        }
예제 #5
0
 /// <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);
     }
 }
예제 #6
0
        /// <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;
                }
            }
        }
예제 #7
0
 /// <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>());
 }
예제 #8
0
 /// <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>());
 }
예제 #9
0
 /// <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>());
 }