168513a70bcd92384395513322f1b801e7bf9c729Steve Block/* 268513a70bcd92384395513322f1b801e7bf9c729Steve Block * Copyright (c) 2010 Google Inc. All rights reserved. 368513a70bcd92384395513322f1b801e7bf9c729Steve Block * 468513a70bcd92384395513322f1b801e7bf9c729Steve Block * Redistribution and use in source and binary forms, with or without 568513a70bcd92384395513322f1b801e7bf9c729Steve Block * modification, are permitted provided that the following conditions are 668513a70bcd92384395513322f1b801e7bf9c729Steve Block * met: 768513a70bcd92384395513322f1b801e7bf9c729Steve Block * 868513a70bcd92384395513322f1b801e7bf9c729Steve Block * * Redistributions of source code must retain the above copyright 968513a70bcd92384395513322f1b801e7bf9c729Steve Block * notice, this list of conditions and the following disclaimer. 1068513a70bcd92384395513322f1b801e7bf9c729Steve Block * * Redistributions in binary form must reproduce the above 1168513a70bcd92384395513322f1b801e7bf9c729Steve Block * copyright notice, this list of conditions and the following disclaimer 1268513a70bcd92384395513322f1b801e7bf9c729Steve Block * in the documentation and/or other materials provided with the 1368513a70bcd92384395513322f1b801e7bf9c729Steve Block * distribution. 1468513a70bcd92384395513322f1b801e7bf9c729Steve Block * * Neither the name of Google Inc. nor the names of its 1568513a70bcd92384395513322f1b801e7bf9c729Steve Block * contributors may be used to endorse or promote products derived from 1668513a70bcd92384395513322f1b801e7bf9c729Steve Block * this software without specific prior written permission. 1768513a70bcd92384395513322f1b801e7bf9c729Steve Block * 1868513a70bcd92384395513322f1b801e7bf9c729Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1968513a70bcd92384395513322f1b801e7bf9c729Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2068513a70bcd92384395513322f1b801e7bf9c729Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2168513a70bcd92384395513322f1b801e7bf9c729Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2268513a70bcd92384395513322f1b801e7bf9c729Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2368513a70bcd92384395513322f1b801e7bf9c729Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2468513a70bcd92384395513322f1b801e7bf9c729Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2568513a70bcd92384395513322f1b801e7bf9c729Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2668513a70bcd92384395513322f1b801e7bf9c729Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2768513a70bcd92384395513322f1b801e7bf9c729Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2868513a70bcd92384395513322f1b801e7bf9c729Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2968513a70bcd92384395513322f1b801e7bf9c729Steve Block */ 3068513a70bcd92384395513322f1b801e7bf9c729Steve Block 3168513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "config.h" 3268513a70bcd92384395513322f1b801e7bf9c729Steve Block 3368513a70bcd92384395513322f1b801e7bf9c729Steve Block#ifdef SKIP_STATIC_CONSTRUCTORS_ON_GCC 3468513a70bcd92384395513322f1b801e7bf9c729Steve Block#define CSSPROPERTYSOURCEDATA_HIDE_GLOBALS 1 3568513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif 3668513a70bcd92384395513322f1b801e7bf9c729Steve Block 3768513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "CSSPropertySourceData.h" 3868513a70bcd92384395513322f1b801e7bf9c729Steve Block 3968513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "PlatformString.h" 4068513a70bcd92384395513322f1b801e7bf9c729Steve Block#include <wtf/StaticConstructors.h> 4168513a70bcd92384395513322f1b801e7bf9c729Steve Block#include <wtf/text/StringHash.h> 4268513a70bcd92384395513322f1b801e7bf9c729Steve Block 4368513a70bcd92384395513322f1b801e7bf9c729Steve Blocknamespace WebCore { 4468513a70bcd92384395513322f1b801e7bf9c729Steve Block 4568513a70bcd92384395513322f1b801e7bf9c729Steve BlockSourceRange::SourceRange() 4668513a70bcd92384395513322f1b801e7bf9c729Steve Block : start(0) 4768513a70bcd92384395513322f1b801e7bf9c729Steve Block , end(0) 4868513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 4968513a70bcd92384395513322f1b801e7bf9c729Steve Block} 5068513a70bcd92384395513322f1b801e7bf9c729Steve Block 5168513a70bcd92384395513322f1b801e7bf9c729Steve BlockSourceRange::SourceRange(unsigned start, unsigned end) 5268513a70bcd92384395513322f1b801e7bf9c729Steve Block : start(start) 5368513a70bcd92384395513322f1b801e7bf9c729Steve Block , end(end) 5468513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 5568513a70bcd92384395513322f1b801e7bf9c729Steve Block} 5668513a70bcd92384395513322f1b801e7bf9c729Steve Block 5768513a70bcd92384395513322f1b801e7bf9c729Steve BlockCSSPropertySourceData::CSSPropertySourceData(const String& name, const String& value, bool important, bool parsedOk, const SourceRange& range) 5868513a70bcd92384395513322f1b801e7bf9c729Steve Block : name(name) 5968513a70bcd92384395513322f1b801e7bf9c729Steve Block , value(value) 6068513a70bcd92384395513322f1b801e7bf9c729Steve Block , important(important) 6168513a70bcd92384395513322f1b801e7bf9c729Steve Block , parsedOk(parsedOk) 6268513a70bcd92384395513322f1b801e7bf9c729Steve Block , range(range) 6368513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 6468513a70bcd92384395513322f1b801e7bf9c729Steve Block} 6568513a70bcd92384395513322f1b801e7bf9c729Steve Block 6668513a70bcd92384395513322f1b801e7bf9c729Steve BlockCSSPropertySourceData::CSSPropertySourceData(const CSSPropertySourceData& other) 6768513a70bcd92384395513322f1b801e7bf9c729Steve Block : name(other.name) 6868513a70bcd92384395513322f1b801e7bf9c729Steve Block , value(other.value) 6968513a70bcd92384395513322f1b801e7bf9c729Steve Block , important(other.important) 7068513a70bcd92384395513322f1b801e7bf9c729Steve Block , parsedOk(other.parsedOk) 7168513a70bcd92384395513322f1b801e7bf9c729Steve Block , range(other.range) 7268513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 7368513a70bcd92384395513322f1b801e7bf9c729Steve Block} 7468513a70bcd92384395513322f1b801e7bf9c729Steve Block 7568513a70bcd92384395513322f1b801e7bf9c729Steve BlockCSSPropertySourceData::CSSPropertySourceData() 7668513a70bcd92384395513322f1b801e7bf9c729Steve Block : name("") 7768513a70bcd92384395513322f1b801e7bf9c729Steve Block , value("") 7868513a70bcd92384395513322f1b801e7bf9c729Steve Block , important(false) 7968513a70bcd92384395513322f1b801e7bf9c729Steve Block , parsedOk(false) 8068513a70bcd92384395513322f1b801e7bf9c729Steve Block , range(SourceRange(0, 0)) 8168513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 8268513a70bcd92384395513322f1b801e7bf9c729Steve Block} 8368513a70bcd92384395513322f1b801e7bf9c729Steve Block 8468513a70bcd92384395513322f1b801e7bf9c729Steve BlockString CSSPropertySourceData::toString() const 8568513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 8668513a70bcd92384395513322f1b801e7bf9c729Steve Block DEFINE_STATIC_LOCAL(String, emptyValue, ("e")); 8768513a70bcd92384395513322f1b801e7bf9c729Steve Block DEFINE_STATIC_LOCAL(String, importantSuffix, (" !important")); 8868513a70bcd92384395513322f1b801e7bf9c729Steve Block if (!name && value == emptyValue) 8968513a70bcd92384395513322f1b801e7bf9c729Steve Block return String(); 9068513a70bcd92384395513322f1b801e7bf9c729Steve Block 9168513a70bcd92384395513322f1b801e7bf9c729Steve Block String result = name; 9268513a70bcd92384395513322f1b801e7bf9c729Steve Block result += ": "; 9368513a70bcd92384395513322f1b801e7bf9c729Steve Block result += value; 9468513a70bcd92384395513322f1b801e7bf9c729Steve Block if (important) 9568513a70bcd92384395513322f1b801e7bf9c729Steve Block result += importantSuffix; 9668513a70bcd92384395513322f1b801e7bf9c729Steve Block result += ";"; 9768513a70bcd92384395513322f1b801e7bf9c729Steve Block return result; 9868513a70bcd92384395513322f1b801e7bf9c729Steve Block} 9968513a70bcd92384395513322f1b801e7bf9c729Steve Block 10068513a70bcd92384395513322f1b801e7bf9c729Steve Blockunsigned CSSPropertySourceData::hash() const 10168513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 10268513a70bcd92384395513322f1b801e7bf9c729Steve Block return StringHash::hash(name) + 3 * StringHash::hash(value) + 7 * important + 13 * parsedOk + 31; 10368513a70bcd92384395513322f1b801e7bf9c729Steve Block} 10468513a70bcd92384395513322f1b801e7bf9c729Steve Block 10568513a70bcd92384395513322f1b801e7bf9c729Steve Block// Global init routines 10668513a70bcd92384395513322f1b801e7bf9c729Steve BlockDEFINE_GLOBAL(CSSPropertySourceData, emptyCSSPropertySourceData, "", "e", false, false) 10768513a70bcd92384395513322f1b801e7bf9c729Steve Block 10868513a70bcd92384395513322f1b801e7bf9c729Steve Block// static 10968513a70bcd92384395513322f1b801e7bf9c729Steve Blockvoid CSSPropertySourceData::init() 11068513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 11168513a70bcd92384395513322f1b801e7bf9c729Steve Block static bool initialized; 11268513a70bcd92384395513322f1b801e7bf9c729Steve Block if (!initialized) { 11368513a70bcd92384395513322f1b801e7bf9c729Steve Block new ((void *) &emptyCSSPropertySourceData) CSSPropertySourceData("", "e", false, false, SourceRange(0, 0)); 11468513a70bcd92384395513322f1b801e7bf9c729Steve Block initialized = true; 11568513a70bcd92384395513322f1b801e7bf9c729Steve Block } 11668513a70bcd92384395513322f1b801e7bf9c729Steve Block} 11768513a70bcd92384395513322f1b801e7bf9c729Steve Block 11868513a70bcd92384395513322f1b801e7bf9c729Steve Block} // namespace WebCore 119