Index: Source/core/editing/MarkupAccumulator.cpp |
diff --git a/Source/core/editing/MarkupAccumulator.cpp b/Source/core/editing/MarkupAccumulator.cpp |
deleted file mode 100644 |
index 6f7490e76a4a4e898abf2ceb2a08b158a876e246..0000000000000000000000000000000000000000 |
--- a/Source/core/editing/MarkupAccumulator.cpp |
+++ /dev/null |
@@ -1,198 +0,0 @@ |
-/* |
- * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2012 Apple Inc. All rights reserved. |
- * Copyright (C) 2009, 2010 Google Inc. All rights reserved. |
- * |
- * Redistribution and use in source and binary forms, with or without |
- * modification, are permitted provided that the following conditions |
- * are met: |
- * 1. Redistributions of source code must retain the above copyright |
- * notice, this list of conditions and the following disclaimer. |
- * 2. Redistributions in binary form must reproduce the above copyright |
- * notice, this list of conditions and the following disclaimer in the |
- * documentation and/or other materials provided with the distribution. |
- * |
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- */ |
- |
-#include "config.h" |
-#include "core/editing/MarkupAccumulator.h" |
- |
-#include "core/HTMLNames.h" |
-#include "core/XLinkNames.h" |
-#include "core/XMLNSNames.h" |
-#include "core/XMLNames.h" |
-#include "core/dom/CDATASection.h" |
-#include "core/dom/Comment.h" |
-#include "core/dom/Document.h" |
-#include "core/dom/DocumentFragment.h" |
-#include "core/dom/DocumentType.h" |
-#include "core/dom/ProcessingInstruction.h" |
-#include "core/editing/Editor.h" |
-#include "core/html/HTMLElement.h" |
-#include "core/html/HTMLTemplateElement.h" |
-#include "platform/weborigin/KURL.h" |
-#include "wtf/text/CharacterNames.h" |
- |
-namespace blink { |
- |
-using namespace HTMLNames; |
- |
-MarkupAccumulator::MarkupAccumulator(EAbsoluteURLs resolveUrlsMethod, SerializationType serializationType) |
- : m_formatter(resolveUrlsMethod, serializationType) |
-{ |
-} |
- |
-MarkupAccumulator::~MarkupAccumulator() |
-{ |
-} |
- |
-void MarkupAccumulator::appendString(const String& string) |
-{ |
- m_markup.append(string); |
-} |
- |
-void MarkupAccumulator::appendStartTag(Node& node, Namespaces* namespaces) |
-{ |
- appendStartMarkup(m_markup, node, namespaces); |
-} |
- |
-void MarkupAccumulator::appendEndTag(const Element& element) |
-{ |
- appendEndMarkup(m_markup, element); |
-} |
- |
-void MarkupAccumulator::appendStartMarkup(StringBuilder& result, Node& node, Namespaces* namespaces) |
-{ |
- switch (node.nodeType()) { |
- case Node::TEXT_NODE: |
- appendText(result, toText(node)); |
- break; |
- case Node::ELEMENT_NODE: |
- appendElement(result, toElement(node), namespaces); |
- break; |
- default: |
- m_formatter.appendStartMarkup(result, node, namespaces); |
- break; |
- } |
-} |
- |
-static bool elementCannotHaveEndTag(const Node& node) |
-{ |
- if (!node.isHTMLElement()) |
- return false; |
- |
- // FIXME: ieForbidsInsertHTML may not be the right function to call here |
- // ieForbidsInsertHTML is used to disallow setting innerHTML/outerHTML |
- // or createContextualFragment. It does not necessarily align with |
- // which elements should be serialized w/o end tags. |
- return toHTMLElement(node).ieForbidsInsertHTML(); |
-} |
- |
-void MarkupAccumulator::appendEndMarkup(StringBuilder& result, const Element& element) |
-{ |
- m_formatter.appendEndMarkup(result, element); |
-} |
- |
-void MarkupAccumulator::appendCustomAttributes(StringBuilder&, const Element&, Namespaces*) |
-{ |
-} |
- |
-void MarkupAccumulator::appendText(StringBuilder& result, Text& text) |
-{ |
- m_formatter.appendText(result, text); |
-} |
- |
-bool MarkupAccumulator::shouldIgnoreAttribute(const Attribute& attribute) |
-{ |
- return false; |
-} |
- |
-void MarkupAccumulator::appendElement(StringBuilder& result, Element& element, Namespaces* namespaces) |
-{ |
- appendOpenTag(result, element, namespaces); |
- |
- AttributeCollection attributes = element.attributes(); |
- for (const auto& attribute : attributes) { |
- if (!shouldIgnoreAttribute(attribute)) |
- appendAttribute(result, element, attribute, namespaces); |
- } |
- |
- // Give an opportunity to subclasses to add their own attributes. |
- appendCustomAttributes(result, element, namespaces); |
- |
- appendCloseTag(result, element); |
-} |
- |
-void MarkupAccumulator::appendOpenTag(StringBuilder& result, const Element& element, Namespaces* namespaces) |
-{ |
- m_formatter.appendOpenTag(result, element, namespaces); |
-} |
- |
-void MarkupAccumulator::appendCloseTag(StringBuilder& result, const Element& element) |
-{ |
- m_formatter.appendCloseTag(result, element); |
-} |
- |
-void MarkupAccumulator::appendAttribute(StringBuilder& result, const Element& element, const Attribute& attribute, Namespaces* namespaces) |
-{ |
- m_formatter.appendAttribute(result, element, attribute, namespaces); |
-} |
- |
-EntityMask MarkupAccumulator::entityMaskForText(const Text& text) const |
-{ |
- return m_formatter.entityMaskForText(text); |
-} |
- |
-bool MarkupAccumulator::serializeAsHTMLDocument(const Node& node) const |
-{ |
- return m_formatter.serializeAsHTMLDocument(node); |
-} |
- |
-template<typename Strategy> |
-static void serializeNodesWithNamespaces(MarkupAccumulator& accumulator, Node& targetNode, EChildrenOnly childrenOnly, const Namespaces* namespaces) |
-{ |
- Namespaces namespaceHash; |
- if (namespaces) |
- namespaceHash = *namespaces; |
- |
- if (!childrenOnly) |
- accumulator.appendStartTag(targetNode, &namespaceHash); |
- |
- if (!(accumulator.serializeAsHTMLDocument(targetNode) && elementCannotHaveEndTag(targetNode))) { |
- Node* current = isHTMLTemplateElement(targetNode) ? Strategy::firstChild(*toHTMLTemplateElement(targetNode).content()) : Strategy::firstChild(targetNode); |
- for ( ; current; current = Strategy::nextSibling(*current)) |
- serializeNodesWithNamespaces<Strategy>(accumulator, *current, IncludeNode, &namespaceHash); |
- } |
- |
- if (!childrenOnly && targetNode.isElementNode()) |
- accumulator.appendEndTag(toElement(targetNode)); |
-} |
- |
-template<typename Strategy> |
-String serializeNodes(MarkupAccumulator& accumulator, Node& targetNode, EChildrenOnly childrenOnly) |
-{ |
- Namespaces* namespaces = nullptr; |
- Namespaces namespaceHash; |
- if (!accumulator.serializeAsHTMLDocument(targetNode)) { |
- // Add pre-bound namespaces for XML fragments. |
- namespaceHash.set(xmlAtom, XMLNames::xmlNamespaceURI); |
- namespaces = &namespaceHash; |
- } |
- |
- serializeNodesWithNamespaces<Strategy>(accumulator, targetNode, childrenOnly, namespaces); |
- return accumulator.toString(); |
-} |
- |
-template String serializeNodes<EditingStrategy>(MarkupAccumulator&, Node&, EChildrenOnly); |
- |
-} |