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

Side by Side Diff: Source/core/css/parser/BisonCSSParser-in.cpp

Issue 167603002: Implement 'will-change' parsing (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 10 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 | Annotate | Revision Log
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 2446 matching lines...) Expand 10 before | Expand all | Expand 10 after
2457 break; 2457 break;
2458 case CSSPropertyWebkitColumnSpan: // none | all | 1 (will be dropped in the unprefixed property) 2458 case CSSPropertyWebkitColumnSpan: // none | all | 1 (will be dropped in the unprefixed property)
2459 if (id == CSSValueAll || id == CSSValueNone) 2459 if (id == CSSValueAll || id == CSSValueNone)
2460 validPrimitive = true; 2460 validPrimitive = true;
2461 else 2461 else
2462 validPrimitive = validUnit(value, FNumber | FNonNeg) && value->fValu e == 1; 2462 validPrimitive = validUnit(value, FNumber | FNonNeg) && value->fValu e == 1;
2463 break; 2463 break;
2464 case CSSPropertyWebkitColumnWidth: // auto | <length> 2464 case CSSPropertyWebkitColumnWidth: // auto | <length>
2465 parsedValue = parseColumnWidth(); 2465 parsedValue = parseColumnWidth();
2466 break; 2466 break;
2467 case CSSPropertyWillChange:
2468 if (!RuntimeEnabledFeatures::cssWillChangeEnabled())
2469 return false;
2470 return parseWillChange(important);
2467 // End of CSS3 properties 2471 // End of CSS3 properties
2468 2472
2469 // Apple specific properties. These will never be standardized and are pure ly to 2473 // Apple specific properties. These will never be standardized and are pure ly to
2470 // support custom WebKit-based Apple applications. 2474 // support custom WebKit-based Apple applications.
2471 case CSSPropertyWebkitLineClamp: 2475 case CSSPropertyWebkitLineClamp:
2472 // When specifying number of lines, don't allow 0 as a valid value 2476 // When specifying number of lines, don't allow 0 as a valid value
2473 // When specifying either type of unit, require non-negative integers 2477 // When specifying either type of unit, require non-negative integers
2474 validPrimitive = (!id && (value->unit == CSSPrimitiveValue::CSS_PERCENTA GE || value->fValue) && validUnit(value, FInteger | FPercent | FNonNeg, HTMLQuir ksMode)); 2478 validPrimitive = (!id && (value->unit == CSSPrimitiveValue::CSS_PERCENTA GE || value->fValue) && validUnit(value, FInteger | FPercent | FNonNeg, HTMLQuir ksMode));
2475 break; 2479 break;
2476 2480
(...skipping 5881 matching lines...) Expand 10 before | Expand all | Expand 10 after
8358 if (!isComma(arg)) 8362 if (!isComma(arg))
8359 return 0; 8363 return 0;
8360 8364
8361 // Skip the comma and move on to the next argument. 8365 // Skip the comma and move on to the next argument.
8362 arg = functionArgs->next(); 8366 arg = functionArgs->next();
8363 } 8367 }
8364 8368
8365 return imageSet.release(); 8369 return imageSet.release();
8366 } 8370 }
8367 8371
8372 bool BisonCSSParser::parseWillChange(bool important)
8373 {
8374 ASSERT(RuntimeEnabledFeatures::cssWillChangeEnabled());
8375
8376 RefPtrWillBeRawPtr<CSSValueList> values = CSSValueList::createCommaSeparated ();
8377 if (m_valueList->current()->id == CSSValueAuto) {
8378 if (m_valueList->next())
8379 return false;
8380 }
8381
8382 CSSParserValue* currentValue;
8383 bool expectComma = false;
8384
8385 // Every comma-separated list of CSS_IDENTs is a valid will-change value,
8386 // unless the list includes an explicitly disallowed CSS_IDENT.
8387 while ((currentValue = m_valueList->current())) {
8388 if (expectComma) {
8389 if (!isComma(currentValue))
8390 return false;
8391 expectComma = false;
8392 m_valueList->next();
8393 continue;
8394 }
8395
8396 if (currentValue->unit != CSSPrimitiveValue::CSS_IDENT)
8397 return false;
8398
8399 if (CSSPropertyID property = cssPropertyID(currentValue->string)) {
8400 if (property == CSSPropertyWillChange)
8401 return false;
8402 values->append(cssValuePool().createIdentifierValue(property));
8403 } else {
8404 switch (currentValue->id) {
8405 case CSSValueNone:
8406 case CSSValueAll:
8407 case CSSValueAuto:
8408 case CSSValueDefault:
8409 case CSSValueInitial:
8410 case CSSValueInherit:
8411 return false;
8412 case CSSValueContents:
8413 case CSSValueScrollPosition:
8414 values->append(cssValuePool().createIdentifierValue(currentValue ->id));
8415 break;
8416 default:
8417 break;
8418 }
8419 }
8420 expectComma = true;
8421 m_valueList->next();
8422 }
8423
8424 addProperty(CSSPropertyWillChange, values.release(), important);
8425 return true;
8426 }
8427
8368 class TransformOperationInfo { 8428 class TransformOperationInfo {
8369 public: 8429 public:
8370 TransformOperationInfo(const CSSParserString& name) 8430 TransformOperationInfo(const CSSParserString& name)
8371 : m_type(CSSTransformValue::UnknownTransformOperation) 8431 : m_type(CSSTransformValue::UnknownTransformOperation)
8372 , m_argCount(1) 8432 , m_argCount(1)
8373 , m_allowSingleArgument(false) 8433 , m_allowSingleArgument(false)
8374 , m_unit(BisonCSSParser::FUnknown) 8434 , m_unit(BisonCSSParser::FUnknown)
8375 { 8435 {
8376 const UChar* characters; 8436 const UChar* characters;
8377 unsigned nameLength = name.length(); 8437 unsigned nameLength = name.length();
(...skipping 1718 matching lines...) Expand 10 before | Expand all | Expand 10 after
10096 { 10156 {
10097 // The tokenizer checks for the construct of an+b. 10157 // The tokenizer checks for the construct of an+b.
10098 // However, since the {ident} rule precedes the {nth} rule, some of those 10158 // However, since the {ident} rule precedes the {nth} rule, some of those
10099 // tokens are identified as string literal. Furthermore we need to accept 10159 // tokens are identified as string literal. Furthermore we need to accept
10100 // "odd" and "even" which does not match to an+b. 10160 // "odd" and "even" which does not match to an+b.
10101 return equalIgnoringCase(token, "odd") || equalIgnoringCase(token, "even") 10161 return equalIgnoringCase(token, "odd") || equalIgnoringCase(token, "even")
10102 || equalIgnoringCase(token, "n") || equalIgnoringCase(token, "-n"); 10162 || equalIgnoringCase(token, "n") || equalIgnoringCase(token, "-n");
10103 } 10163 }
10104 10164
10105 } 10165 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698