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

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

Issue 98663004: Add support for unprefixed CSS Transforms (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase. Created 6 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/css/StylePropertySerializer.cpp ('k') | Source/core/css/parser/CSSPropertyParser.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 533 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 return true; 544 return true;
545 break; 545 break;
546 case CSSPropertyVisibility: // visible | hidden | collapse | inherit 546 case CSSPropertyVisibility: // visible | hidden | collapse | inherit
547 if (valueID == CSSValueVisible || valueID == CSSValueHidden || valueID = = CSSValueCollapse) 547 if (valueID == CSSValueVisible || valueID == CSSValueHidden || valueID = = CSSValueCollapse)
548 return true; 548 return true;
549 break; 549 break;
550 case CSSPropertyWebkitAppearance: 550 case CSSPropertyWebkitAppearance:
551 if ((valueID >= CSSValueCheckbox && valueID <= CSSValueTextarea) || valu eID == CSSValueNone) 551 if ((valueID >= CSSValueCheckbox && valueID <= CSSValueTextarea) || valu eID == CSSValueNone)
552 return true; 552 return true;
553 break; 553 break;
554 case CSSPropertyBackfaceVisibility:
554 case CSSPropertyWebkitBackfaceVisibility: 555 case CSSPropertyWebkitBackfaceVisibility:
555 if (valueID == CSSValueVisible || valueID == CSSValueHidden) 556 if (valueID == CSSValueVisible || valueID == CSSValueHidden)
556 return true; 557 return true;
557 break; 558 break;
558 case CSSPropertyMixBlendMode: 559 case CSSPropertyMixBlendMode:
559 if (RuntimeEnabledFeatures::cssCompositingEnabled() && (valueID == CSSVa lueNormal || valueID == CSSValueMultiply || valueID == CSSValueScreen 560 if (RuntimeEnabledFeatures::cssCompositingEnabled() && (valueID == CSSVa lueNormal || valueID == CSSValueMultiply || valueID == CSSValueScreen
560 || valueID == CSSValueOverlay || valueID == CSSValueDarken || valueI D == CSSValueLighten || valueID == CSSValueColorDodge 561 || valueID == CSSValueOverlay || valueID == CSSValueDarken || valueI D == CSSValueLighten || valueID == CSSValueColorDodge
561 || valueID == CSSValueColorBurn || valueID == CSSValueHardLight || v alueID == CSSValueSoftLight || valueID == CSSValueDifference 562 || valueID == CSSValueColorBurn || valueID == CSSValueHardLight || v alueID == CSSValueSoftLight || valueID == CSSValueDifference
562 || valueID == CSSValueExclusion || valueID == CSSValueHue || valueID == CSSValueSaturation || valueID == CSSValueColor 563 || valueID == CSSValueExclusion || valueID == CSSValueHue || valueID == CSSValueSaturation || valueID == CSSValueColor
563 || valueID == CSSValueLuminosity)) 564 || valueID == CSSValueLuminosity))
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
680 break; 681 break;
681 case CSSPropertyWebkitTextEmphasisPosition: 682 case CSSPropertyWebkitTextEmphasisPosition:
682 if (valueID == CSSValueOver || valueID == CSSValueUnder) 683 if (valueID == CSSValueOver || valueID == CSSValueUnder)
683 return true; 684 return true;
684 break; 685 break;
685 case CSSPropertyWebkitTextSecurity: 686 case CSSPropertyWebkitTextSecurity:
686 // disc | circle | square | none | inherit 687 // disc | circle | square | none | inherit
687 if (valueID == CSSValueDisc || valueID == CSSValueCircle || valueID == C SSValueSquare || valueID == CSSValueNone) 688 if (valueID == CSSValueDisc || valueID == CSSValueCircle || valueID == C SSValueSquare || valueID == CSSValueNone)
688 return true; 689 return true;
689 break; 690 break;
691 case CSSPropertyTransformStyle:
690 case CSSPropertyWebkitTransformStyle: 692 case CSSPropertyWebkitTransformStyle:
691 if (valueID == CSSValueFlat || valueID == CSSValuePreserve3d) 693 if (valueID == CSSValueFlat || valueID == CSSValuePreserve3d)
692 return true; 694 return true;
693 break; 695 break;
694 case CSSPropertyWebkitUserDrag: // auto | none | element 696 case CSSPropertyWebkitUserDrag: // auto | none | element
695 if (valueID == CSSValueAuto || valueID == CSSValueNone || valueID == CSS ValueElement) 697 if (valueID == CSSValueAuto || valueID == CSSValueNone || valueID == CSS ValueElement)
696 return true; 698 return true;
697 break; 699 break;
698 case CSSPropertyWebkitUserModify: // read-only | read-write 700 case CSSPropertyWebkitUserModify: // read-only | read-write
699 if (valueID == CSSValueReadOnly || valueID == CSSValueReadWrite || value ID == CSSValueReadWritePlaintextOnly) 701 if (valueID == CSSValueReadOnly || valueID == CSSValueReadWrite || value ID == CSSValueReadWritePlaintextOnly)
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 case CSSPropertyTextOverflow: 778 case CSSPropertyTextOverflow:
777 case CSSPropertyTextOverlineMode: 779 case CSSPropertyTextOverlineMode:
778 case CSSPropertyTextOverlineStyle: 780 case CSSPropertyTextOverlineStyle:
779 case CSSPropertyTextRendering: 781 case CSSPropertyTextRendering:
780 case CSSPropertyTextTransform: 782 case CSSPropertyTextTransform:
781 case CSSPropertyTextUnderlineMode: 783 case CSSPropertyTextUnderlineMode:
782 case CSSPropertyTextUnderlineStyle: 784 case CSSPropertyTextUnderlineStyle:
783 case CSSPropertyTouchActionDelay: 785 case CSSPropertyTouchActionDelay:
784 case CSSPropertyVisibility: 786 case CSSPropertyVisibility:
785 case CSSPropertyWebkitAppearance: 787 case CSSPropertyWebkitAppearance:
788 case CSSPropertyBackfaceVisibility:
786 case CSSPropertyWebkitBackfaceVisibility: 789 case CSSPropertyWebkitBackfaceVisibility:
787 case CSSPropertyWebkitBorderAfterStyle: 790 case CSSPropertyWebkitBorderAfterStyle:
788 case CSSPropertyWebkitBorderBeforeStyle: 791 case CSSPropertyWebkitBorderBeforeStyle:
789 case CSSPropertyWebkitBorderEndStyle: 792 case CSSPropertyWebkitBorderEndStyle:
790 case CSSPropertyWebkitBorderFit: 793 case CSSPropertyWebkitBorderFit:
791 case CSSPropertyWebkitBorderStartStyle: 794 case CSSPropertyWebkitBorderStartStyle:
792 case CSSPropertyWebkitBoxAlign: 795 case CSSPropertyWebkitBoxAlign:
793 case CSSPropertyWebkitBoxDecorationBreak: 796 case CSSPropertyWebkitBoxDecorationBreak:
794 case CSSPropertyWebkitBoxDirection: 797 case CSSPropertyWebkitBoxDirection:
795 case CSSPropertyWebkitBoxLines: 798 case CSSPropertyWebkitBoxLines:
(...skipping 18 matching lines...) Expand all
814 case CSSPropertyWebkitMarginBottomCollapse: 817 case CSSPropertyWebkitMarginBottomCollapse:
815 case CSSPropertyWebkitMarginTopCollapse: 818 case CSSPropertyWebkitMarginTopCollapse:
816 case CSSPropertyInternalMarqueeDirection: 819 case CSSPropertyInternalMarqueeDirection:
817 case CSSPropertyInternalMarqueeStyle: 820 case CSSPropertyInternalMarqueeStyle:
818 case CSSPropertyWebkitPrintColorAdjust: 821 case CSSPropertyWebkitPrintColorAdjust:
819 case CSSPropertyWebkitRtlOrdering: 822 case CSSPropertyWebkitRtlOrdering:
820 case CSSPropertyWebkitRubyPosition: 823 case CSSPropertyWebkitRubyPosition:
821 case CSSPropertyWebkitTextCombine: 824 case CSSPropertyWebkitTextCombine:
822 case CSSPropertyWebkitTextEmphasisPosition: 825 case CSSPropertyWebkitTextEmphasisPosition:
823 case CSSPropertyWebkitTextSecurity: 826 case CSSPropertyWebkitTextSecurity:
827 case CSSPropertyTransformStyle:
824 case CSSPropertyWebkitTransformStyle: 828 case CSSPropertyWebkitTransformStyle:
825 case CSSPropertyWebkitUserDrag: 829 case CSSPropertyWebkitUserDrag:
826 case CSSPropertyWebkitUserModify: 830 case CSSPropertyWebkitUserModify:
827 case CSSPropertyWebkitUserSelect: 831 case CSSPropertyWebkitUserSelect:
828 case CSSPropertyWebkitWrapFlow: 832 case CSSPropertyWebkitWrapFlow:
829 case CSSPropertyWebkitWrapThrough: 833 case CSSPropertyWebkitWrapThrough:
830 case CSSPropertyWebkitWritingMode: 834 case CSSPropertyWebkitWritingMode:
831 case CSSPropertyWhiteSpace: 835 case CSSPropertyWhiteSpace:
832 case CSSPropertyWordBreak: 836 case CSSPropertyWordBreak:
833 case CSSPropertyWordWrap: 837 case CSSPropertyWordWrap:
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
960 if (pos < end) { 964 if (pos < end) {
961 if (isCSSSpace(*pos)) 965 if (isCSSSpace(*pos))
962 return nullptr; 966 return nullptr;
963 } 967 }
964 } 968 }
965 return transformList.release(); 969 return transformList.release();
966 } 970 }
967 971
968 static bool parseTranslateTransform(MutableStylePropertySet* properties, CSSProp ertyID propertyID, const String& string, bool important) 972 static bool parseTranslateTransform(MutableStylePropertySet* properties, CSSProp ertyID propertyID, const String& string, bool important)
969 { 973 {
970 if (propertyID != CSSPropertyWebkitTransform) 974 if (propertyID != CSSPropertyTransform && propertyID != CSSPropertyWebkitTra nsform)
971 return false; 975 return false;
972 if (string.isEmpty()) 976 if (string.isEmpty())
973 return false; 977 return false;
974 RefPtrWillBeRawPtr<CSSValueList> transformList = nullptr; 978 RefPtrWillBeRawPtr<CSSValueList> transformList = nullptr;
975 if (string.is8Bit()) { 979 if (string.is8Bit()) {
976 const LChar* pos = string.characters8(); 980 const LChar* pos = string.characters8();
977 const LChar* end = pos + string.length(); 981 const LChar* end = pos + string.length();
978 transformList = parseTranslateTransformList(pos, end); 982 transformList = parseTranslateTransformList(pos, end);
979 if (!transformList) 983 if (!transformList)
980 return false; 984 return false;
981 } else { 985 } else {
982 const UChar* pos = string.characters16(); 986 const UChar* pos = string.characters16();
983 const UChar* end = pos + string.length(); 987 const UChar* end = pos + string.length();
984 transformList = parseTranslateTransformList(pos, end); 988 transformList = parseTranslateTransformList(pos, end);
985 if (!transformList) 989 if (!transformList)
986 return false; 990 return false;
987 } 991 }
988 properties->addParsedProperty(CSSProperty(CSSPropertyWebkitTransform, transf ormList.release(), important)); 992 properties->addParsedProperty(CSSProperty(propertyID, transformList.release( ), important));
989 return true; 993 return true;
990 } 994 }
991 995
992 PassRefPtrWillBeRawPtr<CSSValueList> BisonCSSParser::parseFontFaceValue(const At omicString& string) 996 PassRefPtrWillBeRawPtr<CSSValueList> BisonCSSParser::parseFontFaceValue(const At omicString& string)
993 { 997 {
994 if (string.isEmpty()) 998 if (string.isEmpty())
995 return nullptr; 999 return nullptr;
996 RefPtrWillBeRawPtr<MutableStylePropertySet> dummyStyle = MutableStylePropert ySet::create(); 1000 RefPtrWillBeRawPtr<MutableStylePropertySet> dummyStyle = MutableStylePropert ySet::create();
997 if (!parseValue(dummyStyle.get(), CSSPropertyFontFamily, string, false, HTML QuirksMode, 0)) 1001 if (!parseValue(dummyStyle.get(), CSSPropertyFontFamily, string, false, HTML QuirksMode, 0))
998 return nullptr; 1002 return nullptr;
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
1394 bool unknown() const { return m_type == CSSTransformValue::UnknownTransformO peration; } 1398 bool unknown() const { return m_type == CSSTransformValue::UnknownTransformO peration; }
1395 bool hasCorrectArgCount(unsigned argCount) { return m_argCount == argCount | | (m_allowSingleArgument && argCount == 1); } 1399 bool hasCorrectArgCount(unsigned argCount) { return m_argCount == argCount | | (m_allowSingleArgument && argCount == 1); }
1396 1400
1397 private: 1401 private:
1398 CSSTransformValue::TransformOperationType m_type; 1402 CSSTransformValue::TransformOperationType m_type;
1399 unsigned m_argCount; 1403 unsigned m_argCount;
1400 bool m_allowSingleArgument; 1404 bool m_allowSingleArgument;
1401 CSSPropertyParser::Units m_unit; 1405 CSSPropertyParser::Units m_unit;
1402 }; 1406 };
1403 1407
1404 PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseTransform() 1408 PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseTransform(CSSProper tyID propId)
1405 { 1409 {
1406 if (!m_valueList) 1410 if (!m_valueList)
1407 return nullptr; 1411 return nullptr;
1408 1412
1409 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSpaceSeparated() ; 1413 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSpaceSeparated() ;
1410 for (CSSParserValue* value = m_valueList->current(); value; value = m_valueL ist->next()) { 1414 for (CSSParserValue* value = m_valueList->current(); value; value = m_valueL ist->next()) {
1411 RefPtrWillBeRawPtr<CSSValue> parsedTransformValue = parseTransformValue( value); 1415 RefPtrWillBeRawPtr<CSSValue> parsedTransformValue = parseTransformValue( propId, value);
1412 if (!parsedTransformValue) 1416 if (!parsedTransformValue)
1413 return nullptr; 1417 return nullptr;
1414 1418
1415 list->append(parsedTransformValue.release()); 1419 list->append(parsedTransformValue.release());
1416 } 1420 }
1417 1421
1418 return list.release(); 1422 return list.release();
1419 } 1423 }
1420 1424
1421 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseTransformValue(CSSParse rValue *value) 1425 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseTransformValue(CSSPrope rtyID propId, CSSParserValue *value)
1422 { 1426 {
1423 if (value->unit != CSSParserValue::Function || !value->function) 1427 if (value->unit != CSSParserValue::Function || !value->function)
1424 return nullptr; 1428 return nullptr;
1425 1429
1426 // Every primitive requires at least one argument. 1430 // Every primitive requires at least one argument.
1427 CSSParserValueList* args = value->function->args.get(); 1431 CSSParserValueList* args = value->function->args.get();
1428 if (!args) 1432 if (!args)
1429 return nullptr; 1433 return nullptr;
1430 1434
1431 // See if the specified primitive is one we understand. 1435 // See if the specified primitive is one we understand.
(...skipping 23 matching lines...) Expand all
1455 } else if (info.type() == CSSTransformValue::Translate3DTransformOperati on && argNumber == 2) { 1459 } else if (info.type() == CSSTransformValue::Translate3DTransformOperati on && argNumber == 2) {
1456 // 3rd param of translate3d() cannot be a percentage 1460 // 3rd param of translate3d() cannot be a percentage
1457 if (!validUnit(a, FLength, HTMLStandardMode)) 1461 if (!validUnit(a, FLength, HTMLStandardMode))
1458 return nullptr; 1462 return nullptr;
1459 } else if (info.type() == CSSTransformValue::TranslateZTransformOperatio n && !argNumber) { 1463 } else if (info.type() == CSSTransformValue::TranslateZTransformOperatio n && !argNumber) {
1460 // 1st param of translateZ() cannot be a percentage 1464 // 1st param of translateZ() cannot be a percentage
1461 if (!validUnit(a, FLength, HTMLStandardMode)) 1465 if (!validUnit(a, FLength, HTMLStandardMode))
1462 return nullptr; 1466 return nullptr;
1463 } else if (info.type() == CSSTransformValue::PerspectiveTransformOperati on && !argNumber) { 1467 } else if (info.type() == CSSTransformValue::PerspectiveTransformOperati on && !argNumber) {
1464 // 1st param of perspective() must be a non-negative number (depreca ted) or length. 1468 // 1st param of perspective() must be a non-negative number (depreca ted) or length.
1465 if (!validUnit(a, FNumber | FLength | FNonNeg, HTMLStandardMode)) 1469 if ((propId == CSSPropertyWebkitTransform && !validUnit(a, FNumber | FLength | FNonNeg, HTMLStandardMode))
1470 || (propId == CSSPropertyTransform && !validUnit(a, FLength | FN onNeg, HTMLStandardMode)))
1466 return nullptr; 1471 return nullptr;
1467 } else if (!validUnit(a, unit, HTMLStandardMode)) { 1472 } else if (!validUnit(a, unit, HTMLStandardMode)) {
1468 return nullptr; 1473 return nullptr;
1469 } 1474 }
1470 1475
1471 // Add the value to the current transform operation. 1476 // Add the value to the current transform operation.
1472 transformValue->append(createPrimitiveNumericValue(a)); 1477 transformValue->append(createPrimitiveNumericValue(a));
1473 1478
1474 a = args->next(); 1479 a = args->next();
1475 if (!a) 1480 if (!a)
(...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after
2205 rule->setProperties(createStylePropertySet()); 2210 rule->setProperties(createStylePropertySet());
2206 clearProperties(); 2211 clearProperties();
2207 2212
2208 StyleRuleViewport* result = rule.get(); 2213 StyleRuleViewport* result = rule.get();
2209 m_parsedRules.append(rule.release()); 2214 m_parsedRules.append(rule.release());
2210 2215
2211 return result; 2216 return result;
2212 } 2217 }
2213 2218
2214 } 2219 }
OLDNEW
« no previous file with comments | « Source/core/css/StylePropertySerializer.cpp ('k') | Source/core/css/parser/CSSPropertyParser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698