package nokogiri.internals.c14n; import nokogiri.XmlNode; import nokogiri.internals.NokogiriHelpers; import org.jruby.runtime.Block; import org.jruby.runtime.ThreadContext; import org.jruby.runtime.builtin.IRubyObject; import org.w3c.dom.Node; public class CanonicalFilter { private final Block block; private final ThreadContext context; public CanonicalFilter(ThreadContext context, Block block) { this.context = context; this.block = block; } public boolean includeNodes(Node currentNode, Node parentNode) { if (block == null || !block.isGiven()) return true; IRubyObject current = NokogiriHelpers.getCachedNodeOrCreate(context.getRuntime(), currentNode); IRubyObject parent = NokogiriHelpers.getCachedNodeOrCreate(context.getRuntime(), parentNode); if (parent.isNil()) { IRubyObject doc = ((XmlNode) current).document(context); boolean returnValue = block.call(context, current, doc).isTrue(); block.call(context, doc, context.nil); return returnValue; } return block.call(context, current, parent).isTrue(); } }