Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Side by Side Diff: third_party/WebKit/Source/core/css/parser/LegacyCSSPropertyParser.cpp

Issue 1420003005: Parse motion shorthand in CSSPropertyParser with CSSParserTokens (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Standalone patch Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 21 matching lines...) Expand all
32 #include "core/css/CSSBorderImage.h" 32 #include "core/css/CSSBorderImage.h"
33 #include "core/css/CSSContentDistributionValue.h" 33 #include "core/css/CSSContentDistributionValue.h"
34 #include "core/css/CSSCounterValue.h" 34 #include "core/css/CSSCounterValue.h"
35 #include "core/css/CSSCrossfadeValue.h" 35 #include "core/css/CSSCrossfadeValue.h"
36 #include "core/css/CSSCursorImageValue.h" 36 #include "core/css/CSSCursorImageValue.h"
37 #include "core/css/CSSCustomIdentValue.h" 37 #include "core/css/CSSCustomIdentValue.h"
38 #include "core/css/CSSFunctionValue.h" 38 #include "core/css/CSSFunctionValue.h"
39 #include "core/css/CSSGridLineNamesValue.h" 39 #include "core/css/CSSGridLineNamesValue.h"
40 #include "core/css/CSSImageSetValue.h" 40 #include "core/css/CSSImageSetValue.h"
41 #include "core/css/CSSImageValue.h" 41 #include "core/css/CSSImageValue.h"
42 #include "core/css/CSSPathValue.h"
43 #include "core/css/CSSPrimitiveValueMappings.h" 42 #include "core/css/CSSPrimitiveValueMappings.h"
44 #include "core/css/CSSProperty.h" 43 #include "core/css/CSSProperty.h"
45 #include "core/css/CSSPropertyMetadata.h" 44 #include "core/css/CSSPropertyMetadata.h"
46 #include "core/css/CSSQuadValue.h" 45 #include "core/css/CSSQuadValue.h"
47 #include "core/css/CSSReflectValue.h" 46 #include "core/css/CSSReflectValue.h"
48 #include "core/css/CSSShadowValue.h" 47 #include "core/css/CSSShadowValue.h"
49 #include "core/css/CSSStringValue.h" 48 #include "core/css/CSSStringValue.h"
50 #include "core/css/CSSTimingFunctionValue.h" 49 #include "core/css/CSSTimingFunctionValue.h"
51 #include "core/css/CSSURIValue.h" 50 #include "core/css/CSSURIValue.h"
52 #include "core/css/CSSValuePair.h" 51 #include "core/css/CSSValuePair.h"
53 #include "core/css/CSSValuePool.h" 52 #include "core/css/CSSValuePool.h"
54 #include "core/css/HashTools.h" 53 #include "core/css/HashTools.h"
55 #include "core/css/parser/CSSParserFastPaths.h" 54 #include "core/css/parser/CSSParserFastPaths.h"
56 #include "core/css/parser/CSSParserValues.h" 55 #include "core/css/parser/CSSParserValues.h"
57 #include "core/frame/UseCounter.h" 56 #include "core/frame/UseCounter.h"
58 #include "core/style/GridCoordinate.h" 57 #include "core/style/GridCoordinate.h"
59 #include "core/svg/SVGPathUtilities.h"
60 #include "platform/RuntimeEnabledFeatures.h" 58 #include "platform/RuntimeEnabledFeatures.h"
61 59
62 namespace blink { 60 namespace blink {
63 61
64 template <unsigned N> 62 template <unsigned N>
65 static bool equalIgnoringCase(const CSSParserString& a, const char (&b)[N]) 63 static bool equalIgnoringCase(const CSSParserString& a, const char (&b)[N])
66 { 64 {
67 unsigned length = N - 1; // Ignore the trailing null character 65 unsigned length = N - 1; // Ignore the trailing null character
68 if (a.length() != length) 66 if (a.length() != length)
69 return false; 67 return false;
(...skipping 830 matching lines...) Expand 10 before | Expand all | Expand 10 after
900 RefPtrWillBeRawPtr<CSSValueList> list = parseTransformOrigin(); 898 RefPtrWillBeRawPtr<CSSValueList> list = parseTransformOrigin();
901 if (!list || list->length() == 3) 899 if (!list || list->length() == 3)
902 return false; 900 return false;
903 // This values are added to match gecko serialization. 901 // This values are added to match gecko serialization.
904 if (list->length() == 1) 902 if (list->length() == 1)
905 list->append(cssValuePool().createValue(50, CSSPrimitiveValue::UnitT ype::Percentage)); 903 list->append(cssValuePool().createValue(50, CSSPrimitiveValue::UnitT ype::Percentage));
906 addProperty(propId, list.release(), important); 904 addProperty(propId, list.release(), important);
907 return true; 905 return true;
908 } 906 }
909 907
910 case CSSPropertyMotion:
911 // <motion-path> && <motion-offset> && <motion-rotation>
912 ASSERT(RuntimeEnabledFeatures::cssMotionPathEnabled());
913 return parseShorthand(propId, motionShorthand(), important);
914 case CSSPropertyMotionPath:
915 ASSERT(RuntimeEnabledFeatures::cssMotionPathEnabled());
916 if (id == CSSValueNone)
917 validPrimitive = true;
918 else
919 parsedValue = parseMotionPath();
920 break;
921 case CSSPropertyMotionOffset:
922 ASSERT(RuntimeEnabledFeatures::cssMotionPathEnabled());
923 validPrimitive = validUnit(value, FLength | FPercent);
924 break;
925 case CSSPropertyMotionRotation:
926 ASSERT(RuntimeEnabledFeatures::cssMotionPathEnabled());
927 parsedValue = parseMotionRotation();
928 break;
929
930 case CSSPropertyJustifyContent: 908 case CSSPropertyJustifyContent:
931 ASSERT(RuntimeEnabledFeatures::cssGridLayoutEnabled()); 909 ASSERT(RuntimeEnabledFeatures::cssGridLayoutEnabled());
932 parsedValue = parseContentDistributionOverflowPosition(); 910 parsedValue = parseContentDistributionOverflowPosition();
933 break; 911 break;
934 case CSSPropertyJustifySelf: 912 case CSSPropertyJustifySelf:
935 ASSERT(RuntimeEnabledFeatures::cssGridLayoutEnabled()); 913 ASSERT(RuntimeEnabledFeatures::cssGridLayoutEnabled());
936 return parseItemPositionOverflowPosition(propId, important); 914 return parseItemPositionOverflowPosition(propId, important);
937 case CSSPropertyJustifyItems: 915 case CSSPropertyJustifyItems:
938 ASSERT(RuntimeEnabledFeatures::cssGridLayoutEnabled()); 916 ASSERT(RuntimeEnabledFeatures::cssGridLayoutEnabled());
939 917
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
1206 case CSSPropertyOrphans: 1184 case CSSPropertyOrphans:
1207 case CSSPropertyWidows: 1185 case CSSPropertyWidows:
1208 case CSSPropertyWebkitTapHighlightColor: 1186 case CSSPropertyWebkitTapHighlightColor:
1209 case CSSPropertyWebkitTextFillColor: 1187 case CSSPropertyWebkitTextFillColor:
1210 case CSSPropertyColor: 1188 case CSSPropertyColor:
1211 case CSSPropertyZIndex: 1189 case CSSPropertyZIndex:
1212 case CSSPropertyTextShadow: 1190 case CSSPropertyTextShadow:
1213 case CSSPropertyBoxShadow: 1191 case CSSPropertyBoxShadow:
1214 case CSSPropertyWebkitFilter: 1192 case CSSPropertyWebkitFilter:
1215 case CSSPropertyBackdropFilter: 1193 case CSSPropertyBackdropFilter:
1194 case CSSPropertyMotionPath:
1195 case CSSPropertyMotionOffset:
1196 case CSSPropertyMotionRotation:
1197 case CSSPropertyMotion:
1216 validPrimitive = false; 1198 validPrimitive = false;
1217 break; 1199 break;
1218 1200
1219 case CSSPropertyScrollSnapPointsX: 1201 case CSSPropertyScrollSnapPointsX:
1220 case CSSPropertyScrollSnapPointsY: 1202 case CSSPropertyScrollSnapPointsY:
1221 parsedValue = parseScrollSnapPoints(); 1203 parsedValue = parseScrollSnapPoints();
1222 break; 1204 break;
1223 case CSSPropertyScrollSnapCoordinate: 1205 case CSSPropertyScrollSnapCoordinate:
1224 parsedValue = parseScrollSnapCoordinate(); 1206 parsedValue = parseScrollSnapCoordinate();
1225 break; 1207 break;
(...skipping 4771 matching lines...) Expand 10 before | Expand all | Expand 10 after
5997 if (!isComma(a)) 5979 if (!isComma(a))
5998 return nullptr; 5980 return nullptr;
5999 a = args->next(); 5981 a = args->next();
6000 5982
6001 argNumber++; 5983 argNumber++;
6002 } 5984 }
6003 5985
6004 return transformValue.release(); 5986 return transformValue.release();
6005 } 5987 }
6006 5988
6007 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseMotionPath()
6008 {
6009 CSSParserValue* value = m_valueList->current();
6010
6011 // FIXME: Add support for <url>, <basic-shape>, <geometry-box>.
6012 if (value->m_unit != CSSParserValue::Function || value->function->id != CSSV aluePath)
6013 return nullptr;
6014
6015 // FIXME: Add support for <fill-rule>.
6016 CSSParserValueList* functionArgs = value->function->args.get();
6017 if (!functionArgs || functionArgs->size() != 1 || !functionArgs->current())
6018 return nullptr;
6019
6020 CSSParserValue* arg = functionArgs->current();
6021 if (arg->m_unit != CSSParserValue::String)
6022 return nullptr;
6023
6024 String pathString = arg->string;
6025 Path path;
6026 if (!buildPathFromString(pathString, path))
6027 return nullptr;
6028
6029 m_valueList->next();
6030 return CSSPathValue::create(pathString);
6031 }
6032
6033 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseMotionRotation()
6034 {
6035 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSpaceSeparated() ;
6036 bool hasAutoOrReverse = false;
6037 bool hasAngle = false;
6038
6039 for (CSSParserValue* value = m_valueList->current(); value; value = m_valueL ist->next()) {
6040 if ((value->id == CSSValueAuto || value->id == CSSValueReverse) && !hasA utoOrReverse) {
6041 list->append(cssValuePool().createIdentifierValue(value->id));
6042 hasAutoOrReverse = true;
6043 } else if (!hasAngle && validUnit(value, FAngle)) {
6044 list->append(createPrimitiveNumericValue(value));
6045 hasAngle = true;
6046 } else {
6047 break;
6048 }
6049 }
6050
6051 if (!list->length())
6052 return nullptr;
6053
6054 return list.release();
6055 }
6056
6057 } // namespace blink 5989 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698