| OLD | NEW |
| 1 /* | 1 /* |
| 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) | 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) |
| 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2012 Apple Inc. All rights reserv
ed. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2012 Apple Inc. All rights reserv
ed. |
| 4 * | 4 * |
| 5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
| 6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
| 7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
| 8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
| 9 * | 9 * |
| 10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 #include "core/rendering/style/RenderStyle.h" | 42 #include "core/rendering/style/RenderStyle.h" |
| 43 #include <wtf/ASCIICType.h> | 43 #include <wtf/ASCIICType.h> |
| 44 #include <wtf/DecimalNumber.h> | 44 #include <wtf/DecimalNumber.h> |
| 45 #include <wtf/StdLibExtras.h> | 45 #include <wtf/StdLibExtras.h> |
| 46 #include <wtf/text/StringBuffer.h> | 46 #include <wtf/text/StringBuffer.h> |
| 47 #include <wtf/text/StringBuilder.h> | 47 #include <wtf/text/StringBuilder.h> |
| 48 | 48 |
| 49 using namespace WTF; | 49 using namespace WTF; |
| 50 | 50 |
| 51 namespace WebCore { | 51 namespace WebCore { |
| 52 | 52 |
| 53 // Max/min values for CSS, needs to slightly smaller/larger than the true max/mi
n values to allow for rounding without overflowing. | 53 // Max/min values for CSS, needs to slightly smaller/larger than the true max/mi
n values to allow for rounding without overflowing. |
| 54 // Subtract two (rather than one) to allow for values to be converted to float a
nd back without exceeding the LayoutUnit::max. | 54 // Subtract two (rather than one) to allow for values to be converted to float a
nd back without exceeding the LayoutUnit::max. |
| 55 const int maxValueForCssLength = INT_MAX / kFixedPointDenominator - 2; | 55 const int maxValueForCssLength = INT_MAX / kFixedPointDenominator - 2; |
| 56 const int minValueForCssLength = INT_MIN / kFixedPointDenominator + 2; | 56 const int minValueForCssLength = INT_MIN / kFixedPointDenominator + 2; |
| 57 | 57 |
| 58 static inline bool isValidCSSUnitTypeForDoubleConversion(CSSPrimitiveValue::Unit
Types unitType) | 58 static inline bool isValidCSSUnitTypeForDoubleConversion(CSSPrimitiveValue::Unit
Types unitType) |
| 59 { | 59 { |
| 60 switch (unitType) { | 60 switch (unitType) { |
| 61 case CSSPrimitiveValue::CSS_CALC: | 61 case CSSPrimitiveValue::CSS_CALC: |
| 62 case CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_NUMBER: | 62 case CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_NUMBER: |
| 63 case CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_LENGTH: | 63 case CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_LENGTH: |
| 64 case CSSPrimitiveValue::CSS_CM: | 64 case CSSPrimitiveValue::CSS_CM: |
| 65 case CSSPrimitiveValue::CSS_DEG: | 65 case CSSPrimitiveValue::CSS_DEG: |
| 66 case CSSPrimitiveValue::CSS_DIMENSION: | 66 case CSSPrimitiveValue::CSS_DIMENSION: |
| 67 #if ENABLE(RESOLUTION_MEDIA_QUERY) | |
| 68 case CSSPrimitiveValue::CSS_DPPX: | 67 case CSSPrimitiveValue::CSS_DPPX: |
| 69 case CSSPrimitiveValue::CSS_DPI: | 68 case CSSPrimitiveValue::CSS_DPI: |
| 70 case CSSPrimitiveValue::CSS_DPCM: | 69 case CSSPrimitiveValue::CSS_DPCM: |
| 71 #endif | |
| 72 case CSSPrimitiveValue::CSS_EMS: | 70 case CSSPrimitiveValue::CSS_EMS: |
| 73 case CSSPrimitiveValue::CSS_EXS: | 71 case CSSPrimitiveValue::CSS_EXS: |
| 74 case CSSPrimitiveValue::CSS_GRAD: | 72 case CSSPrimitiveValue::CSS_GRAD: |
| 75 case CSSPrimitiveValue::CSS_HZ: | 73 case CSSPrimitiveValue::CSS_HZ: |
| 76 case CSSPrimitiveValue::CSS_IN: | 74 case CSSPrimitiveValue::CSS_IN: |
| 77 case CSSPrimitiveValue::CSS_KHZ: | 75 case CSSPrimitiveValue::CSS_KHZ: |
| 78 case CSSPrimitiveValue::CSS_MM: | 76 case CSSPrimitiveValue::CSS_MM: |
| 79 case CSSPrimitiveValue::CSS_MS: | 77 case CSSPrimitiveValue::CSS_MS: |
| 80 case CSSPrimitiveValue::CSS_NUMBER: | 78 case CSSPrimitiveValue::CSS_NUMBER: |
| 81 case CSSPrimitiveValue::CSS_PERCENTAGE: | 79 case CSSPrimitiveValue::CSS_PERCENTAGE: |
| 82 case CSSPrimitiveValue::CSS_PC: | 80 case CSSPrimitiveValue::CSS_PC: |
| 83 case CSSPrimitiveValue::CSS_PT: | 81 case CSSPrimitiveValue::CSS_PT: |
| 84 case CSSPrimitiveValue::CSS_PX: | 82 case CSSPrimitiveValue::CSS_PX: |
| 85 case CSSPrimitiveValue::CSS_RAD: | 83 case CSSPrimitiveValue::CSS_RAD: |
| 86 case CSSPrimitiveValue::CSS_REMS: | 84 case CSSPrimitiveValue::CSS_REMS: |
| 87 case CSSPrimitiveValue::CSS_CHS: | 85 case CSSPrimitiveValue::CSS_CHS: |
| 88 case CSSPrimitiveValue::CSS_S: | 86 case CSSPrimitiveValue::CSS_S: |
| 89 case CSSPrimitiveValue::CSS_TURN: | 87 case CSSPrimitiveValue::CSS_TURN: |
| 90 case CSSPrimitiveValue::CSS_VW: | 88 case CSSPrimitiveValue::CSS_VW: |
| 91 case CSSPrimitiveValue::CSS_VH: | 89 case CSSPrimitiveValue::CSS_VH: |
| 92 case CSSPrimitiveValue::CSS_VMIN: | 90 case CSSPrimitiveValue::CSS_VMIN: |
| 93 case CSSPrimitiveValue::CSS_VMAX: | 91 case CSSPrimitiveValue::CSS_VMAX: |
| 94 case CSSPrimitiveValue::CSS_FR: | 92 case CSSPrimitiveValue::CSS_FR: |
| 95 return true; | 93 return true; |
| 96 case CSSPrimitiveValue::CSS_ATTR: | 94 case CSSPrimitiveValue::CSS_ATTR: |
| 97 case CSSPrimitiveValue::CSS_COUNTER: | 95 case CSSPrimitiveValue::CSS_COUNTER: |
| 98 case CSSPrimitiveValue::CSS_COUNTER_NAME: | 96 case CSSPrimitiveValue::CSS_COUNTER_NAME: |
| 99 #if !ENABLE(RESOLUTION_MEDIA_QUERY) | |
| 100 case CSSPrimitiveValue::CSS_DPPX: | |
| 101 case CSSPrimitiveValue::CSS_DPI: | |
| 102 case CSSPrimitiveValue::CSS_DPCM: | |
| 103 #endif | |
| 104 case CSSPrimitiveValue::CSS_IDENT: | 97 case CSSPrimitiveValue::CSS_IDENT: |
| 105 case CSSPrimitiveValue::CSS_PAIR: | 98 case CSSPrimitiveValue::CSS_PAIR: |
| 106 case CSSPrimitiveValue::CSS_PARSER_HEXCOLOR: | 99 case CSSPrimitiveValue::CSS_PARSER_HEXCOLOR: |
| 107 case CSSPrimitiveValue::CSS_PARSER_IDENTIFIER: | 100 case CSSPrimitiveValue::CSS_PARSER_IDENTIFIER: |
| 108 case CSSPrimitiveValue::CSS_PARSER_INTEGER: | 101 case CSSPrimitiveValue::CSS_PARSER_INTEGER: |
| 109 case CSSPrimitiveValue::CSS_PARSER_OPERATOR: | 102 case CSSPrimitiveValue::CSS_PARSER_OPERATOR: |
| 110 case CSSPrimitiveValue::CSS_RECT: | 103 case CSSPrimitiveValue::CSS_RECT: |
| 111 case CSSPrimitiveValue::CSS_QUAD: | 104 case CSSPrimitiveValue::CSS_QUAD: |
| 112 case CSSPrimitiveValue::CSS_RGBCOLOR: | 105 case CSSPrimitiveValue::CSS_RGBCOLOR: |
| 113 case CSSPrimitiveValue::CSS_SHAPE: | 106 case CSSPrimitiveValue::CSS_SHAPE: |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 case CSSPrimitiveValue::CSS_TURN: | 141 case CSSPrimitiveValue::CSS_TURN: |
| 149 return CSSPrimitiveValue::UAngle; | 142 return CSSPrimitiveValue::UAngle; |
| 150 case CSSPrimitiveValue::CSS_HZ: | 143 case CSSPrimitiveValue::CSS_HZ: |
| 151 case CSSPrimitiveValue::CSS_KHZ: | 144 case CSSPrimitiveValue::CSS_KHZ: |
| 152 return CSSPrimitiveValue::UFrequency; | 145 return CSSPrimitiveValue::UFrequency; |
| 153 case CSSPrimitiveValue::CSS_VW: | 146 case CSSPrimitiveValue::CSS_VW: |
| 154 case CSSPrimitiveValue::CSS_VH: | 147 case CSSPrimitiveValue::CSS_VH: |
| 155 case CSSPrimitiveValue::CSS_VMIN: | 148 case CSSPrimitiveValue::CSS_VMIN: |
| 156 case CSSPrimitiveValue::CSS_VMAX: | 149 case CSSPrimitiveValue::CSS_VMAX: |
| 157 return CSSPrimitiveValue::UViewportPercentageLength; | 150 return CSSPrimitiveValue::UViewportPercentageLength; |
| 158 #if ENABLE(RESOLUTION_MEDIA_QUERY) | |
| 159 case CSSPrimitiveValue::CSS_DPPX: | 151 case CSSPrimitiveValue::CSS_DPPX: |
| 160 case CSSPrimitiveValue::CSS_DPI: | 152 case CSSPrimitiveValue::CSS_DPI: |
| 161 case CSSPrimitiveValue::CSS_DPCM: | 153 case CSSPrimitiveValue::CSS_DPCM: |
| 162 return CSSPrimitiveValue::UResolution; | 154 return CSSPrimitiveValue::UResolution; |
| 163 #endif | |
| 164 default: | 155 default: |
| 165 return CSSPrimitiveValue::UOther; | 156 return CSSPrimitiveValue::UOther; |
| 166 } | 157 } |
| 167 } | 158 } |
| 168 | 159 |
| 169 typedef HashMap<const CSSPrimitiveValue*, String> CSSTextCache; | 160 typedef HashMap<const CSSPrimitiveValue*, String> CSSTextCache; |
| 170 static CSSTextCache& cssTextCache() | 161 static CSSTextCache& cssTextCache() |
| 171 { | 162 { |
| 172 DEFINE_STATIC_LOCAL(CSSTextCache, cache, ()); | 163 DEFINE_STATIC_LOCAL(CSSTextCache, cache, ()); |
| 173 return cache; | 164 return cache; |
| (...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 655 case UPercent: | 646 case UPercent: |
| 656 return CSS_UNKNOWN; // Cannot convert between numbers and percent. | 647 return CSS_UNKNOWN; // Cannot convert between numbers and percent. |
| 657 case UTime: | 648 case UTime: |
| 658 return CSS_MS; | 649 return CSS_MS; |
| 659 case UAngle: | 650 case UAngle: |
| 660 return CSS_DEG; | 651 return CSS_DEG; |
| 661 case UFrequency: | 652 case UFrequency: |
| 662 return CSS_HZ; | 653 return CSS_HZ; |
| 663 case UViewportPercentageLength: | 654 case UViewportPercentageLength: |
| 664 return CSS_UNKNOWN; // Cannot convert between numbers and relative lengt
hs. | 655 return CSS_UNKNOWN; // Cannot convert between numbers and relative lengt
hs. |
| 665 #if ENABLE(RESOLUTION_MEDIA_QUERY) | |
| 666 case UResolution: | 656 case UResolution: |
| 667 return CSS_DPPX; | 657 return CSS_DPPX; |
| 668 #endif | |
| 669 default: | 658 default: |
| 670 return CSS_UNKNOWN; | 659 return CSS_UNKNOWN; |
| 671 } | 660 } |
| 672 } | 661 } |
| 673 | 662 |
| 674 bool CSSPrimitiveValue::getDoubleValueInternal(UnitTypes requestedUnitType, doub
le* result) const | 663 bool CSSPrimitiveValue::getDoubleValueInternal(UnitTypes requestedUnitType, doub
le* result) const |
| 675 { | 664 { |
| 676 if (!isValidCSSUnitTypeForDoubleConversion(static_cast<UnitTypes>(m_primitiv
eUnitType)) || !isValidCSSUnitTypeForDoubleConversion(requestedUnitType)) | 665 if (!isValidCSSUnitTypeForDoubleConversion(static_cast<UnitTypes>(m_primitiv
eUnitType)) || !isValidCSSUnitTypeForDoubleConversion(requestedUnitType)) |
| 677 return false; | 666 return false; |
| 678 | 667 |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 874 break; | 863 break; |
| 875 case CSS_CHS: | 864 case CSS_CHS: |
| 876 text = formatNumber(m_value.num, "ch"); | 865 text = formatNumber(m_value.num, "ch"); |
| 877 break; | 866 break; |
| 878 case CSS_PX: | 867 case CSS_PX: |
| 879 text = formatNumber(m_value.num, "px"); | 868 text = formatNumber(m_value.num, "px"); |
| 880 break; | 869 break; |
| 881 case CSS_CM: | 870 case CSS_CM: |
| 882 text = formatNumber(m_value.num, "cm"); | 871 text = formatNumber(m_value.num, "cm"); |
| 883 break; | 872 break; |
| 884 #if ENABLE(RESOLUTION_MEDIA_QUERY) | |
| 885 case CSS_DPPX: | 873 case CSS_DPPX: |
| 886 text = formatNumber(m_value.num, "dppx"); | 874 text = formatNumber(m_value.num, "dppx"); |
| 887 break; | 875 break; |
| 888 case CSS_DPI: | 876 case CSS_DPI: |
| 889 text = formatNumber(m_value.num, "dpi"); | 877 text = formatNumber(m_value.num, "dpi"); |
| 890 break; | 878 break; |
| 891 case CSS_DPCM: | 879 case CSS_DPCM: |
| 892 text = formatNumber(m_value.num, "dpcm"); | 880 text = formatNumber(m_value.num, "dpcm"); |
| 893 break; | 881 break; |
| 894 #endif | |
| 895 case CSS_MM: | 882 case CSS_MM: |
| 896 text = formatNumber(m_value.num, "mm"); | 883 text = formatNumber(m_value.num, "mm"); |
| 897 break; | 884 break; |
| 898 case CSS_IN: | 885 case CSS_IN: |
| 899 text = formatNumber(m_value.num, "in"); | 886 text = formatNumber(m_value.num, "in"); |
| 900 break; | 887 break; |
| 901 case CSS_PT: | 888 case CSS_PT: |
| 902 text = formatNumber(m_value.num, "pt"); | 889 text = formatNumber(m_value.num, "pt"); |
| 903 break; | 890 break; |
| 904 case CSS_PC: | 891 case CSS_PC: |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1167 case CSS_GRAD: | 1154 case CSS_GRAD: |
| 1168 case CSS_MS: | 1155 case CSS_MS: |
| 1169 case CSS_S: | 1156 case CSS_S: |
| 1170 case CSS_HZ: | 1157 case CSS_HZ: |
| 1171 case CSS_KHZ: | 1158 case CSS_KHZ: |
| 1172 case CSS_TURN: | 1159 case CSS_TURN: |
| 1173 case CSS_VW: | 1160 case CSS_VW: |
| 1174 case CSS_VH: | 1161 case CSS_VH: |
| 1175 case CSS_VMIN: | 1162 case CSS_VMIN: |
| 1176 case CSS_VMAX: | 1163 case CSS_VMAX: |
| 1177 #if ENABLE(RESOLUTION_MEDIA_QUERY) | |
| 1178 case CSS_DPPX: | 1164 case CSS_DPPX: |
| 1179 case CSS_DPI: | 1165 case CSS_DPI: |
| 1180 case CSS_DPCM: | 1166 case CSS_DPCM: |
| 1181 #endif | |
| 1182 result = CSSPrimitiveValue::create(m_value.num, static_cast<UnitTypes>(m
_primitiveUnitType)); | 1167 result = CSSPrimitiveValue::create(m_value.num, static_cast<UnitTypes>(m
_primitiveUnitType)); |
| 1183 break; | 1168 break; |
| 1184 case CSS_IDENT: | 1169 case CSS_IDENT: |
| 1185 result = CSSPrimitiveValue::createIdentifier(m_value.ident); | 1170 result = CSSPrimitiveValue::createIdentifier(m_value.ident); |
| 1186 break; | 1171 break; |
| 1187 case CSS_RGBCOLOR: | 1172 case CSS_RGBCOLOR: |
| 1188 result = CSSPrimitiveValue::createColor(m_value.rgbcolor); | 1173 result = CSSPrimitiveValue::createColor(m_value.rgbcolor); |
| 1189 break; | 1174 break; |
| 1190 case CSS_DIMENSION: | 1175 case CSS_DIMENSION: |
| 1191 case CSS_UNKNOWN: | 1176 case CSS_UNKNOWN: |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1210 case CSS_UNKNOWN: | 1195 case CSS_UNKNOWN: |
| 1211 return false; | 1196 return false; |
| 1212 case CSS_NUMBER: | 1197 case CSS_NUMBER: |
| 1213 case CSS_PARSER_INTEGER: | 1198 case CSS_PARSER_INTEGER: |
| 1214 case CSS_PERCENTAGE: | 1199 case CSS_PERCENTAGE: |
| 1215 case CSS_EMS: | 1200 case CSS_EMS: |
| 1216 case CSS_EXS: | 1201 case CSS_EXS: |
| 1217 case CSS_REMS: | 1202 case CSS_REMS: |
| 1218 case CSS_PX: | 1203 case CSS_PX: |
| 1219 case CSS_CM: | 1204 case CSS_CM: |
| 1220 #if ENABLE(RESOLUTION_MEDIA_QUERY) | |
| 1221 case CSS_DPPX: | 1205 case CSS_DPPX: |
| 1222 case CSS_DPI: | 1206 case CSS_DPI: |
| 1223 case CSS_DPCM: | 1207 case CSS_DPCM: |
| 1224 #endif | |
| 1225 case CSS_MM: | 1208 case CSS_MM: |
| 1226 case CSS_IN: | 1209 case CSS_IN: |
| 1227 case CSS_PT: | 1210 case CSS_PT: |
| 1228 case CSS_PC: | 1211 case CSS_PC: |
| 1229 case CSS_DEG: | 1212 case CSS_DEG: |
| 1230 case CSS_RAD: | 1213 case CSS_RAD: |
| 1231 case CSS_GRAD: | 1214 case CSS_GRAD: |
| 1232 case CSS_MS: | 1215 case CSS_MS: |
| 1233 case CSS_S: | 1216 case CSS_S: |
| 1234 case CSS_HZ: | 1217 case CSS_HZ: |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1301 break; | 1284 break; |
| 1302 case CSS_CALC: | 1285 case CSS_CALC: |
| 1303 info.addMember(m_value.calc, "value.calc"); | 1286 info.addMember(m_value.calc, "value.calc"); |
| 1304 break; | 1287 break; |
| 1305 default: | 1288 default: |
| 1306 break; | 1289 break; |
| 1307 } | 1290 } |
| 1308 } | 1291 } |
| 1309 | 1292 |
| 1310 } // namespace WebCore | 1293 } // namespace WebCore |
| OLD | NEW |