Pass the original element into nsXMLContentSerializer::CheckElementEnd.
parent
093f9b70bb
commit
55b4a28983
|
@ -82,7 +82,9 @@ protected:
|
|||
nsAString& aStr,
|
||||
bool aDontSerializeRoot,
|
||||
uint32_t aMaxLength = 0);
|
||||
nsresult SerializeNodeEnd(nsINode* aNode, nsAString& aStr);
|
||||
nsresult SerializeNodeEnd(nsINode* aOriginalNode,
|
||||
nsAString& aStr,
|
||||
nsINode* aFixupNode = nullptr);
|
||||
// This serializes the content of aNode.
|
||||
nsresult SerializeToStringIterative(nsINode* aNode,
|
||||
nsAString& aStr);
|
||||
|
@ -405,14 +407,37 @@ nsDocumentEncoder::SerializeNodeStart(nsINode* aNode,
|
|||
}
|
||||
|
||||
nsresult
|
||||
nsDocumentEncoder::SerializeNodeEnd(nsINode* aNode,
|
||||
nsAString& aStr)
|
||||
nsDocumentEncoder::SerializeNodeEnd(nsINode* aOriginalNode,
|
||||
nsAString& aStr,
|
||||
nsINode* aFixupNode)
|
||||
{
|
||||
if (!IsVisibleNode(aNode))
|
||||
if (!IsVisibleNode(aOriginalNode))
|
||||
return NS_OK;
|
||||
|
||||
if (aNode->IsElement()) {
|
||||
mSerializer->AppendElementEnd(aNode->AsElement(), aStr);
|
||||
nsINode* node = nullptr;
|
||||
nsCOMPtr<nsINode> fixedNodeKungfuDeathGrip;
|
||||
|
||||
// Caller didn't do fixup, so we'll do it ourselves
|
||||
if (!aFixupNode) {
|
||||
aFixupNode = aOriginalNode;
|
||||
if (mNodeFixup) {
|
||||
bool dummy;
|
||||
nsCOMPtr<nsIDOMNode> domNodeIn = do_QueryInterface(aOriginalNode);
|
||||
nsCOMPtr<nsIDOMNode> domNodeOut;
|
||||
mNodeFixup->FixupNode(domNodeIn, &dummy, getter_AddRefs(domNodeOut));
|
||||
fixedNodeKungfuDeathGrip = do_QueryInterface(domNodeOut);
|
||||
node = fixedNodeKungfuDeathGrip;
|
||||
}
|
||||
}
|
||||
|
||||
// Fall back to original node if needed.
|
||||
if (!node)
|
||||
node = aOriginalNode;
|
||||
|
||||
if (node->IsElement()) {
|
||||
mSerializer->AppendElementEnd(node->AsElement(),
|
||||
aOriginalNode->AsElement(),
|
||||
aStr);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -481,7 +506,7 @@ nsDocumentEncoder::SerializeToStringRecursive(nsINode* aNode,
|
|||
}
|
||||
|
||||
if (!aDontSerializeRoot) {
|
||||
rv = SerializeNodeEnd(maybeFixedNode, aStr);
|
||||
rv = SerializeNodeEnd(aNode, aStr, maybeFixedNode);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
|
|
|
@ -301,6 +301,7 @@ nsHTMLContentSerializer::AppendElementStart(Element* aElement,
|
|||
|
||||
NS_IMETHODIMP
|
||||
nsHTMLContentSerializer::AppendElementEnd(Element* aElement,
|
||||
Element* aOriginalElement /* unused */,
|
||||
nsAString& aStr)
|
||||
{
|
||||
NS_ENSURE_ARG(aElement);
|
||||
|
|
|
@ -31,6 +31,7 @@ class nsHTMLContentSerializer final : public nsXHTMLContentSerializer {
|
|||
nsAString& aStr) override;
|
||||
|
||||
NS_IMETHOD AppendElementEnd(mozilla::dom::Element* aElement,
|
||||
mozilla::dom::Element* aOriginalElement,
|
||||
nsAString& aStr) override;
|
||||
|
||||
NS_IMETHOD AppendDocumentStart(nsIDocument *aDocument,
|
||||
|
|
|
@ -55,6 +55,7 @@ class nsIContentSerializer : public nsISupports {
|
|||
nsAString& aStr) = 0;
|
||||
|
||||
NS_IMETHOD AppendElementEnd(mozilla::dom::Element* aElement,
|
||||
mozilla::dom::Element* aOriginalElement,
|
||||
nsAString& aStr) = 0;
|
||||
|
||||
NS_IMETHOD Flush(nsAString& aStr) = 0;
|
||||
|
|
|
@ -390,6 +390,7 @@ nsPlainTextSerializer::AppendElementStart(Element* aElement,
|
|||
|
||||
NS_IMETHODIMP
|
||||
nsPlainTextSerializer::AppendElementEnd(Element* aElement,
|
||||
Element* aOriginalElement /* unused */,
|
||||
nsAString& aStr)
|
||||
{
|
||||
NS_ENSURE_ARG(aElement);
|
||||
|
|
|
@ -61,6 +61,7 @@ public:
|
|||
mozilla::dom::Element* aOriginalElement,
|
||||
nsAString& aStr) override;
|
||||
NS_IMETHOD AppendElementEnd(mozilla::dom::Element* aElement,
|
||||
mozilla::dom::Element* aOriginalElement,
|
||||
nsAString& aStr) override;
|
||||
NS_IMETHOD Flush(nsAString& aStr) override;
|
||||
|
||||
|
|
|
@ -514,6 +514,7 @@ nsXHTMLContentSerializer::CheckElementStart(nsIContent * aContent,
|
|||
|
||||
bool
|
||||
nsXHTMLContentSerializer::CheckElementEnd(mozilla::dom::Element* aElement,
|
||||
mozilla::dom::Element* aOriginalElement,
|
||||
bool& aForceFormat,
|
||||
nsAString& aStr)
|
||||
{
|
||||
|
@ -532,7 +533,7 @@ nsXHTMLContentSerializer::CheckElementEnd(mozilla::dom::Element* aElement,
|
|||
}
|
||||
|
||||
bool dummyFormat;
|
||||
return nsXMLContentSerializer::CheckElementEnd(aElement, dummyFormat, aStr);
|
||||
return nsXMLContentSerializer::CheckElementEnd(aElement, aOriginalElement, dummyFormat, aStr);
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
@ -53,6 +53,7 @@ class nsXHTMLContentSerializer : public nsXMLContentSerializer {
|
|||
nsAString& aStr) override;
|
||||
|
||||
virtual bool CheckElementEnd(mozilla::dom::Element* aContent,
|
||||
mozilla::dom::Element* aOriginalElement,
|
||||
bool& aForceFormat,
|
||||
nsAString& aStr) override;
|
||||
|
||||
|
|
|
@ -1028,6 +1028,7 @@ nsXMLContentSerializer::AppendEndOfElementStart(Element* aElement,
|
|||
|
||||
NS_IMETHODIMP
|
||||
nsXMLContentSerializer::AppendElementEnd(Element* aElement,
|
||||
Element* aOriginalElement,
|
||||
nsAString& aStr)
|
||||
{
|
||||
NS_ENSURE_ARG(aElement);
|
||||
|
@ -1035,7 +1036,7 @@ nsXMLContentSerializer::AppendElementEnd(Element* aElement,
|
|||
nsIContent* content = aElement;
|
||||
|
||||
bool forceFormat = false, outputElementEnd;
|
||||
outputElementEnd = CheckElementEnd(aElement, forceFormat, aStr);
|
||||
outputElementEnd = CheckElementEnd(aElement, aOriginalElement, forceFormat, aStr);
|
||||
|
||||
nsIAtom *name = content->NodeInfo()->NameAtom();
|
||||
|
||||
|
@ -1161,16 +1162,14 @@ nsXMLContentSerializer::CheckElementStart(nsIContent * aContent,
|
|||
|
||||
bool
|
||||
nsXMLContentSerializer::CheckElementEnd(Element* aElement,
|
||||
Element* aOriginalElement,
|
||||
bool& aForceFormat,
|
||||
nsAString& aStr)
|
||||
{
|
||||
// We don't output a separate end tag for empty element
|
||||
aForceFormat = false;
|
||||
|
||||
// XXXbz this is a bit messed up, but by now we don't have our fixed-up
|
||||
// version of aElement anymore. Let's hope fixup never changes the localName
|
||||
// or namespace...
|
||||
return ElementNeedsSeparateEndTag(aElement, aElement);
|
||||
return ElementNeedsSeparateEndTag(aElement, aOriginalElement);
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
@ -59,6 +59,7 @@ class nsXMLContentSerializer : public nsIContentSerializer {
|
|||
nsAString& aStr) override;
|
||||
|
||||
NS_IMETHOD AppendElementEnd(mozilla::dom::Element* aElement,
|
||||
mozilla::dom::Element* aOriginalElement,
|
||||
nsAString& aStr) override;
|
||||
|
||||
NS_IMETHOD Flush(nsAString& aStr) override { return NS_OK; }
|
||||
|
@ -263,6 +264,7 @@ class nsXMLContentSerializer : public nsIContentSerializer {
|
|||
* @return boolean true if the element can be output
|
||||
*/
|
||||
virtual bool CheckElementEnd(mozilla::dom::Element* aElement,
|
||||
mozilla::dom::Element* aOriginalElement,
|
||||
bool& aForceFormat,
|
||||
nsAString& aStr);
|
||||
|
||||
|
|
Loading…
Reference in New Issue