15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (C) 1999-2003 Lars Knoll (knoll@kde.org)
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2005, 2006, 2007, 2010 Apple Inc. All rights reserved.
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version.
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful,
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details.
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB.  If not, write to
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA.
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h"
2253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/CSSValueList.h"
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/CSSParserValues.h"
25591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/StringBuilder.h"
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore {
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)CSSValueList::CSSValueList(ClassType classType, ValueListSeparator listSeparator)
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    : CSSValue(classType)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_valueListSeparator = listSeparator;
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)CSSValueList::CSSValueList(ValueListSeparator listSeparator)
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    : CSSValue(ValueListClass)
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_valueListSeparator = listSeparator;
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)CSSValueList::CSSValueList(CSSParserValueList* parserValues)
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    : CSSValue(ValueListClass)
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_valueListSeparator = SpaceSeparator;
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (parserValues) {
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_values.reserveInitialCapacity(parserValues->size());
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (unsigned i = 0; i < parserValues->size(); ++i)
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            m_values.uncheckedAppend(parserValues->valueAt(i)->createCSSValue());
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool CSSValueList::removeAll(CSSValue* val)
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool found = false;
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (size_t index = 0; index < m_values.size(); index++) {
56926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        RefPtr<CSSValue>& value = m_values.at(index);
57926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (value && val && value->equals(*val)) {
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            m_values.remove(index);
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            found = true;
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return found;
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool CSSValueList::hasValue(CSSValue* val) const
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (size_t index = 0; index < m_values.size(); index++) {
69926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        const RefPtr<CSSValue>& value = m_values.at(index);
70926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (value && val && value->equals(*val))
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return true;
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<CSSValueList> CSSValueList::copy()
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    RefPtr<CSSValueList> newList;
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    switch (m_valueListSeparator) {
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case SpaceSeparator:
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        newList = createSpaceSeparated();
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        break;
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case CommaSeparator:
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        newList = createCommaSeparated();
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        break;
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case SlashSeparator:
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        newList = createSlashSeparated();
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        break;
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    default:
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ASSERT_NOT_REACHED();
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (size_t index = 0; index < m_values.size(); index++)
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        newList->append(m_values[index]);
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return newList.release();
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
97591b958dee2cf159d33a0b931e6231072eaf38d5Ben MurdochString CSSValueList::customCssText(CssTextFormattingFlags formattingFlag) const
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    StringBuilder result;
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String separator;
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    switch (m_valueListSeparator) {
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case SpaceSeparator:
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        separator = " ";
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        break;
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case CommaSeparator:
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        separator = ", ";
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        break;
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case SlashSeparator:
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        separator = " / ";
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        break;
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    default:
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ASSERT_NOT_REACHED();
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    unsigned size = m_values.size();
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (unsigned i = 0; i < size; i++) {
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!result.isEmpty())
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            result.append(separator);
119591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        if (formattingFlag == AlwaysQuoteCSSString && m_values[i]->isPrimitiveValue())
120591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            result.append(toCSSPrimitiveValue(m_values[i].get())->customCssText(AlwaysQuoteCSSString));
121591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        else
122591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            result.append(m_values[i]->cssText());
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return result.toString();
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
128926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool CSSValueList::equals(const CSSValueList& other) const
129926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
130926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return m_valueListSeparator == other.m_valueListSeparator && compareCSSValueVector<CSSValue>(m_values, other.m_values);
131926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
132926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
133926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool CSSValueList::equals(const CSSValue& other) const
134926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
135926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (m_values.size() != 1)
136926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return false;
137926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
138926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    const RefPtr<CSSValue>& value = m_values[0];
139926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return value && value->equals(other);
140926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
141926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String CSSValueList::customSerializeResolvingVariables(const HashMap<AtomicString, String>& variables) const
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    StringBuilder result;
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String separator;
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    switch (m_valueListSeparator) {
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case SpaceSeparator:
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        separator = " ";
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        break;
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case CommaSeparator:
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        separator = ", ";
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        break;
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case SlashSeparator:
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        separator = " / ";
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        break;
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    default:
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ASSERT_NOT_REACHED();
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    unsigned size = m_values.size();
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (unsigned i = 0; i < size; i++) {
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!result.isEmpty())
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            result.append(separator);
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        result.append(m_values[i]->serializeResolvingVariables(variables));
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return result.toString();
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void CSSValueList::addSubresourceStyleURLs(ListHashSet<KURL>& urls, const StyleSheetContents* styleSheet) const
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    size_t size = m_values.size();
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (size_t i = 0; i < size; ++i)
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_values[i]->addSubresourceStyleURLs(urls, styleSheet);
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool CSSValueList::hasFailedOrCanceledSubresources() const
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (unsigned i = 0; i < m_values.size(); ++i) {
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (m_values[i]->hasFailedOrCanceledSubresources())
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return true;
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)CSSValueList::CSSValueList(const CSSValueList& cloneFrom)
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    : CSSValue(cloneFrom.classType(), /* isCSSOMSafe */ true)
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_valueListSeparator = cloneFrom.m_valueListSeparator;
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_values.resize(cloneFrom.m_values.size());
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (unsigned i = 0; i < m_values.size(); ++i)
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_values[i] = cloneFrom.m_values[i]->cloneForCSSOM();
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<CSSValueList> CSSValueList::cloneForCSSOM() const
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return adoptRef(new CSSValueList(*this));
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore
201