XULContentSinkImpl::OpenTag(const nsIParserNode& aNode, PRInt32 aNameSpaceID, nsIAtom* aTag)
XULContentSinkImpl::OpenTag(const nsIParserNode& aNode, nsINodeInfo *aNodeInfo)
XULContentSinkImpl::OpenTag(const nsIParserNode& aNode, PRInt32 aNameSpaceID, nsIAtom* aTag){    nsresult rv;    if ((aNameSpaceID == kNameSpaceID_HTML  ||          aNameSpaceID == kNameSpaceID_XUL) && (aTag == kScriptAtom)) {        // Oops, it's a script!        return OpenScript(aNode);    }    // Create the element    nsXULPrototypeElement* element;    rv = CreateElement(aNameSpaceID, aTag, &element);    if (NS_FAILED(rv)) {        nsCAutoString anodeC;        anodeC.AssignWithConversion(aNode.GetText());        PR_LOG(gLog, PR_LOG_ALWAYS,               ("xul: unable to create element '%s' at line %d",                NS_STATIC_CAST(const char*, anodeC),                aNode.GetSourceLineNumber()));        return rv;    }    // Link this element to its parent.    nsVoidArray* children;    rv = mContextStack.GetTopChildren(&children);    if (NS_FAILED(rv)) {        delete element;        return rv;    }    children->AppendElement(element);    // Push the element onto the context stack, so that child    // containers will hook up to us as their parent.    rv = mContextStack.Push(element, mState);    if (NS_FAILED(rv)) return rv;    // Add the attributes    rv = AddAttributes(aNode, element);    if (NS_FAILED(rv)) return rv;    mState = eInDocumentElement;    return NS_OK;}