* FragmentHandler.
*/
protected void maybeTrimLeadingAndTrailingWhitespace(ThreadContext context,
IRubyObject parser) {
final String path = "Nokogiri::XML::FragmentHandler";
RubyObjectAdapter adapter = JavaEmbedUtils.newObjectAdapter();
RubyModule mod =
context.getRuntime().getClassFromPath(path);
IRubyObject handler = adapter.getInstanceVariable(parser, "@document");
if (handler == null || handler.isNil() || !adapter.isKindOf(handler, mod))
return;
IRubyObject stack = adapter.getInstanceVariable(handler, "@stack");
if (stack == null || stack.isNil())
return;
// doc is finally a DocumentFragment whose nodes we can check
IRubyObject doc = adapter.callMethod(stack, "first");
if (doc == null || doc.isNil())
return;
IRubyObject children;
for (;;) {
children = adapter.callMethod(doc, "children");
IRubyObject first = adapter.callMethod(children, "first");
if (isWhitespaceText(context, first))
adapter.callMethod(first, "unlink");
else
break;
}
for (;;) {
children = adapter.callMethod(doc, "children");
IRubyObject last = adapter.callMethod(children, "last");
if (isWhitespaceText(context, last))
adapter.callMethod(last, "unlink");
else
break;
}
// While we have a document, normalize it.