public HandlerAxis(IHandlerAxis handler, TraversingAxis axis) { if (handler == null) { throw new ArgumentNullException(nameof(handler)); } _handler = handler; _axis = axis; }
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); }
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; } }
public static IHandlerAxis Axis( this IHandlerAxis handler, TraversingAxis axis) { return(handler == null ? null : new HandlerAxis(handler, axis)); }
public bool Handle( TraversingAxis axis, object callback, bool greedy, IHandler composer) { return(_handler.Handle(axis, callback, greedy, composer)); }
public void Traverse(TraversingAxis axis, Visitor visitor) { TraversingHelper.Traverse(this, axis, visitor); }