Dependencies/Pixie/Pixie/Transforms/MarkupVisitor.cs
namespace WasmBox.Pixie.Transforms {
/// <summary>
/// A base class for markup node visitors.
/// </summary>
public abstract class MarkupVisitor {
/// <summary>
/// Tells if a node is of interest to this visitor.
/// Visitors always specify custom behavior for interesting
/// nodes, whereas uninteresting nodes are usually treated
/// the same: the visitor simply visits their children.
/// </summary>
/// <param name="node">A markup node.</param>
/// <returns>
/// <c>true</c> if the node is interesting; otherwise, <c>false</c>.
/// </returns>
protected abstract bool IsOfInterest(MarkupNode node);
/// <summary>
/// Visits a node that has been marked as interesting.
/// </summary>
/// <param name="node">A node to visit.</param>
/// <returns>A visited node.</returns>
protected abstract MarkupNode VisitInteresting(MarkupNode node);
/// <summary>
/// Visits a node that has not been marked as interesting.
/// </summary>
/// <param name="node">A node to visit.</param>
/// <returns>A visited node.</returns>
protected virtual MarkupNode VisitUninteresting(MarkupNode node) {
return node.Map(Visit);
}
/// <summary>
/// Visits a markup node.
/// </summary>
/// <param name="node">A node to visit.</param>
/// <returns>A visited node.</returns>
public MarkupNode Visit(MarkupNode node) {
if (IsOfInterest(node)) {
return VisitInteresting(node);
}
else {
return VisitUninteresting(node);
}
}
}
}