nsresult
NS_NewXMLProcessingInstruction(nsIContent** aInstancePtrResult,
                               nsNodeInfoManager *aNodeInfoManager,
                               const nsAString& aTarget,
                               const nsAString& aData)
{
  NS_PRECONDITION(aNodeInfoManager, "Missing nodeinfo manager");

  if (aTarget.EqualsLiteral("xml-stylesheet")) {
    return NS_NewXMLStylesheetProcessingInstruction(aInstancePtrResult,
                                                    aNodeInfoManager, aData);
  }

  *aInstancePtrResult = nsnull;

  nsXMLProcessingInstruction *instance =
    new nsXMLProcessingInstruction(aNodeInfoManager, aTarget, aData);
  if (!instance) {
    return NS_ERROR_OUT_OF_MEMORY;
  }

  NS_ADDREF(*aInstancePtrResult = instance);

  return NS_OK;
}
nsresult
NS_NewXMLProcessingInstruction(nsIContent** aInstancePtrResult,
                               nsNodeInfoManager *aNodeInfoManager,
                               const nsAString& aTarget,
                               const nsAString& aData)
{
    NS_PRECONDITION(aNodeInfoManager, "Missing nodeinfo manager");

    nsCOMPtr<nsIAtom> target = do_GetAtom(aTarget);
    NS_ENSURE_TRUE(target, NS_ERROR_OUT_OF_MEMORY);

    if (target == nsGkAtoms::xml_stylesheet) {
        return NS_NewXMLStylesheetProcessingInstruction(aInstancePtrResult,
                aNodeInfoManager, aData);
    }

    *aInstancePtrResult = nsnull;

    nsCOMPtr<nsINodeInfo> ni;
    ni = aNodeInfoManager->GetNodeInfo(nsGkAtoms::processingInstructionTagName,
                                       nsnull, kNameSpaceID_None,
                                       nsIDOMNode::PROCESSING_INSTRUCTION_NODE,
                                       target);
    NS_ENSURE_TRUE(ni, NS_ERROR_OUT_OF_MEMORY);

    nsXMLProcessingInstruction *instance =
        new nsXMLProcessingInstruction(ni.forget(), aData);
    if (!instance) {
        return NS_ERROR_OUT_OF_MEMORY;
    }

    NS_ADDREF(*aInstancePtrResult = instance);

    return NS_OK;
}
nsresult
NS_NewXMLProcessingInstruction(nsIContent** aInstancePtrResult,
                               nsNodeInfoManager *aNodeInfoManager,
                               const nsAString& aTarget,
                               const nsAString& aData)
{
  NS_PRECONDITION(aNodeInfoManager, "Missing nodeinfo manager");

  if (aTarget.EqualsLiteral("xml-stylesheet")) {
    return NS_NewXMLStylesheetProcessingInstruction(aInstancePtrResult,
                                                    aNodeInfoManager, aData);
  }

  *aInstancePtrResult = nsnull;

  nsCOMPtr<nsINodeInfo> ni;
  ni = aNodeInfoManager->GetNodeInfo(nsGkAtoms::processingInstructionTagName,
                                     nsnull, kNameSpaceID_None);
  NS_ENSURE_TRUE(ni, NS_ERROR_OUT_OF_MEMORY);

  nsXMLProcessingInstruction *instance =
    new nsXMLProcessingInstruction(ni, aTarget, aData);
  if (!instance) {
    return NS_ERROR_OUT_OF_MEMORY;
  }

  NS_ADDREF(*aInstancePtrResult = instance);

  return NS_OK;
}