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

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

Issue 373603004: Hashless hex color quirk for color/background/border only. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebased Created 6 years, 4 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
« no previous file with comments | « Source/core/css/parser/CSSPropertyParser.h ('k') | no next file » | 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 593 matching lines...) Expand 10 before | Expand all | Expand 10 after
604 case CSSPropertyWebkitTextEmphasisColor: 604 case CSSPropertyWebkitTextEmphasisColor:
605 case CSSPropertyWebkitTextFillColor: 605 case CSSPropertyWebkitTextFillColor:
606 case CSSPropertyWebkitTextStrokeColor: 606 case CSSPropertyWebkitTextStrokeColor:
607 if (propId == CSSPropertyTextDecorationColor 607 if (propId == CSSPropertyTextDecorationColor
608 && !RuntimeEnabledFeatures::css3TextDecorationsEnabled()) 608 && !RuntimeEnabledFeatures::css3TextDecorationsEnabled())
609 return false; 609 return false;
610 610
611 if ((id >= CSSValueAqua && id <= CSSValueWebkitText) || id == CSSValueMe nu) { 611 if ((id >= CSSValueAqua && id <= CSSValueWebkitText) || id == CSSValueMe nu) {
612 validPrimitive = isValueAllowedInMode(id, m_context.mode()); 612 validPrimitive = isValueAllowedInMode(id, m_context.mode());
613 } else { 613 } else {
614 parsedValue = parseColor(); 614 if (!inQuirksMode()) {
615 parsedValue = parseColor();
616 if (parsedValue)
617 m_valueList->next();
618 break;
619 }
620
621 bool acceptQuirkyColors = false;
622 switch (propId) {
623 case CSSPropertyBackgroundColor:
624 if (!inShorthand())
625 acceptQuirkyColors = true;
626 break;
627 case CSSPropertyBorderBottomColor:
628 case CSSPropertyBorderLeftColor:
629 case CSSPropertyBorderRightColor:
630 case CSSPropertyBorderTopColor:
631 case CSSPropertyColor:
632 acceptQuirkyColors = true;
633 break;
634 default:
635 break;
636 }
637 parsedValue = parseColor(0, acceptQuirkyColors);
615 if (parsedValue) 638 if (parsedValue)
616 m_valueList->next(); 639 m_valueList->next();
617 } 640 }
618 break; 641 break;
619 642
620 case CSSPropertyCursor: { 643 case CSSPropertyCursor: {
621 // Grammar defined by CSS3 UI and modified by CSS4 images: 644 // Grammar defined by CSS3 UI and modified by CSS4 images:
622 // [ [<image> [<x> <y>]?,]* 645 // [ [<image> [<x> <y>]?,]*
623 // [ auto | crosshair | default | pointer | progress | move | e-resize | ne-resize | 646 // [ auto | crosshair | default | pointer | progress | move | e-resize | ne-resize |
624 // nw-resize | n-resize | se-resize | sw-resize | s-resize | w-resize | ew-resize | 647 // nw-resize | n-resize | se-resize | sw-resize | s-resize | w-resize | ew-resize |
(...skipping 4803 matching lines...) Expand 10 before | Expand all | Expand 10 after
5428 if (v->unit != CSSParserValue::Operator && v->iValue != ',') 5451 if (v->unit != CSSParserValue::Operator && v->iValue != ',')
5429 return false; 5452 return false;
5430 v = args->next(); 5453 v = args->next();
5431 if (!validUnit(v, FNumber, HTMLStandardMode)) 5454 if (!validUnit(v, FNumber, HTMLStandardMode))
5432 return false; 5455 return false;
5433 colorArray[3] = std::max(0.0, std::min(1.0, v->fValue)); 5456 colorArray[3] = std::max(0.0, std::min(1.0, v->fValue));
5434 } 5457 }
5435 return true; 5458 return true;
5436 } 5459 }
5437 5460
5438 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> CSSPropertyParser::parseColor(CSSParse rValue* value) 5461 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> CSSPropertyParser::parseColor(CSSParse rValue* value, bool acceptQuirkyColors)
5439 { 5462 {
5440 RGBA32 c = Color::transparent; 5463 RGBA32 c = Color::transparent;
5441 if (!parseColorFromValue(value ? value : m_valueList->current(), c)) 5464 if (!parseColorFromValue(value ? value : m_valueList->current(), c, acceptQu irkyColors))
5442 return nullptr; 5465 return nullptr;
5443 return cssValuePool().createColorValue(c); 5466 return cssValuePool().createColorValue(c);
5444 } 5467 }
5445 5468
5446 bool CSSPropertyParser::parseColorFromValue(CSSParserValue* value, RGBA32& c) 5469 bool CSSPropertyParser::parseColorFromValue(CSSParserValue* value, RGBA32& c, bo ol acceptQuirkyColors)
5447 { 5470 {
5448 if (inQuirksMode() && value->unit == CSSPrimitiveValue::CSS_NUMBER 5471 if (acceptQuirkyColors && value->unit == CSSPrimitiveValue::CSS_NUMBER
5449 && value->fValue >= 0. && value->fValue < 1000000.) { 5472 && value->fValue >= 0. && value->fValue < 1000000.) {
5450 String str = String::format("%06d", static_cast<int>((value->fValue+.5)) ); 5473 String str = String::format("%06d", static_cast<int>((value->fValue+.5)) );
5451 // FIXME: This should be strict parsing for SVG as well. 5474 // FIXME: This should be strict parsing for SVG as well.
5452 if (!fastParseColor(c, str, !inQuirksMode())) 5475 if (!fastParseColor(c, str, !acceptQuirkyColors))
5453 return false; 5476 return false;
5454 } else if (value->unit == CSSPrimitiveValue::CSS_PARSER_HEXCOLOR || 5477 } else if (value->unit == CSSPrimitiveValue::CSS_PARSER_HEXCOLOR
5455 value->unit == CSSPrimitiveValue::CSS_IDENT || 5478 || value->unit == CSSPrimitiveValue::CSS_IDENT
5456 (inQuirksMode() && value->unit == CSSPrimitiveValue::CSS_DIMENSI ON)) { 5479 || (acceptQuirkyColors && value->unit == CSSPrimitiveValue::CSS_DIMENSIO N)) {
5457 if (!fastParseColor(c, value->string, !inQuirksMode() && value->unit == CSSPrimitiveValue::CSS_IDENT)) 5480 if (!fastParseColor(c, value->string, !acceptQuirkyColors && value->unit == CSSPrimitiveValue::CSS_IDENT))
5458 return false; 5481 return false;
5459 } else if (value->unit == CSSParserValue::Function && 5482 } else if (value->unit == CSSParserValue::Function &&
5460 value->function->args != 0 && 5483 value->function->args != 0 &&
5461 value->function->args->size() == 5 /* rgb + two commas */ && 5484 value->function->args->size() == 5 /* rgb + two commas */ &&
5462 equalIgnoringCase(value->function->name, "rgb(")) { 5485 equalIgnoringCase(value->function->name, "rgb(")) {
5463 int colorValues[3]; 5486 int colorValues[3];
5464 if (!parseColorParameters(value, colorValues, false)) 5487 if (!parseColorParameters(value, colorValues, false))
5465 return false; 5488 return false;
5466 c = makeRGB(colorValues[0], colorValues[1], colorValues[2]); 5489 c = makeRGB(colorValues[0], colorValues[1], colorValues[2]);
5467 } else { 5490 } else {
(...skipping 3048 matching lines...) Expand 10 before | Expand all | Expand 10 after
8516 parsedValues->append(CSSPrimitiveValue::createIdentifier(CSSValueFill)); 8539 parsedValues->append(CSSPrimitiveValue::createIdentifier(CSSValueFill));
8517 if (!seenStroke) 8540 if (!seenStroke)
8518 parsedValues->append(CSSPrimitiveValue::createIdentifier(CSSValueStroke) ); 8541 parsedValues->append(CSSPrimitiveValue::createIdentifier(CSSValueStroke) );
8519 if (!seenMarkers) 8542 if (!seenMarkers)
8520 parsedValues->append(CSSPrimitiveValue::createIdentifier(CSSValueMarkers )); 8543 parsedValues->append(CSSPrimitiveValue::createIdentifier(CSSValueMarkers ));
8521 8544
8522 return parsedValues.release(); 8545 return parsedValues.release();
8523 } 8546 }
8524 8547
8525 } // namespace blink 8548 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/css/parser/CSSPropertyParser.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698