Exemple #1
0
        public static int TransformOn <T>(this IEnumerable <T> nodes,
                                          Func <T, bool> nodeFilter,
                                          Func <T, BaseNode> transform, BaseNode tree)
            where T : BaseNode
        {
            var selector = new DynamicVisitor();

            var result = 0;

            selector.OnVisit((node, visitor) =>
            {
                visitor.VisitChildren(node);
                if (node is T && nodeFilter((T)node))
                {
                    var transformed = transform((T)node);
                    if (transformed != node)
                    {
                        var parent = node.Parent;
                        parent.Replace(node, transformed);
                    }
                    result++;
                }
            });

            tree.Visit(selector);

            return(result);
        }
Exemple #2
0
 public NodeComparer(BaseNode reference)
 {
     this.reference = reference;
     Result         = false;
     visitor        = new DynamicVisitor();
     visitor.Common((n, v) => { });
 }
Exemple #3
0
        public static IEnumerable <BaseNode> From <T>(this IEnumerable <T> nodes,
                                                      Func <T, bool> nodeFilter, BaseNode tree) where T : BaseNode
        {
            var selector = new DynamicVisitor();
            var result   = new List <BaseNode>();

            selector.OnVisit((node, visitor) =>
            {
                if (node is T && nodeFilter((T)node))
                {
                    result.Add(node);
                }
                visitor.VisitChildren(node);
            });
            tree.Visit(selector);
            return(result);
        }
Exemple #4
0
        public List <BaseNode> From(BaseNode tree)
        {
            var result = new List <BaseNode>();

            var nodeSelector = new DynamicVisitor();

            nodeSelector.OnVisit((node, visitor) =>
            {
                if (FilterFunction == null || node is T && FilterFunction((T)node))
                {
                    result.Add(node);
                }
                visitor.VisitChildren(node);
            });

            tree.Visit(nodeSelector);

            return(result);
        }
Exemple #5
0
        public int On(BaseNode tree)
        {
            var result = 0;

            var nodeSelector = new DynamicVisitor();

            nodeSelector.OnVisit((node, visitor) =>
            {
                visitor.VisitChildren(node);
                if (FilterFunction == null || node is T && FilterFunction((T)node))
                {
                    var transformedNode = TransformFunction((T)node);
                    if (transformedNode != node)
                    {
                        node.Parent.Replace(node, transformedNode);
                    }
                    ++result;
                }
            });
            tree.Visit(nodeSelector);
            return(result);
        }