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

Side by Side Diff: Source/core/css/parser/CSSPropertyParser.cpp

Issue 333423005: [CSS Grid Layout] Implement 'justify-items' parsing (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Patch rebased. Created 6 years, 5 months 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 1179 matching lines...) Expand 10 before | Expand all | Expand 10 after
1190 return true; 1190 return true;
1191 } 1191 }
1192 return false; 1192 return false;
1193 } 1193 }
1194 1194
1195 case CSSPropertyJustifySelf: 1195 case CSSPropertyJustifySelf:
1196 if (!RuntimeEnabledFeatures::cssGridLayoutEnabled()) 1196 if (!RuntimeEnabledFeatures::cssGridLayoutEnabled())
1197 return false; 1197 return false;
1198 1198
1199 return parseItemPositionOverflowPosition(propId, important); 1199 return parseItemPositionOverflowPosition(propId, important);
1200 case CSSPropertyJustifyItems:
1201 if (!RuntimeEnabledFeatures::cssGridLayoutEnabled())
1202 return false;
1203
1204 if (parseLegacyPosition(propId, important))
1205 return true;
1206
1207 m_valueList->setCurrentIndex(0);
1208 return parseItemPositionOverflowPosition(propId, important);
1200 case CSSPropertyGridAutoFlow: 1209 case CSSPropertyGridAutoFlow:
1201 if (!RuntimeEnabledFeatures::cssGridLayoutEnabled()) 1210 if (!RuntimeEnabledFeatures::cssGridLayoutEnabled())
1202 return false; 1211 return false;
1203 parsedValue = parseGridAutoFlow(*m_valueList); 1212 parsedValue = parseGridAutoFlow(*m_valueList);
1204 break; 1213 break;
1205 case CSSPropertyGridAutoColumns: 1214 case CSSPropertyGridAutoColumns:
1206 case CSSPropertyGridAutoRows: 1215 case CSSPropertyGridAutoRows:
1207 if (!RuntimeEnabledFeatures::cssGridLayoutEnabled()) 1216 if (!RuntimeEnabledFeatures::cssGridLayoutEnabled())
1208 return false; 1217 return false;
1209 parsedValue = parseGridTrackSize(*m_valueList); 1218 parsedValue = parseGridTrackSize(*m_valueList);
(...skipping 2963 matching lines...) Expand 10 before | Expand all | Expand 10 after
4173 } 4182 }
4174 default: 4183 default:
4175 return nullptr; 4184 return nullptr;
4176 } 4185 }
4177 4186
4178 if (hasRoundedInset) 4187 if (hasRoundedInset)
4179 return parseInsetRoundedCorners(shape, args); 4188 return parseInsetRoundedCorners(shape, args);
4180 return shape; 4189 return shape;
4181 } 4190 }
4182 4191
4192 static bool isBaselinePositionKeyword(CSSValueID id)
4193 {
4194 return id == CSSValueBaseline || id == CSSValueLastBaseline;
4195 }
4196
4183 static bool isItemPositionKeyword(CSSValueID id) 4197 static bool isItemPositionKeyword(CSSValueID id)
4184 { 4198 {
4185 return id == CSSValueStart || id == CSSValueEnd || id == CSSValueCenter 4199 return id == CSSValueStart || id == CSSValueEnd || id == CSSValueCenter
4186 || id == CSSValueSelfStart || id == CSSValueSelfEnd || id == CSSValueFle xStart 4200 || id == CSSValueSelfStart || id == CSSValueSelfEnd || id == CSSValueFle xStart
4187 || id == CSSValueFlexEnd || id == CSSValueLeft || id == CSSValueRight; 4201 || id == CSSValueFlexEnd || id == CSSValueLeft || id == CSSValueRight;
4188 } 4202 }
4189 4203
4204 bool CSSPropertyParser::parseLegacyPosition(CSSPropertyID propId, bool important )
4205 {
4206 // [ legacy && [ left | right | center ]
4207
4208 CSSParserValue* value = m_valueList->current();
4209 if (!value)
4210 return false;
4211
4212 if (value->id == CSSValueLegacy) {
4213 value = m_valueList->next();
4214 if (!value)
4215 return false;
4216 if (value->id != CSSValueCenter && value->id != CSSValueLeft && value->i d != CSSValueRight)
4217 return false;
4218 } else if (value->id == CSSValueCenter || value->id == CSSValueLeft || value ->id == CSSValueRight) {
4219 if (!m_valueList->next() || m_valueList->current()->id != CSSValueLegacy )
4220 return false;
4221 } else {
4222 return false;
4223 }
4224
4225 addProperty(propId, createPrimitiveValuePair(cssValuePool().createIdentifier Value(CSSValueLegacy), cssValuePool().createIdentifierValue(value->id)), importa nt);
4226 return !m_valueList->next();
4227 }
4228
4190 bool CSSPropertyParser::parseItemPositionOverflowPosition(CSSPropertyID propId, bool important) 4229 bool CSSPropertyParser::parseItemPositionOverflowPosition(CSSPropertyID propId, bool important)
4191 { 4230 {
4192 // auto | baseline | stretch | [<item-position> && <overflow-position>? ] 4231 // auto | stretch | <baseline-position> | [<item-position> && <overflow-posi tion>? ]
4232 // <baseline-position> = baseline | last-baseline;
4193 // <item-position> = center | start | end | self-start | self-end | flex-sta rt | flex-end | left | right; 4233 // <item-position> = center | start | end | self-start | self-end | flex-sta rt | flex-end | left | right;
4194 // <overflow-position> = true | safe 4234 // <overflow-position> = true | safe
4195 4235
4196 CSSParserValue* value = m_valueList->current(); 4236 CSSParserValue* value = m_valueList->current();
4237 if (!value)
4238 return false;
4197 4239
4198 if (value->id == CSSValueAuto || value->id == CSSValueBaseline || value->id == CSSValueStretch) { 4240 if (value->id == CSSValueAuto || value->id == CSSValueStretch || isBaselineP ositionKeyword(value->id)) {
4199 if (m_valueList->next()) 4241 if (m_valueList->next())
4200 return false; 4242 return false;
4201 4243
4202 addProperty(propId, cssValuePool().createIdentifierValue(value->id), imp ortant); 4244 addProperty(propId, cssValuePool().createIdentifierValue(value->id), imp ortant);
4203 return true; 4245 return true;
4204 } 4246 }
4205 4247
4206 RefPtrWillBeRawPtr<CSSPrimitiveValue> position = nullptr; 4248 RefPtrWillBeRawPtr<CSSPrimitiveValue> position = nullptr;
4207 RefPtrWillBeRawPtr<CSSPrimitiveValue> overflowAlignmentKeyword = nullptr; 4249 RefPtrWillBeRawPtr<CSSPrimitiveValue> overflowAlignmentKeyword = nullptr;
4208 if (isItemPositionKeyword(value->id)) { 4250 if (isItemPositionKeyword(value->id)) {
(...skipping 4263 matching lines...) Expand 10 before | Expand all | Expand 10 after
8472 parsedValues->append(CSSPrimitiveValue::createIdentifier(CSSValueFill)); 8514 parsedValues->append(CSSPrimitiveValue::createIdentifier(CSSValueFill));
8473 if (!seenStroke) 8515 if (!seenStroke)
8474 parsedValues->append(CSSPrimitiveValue::createIdentifier(CSSValueStroke) ); 8516 parsedValues->append(CSSPrimitiveValue::createIdentifier(CSSValueStroke) );
8475 if (!seenMarkers) 8517 if (!seenMarkers)
8476 parsedValues->append(CSSPrimitiveValue::createIdentifier(CSSValueMarkers )); 8518 parsedValues->append(CSSPrimitiveValue::createIdentifier(CSSValueMarkers ));
8477 8519
8478 return parsedValues.release(); 8520 return parsedValues.release();
8479 } 8521 }
8480 8522
8481 } // namespace WebCore 8523 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698