18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 1999-2003 Lars Knoll (knoll@kde.org) 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSPrimitiveValue.h" 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSHelper.h" 25dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "CSSParser.h" 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSPropertyNames.h" 27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "CSSStyleSheet.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSValueKeywords.h" 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Color.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Counter.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ExceptionCode.h" 32635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "Node.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Pair.h" 340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "RGBColor.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Rect.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderStyle.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/ASCIICType.h> 38a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include <wtf/DecimalNumber.h> 396b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#include <wtf/MathExtras.h> 40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include <wtf/StdLibExtras.h> 41a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include <wtf/text/StringBuffer.h> 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(DASHBOARD_SUPPORT) 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "DashboardRegion.h" 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace WTF; 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 516b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerstatic CSSPrimitiveValue::UnitCategory unitCategory(CSSPrimitiveValue::UnitTypes type) 526b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner{ 536b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // Here we violate the spec (http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue) and allow conversions 546b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // between CSS_PX and relative lengths (see cssPixelsPerInch comment in CSSHelper.h for the topic treatment). 556b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner switch (type) { 566b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_NUMBER: 576b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return CSSPrimitiveValue::UNumber; 586b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_PERCENTAGE: 596b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return CSSPrimitiveValue::UPercent; 606b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_PX: 616b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_CM: 626b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_MM: 636b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_IN: 646b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_PT: 656b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_PC: 666b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return CSSPrimitiveValue::ULength; 676b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_MS: 686b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_S: 696b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return CSSPrimitiveValue::UTime; 706b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_DEG: 716b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_RAD: 726b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_GRAD: 736b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_TURN: 746b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return CSSPrimitiveValue::UAngle; 756b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_HZ: 766b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_KHZ: 776b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return CSSPrimitiveValue::UFrequency; 786b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner default: 796b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return CSSPrimitiveValue::UOther; 806b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 816b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner} 826b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 836c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsentypedef HashMap<const CSSPrimitiveValue*, String> CSSTextCache; 846c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenstatic CSSTextCache& cssTextCache() 856c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 866c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen DEFINE_STATIC_LOCAL(CSSTextCache, cache, ()); 876c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen return cache; 886c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen} 896c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 90dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic const AtomicString& valueOrPropertyName(int valueOrPropertyID) 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 92dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT_ARG(valueOrPropertyID, valueOrPropertyID >= 0); 93dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT_ARG(valueOrPropertyID, valueOrPropertyID < numCSSValueKeywords || (valueOrPropertyID >= firstCSSProperty && valueOrPropertyID < firstCSSProperty + numCSSProperties)); 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 95dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (valueOrPropertyID < 0) 96dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return nullAtom; 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 98dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (valueOrPropertyID < numCSSValueKeywords) { 99dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block static AtomicString* cssValueKeywordStrings[numCSSValueKeywords]; 100dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!cssValueKeywordStrings[valueOrPropertyID]) 101dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block cssValueKeywordStrings[valueOrPropertyID] = new AtomicString(getValueName(valueOrPropertyID)); 102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return *cssValueKeywordStrings[valueOrPropertyID]; 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 105dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (valueOrPropertyID >= firstCSSProperty && valueOrPropertyID < firstCSSProperty + numCSSProperties) { 106dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block static AtomicString* cssPropertyStrings[numCSSProperties]; 107dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int propertyIndex = valueOrPropertyID - firstCSSProperty; 108dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!cssPropertyStrings[propertyIndex]) 109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block cssPropertyStrings[propertyIndex] = new AtomicString(getPropertyName(static_cast<CSSPropertyID>(valueOrPropertyID))); 110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return *cssPropertyStrings[propertyIndex]; 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return nullAtom; 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCSSPrimitiveValue::CSSPrimitiveValue() 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : m_type(0) 1186c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen , m_hasCachedCSSText(false) 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCSSPrimitiveValue::CSSPrimitiveValue(int ident) 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : m_type(CSS_IDENT) 1246c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen , m_hasCachedCSSText(false) 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_value.ident = ident; 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCSSPrimitiveValue::CSSPrimitiveValue(double num, UnitTypes type) 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : m_type(type) 1316c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen , m_hasCachedCSSText(false) 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_value.num = num; 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCSSPrimitiveValue::CSSPrimitiveValue(const String& str, UnitTypes type) 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : m_type(type) 1386c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen , m_hasCachedCSSText(false) 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ((m_value.string = str.impl())) 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_value.string->ref(); 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCSSPrimitiveValue::CSSPrimitiveValue(RGBA32 color) 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : m_type(CSS_RGBCOLOR) 1466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen , m_hasCachedCSSText(false) 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_value.rgbcolor = color; 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCSSPrimitiveValue::CSSPrimitiveValue(const Length& length) 1526c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen : m_hasCachedCSSText(false) 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (length.type()) { 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case Auto: 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_type = CSS_IDENT; 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_value.ident = CSSValueAuto; 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case WebCore::Fixed: 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_type = CSS_PX; 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_value.num = length.value(); 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case Intrinsic: 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_type = CSS_IDENT; 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_value.ident = CSSValueIntrinsic; 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case MinIntrinsic: 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_type = CSS_IDENT; 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_value.ident = CSSValueMinIntrinsic; 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case Percent: 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_type = CSS_PERCENTAGE; 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_value.num = length.percent(); 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case Relative: 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT_NOT_REACHED(); 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid CSSPrimitiveValue::init(PassRefPtr<Counter> c) 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_type = CSS_COUNTER; 1846c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen m_hasCachedCSSText = false; 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_value.counter = c.releaseRef(); 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid CSSPrimitiveValue::init(PassRefPtr<Rect> r) 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_type = CSS_RECT; 1916c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen m_hasCachedCSSText = false; 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_value.rect = r.releaseRef(); 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(DASHBOARD_SUPPORT) 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid CSSPrimitiveValue::init(PassRefPtr<DashboardRegion> r) 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_type = CSS_DASHBOARD_REGION; 1996c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen m_hasCachedCSSText = false; 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_value.region = r.releaseRef(); 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid CSSPrimitiveValue::init(PassRefPtr<Pair> p) 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_type = CSS_PAIR; 2076c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen m_hasCachedCSSText = false; 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_value.pair = p.releaseRef(); 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCSSPrimitiveValue::~CSSPrimitiveValue() 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cleanup(); 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid CSSPrimitiveValue::cleanup() 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (m_type) { 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_STRING: 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_URI: 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_ATTR: 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_PARSER_HEXCOLOR: 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_value.string) 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_value.string->deref(); 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_COUNTER: 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_value.counter->deref(); 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_RECT: 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_value.rect->deref(); 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_PAIR: 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_value.pair->deref(); 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(DASHBOARD_SUPPORT) 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_DASHBOARD_REGION: 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_value.region) 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_value.region->deref(); 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_type = 0; 2466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen if (m_hasCachedCSSText) { 2476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen cssTextCache().remove(this); 2486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen m_hasCachedCSSText = false; 2496c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen } 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochint CSSPrimitiveValue::computeLengthInt(RenderStyle* style, RenderStyle* rootStyle) 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2545abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return roundForImpreciseConversion<int, INT_MAX, INT_MIN>(computeLengthDouble(style, rootStyle)); 2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochint CSSPrimitiveValue::computeLengthInt(RenderStyle* style, RenderStyle* rootStyle, double multiplier) 2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2595abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return roundForImpreciseConversion<int, INT_MAX, INT_MIN>(computeLengthDouble(style, rootStyle, multiplier)); 2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2625abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick// Lengths expect an int that is only 28-bits, so we have to check for a 2635abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick// different overflow. 2640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochint CSSPrimitiveValue::computeLengthIntForLength(RenderStyle* style, RenderStyle* rootStyle) 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2665abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return roundForImpreciseConversion<int, intMaxForLength, intMinForLength>(computeLengthDouble(style, rootStyle)); 2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochint CSSPrimitiveValue::computeLengthIntForLength(RenderStyle* style, RenderStyle* rootStyle, double multiplier) 2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2715abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return roundForImpreciseConversion<int, intMaxForLength, intMinForLength>(computeLengthDouble(style, rootStyle, multiplier)); 2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochshort CSSPrimitiveValue::computeLengthShort(RenderStyle* style, RenderStyle* rootStyle) 2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2765abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return roundForImpreciseConversion<short, SHRT_MAX, SHRT_MIN>(computeLengthDouble(style, rootStyle)); 2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochshort CSSPrimitiveValue::computeLengthShort(RenderStyle* style, RenderStyle* rootStyle, double multiplier) 2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2815abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return roundForImpreciseConversion<short, SHRT_MAX, SHRT_MIN>(computeLengthDouble(style, rootStyle, multiplier)); 2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfloat CSSPrimitiveValue::computeLengthFloat(RenderStyle* style, RenderStyle* rootStyle, bool computingFontSize) 2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return static_cast<float>(computeLengthDouble(style, rootStyle, 1.0, computingFontSize)); 2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfloat CSSPrimitiveValue::computeLengthFloat(RenderStyle* style, RenderStyle* rootStyle, double multiplier, bool computingFontSize) 2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return static_cast<float>(computeLengthDouble(style, rootStyle, multiplier, computingFontSize)); 2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochdouble CSSPrimitiveValue::computeLengthDouble(RenderStyle* style, RenderStyle* rootStyle, double multiplier, bool computingFontSize) 2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned short type = primitiveType(); 2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We do not apply the zoom factor when we are computing the value of the font-size property. The zooming 2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // for font sizes is much more complicated, since we have to worry about enforcing the minimum font size preference 3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // as well as enforcing the implicit "smart minimum." In addition the CSS property text-size-adjust is used to 3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // prevent text from zooming at all. Therefore we will not apply the zoom here if we are computing font-size. 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool applyZoomMultiplier = !computingFontSize; 3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project double factor = 1.0; 3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (type) { 3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_EMS: 3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project applyZoomMultiplier = false; 3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project factor = computingFontSize ? style->fontDescription().specifiedSize() : style->fontDescription().computedSize(); 3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_EXS: 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: We have a bug right now where the zoom will be applied twice to EX units. 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We really need to compute EX using fontMetrics for the original specifiedSize and not use 3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // our actual constructed rendering font. 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project applyZoomMultiplier = false; 3152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block factor = style->fontMetrics().xHeight(); 3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case CSS_REMS: 3180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch applyZoomMultiplier = false; 319e2b458f91171bbf19531e243652a88cfa8539658Steve Block if (rootStyle) 320e2b458f91171bbf19531e243652a88cfa8539658Steve Block factor = computingFontSize ? rootStyle->fontDescription().specifiedSize() : rootStyle->fontDescription().computedSize(); 3210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch break; 3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_PX: 3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_CM: 3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project factor = cssPixelsPerInch / 2.54; // (2.54 cm/in) 3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_MM: 3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project factor = cssPixelsPerInch / 25.4; 3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_IN: 3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project factor = cssPixelsPerInch; 3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_PT: 3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project factor = cssPixelsPerInch / 72.0; 3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_PC: 3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // 1 pc == 12 pt 3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project factor = cssPixelsPerInch * 12.0 / 72.0; 3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return -1.0; 3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project double result = getDoubleValue() * factor; 3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!applyZoomMultiplier || multiplier == 1.0) 3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Any original result that was >= 1 should not be allowed to fall below 1. This keeps border lines from 3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // vanishing. 3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project double zoomedResult = result * multiplier; 3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (result >= 1.0) 3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project zoomedResult = max(1.0, zoomedResult); 3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return zoomedResult; 3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3566b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennervoid CSSPrimitiveValue::setFloatValue(unsigned short, double, ExceptionCode& ec) 3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3586b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // Keeping values immutable makes optimizations easier and allows sharing of the primitive value objects. 3596b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // No other engine supports mutating style through this API. Computed style is always read-only anyway. 3606b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // Supporting setter would require making primitive value copy-on-write and taking care of style invalidation. 3616b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner ec = NO_MODIFICATION_ALLOWED_ERR; 3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3646b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerstatic double conversionToCanonicalUnitsScaleFactor(unsigned short unitType) 3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project double factor = 1.0; 3676b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // FIXME: the switch can be replaced by an array of scale factors. 3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (unitType) { 3696b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // These are "canonical" units in their respective categories. 3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSPrimitiveValue::CSS_PX: 3716b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_DEG: 3726b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_MS: 3736b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_HZ: 3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSPrimitiveValue::CSS_CM: 3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project factor = cssPixelsPerInch / 2.54; // (2.54 cm/in) 3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSPrimitiveValue::CSS_MM: 3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project factor = cssPixelsPerInch / 25.4; 3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSPrimitiveValue::CSS_IN: 3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project factor = cssPixelsPerInch; 3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSPrimitiveValue::CSS_PT: 3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project factor = cssPixelsPerInch / 72.0; 3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSSPrimitiveValue::CSS_PC: 3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project factor = cssPixelsPerInch * 12.0 / 72.0; // 1 pc == 12 pt 3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3906b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_RAD: 3916b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner factor = 180 / piDouble; 3926b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner break; 3936b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_GRAD: 3946b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner factor = 0.9; 3956b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner break; 3966b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_TURN: 3976b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner factor = 360; 3986b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner break; 3996b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_S: 4006b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case CSSPrimitiveValue::CSS_KHZ: 4016b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner factor = 1000; 4026b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner break; 4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return factor; 4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4106b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerdouble CSSPrimitiveValue::getDoubleValue(unsigned short unitType, ExceptionCode& ec) const 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4126b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner double result = 0; 4136b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner bool success = getDoubleValueInternal(static_cast<UnitTypes>(unitType), &result); 4146b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!success) { 4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ec = INVALID_ACCESS_ERR; 4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0.0; 4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4196b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner ec = 0; 4206b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return result; 4216b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner} 4226b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 4236b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerdouble CSSPrimitiveValue::getDoubleValue(unsigned short unitType) const 4246b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner{ 4256b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner double result = 0; 4266b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner getDoubleValueInternal(static_cast<UnitTypes>(unitType), &result); 4276b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return result; 4286b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner} 4296b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 4306b70adc33054f8aee8c54d0f460458a9df11b8a5Russell BrennerCSSPrimitiveValue::UnitTypes CSSPrimitiveValue::canonicalUnitTypeForCategory(UnitCategory category) 4316b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner{ 4326b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // The canonical unit type is chosen according to the way CSSParser::validUnit() chooses the default unit 4336b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // in each category (based on unitflags). 4346b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner switch (category) { 4356b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case UNumber: 4366b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return CSS_NUMBER; 4376b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case ULength: 4386b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return CSS_PX; 4396b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case UPercent: 4406b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return CSS_UNKNOWN; // Cannot convert between numbers and percent. 4416b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case UTime: 4426b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return CSS_MS; 4436b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case UAngle: 4446b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return CSS_DEG; 4456b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner case UFrequency: 4466b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return CSS_HZ; 4476b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner default: 4486b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return CSS_UNKNOWN; 4496b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 4506b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner} 4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4526b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerbool CSSPrimitiveValue::getDoubleValueInternal(UnitTypes requestedUnitType, double* result) const 4536b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner{ 4546b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (m_type < CSS_NUMBER || (m_type > CSS_DIMENSION && m_type < CSS_TURN) || requestedUnitType < CSS_NUMBER || (requestedUnitType > CSS_DIMENSION && requestedUnitType < CSS_TURN)) 4556b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return false; 4566b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (requestedUnitType == m_type || requestedUnitType == CSS_DIMENSION) { 4576b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner *result = m_value.num; 4586b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return true; 4596b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4616b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner UnitTypes sourceUnitType = static_cast<UnitTypes>(m_type); 4626b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner UnitCategory sourceCategory = unitCategory(sourceUnitType); 4636b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner ASSERT(sourceCategory != UOther); 4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4656b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner UnitTypes targetUnitType = requestedUnitType; 4666b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner UnitCategory targetCategory = unitCategory(targetUnitType); 4676b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner ASSERT(targetCategory != UOther); 4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4696b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // Cannot convert between unrelated unit categories if one of them is not UNumber. 4706b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (sourceCategory != targetCategory && sourceCategory != UNumber && targetCategory != UNumber) 4716b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return false; 4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4736b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (targetCategory == UNumber) { 4746b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // We interpret conversion to CSS_NUMBER as conversion to a canonical unit in this value's category. 4756b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner targetUnitType = canonicalUnitTypeForCategory(sourceCategory); 4766b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (targetUnitType == CSS_UNKNOWN) 4776b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return false; 4786b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4806b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (sourceUnitType == CSS_NUMBER) { 4816b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // We interpret conversion from CSS_NUMBER in the same way as CSSParser::validUnit() while using non-strict mode. 4826b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner sourceUnitType = canonicalUnitTypeForCategory(targetCategory); 4836b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (sourceUnitType == CSS_UNKNOWN) 4846b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return false; 4856b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project double convertedValue = m_value.num; 4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4896b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // First convert the value from m_type to canonical type. 4906b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner double factor = conversionToCanonicalUnitsScaleFactor(sourceUnitType); 4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project convertedValue *= factor; 4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4936b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // Now convert from canonical type to the target unitType. 4946b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner factor = conversionToCanonicalUnitsScaleFactor(targetUnitType); 4958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project convertedValue /= factor; 4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4976b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner *result = convertedValue; 4986b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return true; 4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5016b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennervoid CSSPrimitiveValue::setStringValue(unsigned short, const String&, ExceptionCode& ec) 5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5036b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // Keeping values immutable makes optimizations easier and allows sharing of the primitive value objects. 5046b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // No other engine supports mutating style through this API. Computed style is always read-only anyway. 5056b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // Supporting setter would require making primitive value copy-on-write and taking care of style invalidation. 5066b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner ec = NO_MODIFICATION_ALLOWED_ERR; 5078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString CSSPrimitiveValue::getStringValue(ExceptionCode& ec) const 5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ec = 0; 5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (m_type) { 5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_STRING: 5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_ATTR: 5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_URI: 5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_value.string; 5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_IDENT: 5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return valueOrPropertyName(m_value.ident); 5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ec = INVALID_ACCESS_ERR; 5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return String(); 5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString CSSPrimitiveValue::getStringValue() const 5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (m_type) { 5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_STRING: 5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_ATTR: 5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_URI: 5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_value.string; 5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_IDENT: 5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return valueOrPropertyName(m_value.ident); 5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return String(); 5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCounter* CSSPrimitiveValue::getCounterValue(ExceptionCode& ec) const 5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ec = 0; 5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_type != CSS_COUNTER) { 5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ec = INVALID_ACCESS_ERR; 5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_value.counter; 5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectRect* CSSPrimitiveValue::getRectValue(ExceptionCode& ec) const 5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ec = 0; 5578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_type != CSS_RECT) { 5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ec = INVALID_ACCESS_ERR; 5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_value.rect; 5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 565231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockPassRefPtr<RGBColor> CSSPrimitiveValue::getRGBColorValue(ExceptionCode& ec) const 5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ec = 0; 5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_type != CSS_RGBCOLOR) { 5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ec = INVALID_ACCESS_ERR; 5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // FIMXE: This should not return a new object for each invocation. 574231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return RGBColor::create(m_value.rgbcolor); 5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPair* CSSPrimitiveValue::getPairValue(ExceptionCode& ec) const 5788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ec = 0; 5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_type != CSS_PAIR) { 5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ec = INVALID_ACCESS_ERR; 5828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 5838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_value.pair; 5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectunsigned short CSSPrimitiveValue::cssValueType() const 5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return CSS_PRIMITIVE_VALUE; 5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool CSSPrimitiveValue::parseString(const String& /*string*/, bool /*strict*/) 5948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME 5968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 5978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5996b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerint CSSPrimitiveValue::getIdent() const 6008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_type != CSS_IDENT) 6028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 6038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_value.ident; 6048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 606a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochstatic String formatNumber(double number) 607a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 608a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch DecimalNumber decimal(number); 609a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 610a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch StringBuffer buffer(decimal.bufferLengthForStringDecimal()); 611a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch unsigned length = decimal.toStringDecimal(buffer.characters(), buffer.length()); 612a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ASSERT_UNUSED(length, length == buffer.length()); 613a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 614a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return String::adopt(buffer); 615a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 616a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 6178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString CSSPrimitiveValue::cssText() const 6188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: return the original value instead of a generated one (e.g. color 6208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // name if it was specified) - check what spec says about this 6216c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 6226c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen if (m_hasCachedCSSText) { 6236c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ASSERT(cssTextCache().contains(this)); 6246c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen return cssTextCache().get(this); 6256c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen } 626dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 6278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String text; 6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (m_type) { 6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_UNKNOWN: 6308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME 6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_NUMBER: 6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_PARSER_INTEGER: 634a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text = formatNumber(m_value.num); 6358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_PERCENTAGE: 637a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text = formatNumber(m_value.num) + "%"; 6388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_EMS: 640a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text = formatNumber(m_value.num) + "em"; 6418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_EXS: 643a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text = formatNumber(m_value.num) + "ex"; 6448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case CSS_REMS: 646a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text = formatNumber(m_value.num) + "rem"; 6470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch break; 6488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_PX: 649a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text = formatNumber(m_value.num) + "px"; 6508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_CM: 652a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text = formatNumber(m_value.num) + "cm"; 6538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_MM: 655a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text = formatNumber(m_value.num) + "mm"; 6568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_IN: 658a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text = formatNumber(m_value.num) + "in"; 6598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_PT: 661a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text = formatNumber(m_value.num) + "pt"; 6628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_PC: 664a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text = formatNumber(m_value.num) + "pc"; 6658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_DEG: 667a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text = formatNumber(m_value.num) + "deg"; 6688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_RAD: 670a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text = formatNumber(m_value.num) + "rad"; 6718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_GRAD: 673a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text = formatNumber(m_value.num) + "grad"; 6748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_MS: 676a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text = formatNumber(m_value.num) + "ms"; 6778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_S: 679a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text = formatNumber(m_value.num) + "s"; 6808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_HZ: 682a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text = formatNumber(m_value.num) + "hz"; 6838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_KHZ: 685a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text = formatNumber(m_value.num) + "khz"; 6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 687635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project case CSS_TURN: 688a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch text = formatNumber(m_value.num) + "turn"; 689635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project break; 6908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_DIMENSION: 6918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME 6928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_STRING: 694dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block text = quoteCSSStringIfNeeded(m_value.string); 6958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_URI: 697dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block text = "url(" + quoteCSSURLIfNeeded(m_value.string) + ")"; 6988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_IDENT: 7008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text = valueOrPropertyName(m_value.ident); 7018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 7025f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian case CSS_ATTR: { 7035f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian DEFINE_STATIC_LOCAL(const String, attrParen, ("attr(")); 7045f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 7055f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Vector<UChar> result; 7065f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian result.reserveInitialCapacity(6 + m_value.string->length()); 7075f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 7085f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian append(result, attrParen); 7095f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian append(result, m_value.string); 7105f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian result.uncheckedAppend(')'); 7115f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 712dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block text = String::adopt(result); 713dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 7145f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } 71581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case CSS_COUNTER_NAME: 71681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch text = "counter("; 71781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch text += m_value.string; 71881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch text += ")"; 71981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch break; 7208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_COUNTER: 7218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text = "counter("; 7228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text += String::number(m_value.num); 7238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text += ")"; 7248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: Add list-style and separator 7258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 7268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_RECT: { 727635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project DEFINE_STATIC_LOCAL(const String, rectParen, ("rect(")); 7288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Rect* rectVal = getRectValue(); 7308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Vector<UChar> result; 7318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian result.reserveInitialCapacity(32); 7328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project append(result, rectParen); 7338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project append(result, rectVal->top()->cssText()); 7358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.append(' '); 7368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project append(result, rectVal->right()->cssText()); 7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.append(' '); 7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project append(result, rectVal->bottom()->cssText()); 7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.append(' '); 7428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project append(result, rectVal->left()->cssText()); 7448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.append(')'); 7458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 746dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block text = String::adopt(result); 747dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 7488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_RGBCOLOR: 7508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_PARSER_HEXCOLOR: { 751635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project DEFINE_STATIC_LOCAL(const String, commaSpace, (", ")); 752635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project DEFINE_STATIC_LOCAL(const String, rgbParen, ("rgb(")); 753635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project DEFINE_STATIC_LOCAL(const String, rgbaParen, ("rgba(")); 7548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RGBA32 rgbColor = m_value.rgbcolor; 7568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_type == CSS_PARSER_HEXCOLOR) 7578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Color::parseHexColor(m_value.string, rgbColor); 7588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Color color(rgbColor); 7598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Vector<UChar> result; 7618f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian result.reserveInitialCapacity(32); 7628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (color.hasAlpha()) 7638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project append(result, rgbaParen); 7648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 7658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project append(result, rgbParen); 7668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project appendNumber(result, static_cast<unsigned char>(color.red())); 7688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project append(result, commaSpace); 7698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project appendNumber(result, static_cast<unsigned char>(color.green())); 7718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project append(result, commaSpace); 7728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project appendNumber(result, static_cast<unsigned char>(color.blue())); 7748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (color.hasAlpha()) { 7758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project append(result, commaSpace); 776dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block append(result, String::number(color.alpha() / 256.0f)); 7778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.append(')'); 780dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block text = String::adopt(result); 781dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block break; 7828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_PAIR: 7848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text = m_value.pair->first()->cssText(); 7858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text += " "; 7868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text += m_value.pair->second()->cssText(); 7878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 7888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(DASHBOARD_SUPPORT) 7898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_DASHBOARD_REGION: 7908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (DashboardRegion* region = getDashboardRegionValue(); region; region = region->m_next.get()) { 7918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!text.isEmpty()) 7928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text.append(' '); 7938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text += "dashboard-region("; 7948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text += region->m_label; 7958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (region->m_isCircle) 7968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text += " circle"; 7978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (region->m_isRectangle) 7988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text += " rectangle"; 7998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 8008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 8018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (region->top()->m_type == CSS_IDENT && region->top()->getIdent() == CSSValueInvalid) { 8028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(region->right()->m_type == CSS_IDENT); 8038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(region->bottom()->m_type == CSS_IDENT); 8048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(region->left()->m_type == CSS_IDENT); 8058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(region->right()->getIdent() == CSSValueInvalid); 8068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(region->bottom()->getIdent() == CSSValueInvalid); 8078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(region->left()->getIdent() == CSSValueInvalid); 8088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 8098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text.append(' '); 8108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text += region->top()->cssText() + " "; 8118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text += region->right()->cssText() + " "; 8128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text += region->bottom()->cssText() + " "; 8138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text += region->left()->cssText(); 8148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text += ")"; 8168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 8188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 8198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_PARSER_OPERATOR: { 8208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project char c = static_cast<char>(m_value.ident); 8218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project text = String(&c, 1U); 8228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 8238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CSS_PARSER_IDENTIFIER: 825dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block text = quoteCSSStringIfNeeded(m_value.string); 8268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 8278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 8296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ASSERT(!cssTextCache().contains(this)); 8306c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen cssTextCache().set(this, text); 8316c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen m_hasCachedCSSText = true; 8328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return text; 8338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 835635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid CSSPrimitiveValue::addSubresourceStyleURLs(ListHashSet<KURL>& urls, const CSSStyleSheet* styleSheet) 836635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 837635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (m_type == CSS_URI) 838635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project addSubresourceURL(urls, styleSheet->completeURL(m_value.string)); 839635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 840635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 8418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 842