diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/css/parser/MediaQueryToken.cpp')
-rw-r--r-- | chromium/third_party/WebKit/Source/core/css/parser/MediaQueryToken.cpp | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/chromium/third_party/WebKit/Source/core/css/parser/MediaQueryToken.cpp b/chromium/third_party/WebKit/Source/core/css/parser/MediaQueryToken.cpp new file mode 100644 index 00000000000..fb6bcb39d05 --- /dev/null +++ b/chromium/third_party/WebKit/Source/core/css/parser/MediaQueryToken.cpp @@ -0,0 +1,129 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "config.h" +#include "core/css/parser/MediaQueryToken.h" + +#include "wtf/HashMap.h" +#include "wtf/text/StringHash.h" +#include <limits.h> + +namespace WebCore { + + +MediaQueryToken::MediaQueryToken(MediaQueryTokenType type, BlockType blockType) + : m_type(type) + , m_delimiter(0) + , m_numericValue(0) + , m_unit(CSSPrimitiveValue::CSS_UNKNOWN) + , m_blockType(blockType) +{ +} + +// Just a helper used for Delimiter tokens. +MediaQueryToken::MediaQueryToken(MediaQueryTokenType type, UChar c) + : m_type(type) + , m_delimiter(c) + , m_numericValue(0) + , m_unit(CSSPrimitiveValue::CSS_UNKNOWN) + , m_blockType(NotBlock) +{ + ASSERT(m_type == DelimiterToken); +} + +MediaQueryToken::MediaQueryToken(MediaQueryTokenType type, String value, BlockType blockType) + : m_type(type) + , m_value(value) + , m_delimiter(0) + , m_numericValue(0) + , m_unit(CSSPrimitiveValue::CSS_UNKNOWN) + , m_blockType(blockType) +{ +} + +MediaQueryToken::MediaQueryToken(MediaQueryTokenType type, double numericValue, NumericValueType numericValueType) + : m_type(type) + , m_delimiter(0) + , m_numericValueType(numericValueType) + , m_numericValue(numericValue) + , m_unit(CSSPrimitiveValue::CSS_NUMBER) + , m_blockType(NotBlock) +{ + ASSERT(type == NumberToken); +} + +void MediaQueryToken::convertToDimensionWithUnit(String unit) +{ + ASSERT(m_type == NumberToken); + m_type = DimensionToken; + m_unit = CSSPrimitiveValue::fromName(unit); +} + +void MediaQueryToken::convertToPercentage() +{ + ASSERT(m_type == NumberToken); + m_type = PercentageToken; + m_unit = CSSPrimitiveValue::CSS_PERCENTAGE; +} + +// This function is used only for testing +// FIXME - This doesn't cover all possible Token types, but it's enough for current testing. +String MediaQueryToken::textForUnitTests() const +{ + char buffer[std::numeric_limits<float>::digits]; + if (!m_value.isNull()) + return m_value; + if (m_type == LeftParenthesisToken) + return String("("); + if (m_type == RightParenthesisToken) + return String(")"); + if (m_type == ColonToken) + return String(":"); + if (m_type == WhitespaceToken) + return String(" "); + + if (m_delimiter) { + sprintf(buffer, "'%c'", m_delimiter); + return String(buffer, strlen(buffer)); + } + if (m_numericValue) { + static const unsigned maxUnitBufferLength = 6; + char unitBuffer[maxUnitBufferLength] = {0}; + if (m_unit == CSSPrimitiveValue::CSS_PERCENTAGE) + sprintf(unitBuffer, "%s", "%"); + else if (m_unit == CSSPrimitiveValue::CSS_PX) + sprintf(unitBuffer, "%s", "px"); + else if (m_unit == CSSPrimitiveValue::CSS_EMS) + sprintf(unitBuffer, "%s", "em"); + else if (m_unit != CSSPrimitiveValue::CSS_NUMBER) + sprintf(unitBuffer, "%s", "other"); + if (m_numericValueType == IntegerValueType) + sprintf(buffer, "%d%s", static_cast<int>(m_numericValue), unitBuffer); + else + sprintf(buffer, "%f%s", m_numericValue, unitBuffer); + + return String(buffer, strlen(buffer)); + } + return String(); +} + +UChar MediaQueryToken::delimiter() const +{ + ASSERT(m_type == DelimiterToken); + return m_delimiter; +} + +NumericValueType MediaQueryToken::numericValueType() const +{ + ASSERT(m_type == NumberToken || m_type == PercentageToken || m_type == DimensionToken); + return m_numericValueType; +} + +double MediaQueryToken::numericValue() const +{ + ASSERT(m_type == NumberToken || m_type == PercentageToken || m_type == DimensionToken); + return m_numericValue; +} + +} // namespace WebCore |