示例#1
0
 public HandlerAxis(IHandlerAxis handler, TraversingAxis axis)
 {
     if (handler == null)
     {
         throw new ArgumentNullException(nameof(handler));
     }
     _handler = handler;
     _axis    = axis;
 }
示例#2
0
        public virtual bool Handle(
            TraversingAxis axis, object callback,
            bool greedy, IHandler composer)
        {
            if (axis == TraversingAxis.Self)
            {
                return(base.HandleCallback(callback, greedy, composer));
            }

            var handled = false;

            Traverse(axis, node =>
            {
                handled = handled | (node == this
                        ? BaseHandle(callback, greedy, composer)
                        : ((TContext)node).Handle(
                                         TraversingAxis.Self, callback, greedy, composer));
                return(handled && !greedy);
            });
            return(handled);
        }
示例#3
0
        public static void Traverse(ITraversing node, TraversingAxis axis, Visitor visitor)
        {
            if (visitor == null)
            {
                return;
            }

            switch (axis)
            {
            case TraversingAxis.Self:
                node.TraverseSelf(visitor);
                break;

            case TraversingAxis.Root:
                node.TraverseRoot(visitor);
                break;

            case TraversingAxis.Child:
                node.TraverseChildren(visitor, false);
                break;

            case TraversingAxis.Sibling:
                node.TraverseSelfSiblingOrAncestor(visitor, false, false);
                break;

            case TraversingAxis.SelfOrChild:
                node.TraverseChildren(visitor, true);
                break;

            case TraversingAxis.SelfOrSibling:
                node.TraverseSelfSiblingOrAncestor(visitor, true, false);
                break;

            case TraversingAxis.Ancestor:
                node.TraverseAncestors(visitor, false);
                break;

            case TraversingAxis.SelfOrAncestor:
                node.TraverseAncestors(visitor, true);
                break;

            case TraversingAxis.Descendant:
                node.TraverseDescendants(visitor, false);
                break;

            case TraversingAxis.DescendantReverse:
                node.TraverseDescendantsReverse(visitor, false);
                break;

            case TraversingAxis.SelfOrDescendant:
                node.TraverseDescendants(visitor, true);
                break;

            case TraversingAxis.SelfOrDescendantReverse:
                node.TraverseDescendantsReverse(visitor, true);
                break;

            case TraversingAxis.SelfSiblingOrAncestor:
                node.TraverseSelfSiblingOrAncestor(visitor, true, true);
                break;
            }
        }
示例#4
0
 public static IHandlerAxis Axis(
     this IHandlerAxis handler, TraversingAxis axis)
 {
     return(handler == null ? null
          : new HandlerAxis(handler, axis));
 }
示例#5
0
 public bool Handle(
     TraversingAxis axis, object callback, bool greedy, IHandler composer)
 {
     return(_handler.Handle(axis, callback, greedy, composer));
 }
示例#6
0
 public void Traverse(TraversingAxis axis, Visitor visitor)
 {
     TraversingHelper.Traverse(this, axis, visitor);
 }