nsresult txMozillaXMLOutput::startElement(nsIAtom* aPrefix, const nsSubstring& aLocalName, const PRInt32 aNsID) { PRInt32 nsId = aNsID; nsCOMPtr<nsIAtom> lname; if (mOutputFormat.mMethod == eHTMLOutput && aNsID == kNameSpaceID_None) { nsId = kNameSpaceID_XHTML; nsAutoString lnameStr; ToLowerCase(aLocalName, lnameStr); lname = do_GetAtom(lnameStr); } else { lname = do_GetAtom(aLocalName); } // No biggie if we lose the prefix due to OOM NS_ENSURE_TRUE(lname, NS_ERROR_OUT_OF_MEMORY); // Check that it's a valid name if (!nsContentUtils::IsValidNodeName(lname, aPrefix, nsId)) { // Try without prefix aPrefix = nsnull; if (!nsContentUtils::IsValidNodeName(lname, aPrefix, nsId)) { return NS_ERROR_XSLT_BAD_NODE_NAME; } } return startElementInternal(aPrefix, lname, nsId); }
nsresult txMozillaXMLOutput::startElement(nsIAtom* aPrefix, nsIAtom* aLocalName, nsIAtom* aLowercaseLocalName, const PRInt32 aNsID) { NS_PRECONDITION(aNsID != kNameSpaceID_None || !aPrefix, "Can't have prefix without namespace"); if (mOutputFormat.mMethod == eHTMLOutput && aNsID == kNameSpaceID_None) { nsCOMPtr<nsIAtom> owner; if (!aLowercaseLocalName) { owner = TX_ToLowerCaseAtom(aLocalName); NS_ENSURE_TRUE(owner, NS_ERROR_OUT_OF_MEMORY); aLowercaseLocalName = owner; } return startElementInternal(nsnull, aLowercaseLocalName, kNameSpaceID_XHTML); } return startElementInternal(aPrefix, aLocalName, aNsID); }
nsresult txStylesheetCompiler::startElement(PRInt32 aNamespaceID, nsIAtom* aLocalName, nsIAtom* aPrefix, txStylesheetAttr* aAttributes, PRInt32 aAttrCount) { if (NS_FAILED(mStatus)) { // ignore content after failure // XXX reevaluate once expat stops on failure return NS_OK; } nsresult rv = flushCharacters(); NS_ENSURE_SUCCESS(rv, rv); // look for new namespace mappings PRBool hasOwnNamespaceMap = PR_FALSE; PRInt32 i; for (i = 0; i < aAttrCount; ++i) { txStylesheetAttr* attr = aAttributes + i; if (attr->mNamespaceID == kNameSpaceID_XMLNS) { rv = ensureNewElementContext(); NS_ENSURE_SUCCESS(rv, rv); if (!hasOwnNamespaceMap) { mElementContext->mMappings = new txNamespaceMap(*mElementContext->mMappings); NS_ENSURE_TRUE(mElementContext->mMappings, NS_ERROR_OUT_OF_MEMORY); hasOwnNamespaceMap = PR_TRUE; } if (attr->mLocalName == nsGkAtoms::xmlns) { mElementContext->mMappings->mapNamespace(nsnull, attr->mValue); } else { mElementContext->mMappings-> mapNamespace(attr->mLocalName, attr->mValue); } } } return startElementInternal(aNamespaceID, aLocalName, aPrefix, aAttributes, aAttrCount); }
nsresult txStylesheetCompiler::startElement(const PRUnichar *aName, const PRUnichar **aAttrs, PRInt32 aAttrCount, PRInt32 aIDOffset) { if (NS_FAILED(mStatus)) { // ignore content after failure // XXX reevaluate once expat stops on failure return NS_OK; } nsresult rv = flushCharacters(); NS_ENSURE_SUCCESS(rv, rv); nsAutoArrayPtr<txStylesheetAttr> atts; if (aAttrCount > 0) { atts = new txStylesheetAttr[aAttrCount]; NS_ENSURE_TRUE(atts, NS_ERROR_OUT_OF_MEMORY); } PRBool hasOwnNamespaceMap = PR_FALSE; PRInt32 i; for (i = 0; i < aAttrCount; ++i) { rv = XMLUtils::splitExpatName(aAttrs[i * 2], getter_AddRefs(atts[i].mPrefix), getter_AddRefs(atts[i].mLocalName), &atts[i].mNamespaceID); NS_ENSURE_SUCCESS(rv, rv); atts[i].mValue.Append(aAttrs[i * 2 + 1]); nsCOMPtr<nsIAtom> prefixToBind; if (atts[i].mPrefix == nsGkAtoms::xmlns) { prefixToBind = atts[i].mLocalName; } else if (atts[i].mNamespaceID == kNameSpaceID_XMLNS) { prefixToBind = nsGkAtoms::_empty; } if (prefixToBind) { rv = ensureNewElementContext(); NS_ENSURE_SUCCESS(rv, rv); if (!hasOwnNamespaceMap) { mElementContext->mMappings = new txNamespaceMap(*mElementContext->mMappings); NS_ENSURE_TRUE(mElementContext->mMappings, NS_ERROR_OUT_OF_MEMORY); hasOwnNamespaceMap = PR_TRUE; } rv = mElementContext->mMappings-> mapNamespace(prefixToBind, atts[i].mValue); NS_ENSURE_SUCCESS(rv, rv); } } nsCOMPtr<nsIAtom> prefix, localname; PRInt32 namespaceID; rv = XMLUtils::splitExpatName(aName, getter_AddRefs(prefix), getter_AddRefs(localname), &namespaceID); NS_ENSURE_SUCCESS(rv, rv); PRInt32 idOffset = aIDOffset; if (idOffset > 0) { idOffset /= 2; } return startElementInternal(namespaceID, localname, prefix, atts, aAttrCount, idOffset); }