<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)