Home | History | Annotate | Download | only in css
      1 /*
      2  * (C) 1999-2003 Lars Knoll (knoll (at) 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(bool isSpaceSeparated)
     31     : m_isSpaceSeparated(isSpaceSeparated)
     32 {
     33 }
     34 
     35 CSSValueList::CSSValueList(CSSParserValueList* list)
     36     : m_isSpaceSeparated(true)
     37 {
     38     if (list) {
     39         size_t size = list->size();
     40         for (unsigned i = 0; i < size; ++i)
     41             append(list->valueAt(i)->createCSSValue());
     42     }
     43 }
     44 
     45 CSSValueList::~CSSValueList()
     46 {
     47 }
     48 
     49 CSSValue* CSSValueList::item(unsigned index)
     50 {
     51     if (index >= m_values.size())
     52         return 0;
     53     return m_values[index].get();
     54 }
     55 
     56 unsigned short CSSValueList::cssValueType() const
     57 {
     58     return CSS_VALUE_LIST;
     59 }
     60 
     61 void CSSValueList::append(PassRefPtr<CSSValue> val)
     62 {
     63     m_values.append(val);
     64 }
     65 
     66 void CSSValueList::prepend(PassRefPtr<CSSValue> val)
     67 {
     68     m_values.prepend(val);
     69 }
     70 
     71 bool CSSValueList::removeAll(CSSValue* val)
     72 {
     73     bool found = false;
     74     // FIXME: we should be implementing operator== to CSSValue and its derived classes
     75     // to make comparison more flexible and fast.
     76     for (size_t index = 0; index < m_values.size(); index++) {
     77         if (m_values.at(index)->cssText() == val->cssText()) {
     78             m_values.remove(index);
     79             found = true;
     80         }
     81     }
     82 
     83     return found;
     84 }
     85 
     86 bool CSSValueList::hasValue(CSSValue* val)
     87 {
     88     // FIXME: we should be implementing operator== to CSSValue and its derived classes
     89     // to make comparison more flexible and fast.
     90     for (size_t index = 0; index < m_values.size(); index++) {
     91         if (m_values.at(index)->cssText() == val->cssText())
     92             return true;
     93     }
     94     return false;
     95 }
     96 
     97 PassRefPtr<CSSValueList> CSSValueList::copy()
     98 {
     99     PassRefPtr<CSSValueList> newList = m_isSpaceSeparated ? createSpaceSeparated() : createCommaSeparated();
    100     for (size_t index = 0; index < m_values.size(); index++)
    101         newList->append(item(index));
    102     return newList;
    103 }
    104 
    105 String CSSValueList::cssText() const
    106 {
    107     String result = "";
    108 
    109     unsigned size = m_values.size();
    110     for (unsigned i = 0; i < size; i++) {
    111         if (!result.isEmpty()) {
    112             if (m_isSpaceSeparated)
    113                 result += " ";
    114             else
    115                 result += ", ";
    116         }
    117         result += m_values[i]->cssText();
    118     }
    119 
    120     return result;
    121 }
    122 
    123 void CSSValueList::addSubresourceStyleURLs(ListHashSet<KURL>& urls, const CSSStyleSheet* styleSheet)
    124 {
    125     size_t size = m_values.size();
    126     for (size_t i = 0; i < size; ++i)
    127         m_values[i]->addSubresourceStyleURLs(urls, styleSheet);
    128 }
    129 
    130 } // namespace WebCore
    131