OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2003 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2003 Lars Knoll (knoll@kde.org) |
3 * Copyright (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) | 3 * Copyright (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) |
4 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. | 4 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. |
5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> | 5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> |
6 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> | 6 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> |
7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
8 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. | 8 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. |
9 * Copyright (C) 2012 Intel Corporation. All rights reserved. | 9 * Copyright (C) 2012 Intel Corporation. All rights reserved. |
10 * | 10 * |
(...skipping 731 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
742 case CSSPropertyOpacity: | 742 case CSSPropertyOpacity: |
743 case CSSPropertyWebkitBoxFlex: | 743 case CSSPropertyWebkitBoxFlex: |
744 validPrimitive = validUnit(value, FNumber); | 744 validPrimitive = validUnit(value, FNumber); |
745 break; | 745 break; |
746 case CSSPropertyWebkitBoxFlexGroup: | 746 case CSSPropertyWebkitBoxFlexGroup: |
747 validPrimitive = validUnit(value, FInteger | FNonNeg); | 747 validPrimitive = validUnit(value, FInteger | FNonNeg); |
748 break; | 748 break; |
749 case CSSPropertyWebkitBoxOrdinalGroup: | 749 case CSSPropertyWebkitBoxOrdinalGroup: |
750 validPrimitive = validUnit(value, FInteger | FNonNeg) && value->fValue; | 750 validPrimitive = validUnit(value, FInteger | FNonNeg) && value->fValue; |
751 break; | 751 break; |
752 case CSSPropertyFlex: { | |
753 ShorthandScope scope(this, propId); | |
754 if (id == CSSValueNone) { | |
755 addProperty(CSSPropertyFlexGrow, cssValuePool().createValue(0, CSSPr
imitiveValue::UnitType::Number), important); | |
756 addProperty(CSSPropertyFlexShrink, cssValuePool().createValue(0, CSS
PrimitiveValue::UnitType::Number), important); | |
757 addProperty(CSSPropertyFlexBasis, cssValuePool().createIdentifierVal
ue(CSSValueAuto), important); | |
758 return true; | |
759 } | |
760 return parseFlex(m_valueList, important); | |
761 } | |
762 case CSSPropertyFlexBasis: | |
763 // FIXME: Support intrinsic dimensions too. | |
764 if (id == CSSValueAuto) | |
765 validPrimitive = true; | |
766 else | |
767 validPrimitive = validUnit(value, FLength | FPercent | FNonNeg); | |
768 break; | |
769 case CSSPropertyFlexGrow: | |
770 case CSSPropertyFlexShrink: | |
771 validPrimitive = validUnit(value, FNumber | FNonNeg); | |
772 break; | |
773 case CSSPropertyOrder: | 752 case CSSPropertyOrder: |
774 validPrimitive = validUnit(value, FInteger); | 753 validPrimitive = validUnit(value, FInteger); |
775 break; | 754 break; |
776 case CSSPropertyTransformOrigin: { | 755 case CSSPropertyTransformOrigin: { |
777 RefPtrWillBeRawPtr<CSSValueList> list = parseTransformOrigin(); | 756 RefPtrWillBeRawPtr<CSSValueList> list = parseTransformOrigin(); |
778 if (!list) | 757 if (!list) |
779 return false; | 758 return false; |
780 // These values are added to match gecko serialization. | 759 // These values are added to match gecko serialization. |
781 if (list->length() == 1) | 760 if (list->length() == 1) |
782 list->append(cssValuePool().createValue(50, CSSPrimitiveValue::UnitT
ype::Percentage)); | 761 list->append(cssValuePool().createValue(50, CSSPrimitiveValue::UnitT
ype::Percentage)); |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
993 return parse4Values(propId, borderWidthShorthand().properties(), importa
nt); | 972 return parse4Values(propId, borderWidthShorthand().properties(), importa
nt); |
994 case CSSPropertyBorderStyle: | 973 case CSSPropertyBorderStyle: |
995 // <border-style>{1,4} | inherit | 974 // <border-style>{1,4} | inherit |
996 return parse4Values(propId, borderStyleShorthand().properties(), importa
nt); | 975 return parse4Values(propId, borderStyleShorthand().properties(), importa
nt); |
997 case CSSPropertyMargin: | 976 case CSSPropertyMargin: |
998 // <margin-width>{1,4} | inherit | 977 // <margin-width>{1,4} | inherit |
999 return parse4Values(propId, marginShorthand().properties(), important); | 978 return parse4Values(propId, marginShorthand().properties(), important); |
1000 case CSSPropertyPadding: | 979 case CSSPropertyPadding: |
1001 // <padding-width>{1,4} | inherit | 980 // <padding-width>{1,4} | inherit |
1002 return parse4Values(propId, paddingShorthand().properties(), important); | 981 return parse4Values(propId, paddingShorthand().properties(), important); |
1003 case CSSPropertyFlexFlow: | |
1004 return parseShorthand(propId, flexFlowShorthand(), important); | |
1005 case CSSPropertyListStyle: | 982 case CSSPropertyListStyle: |
1006 return parseShorthand(propId, listStyleShorthand(), important); | 983 return parseShorthand(propId, listStyleShorthand(), important); |
1007 case CSSPropertyWebkitColumnRule: | 984 case CSSPropertyWebkitColumnRule: |
1008 return parseShorthand(propId, webkitColumnRuleShorthand(), important); | 985 return parseShorthand(propId, webkitColumnRuleShorthand(), important); |
1009 case CSSPropertyInvalid: | 986 case CSSPropertyInvalid: |
1010 return false; | 987 return false; |
1011 // CSS Text Layout Module Level 3: Vertical writing support | 988 // CSS Text Layout Module Level 3: Vertical writing support |
1012 case CSSPropertyWebkitTextOrientation: | 989 case CSSPropertyWebkitTextOrientation: |
1013 // FIXME: For now just support sideways, sideways-right, upright and ver
tical-right. | 990 // FIXME: For now just support sideways, sideways-right, upright and ver
tical-right. |
1014 if (id == CSSValueSideways || id == CSSValueSidewaysRight || id == CSSVa
lueVerticalRight || id == CSSValueUpright) | 991 if (id == CSSValueSideways || id == CSSValueSidewaysRight || id == CSSVa
lueVerticalRight || id == CSSValueUpright) |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1170 case CSSPropertyFill: | 1147 case CSSPropertyFill: |
1171 case CSSPropertyStroke: | 1148 case CSSPropertyStroke: |
1172 case CSSPropertyStopColor: | 1149 case CSSPropertyStopColor: |
1173 case CSSPropertyFloodColor: | 1150 case CSSPropertyFloodColor: |
1174 case CSSPropertyLightingColor: | 1151 case CSSPropertyLightingColor: |
1175 case CSSPropertyPaintOrder: | 1152 case CSSPropertyPaintOrder: |
1176 case CSSPropertyMarker: | 1153 case CSSPropertyMarker: |
1177 case CSSPropertyMarkerStart: | 1154 case CSSPropertyMarkerStart: |
1178 case CSSPropertyMarkerMid: | 1155 case CSSPropertyMarkerMid: |
1179 case CSSPropertyMarkerEnd: | 1156 case CSSPropertyMarkerEnd: |
| 1157 case CSSPropertyFlex: |
| 1158 case CSSPropertyFlexBasis: |
| 1159 case CSSPropertyFlexGrow: |
| 1160 case CSSPropertyFlexShrink: |
| 1161 case CSSPropertyFlexFlow: |
1180 validPrimitive = false; | 1162 validPrimitive = false; |
1181 break; | 1163 break; |
1182 | 1164 |
1183 case CSSPropertyScrollSnapPointsX: | 1165 case CSSPropertyScrollSnapPointsX: |
1184 case CSSPropertyScrollSnapPointsY: | 1166 case CSSPropertyScrollSnapPointsY: |
1185 parsedValue = parseScrollSnapPoints(); | 1167 parsedValue = parseScrollSnapPoints(); |
1186 break; | 1168 break; |
1187 case CSSPropertyScrollSnapCoordinate: | 1169 case CSSPropertyScrollSnapCoordinate: |
1188 parsedValue = parseScrollSnapCoordinate(); | 1170 parsedValue = parseScrollSnapCoordinate(); |
1189 break; | 1171 break; |
(...skipping 2663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3853 val = m_valueList->next(); | 3835 val = m_valueList->next(); |
3854 if (val) { | 3836 if (val) { |
3855 mask = parseBorderImage(CSSPropertyWebkitBoxReflect); | 3837 mask = parseBorderImage(CSSPropertyWebkitBoxReflect); |
3856 if (!mask) | 3838 if (!mask) |
3857 return nullptr; | 3839 return nullptr; |
3858 } | 3840 } |
3859 | 3841 |
3860 return CSSReflectValue::create(direction.release(), offset.release(), mask.r
elease()); | 3842 return CSSReflectValue::create(direction.release(), offset.release(), mask.r
elease()); |
3861 } | 3843 } |
3862 | 3844 |
3863 static bool isFlexBasisMiddleArg(double flexGrow, double flexShrink, double unse
tValue, int argSize) | |
3864 { | |
3865 return flexGrow != unsetValue && flexShrink == unsetValue && argSize == 3; | |
3866 } | |
3867 | |
3868 bool CSSPropertyParser::parseFlex(CSSParserValueList* args, bool important) | |
3869 { | |
3870 if (!args || !args->size() || args->size() > 3) | |
3871 return false; | |
3872 static const double unsetValue = -1; | |
3873 double flexGrow = unsetValue; | |
3874 double flexShrink = unsetValue; | |
3875 RefPtrWillBeRawPtr<CSSPrimitiveValue> flexBasis = nullptr; | |
3876 | |
3877 while (CSSParserValue* arg = args->current()) { | |
3878 if (validUnit(arg, FNumber | FNonNeg)) { | |
3879 if (flexGrow == unsetValue) | |
3880 flexGrow = arg->fValue; | |
3881 else if (flexShrink == unsetValue) | |
3882 flexShrink = arg->fValue; | |
3883 else if (!arg->fValue) { | |
3884 // flex only allows a basis of 0 (sans units) if flex-grow and f
lex-shrink values have already been set. | |
3885 flexBasis = cssValuePool().createValue(0, CSSPrimitiveValue::Uni
tType::Pixels); | |
3886 } else { | |
3887 // We only allow 3 numbers without units if the last value is 0.
E.g., flex:1 1 1 is invalid. | |
3888 return false; | |
3889 } | |
3890 } else if (!flexBasis && (arg->id == CSSValueAuto || validUnit(arg, FLen
gth | FPercent | FNonNeg)) && !isFlexBasisMiddleArg(flexGrow, flexShrink, unsetV
alue, args->size())) | |
3891 flexBasis = parseValidPrimitive(arg->id, arg); | |
3892 else { | |
3893 // Not a valid arg for flex. | |
3894 return false; | |
3895 } | |
3896 args->next(); | |
3897 } | |
3898 | |
3899 if (flexGrow == unsetValue) | |
3900 flexGrow = 1; | |
3901 if (flexShrink == unsetValue) | |
3902 flexShrink = 1; | |
3903 if (!flexBasis) | |
3904 flexBasis = cssValuePool().createValue(0, CSSPrimitiveValue::UnitType::P
ercentage); | |
3905 | |
3906 addProperty(CSSPropertyFlexGrow, cssValuePool().createValue(clampTo<float>(f
lexGrow), CSSPrimitiveValue::UnitType::Number), important); | |
3907 addProperty(CSSPropertyFlexShrink, cssValuePool().createValue(clampTo<float>
(flexShrink), CSSPrimitiveValue::UnitType::Number), important); | |
3908 addProperty(CSSPropertyFlexBasis, flexBasis, important); | |
3909 return true; | |
3910 } | |
3911 | |
3912 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parsePosition(CSSParserValue
List* valueList) | 3845 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parsePosition(CSSParserValue
List* valueList) |
3913 { | 3846 { |
3914 RefPtrWillBeRawPtr<CSSValue> xValue = nullptr; | 3847 RefPtrWillBeRawPtr<CSSValue> xValue = nullptr; |
3915 RefPtrWillBeRawPtr<CSSValue> yValue = nullptr; | 3848 RefPtrWillBeRawPtr<CSSValue> yValue = nullptr; |
3916 parseFillPosition(valueList, xValue, yValue); | 3849 parseFillPosition(valueList, xValue, yValue); |
3917 if (!xValue || !yValue) | 3850 if (!xValue || !yValue) |
3918 return nullptr; | 3851 return nullptr; |
3919 return CSSValuePair::create(xValue.release(), yValue.release(), CSSValuePair
::KeepIdenticalValues); | 3852 return CSSValuePair::create(xValue.release(), yValue.release(), CSSValuePair
::KeepIdenticalValues); |
3920 } | 3853 } |
3921 | 3854 |
(...skipping 1652 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5574 value = m_valueList->current(); | 5507 value = m_valueList->current(); |
5575 if (commaConsumed && !value) | 5508 if (commaConsumed && !value) |
5576 return nullptr; | 5509 return nullptr; |
5577 } | 5510 } |
5578 if (!validPrimitive) | 5511 if (!validPrimitive) |
5579 return nullptr; | 5512 return nullptr; |
5580 return ret.release(); | 5513 return ret.release(); |
5581 } | 5514 } |
5582 | 5515 |
5583 } // namespace blink | 5516 } // namespace blink |
OLD | NEW |