2006-09-20 Anders Carlsson <acarlsson@apple.com>
authorandersca <andersca@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 20 Sep 2006 21:04:01 +0000 (21:04 +0000)
committerandersca <andersca@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 20 Sep 2006 21:04:01 +0000 (21:04 +0000)
        Reviewed by Darin.

        Add String::split which returns a Vector of Strings and use it instead of
        DeprecatedStringList.

        * bindings/js/kjs_events.cpp:
        (KJS::Clipboard::getValueProperty):
        * bindings/js/kjs_window.cpp:
        (KJS::parseModalDialogFeatures):
        * css/MediaList.cpp:
        (WebCore::MediaList::setMediaText):
        * dom/Clipboard.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formData):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::tokenizeRelAttribute):
        * platform/PlatformString.h:
        * platform/String.cpp:
        (WebCore::String::split):
        * platform/StringImpl.cpp:
        * platform/StringImpl.h:
        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::types):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@16479 268f45cc-cd09-0410-ab3c-d52691b4dbfc

13 files changed:
WebCore/ChangeLog
WebCore/bindings/js/kjs_events.cpp
WebCore/bindings/js/kjs_window.cpp
WebCore/css/MediaList.cpp
WebCore/dom/Clipboard.h
WebCore/html/HTMLFormElement.cpp
WebCore/html/HTMLLinkElement.cpp
WebCore/platform/PlatformString.h
WebCore/platform/String.cpp
WebCore/platform/StringImpl.cpp
WebCore/platform/StringImpl.h
WebCore/platform/mac/ClipboardMac.h
WebCore/platform/mac/ClipboardMac.mm

index efe645aed4578d76c65003bbd5a468660e2f3bb0..023bb37065405586c62683f4fba6510d40bedb21 100644 (file)
@@ -1,3 +1,30 @@
+2006-09-20  Anders Carlsson  <acarlsson@apple.com>
+
+        Reviewed by Darin.
+
+        Add String::split which returns a Vector of Strings and use it instead of 
+        DeprecatedStringList.
+        
+        * bindings/js/kjs_events.cpp:
+        (KJS::Clipboard::getValueProperty):
+        * bindings/js/kjs_window.cpp:
+        (KJS::parseModalDialogFeatures):
+        * css/MediaList.cpp:
+        (WebCore::MediaList::setMediaText):
+        * dom/Clipboard.h:
+        * html/HTMLFormElement.cpp:
+        (WebCore::HTMLFormElement::formData):
+        * html/HTMLLinkElement.cpp:
+        (WebCore::HTMLLinkElement::tokenizeRelAttribute):
+        * platform/PlatformString.h:
+        * platform/String.cpp:
+        (WebCore::String::split):
+        * platform/StringImpl.cpp:
+        * platform/StringImpl.h:
+        * platform/mac/ClipboardMac.h:
+        * platform/mac/ClipboardMac.mm:
+        (WebCore::ClipboardMac::types):
+
 2006-09-20  Justin Garcia  <justin.garcia@apple.com>
 
         Reviewed by harrison
index 2e7e11672cb9503df5d0f89bfad9f21755ddc6ce..db088581a4ef6a13f131cfbacfa38825a3c7cad2 100644 (file)
@@ -545,14 +545,14 @@ JSValue *Clipboard::getValueProperty(ExecState *exec, int token) const
             return jsStringOrUndefined(clipboard->effectAllowed());
         case Types:
         {
-            DeprecatedStringList qTypes = clipboard->types();
-            if (qTypes.isEmpty())
+            HashSet<String> types = clipboard->types();
+            if (types.isEmpty())
                 return jsNull(); 
             else {
                 List list;
-                for (DeprecatedStringList::Iterator it = qTypes.begin(); it != qTypes.end(); ++it) {
+                HashSet<String>::const_iterator end = types.end();
+                for (HashSet<String>::const_iterator it = types.begin(); it != end; ++it) 
                     list.append(jsString(UString(*it)));
-                }
                 return exec->lexicalInterpreter()->builtinArray()->construct(exec, list);
             }
         }
index 5e3de605a548ec124ea9f55b8fdd8a497d6cfa5d..297ff0e97d97d67c55e7e3aeb1efb98d1623b517 100644 (file)
@@ -483,10 +483,10 @@ static HashMap<String, String> parseModalDialogFeatures(ExecState *exec, JSValue
 {
     HashMap<String, String> map;
 
-    DeprecatedStringList features = DeprecatedStringList::split(';', featuresArg->toString(exec));
-    DeprecatedStringList::ConstIterator end = features.end();
-    for (DeprecatedStringList::ConstIterator it = features.begin(); it != end; ++it) {
-        DeprecatedString s = *it;
+    Vector<String> features = String(featuresArg->toString(exec)).split(';');
+    Vector<String>::const_iterator end = features.end();
+    for (Vector<String>::const_iterator it = features.begin(); it != end; ++it) {
+        String s = *it;
         int pos = s.find('=');
         int colonPos = s.find(':');
         if (pos >= 0 && colonPos >= 0)
@@ -497,8 +497,8 @@ static HashMap<String, String> parseModalDialogFeatures(ExecState *exec, JSValue
             // null string for value means key without value
             map.set(s.stripWhiteSpace().lower(), String());
         } else {
-            DeprecatedString key = s.left(pos).stripWhiteSpace().lower();
-            DeprecatedString val = s.mid(pos + 1).stripWhiteSpace().lower();
+            String key = s.left(pos).stripWhiteSpace().lower();
+            String val = s.substring(pos + 1).stripWhiteSpace().lower();
             int spacePos = val.find(' ');
             if (spacePos != -1)
                 val = val.left(spacePos);
index 1e563ebc0aaa91fadc0eedde7dd0041498bffd64..ec7aed003a43e8b9ee9dbb2b637aa348a5896069 100644 (file)
@@ -189,8 +189,9 @@ void MediaList::setMediaText(const String& value, ExceptionCode& ec)
     MediaList tempMediaList;
     CSSParser p(true);
 
-    DeprecatedStringList list = DeprecatedStringList::split(',', value.deprecatedString());
-    for (DeprecatedStringList::Iterator it = list.begin(); it != list.end(); ++it) {
+    Vector<String> list = value.split(',');
+    Vector<String>::const_iterator end = list.end();
+    for (Vector<String>::const_iterator it = list.begin(); it != end; ++it) {
         String medium = (*it).stripWhiteSpace();
         if (!medium.isEmpty()) {
             if (!p.parseMediaQuery(&tempMediaList, medium)) {
index 809a77e86e43d0b523d3ab197deb272bc261a593..dae5f4d7542be7c2681939466e6aedc959593d4d 100644 (file)
@@ -26,6 +26,7 @@
 #ifndef Clipboard_h
 #define Clipboard_h
 
+#include <wtf/HashSet.h>
 #include "AtomicString.h"
 #include "Node.h"
 #include "Shared.h"
@@ -33,7 +34,6 @@
 namespace WebCore {
 
     class CachedImage;
-    class DeprecatedStringList;
     class IntPoint;
 
     // State available during IE's events for drag and drop and copy/paste
@@ -55,7 +55,7 @@ namespace WebCore {
         virtual bool setData(const String& type, const String& data) = 0;
     
         // extensions beyond IE's API
-        virtual DeprecatedStringList types() const = 0;
+        virtual HashSet<String> types() const = 0;
     
         virtual IntPoint dragLocation() const = 0;
         virtual CachedImage* dragImage() const = 0;
index 2ff680487f3836be4bbff22b0bed923d4926bd09..b7fee798b369553ae043cf7b9c0deeea94fd941c 100644 (file)
@@ -186,12 +186,13 @@ bool HTMLFormElement::formData(FormData& result) const
 {
     DeprecatedCString enc_string = ""; // used for non-multipart data
 
-    DeprecatedString str = m_acceptcharset.deprecatedString();
+    String str = m_acceptcharset;
     str.replace(',', ' ');
-    DeprecatedStringList charsets = DeprecatedStringList::split(' ', str);
+    Vector<String> charsets = str.split(' ');
     TextEncoding encoding;
     Frame* frame = document()->frame();
-    for (DeprecatedStringList::Iterator it = charsets.begin(); it != charsets.end(); ++it)
+    Vector<String>::const_iterator end = charsets.end();
+    for (Vector<String>::const_iterator it = charsets.begin(); it != end; ++it)
         if ((encoding = TextEncoding(*it)).isValid())
             break;
     if (!encoding.isValid()) {
index f5d7ca62282270e308d4f68bdeebc86b1bb58d64..05a6ba5eb106524d949daa40f118da0cdff7a198 100644 (file)
@@ -124,7 +124,7 @@ void HTMLLinkElement::parseMappedAttribute(MappedAttribute *attr)
 void HTMLLinkElement::tokenizeRelAttribute(const AtomicString& relStr)
 {
     m_isStyleSheet = m_isIcon = m_alternate = false;
-    DeprecatedString rel = relStr.deprecatedString().lower();
+    String rel = relStr.domString().lower();
     if (rel == "stylesheet")
         m_isStyleSheet = true;
     else if (rel == "icon" || rel == "shortcut icon")
@@ -134,13 +134,14 @@ void HTMLLinkElement::tokenizeRelAttribute(const AtomicString& relStr)
     else {
         // Tokenize the rel attribute and set bits based on specific keywords that we find.
         rel.replace('\n', ' ');
-        DeprecatedStringList list = DeprecatedStringList::split(' ', rel);        
-        for (DeprecatedStringList::Iterator i = list.begin(); i != list.end(); ++i) {
-            if (*i == "stylesheet")
+        Vector<String> list = rel.split(' ');
+        Vector<String>::const_iterator end = list.end();
+        for (Vector<String>::const_iterator it = list.begin(); it != end; ++it) {
+            if (*it == "stylesheet")
                 m_isStyleSheet = true;
-            else if (*i == "alternate")
+            else if (*it == "alternate")
                 m_alternate = true;
-            else if (*i == "icon")
+            else if (*it == "icon")
                 m_isIcon = true;
         }
     }
index d1671bf315fd95949fc8b2dd236ef7e466eb2c81..7e522f25235491992fdd6bd96151f22c081f21bd 100644 (file)
@@ -102,9 +102,6 @@ public:
     String left(unsigned len) const { return substring(0, len); }
     String right(unsigned len) const { return substring(length() - len, len); }
 
-    // Splits the string into two. The original string gets truncated to pos, and the rest is returned.
-    String split(unsigned pos);
-
     // Returns a lowercase/uppercase version of the string
     String lower() const;
     String upper() const;
@@ -129,6 +126,9 @@ public:
 #endif
         ;
 
+    Vector<String> split(const String& separator, bool allowEmptyEntries = false) const;
+    Vector<String> split(UChar separator, bool allowEmptyEntries = false) const;
+
     int toInt(bool* ok = 0) const;
     Length* toLengthArray(int& len) const;
     Length* toCoordsArray(int& len) const;
index 24db59c9300af148691c205738244c7998f65af8..886bd1dc69282c5f856f8b4555767150d6253557 100644 (file)
@@ -190,13 +190,6 @@ String String::substring(unsigned pos, unsigned len) const
     return m_impl->substring(pos, len);
 }
 
-String String::split(unsigned pos)
-{
-    if (!m_impl)
-        return String();
-    return m_impl->split(pos);
-}
-
 String String::lower() const
 {
     if (!m_impl)
@@ -384,6 +377,30 @@ Length* String::toLengthArray(int& len) const
     return m_impl ? m_impl->toLengthArray(len) : 0;
 }
 
+Vector<String> String::split(const String& separator, bool allowEmptyEntries) const
+{
+    Vector<String> result;
+    
+    int startPos = 0;
+    int endPos;
+    while ((endPos = find(separator, startPos)) != -1) {
+        if (allowEmptyEntries || startPos != endPos)
+            result.append(substring(startPos, endPos - startPos));
+        startPos = endPos + separator.length();
+    }
+    if (allowEmptyEntries || startPos != (int)length())
+        result.append(substring(startPos));
+    
+    return result;
+}
+
+Vector<String> String::split(UChar separator, bool allowEmptyEntries) const
+{
+    Vector<String> result;
+  
+    return split(String(&separator, 1), allowEmptyEntries);
+}
+
 #ifndef NDEBUG
 Vector<char> String::ascii() const
 {
index 15302f1441876d7a885d0145c5cb5e9500dcc7ee..5c3395cd11c4cd6f454d9b16fc480d7ddd3b01e7 100644 (file)
@@ -231,20 +231,6 @@ void StringImpl::remove(unsigned pos, int len)
     m_hasTerminatingNullCharacter = false;
 }
 
-StringImpl* StringImpl::split(unsigned pos)
-{
-    assert(!m_inTable);
-    if( pos >=m_length ) return new StringImpl();
-
-    unsigned newLen = m_length-pos;
-    UChar* c = newUCharVector(newLen);
-    memcpy(c, m_data + pos, newLen * sizeof(UChar));
-
-    StringImpl* str = new StringImpl(m_data + pos, newLen);
-    truncate(pos);
-    return str;
-}
-
 bool StringImpl::containsOnlyWhitespace() const
 {
     return containsOnlyWhitespace(0, m_length);
index d78742706c43c78fecdfc2562b2ca30d6d84bb61..5f9203c3d7bc5c787143f25e5d9cae94133a9c3d 100644 (file)
@@ -83,7 +83,6 @@ public:
     void truncate(int len);
     void remove(unsigned pos, int len = 1);
 
-    StringImpl* split(unsigned pos);
     StringImpl* copy() const { return new StringImpl(m_data, m_length); }
 
     StringImpl* substring(unsigned pos, unsigned len = UINT_MAX);
index 0f4c07489440db1b502e612c9f0f19544ff558b4..b36ae2d491e500cbc4d8d21d195245433068e29f 100644 (file)
@@ -44,7 +44,6 @@ typedef unsigned int NSDragOperation;
 
 namespace WebCore {
 
-class DeprecatedStringList;
 class FrameMac;
 
 class ClipboardMac : public Clipboard, public CachedResourceClient {
@@ -70,7 +69,7 @@ public:
     bool setData(const String &type, const String &data);
         
     // extensions beyond IE's API
-    virtual DeprecatedStringList types() const;
+    virtual HashSet<String> types() const;
 
     IntPoint dragLocation() const;    // same point as client passed us
     CachedImage* dragImage() const;
index 82e930264f978ae45e352ea0bb03bd12bf3c5656..87903225548668109d2e0f2dddc7a0d6c444aac3 100644 (file)
@@ -238,19 +238,19 @@ bool ClipboardMac::setData(const String &type, const String &data)
     return false;
 }
 
-DeprecatedStringList ClipboardMac::types() const
+HashSet<String> ClipboardMac::types() const
 {
     if (m_policy != Readable && m_policy != TypesReadable)
-        return DeprecatedStringList();
+        return HashSet<String>();
 
     NSArray *types = [m_pasteboard types];
 
     // Enforce changeCount ourselves for security.  We check after reading instead of before to be
     // sure it doesn't change between our testing the change count and accessing the data.
     if (m_changeCount != [m_pasteboard changeCount])
-        return DeprecatedStringList();
+        return HashSet<String>();
 
-    DeprecatedStringList result;
+    HashSet<String> result;
     if (types) {
         unsigned count = [types count];
         unsigned i;
@@ -259,9 +259,9 @@ DeprecatedStringList ClipboardMac::types() const
             if ([pbType isEqualToString:@"NeXT plain ascii pasteboard type"])
                 continue;   // skip this ancient type that gets auto-supplied by some system conversion
 
-            DeprecatedString qstr = MIMETypeFromCocoaType(pbType);
-            if (!result.contains(qstr))
-                result.append(qstr);
+            String str = MIMETypeFromCocoaType(pbType);
+            if (!result.contains(str))
+                result.add(str);
         }
     }
     return result;