661e183a76495104049d9d3daff0af7155d4e297
[WebKit-https.git] / Source / WebCore / css / CSSValueList.cpp
1 /*
2  * (C) 1999-2003 Lars Knoll (knoll@kde.org)
3  * Copyright (C) 2004, 2005, 2006, 2007, 2010 Apple Inc. All rights reserved.
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public License
16  * along with this library; see the file COPYING.LIB.  If not, write to
17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  */
20
21 #include "config.h"
22 #include "CSSValueList.h"
23
24 #include "CSSParserValues.h"
25 #include "PlatformString.h"
26 #include <wtf/PassOwnPtr.h>
27
28 namespace WebCore {
29
30 CSSValueList::CSSValueList(ClassType classType, bool isSpaceSeparated)
31     : CSSValue(classType)
32 {
33     m_isSpaceSeparatedValueList = isSpaceSeparated;
34 }
35
36 CSSValueList::CSSValueList(bool isSpaceSeparated)
37     : CSSValue(ValueListClass)
38 {
39     m_isSpaceSeparatedValueList = isSpaceSeparated;
40 }
41
42 CSSValueList::CSSValueList(CSSParserValueList* list)
43     : CSSValue(ValueListClass)
44 {
45     m_isSpaceSeparatedValueList = true;
46     if (list) {
47         size_t size = list->size();
48         for (unsigned i = 0; i < size; ++i)
49             append(list->valueAt(i)->createCSSValue());
50     }
51 }
52
53 void CSSValueList::append(PassRefPtr<CSSValue> val)
54 {
55     m_values.append(val);
56 }
57
58 void CSSValueList::prepend(PassRefPtr<CSSValue> val)
59 {
60     m_values.prepend(val);
61 }
62
63 bool CSSValueList::removeAll(CSSValue* val)
64 {
65     bool found = false;
66     // FIXME: we should be implementing operator== to CSSValue and its derived classes
67     // to make comparison more flexible and fast.
68     for (size_t index = 0; index < m_values.size(); index++) {
69         if (m_values.at(index)->cssText() == val->cssText()) {
70             m_values.remove(index);
71             found = true;
72         }
73     }
74
75     return found;
76 }
77
78 bool CSSValueList::hasValue(CSSValue* val) const
79 {
80     // FIXME: we should be implementing operator== to CSSValue and its derived classes
81     // to make comparison more flexible and fast.
82     for (size_t index = 0; index < m_values.size(); index++) {
83         if (m_values.at(index)->cssText() == val->cssText())
84             return true;
85     }
86     return false;
87 }
88
89 PassRefPtr<CSSValueList> CSSValueList::copy()
90 {
91     PassRefPtr<CSSValueList> newList = isSpaceSeparated() ? createSpaceSeparated() : createCommaSeparated();
92     for (size_t index = 0; index < m_values.size(); index++)
93         newList->append(m_values[index]);
94     return newList;
95 }
96
97 String CSSValueList::customCssText() const
98 {
99     String result = "";
100
101     unsigned size = m_values.size();
102     for (unsigned i = 0; i < size; i++) {
103         if (!result.isEmpty()) {
104             if (isSpaceSeparated())
105                 result += " ";
106             else
107                 result += ", ";
108         }
109         result += m_values[i]->cssText();
110     }
111
112     return result;
113 }
114
115 void CSSValueList::addSubresourceStyleURLs(ListHashSet<KURL>& urls, const CSSStyleSheet* styleSheet)
116 {
117     size_t size = m_values.size();
118     for (size_t i = 0; i < size; ++i)
119         m_values[i]->addSubresourceStyleURLs(urls, styleSheet);
120 }
121
122 } // namespace WebCore