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

Side by Side Diff: Source/WebCore/css/CSSParser.cpp

Issue 12470005: Merge 144626 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1410/
Patch Set: Created 7 years, 9 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
« no previous file with comments | « Source/WebCore/css/CSSParser.h ('k') | Source/WebCore/css/CSSProperty.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1457 matching lines...) Expand 10 before | Expand all | Expand 10 after
1468 #else 1468 #else
1469 filterProperties(true, m_parsedProperties, results, unusedEntries, seenPrope rties); 1469 filterProperties(true, m_parsedProperties, results, unusedEntries, seenPrope rties);
1470 filterProperties(false, m_parsedProperties, results, unusedEntries, seenProp erties); 1470 filterProperties(false, m_parsedProperties, results, unusedEntries, seenProp erties);
1471 #endif 1471 #endif
1472 if (unusedEntries) 1472 if (unusedEntries)
1473 results.remove(0, unusedEntries); 1473 results.remove(0, unusedEntries);
1474 1474
1475 return StylePropertySet::createImmutable(results.data(), results.size(), m_c ontext.mode); 1475 return StylePropertySet::createImmutable(results.data(), results.size(), m_c ontext.mode);
1476 } 1476 }
1477 1477
1478 void CSSParser::addPropertyWithPrefixingVariant(CSSPropertyID propId, PassRefPtr <CSSValue> value, bool important, bool implicit)
1479 {
1480 RefPtr<CSSValue> val = value.get();
1481 addProperty(propId, value, important, implicit);
1482
1483 CSSPropertyID prefixingVariant = prefixingVariantForPropertyId(propId);
1484 if (prefixingVariant == propId)
1485 return;
1486 addProperty(prefixingVariant, val.release(), important, implicit);
1487 }
1488
1478 void CSSParser::addProperty(CSSPropertyID propId, PassRefPtr<CSSValue> value, bo ol important, bool implicit) 1489 void CSSParser::addProperty(CSSPropertyID propId, PassRefPtr<CSSValue> value, bo ol important, bool implicit)
1479 { 1490 {
1480 m_parsedProperties.append(CSSProperty(propId, value, important, m_currentSho rthand, m_implicitShorthand || implicit)); 1491 m_parsedProperties.append(CSSProperty(propId, value, important, m_currentSho rthand, m_implicitShorthand || implicit));
1481 } 1492 }
1482 1493
1483 void CSSParser::rollbackLastProperties(int num) 1494 void CSSParser::rollbackLastProperties(int num)
1484 { 1495 {
1485 ASSERT(num >= 0); 1496 ASSERT(num >= 0);
1486 ASSERT(m_parsedProperties.size() >= static_cast<unsigned>(num)); 1497 ASSERT(m_parsedProperties.size() >= static_cast<unsigned>(num));
1487 m_parsedProperties.shrink(m_parsedProperties.size() - num); 1498 m_parsedProperties.shrink(m_parsedProperties.size() - num);
(...skipping 1004 matching lines...) Expand 10 before | Expand all | Expand 10 after
2492 return false; 2503 return false;
2493 } 2504 }
2494 case CSSPropertyWebkitAnimationDelay: 2505 case CSSPropertyWebkitAnimationDelay:
2495 case CSSPropertyWebkitAnimationDirection: 2506 case CSSPropertyWebkitAnimationDirection:
2496 case CSSPropertyWebkitAnimationDuration: 2507 case CSSPropertyWebkitAnimationDuration:
2497 case CSSPropertyWebkitAnimationFillMode: 2508 case CSSPropertyWebkitAnimationFillMode:
2498 case CSSPropertyWebkitAnimationName: 2509 case CSSPropertyWebkitAnimationName:
2499 case CSSPropertyWebkitAnimationPlayState: 2510 case CSSPropertyWebkitAnimationPlayState:
2500 case CSSPropertyWebkitAnimationIterationCount: 2511 case CSSPropertyWebkitAnimationIterationCount:
2501 case CSSPropertyWebkitAnimationTimingFunction: 2512 case CSSPropertyWebkitAnimationTimingFunction:
2513 case CSSPropertyTransitionDelay:
2514 case CSSPropertyTransitionDuration:
2515 case CSSPropertyTransitionTimingFunction:
2516 case CSSPropertyTransitionProperty:
2502 case CSSPropertyWebkitTransitionDelay: 2517 case CSSPropertyWebkitTransitionDelay:
2503 case CSSPropertyWebkitTransitionDuration: 2518 case CSSPropertyWebkitTransitionDuration:
2504 case CSSPropertyWebkitTransitionTimingFunction: 2519 case CSSPropertyWebkitTransitionTimingFunction:
2505 case CSSPropertyWebkitTransitionProperty: { 2520 case CSSPropertyWebkitTransitionProperty: {
2506 RefPtr<CSSValue> val; 2521 RefPtr<CSSValue> val;
2507 if (parseAnimationProperty(propId, val)) { 2522 if (parseAnimationProperty(propId, val)) {
2508 addProperty(propId, val.release(), important); 2523 addPropertyWithPrefixingVariant(propId, val.release(), important);
2509 return true; 2524 return true;
2510 } 2525 }
2511 return false; 2526 return false;
2512 } 2527 }
2513 2528
2514 case CSSPropertyWebkitGridColumns: 2529 case CSSPropertyWebkitGridColumns:
2515 case CSSPropertyWebkitGridRows: 2530 case CSSPropertyWebkitGridRows:
2516 if (!cssGridLayoutEnabled()) 2531 if (!cssGridLayoutEnabled())
2517 return false; 2532 return false;
2518 return parseGridTrackList(propId, important); 2533 return parseGridTrackList(propId, important);
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
2737 case CSSPropertyListStyle: 2752 case CSSPropertyListStyle:
2738 return parseShorthand(propId, listStyleShorthand(), important); 2753 return parseShorthand(propId, listStyleShorthand(), important);
2739 case CSSPropertyWebkitColumns: 2754 case CSSPropertyWebkitColumns:
2740 return parseShorthand(propId, webkitColumnsShorthand(), important); 2755 return parseShorthand(propId, webkitColumnsShorthand(), important);
2741 case CSSPropertyWebkitColumnRule: 2756 case CSSPropertyWebkitColumnRule:
2742 return parseShorthand(propId, webkitColumnRuleShorthand(), important); 2757 return parseShorthand(propId, webkitColumnRuleShorthand(), important);
2743 case CSSPropertyWebkitTextStroke: 2758 case CSSPropertyWebkitTextStroke:
2744 return parseShorthand(propId, webkitTextStrokeShorthand(), important); 2759 return parseShorthand(propId, webkitTextStrokeShorthand(), important);
2745 case CSSPropertyWebkitAnimation: 2760 case CSSPropertyWebkitAnimation:
2746 return parseAnimationShorthand(important); 2761 return parseAnimationShorthand(important);
2762 case CSSPropertyTransition:
2747 case CSSPropertyWebkitTransition: 2763 case CSSPropertyWebkitTransition:
2748 return parseTransitionShorthand(important); 2764 return parseTransitionShorthand(propId, important);
2749 case CSSPropertyInvalid: 2765 case CSSPropertyInvalid:
2750 return false; 2766 return false;
2751 case CSSPropertyPage: 2767 case CSSPropertyPage:
2752 return parsePage(propId, important); 2768 return parsePage(propId, important);
2753 case CSSPropertyFontStretch: 2769 case CSSPropertyFontStretch:
2754 case CSSPropertyTextLineThrough: 2770 case CSSPropertyTextLineThrough:
2755 case CSSPropertyTextOverline: 2771 case CSSPropertyTextOverline:
2756 case CSSPropertyTextUnderline: 2772 case CSSPropertyTextUnderline:
2757 return false; 2773 return false;
2758 // CSS Text Layout Module Level 3: Vertical writing support 2774 // CSS Text Layout Module Level 3: Vertical writing support
(...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after
3249 // If we didn't find the property, set an intial value. 3265 // If we didn't find the property, set an intial value.
3250 if (!parsedProperty[i]) 3266 if (!parsedProperty[i])
3251 addAnimationValue(values[i], cssValuePool().createImplicitInitialVal ue()); 3267 addAnimationValue(values[i], cssValuePool().createImplicitInitialVal ue());
3252 3268
3253 addProperty(animationProperties.properties()[i], values[i].release(), im portant); 3269 addProperty(animationProperties.properties()[i], values[i].release(), im portant);
3254 } 3270 }
3255 3271
3256 return true; 3272 return true;
3257 } 3273 }
3258 3274
3259 bool CSSParser::parseTransitionShorthand(bool important) 3275 bool CSSParser::parseTransitionShorthand(CSSPropertyID propId, bool important)
3260 { 3276 {
3261 const unsigned numProperties = 4; 3277 const unsigned numProperties = 4;
3262 ASSERT(numProperties == webkitTransitionShorthand().length()); 3278 const StylePropertyShorthand& shorthand = shorthandForProperty(propId);
3279 ASSERT(numProperties == shorthand.length());
3263 3280
3264 ShorthandScope scope(this, CSSPropertyWebkitTransition); 3281 ShorthandScope scope(this, propId);
3265 3282
3266 bool parsedProperty[numProperties] = { false }; 3283 bool parsedProperty[numProperties] = { false };
3267 RefPtr<CSSValue> values[numProperties]; 3284 RefPtr<CSSValue> values[numProperties];
3268 3285
3269 unsigned i; 3286 unsigned i;
3270 while (m_valueList->current()) { 3287 while (m_valueList->current()) {
3271 CSSParserValue* val = m_valueList->current(); 3288 CSSParserValue* val = m_valueList->current();
3272 if (val->unit == CSSParserValue::Operator && val->iValue == ',') { 3289 if (val->unit == CSSParserValue::Operator && val->iValue == ',') {
3273 // We hit the end. Fill in all remaining values with the initial val ue. 3290 // We hit the end. Fill in all remaining values with the initial val ue.
3274 m_valueList->next(); 3291 m_valueList->next();
3275 for (i = 0; i < numProperties; ++i) { 3292 for (i = 0; i < numProperties; ++i) {
3276 if (!parsedProperty[i]) 3293 if (!parsedProperty[i])
3277 addAnimationValue(values[i], cssValuePool().createImplicitIn itialValue()); 3294 addAnimationValue(values[i], cssValuePool().createImplicitIn itialValue());
3278 parsedProperty[i] = false; 3295 parsedProperty[i] = false;
3279 } 3296 }
3280 if (!m_valueList->current()) 3297 if (!m_valueList->current())
3281 break; 3298 break;
3282 } 3299 }
3283 3300
3284 bool found = false; 3301 bool found = false;
3285 for (i = 0; !found && i < numProperties; ++i) { 3302 for (i = 0; !found && i < numProperties; ++i) {
3286 if (!parsedProperty[i]) { 3303 if (!parsedProperty[i]) {
3287 RefPtr<CSSValue> val; 3304 RefPtr<CSSValue> val;
3288 if (parseAnimationProperty(webkitTransitionShorthand().propertie s()[i], val)) { 3305 if (parseAnimationProperty(shorthand.properties()[i], val)) {
3289 parsedProperty[i] = found = true; 3306 parsedProperty[i] = found = true;
3290 addAnimationValue(values[i], val.release()); 3307 addAnimationValue(values[i], val.release());
3291 } 3308 }
3292 } 3309 }
3293 } 3310 }
3294 3311
3295 // if we didn't find at least one match, this is an 3312 // if we didn't find at least one match, this is an
3296 // invalid shorthand and we have to ignore it 3313 // invalid shorthand and we have to ignore it
3297 if (!found) 3314 if (!found)
3298 return false; 3315 return false;
3299 } 3316 }
3300 3317
3301 // Fill in any remaining properties with the initial value. 3318 // Fill in any remaining properties with the initial value.
3302 for (i = 0; i < numProperties; ++i) { 3319 for (i = 0; i < numProperties; ++i) {
3303 if (!parsedProperty[i]) 3320 if (!parsedProperty[i])
3304 addAnimationValue(values[i], cssValuePool().createImplicitInitialVal ue()); 3321 addAnimationValue(values[i], cssValuePool().createImplicitInitialVal ue());
3305 } 3322 }
3306 3323
3307 // Now add all of the properties we found. 3324 // Now add all of the properties we found.
3308 for (i = 0; i < numProperties; i++) 3325 for (i = 0; i < numProperties; i++)
3309 addProperty(webkitTransitionShorthand().properties()[i], values[i].relea se(), important); 3326 addPropertyWithPrefixingVariant(shorthand.properties()[i], values[i].rel ease(), important);
3310 3327
3311 return true; 3328 return true;
3312 } 3329 }
3313 3330
3314 bool CSSParser::parseShorthand(CSSPropertyID propId, const StylePropertyShorthan d& shorthand, bool important) 3331 bool CSSParser::parseShorthand(CSSPropertyID propId, const StylePropertyShorthan d& shorthand, bool important)
3315 { 3332 {
3316 // We try to match as many properties as possible 3333 // We try to match as many properties as possible
3317 // We set up an array of booleans to mark which property has been found, 3334 // We set up an array of booleans to mark which property has been found,
3318 // and we try to search for properties until it makes no longer any sense. 3335 // and we try to search for properties until it makes no longer any sense.
3319 ShorthandScope scope(this, propId); 3336 ShorthandScope scope(this, propId);
(...skipping 1154 matching lines...) Expand 10 before | Expand all | Expand 10 after
4474 RefPtr<CSSValue> currValue; 4491 RefPtr<CSSValue> currValue;
4475 if (allowComma) { 4492 if (allowComma) {
4476 if (!isComma(val)) 4493 if (!isComma(val))
4477 return false; 4494 return false;
4478 m_valueList->next(); 4495 m_valueList->next();
4479 allowComma = false; 4496 allowComma = false;
4480 } 4497 }
4481 else { 4498 else {
4482 switch (propId) { 4499 switch (propId) {
4483 case CSSPropertyWebkitAnimationDelay: 4500 case CSSPropertyWebkitAnimationDelay:
4501 case CSSPropertyTransitionDelay:
4484 case CSSPropertyWebkitTransitionDelay: 4502 case CSSPropertyWebkitTransitionDelay:
4485 currValue = parseAnimationDelay(); 4503 currValue = parseAnimationDelay();
4486 if (currValue) 4504 if (currValue)
4487 m_valueList->next(); 4505 m_valueList->next();
4488 break; 4506 break;
4489 case CSSPropertyWebkitAnimationDirection: 4507 case CSSPropertyWebkitAnimationDirection:
4490 currValue = parseAnimationDirection(); 4508 currValue = parseAnimationDirection();
4491 if (currValue) 4509 if (currValue)
4492 m_valueList->next(); 4510 m_valueList->next();
4493 break; 4511 break;
4494 case CSSPropertyWebkitAnimationDuration: 4512 case CSSPropertyWebkitAnimationDuration:
4513 case CSSPropertyTransitionDuration:
4495 case CSSPropertyWebkitTransitionDuration: 4514 case CSSPropertyWebkitTransitionDuration:
4496 currValue = parseAnimationDuration(); 4515 currValue = parseAnimationDuration();
4497 if (currValue) 4516 if (currValue)
4498 m_valueList->next(); 4517 m_valueList->next();
4499 break; 4518 break;
4500 case CSSPropertyWebkitAnimationFillMode: 4519 case CSSPropertyWebkitAnimationFillMode:
4501 currValue = parseAnimationFillMode(); 4520 currValue = parseAnimationFillMode();
4502 if (currValue) 4521 if (currValue)
4503 m_valueList->next(); 4522 m_valueList->next();
4504 break; 4523 break;
4505 case CSSPropertyWebkitAnimationIterationCount: 4524 case CSSPropertyWebkitAnimationIterationCount:
4506 currValue = parseAnimationIterationCount(); 4525 currValue = parseAnimationIterationCount();
4507 if (currValue) 4526 if (currValue)
4508 m_valueList->next(); 4527 m_valueList->next();
4509 break; 4528 break;
4510 case CSSPropertyWebkitAnimationName: 4529 case CSSPropertyWebkitAnimationName:
4511 currValue = parseAnimationName(); 4530 currValue = parseAnimationName();
4512 if (currValue) 4531 if (currValue)
4513 m_valueList->next(); 4532 m_valueList->next();
4514 break; 4533 break;
4515 case CSSPropertyWebkitAnimationPlayState: 4534 case CSSPropertyWebkitAnimationPlayState:
4516 currValue = parseAnimationPlayState(); 4535 currValue = parseAnimationPlayState();
4517 if (currValue) 4536 if (currValue)
4518 m_valueList->next(); 4537 m_valueList->next();
4519 break; 4538 break;
4539 case CSSPropertyTransitionProperty:
4520 case CSSPropertyWebkitTransitionProperty: 4540 case CSSPropertyWebkitTransitionProperty:
4521 if (allowAnimationProperty) 4541 if (allowAnimationProperty)
4522 currValue = parseAnimationProperty(allowAnimationPropert y); 4542 currValue = parseAnimationProperty(allowAnimationPropert y);
4523 if (value && !allowAnimationProperty) 4543 if (value && !allowAnimationProperty)
4524 return false; 4544 return false;
4525 if (currValue) 4545 if (currValue)
4526 m_valueList->next(); 4546 m_valueList->next();
4527 break; 4547 break;
4528 case CSSPropertyWebkitAnimationTimingFunction: 4548 case CSSPropertyWebkitAnimationTimingFunction:
4549 case CSSPropertyTransitionTimingFunction:
4529 case CSSPropertyWebkitTransitionTimingFunction: 4550 case CSSPropertyWebkitTransitionTimingFunction:
4530 currValue = parseAnimationTimingFunction(); 4551 currValue = parseAnimationTimingFunction();
4531 if (currValue) 4552 if (currValue)
4532 m_valueList->next(); 4553 m_valueList->next();
4533 break; 4554 break;
4534 default: 4555 default:
4535 ASSERT_NOT_REACHED(); 4556 ASSERT_NOT_REACHED();
4536 return false; 4557 return false;
4537 } 4558 }
4538 4559
(...skipping 7248 matching lines...) Expand 10 before | Expand all | Expand 10 after
11787 { 11808 {
11788 // The tokenizer checks for the construct of an+b. 11809 // The tokenizer checks for the construct of an+b.
11789 // However, since the {ident} rule precedes the {nth} rule, some of those 11810 // However, since the {ident} rule precedes the {nth} rule, some of those
11790 // tokens are identified as string literal. Furthermore we need to accept 11811 // tokens are identified as string literal. Furthermore we need to accept
11791 // "odd" and "even" which does not match to an+b. 11812 // "odd" and "even" which does not match to an+b.
11792 return equalIgnoringCase(token, "odd") || equalIgnoringCase(token, "even") 11813 return equalIgnoringCase(token, "odd") || equalIgnoringCase(token, "even")
11793 || equalIgnoringCase(token, "n") || equalIgnoringCase(token, "-n"); 11814 || equalIgnoringCase(token, "n") || equalIgnoringCase(token, "-n");
11794 } 11815 }
11795 11816
11796 } 11817 }
OLDNEW
« no previous file with comments | « Source/WebCore/css/CSSParser.h ('k') | Source/WebCore/css/CSSProperty.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698