<https://webkit.org/b/119959> Add TextNodeTraversal
Reviewed by Andreas Kling.
Add TextNodeTraversal for cleaner and more compact traversal of Text nodes.
Use it where appropriate.
* WebCore.xcodeproj/project.pbxproj:
* dom/Attr.cpp:
(WebCore::Attr::childrenChanged):
* dom/NodeTraversal.h:
(WebCore::NodeTraversal::next):
* dom/ScriptElement.cpp:
(WebCore::ScriptElement::scriptContent):
* dom/Text.cpp:
(WebCore::Text::wholeText):
* dom/Text.h:
(WebCore::toText):
* dom/TextNodeTraversal.cpp: Added.
(WebCore::TextNodeTraversal::appendContents):
(WebCore::TextNodeTraversal::contentsAsString):
Helpers for getting text content of a subtree.
* dom/TextNodeTraversal.h: Added.
(WebCore::TextNodeTraversal::firstTextChildTemplate):
(WebCore::TextNodeTraversal::firstChild):
(WebCore::TextNodeTraversal::firstTextWithinTemplate):
(WebCore::TextNodeTraversal::firstWithin):
(WebCore::TextNodeTraversal::traverseNextTextTemplate):
(WebCore::TextNodeTraversal::next):
(WebCore::TextNodeTraversal::nextSibling):
* editing/ApplyStyleCommand.cpp:
(WebCore::ApplyStyleCommand::joinChildTextNodes):
* html/HTMLTextAreaElement.cpp:
(WebCore::HTMLTextAreaElement::defaultValue):
(WebCore::HTMLTextAreaElement::setDefaultValue):
* html/HTMLTitleElement.cpp:
(WebCore::HTMLTitleElement::text):
* html/track/TextTrackCue.cpp:
(WebCore::TextTrackCue::determineTextDirection):
* page/Frame.cpp:
(WebCore::Frame::searchForLabelsAboveCell):
* xml/XPathUtil.cpp:
(WebCore::XPath::stringValue):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@154240 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/dom/ScriptElement.cpp b/Source/WebCore/dom/ScriptElement.cpp
index c192a2b..5cef85f 100644
--- a/Source/WebCore/dom/ScriptElement.cpp
+++ b/Source/WebCore/dom/ScriptElement.cpp
@@ -50,6 +50,7 @@
#include "SecurityOrigin.h"
#include "Settings.h"
#include "Text.h"
+#include "TextNodeTraversal.h"
#include <wtf/StdLibExtras.h>
#include <wtf/text/StringBuilder.h>
#include <wtf/text/StringHash.h>
@@ -397,19 +398,15 @@
Text* firstTextNode = 0;
bool foundMultipleTextNodes = false;
- for (Node* n = m_element->firstChild(); n; n = n->nextSibling()) {
- if (!n->isTextNode())
- continue;
-
- Text* t = toText(n);
+ for (Text* textNode = TextNodeTraversal::firstChild(m_element); textNode; textNode = TextNodeTraversal::nextSibling(textNode)) {
if (foundMultipleTextNodes)
- content.append(t->data());
+ content.append(textNode->data());
else if (firstTextNode) {
content.append(firstTextNode->data());
- content.append(t->data());
+ content.append(textNode->data());
foundMultipleTextNodes = true;
} else
- firstTextNode = t;
+ firstTextNode = textNode;
}
if (firstTextNode && !foundMultipleTextNodes)