use of org.jruby.runtime.builtin.IRubyObject in project nokogiri by sparklemotion.
the class XmlDocument method root_set.
@JRubyMethod(name = "root=")
public IRubyObject root_set(ThreadContext context, IRubyObject newRoot_) {
// should be nil.
if (newRoot_ instanceof RubyNil) {
getDocument().getDocumentElement().setUserData(NokogiriHelpers.VALID_ROOT_NODE, false, null);
return newRoot_;
}
XmlNode newRoot = asXmlNode(context, newRoot_);
IRubyObject root = root(context);
if (root.isNil()) {
Node newRootNode;
if (getDocument() == newRoot.getOwnerDocument()) {
newRootNode = newRoot.node;
} else {
// must copy otherwise newRoot may exist in two places
// with different owner document.
newRootNode = getDocument().importNode(newRoot.node, true);
}
add_child_node(context, getCachedNodeOrCreate(context.getRuntime(), newRootNode));
} else {
Node rootNode = asXmlNode(context, root).node;
((XmlNode) getCachedNodeOrCreate(context.getRuntime(), rootNode)).replace_node(context, newRoot);
}
return newRoot;
}
use of org.jruby.runtime.builtin.IRubyObject in project nokogiri by sparklemotion.
the class XmlDtd method newFromExternalSubset.
public static IRubyObject newFromExternalSubset(Ruby runtime, Document doc) {
Object dtdTree_ = doc.getUserData(XmlDocument.DTD_RAW_DOCUMENT);
if (dtdTree_ == null) {
return runtime.getNil();
}
Node dtdTree = (Node) dtdTree_;
Node dtd = getExternalSubset(dtdTree);
if (dtd == null) {
return runtime.getNil();
} else if (!dtd.hasChildNodes()) {
return runtime.getNil();
} else {
// Import the node into doc so it has the correct owner document.
dtd = doc.importNode(dtd, true);
XmlDtd xmlDtd = (XmlDtd) NokogiriService.XML_DTD_ALLOCATOR.allocate(runtime, getNokogiriClass(runtime, "Nokogiri::XML::DTD"));
xmlDtd.setNode(runtime, dtd);
return xmlDtd;
}
}
use of org.jruby.runtime.builtin.IRubyObject in project nokogiri by sparklemotion.
the class XmlEntityReference method accept.
@Override
public void accept(ThreadContext context, SaveContextVisitor visitor) {
visitor.enter(node);
Node child = node.getFirstChild();
while (child != null) {
IRubyObject nokoNode = getCachedNodeOrCreate(context.getRuntime(), child);
if (nokoNode instanceof XmlNode) {
XmlNode cur = (XmlNode) nokoNode;
cur.accept(context, visitor);
} else if (nokoNode instanceof XmlNamespace) {
XmlNamespace cur = (XmlNamespace) nokoNode;
cur.accept(context, visitor);
}
child = child.getNextSibling();
}
visitor.leave(node);
}
use of org.jruby.runtime.builtin.IRubyObject in project nokogiri by sparklemotion.
the class XmlEntityReference method init.
protected void init(ThreadContext context, IRubyObject[] args) {
if (args.length < 2) {
throw getRuntime().newArgumentError(args.length, 2);
}
IRubyObject doc = args[0];
IRubyObject name = args[1];
Document document = ((XmlNode) doc).getOwnerDocument();
// FIXME: disable error checking as a workaround for #719. this depends on the internals of Xerces.
CoreDocumentImpl internalDocument = (CoreDocumentImpl) document;
boolean oldErrorChecking = internalDocument.getErrorChecking();
internalDocument.setErrorChecking(false);
Node node = document.createEntityReference(rubyStringToString(name));
internalDocument.setErrorChecking(oldErrorChecking);
setNode(context, node);
}
use of org.jruby.runtime.builtin.IRubyObject in project nokogiri by sparklemotion.
the class XmlNamespace method createDefaultNamespace.
// owner should be an Attr node
public static XmlNamespace createDefaultNamespace(Ruby runtime, Node owner) {
String prefixValue = owner.getPrefix();
String hrefValue = owner.getNamespaceURI();
Document document = owner.getOwnerDocument();
// check namespace cache
XmlDocument xmlDocument = (XmlDocument) getCachedNodeOrCreate(runtime, document);
XmlNamespace xmlNamespace = xmlDocument.getNamespaceCache().get(prefixValue, hrefValue);
if (xmlNamespace != null)
return xmlNamespace;
// creating XmlNamespace instance
XmlNamespace namespace = (XmlNamespace) NokogiriService.XML_NAMESPACE_ALLOCATOR.allocate(runtime, getNokogiriClass(runtime, "Nokogiri::XML::Namespace"));
IRubyObject prefix = stringOrNil(runtime, prefixValue);
IRubyObject href = stringOrNil(runtime, hrefValue);
// initialize XmlNamespace object
namespace.init((Attr) owner, prefix, href, prefixValue, hrefValue, xmlDocument);
// updating namespace cache
xmlDocument.getNamespaceCache().put(namespace, owner);
return namespace;
}
Aggregations