Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / css / parser / MediaQueryToken.cpp
index be1a041..ae4df57 100644 (file)
@@ -7,14 +7,17 @@
 
 #include "wtf/HashMap.h"
 #include "wtf/text/StringHash.h"
+#include <limits.h>
 
 namespace WebCore {
 
 
-MediaQueryToken::MediaQueryToken(MediaQueryTokenType type)
+MediaQueryToken::MediaQueryToken(MediaQueryTokenType type, BlockType blockType)
     : m_type(type)
     , m_delimiter(0)
+    , m_numericValue(0)
     , m_unit(CSSPrimitiveValue::CSS_UNKNOWN)
+    , m_blockType(blockType)
 {
 }
 
@@ -22,16 +25,20 @@ MediaQueryToken::MediaQueryToken(MediaQueryTokenType type)
 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)
+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)
 {
 }
 
@@ -41,6 +48,7 @@ MediaQueryToken::MediaQueryToken(MediaQueryTokenType type, double numericValue,
     , m_numericValueType(numericValueType)
     , m_numericValue(numericValue)
     , m_unit(CSSPrimitiveValue::CSS_NUMBER)
+    , m_blockType(NotBlock)
 {
     ASSERT(type == NumberToken);
 }
@@ -59,4 +67,61 @@ void MediaQueryToken::convertToPercentage()
     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 = 5;
+        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");
+        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