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

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
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; 978 RefPtrWillBeRawPtr<CSSValueList> transformList;
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 RefPtr<MutableStylePropertySet> dummyStyle = MutableStylePropertySet::create (); 1000 RefPtr<MutableStylePropertySet> dummyStyle = MutableStylePropertySet::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 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
1407 bool unknown() const { return m_type == CSSTransformValue::UnknownTransformO peration; } 1411 bool unknown() const { return m_type == CSSTransformValue::UnknownTransformO peration; }
1408 bool hasCorrectArgCount(unsigned argCount) { return m_argCount == argCount | | (m_allowSingleArgument && argCount == 1); } 1412 bool hasCorrectArgCount(unsigned argCount) { return m_argCount == argCount | | (m_allowSingleArgument && argCount == 1); }
1409 1413
1410 private: 1414 private:
1411 CSSTransformValue::TransformOperationType m_type; 1415 CSSTransformValue::TransformOperationType m_type;
1412 unsigned m_argCount; 1416 unsigned m_argCount;
1413 bool m_allowSingleArgument; 1417 bool m_allowSingleArgument;
1414 CSSPropertyParser::Units m_unit; 1418 CSSPropertyParser::Units m_unit;
1415 }; 1419 };
1416 1420
1417 PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseTransform() 1421 PassRefPtrWillBeRawPtr<CSSValueList> CSSPropertyParser::parseTransform(CSSProper tyID propId)
1418 { 1422 {
1419 if (!m_valueList) 1423 if (!m_valueList)
1420 return nullptr; 1424 return nullptr;
1421 1425
1422 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSpaceSeparated() ; 1426 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSpaceSeparated() ;
1423 for (CSSParserValue* value = m_valueList->current(); value; value = m_valueL ist->next()) { 1427 for (CSSParserValue* value = m_valueList->current(); value; value = m_valueL ist->next()) {
1424 RefPtrWillBeRawPtr<CSSValue> parsedTransformValue = parseTransformValue( value); 1428 RefPtrWillBeRawPtr<CSSValue> parsedTransformValue = parseTransformValue( propId, value);
1425 if (!parsedTransformValue) 1429 if (!parsedTransformValue)
1426 return nullptr; 1430 return nullptr;
1427 1431
1428 list->append(parsedTransformValue.release()); 1432 list->append(parsedTransformValue.release());
1429 } 1433 }
1430 1434
1431 return list.release(); 1435 return list.release();
1432 } 1436 }
1433 1437
1434 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseTransformValue(CSSParse rValue *value) 1438 PassRefPtrWillBeRawPtr<CSSValue> CSSPropertyParser::parseTransformValue(CSSPrope rtyID propId, CSSParserValue *value)
1435 { 1439 {
1436 if (value->unit != CSSParserValue::Function || !value->function) 1440 if (value->unit != CSSParserValue::Function || !value->function)
1437 return nullptr; 1441 return nullptr;
1438 1442
1439 // Every primitive requires at least one argument. 1443 // Every primitive requires at least one argument.
1440 CSSParserValueList* args = value->function->args.get(); 1444 CSSParserValueList* args = value->function->args.get();
1441 if (!args) 1445 if (!args)
1442 return nullptr; 1446 return nullptr;
1443 1447
1444 // See if the specified primitive is one we understand. 1448 // See if the specified primitive is one we understand.
(...skipping 23 matching lines...) Expand all
1468 } else if (info.type() == CSSTransformValue::Translate3DTransformOperati on && argNumber == 2) { 1472 } else if (info.type() == CSSTransformValue::Translate3DTransformOperati on && argNumber == 2) {
1469 // 3rd param of translate3d() cannot be a percentage 1473 // 3rd param of translate3d() cannot be a percentage
1470 if (!validUnit(a, FLength, HTMLStandardMode)) 1474 if (!validUnit(a, FLength, HTMLStandardMode))
1471 return nullptr; 1475 return nullptr;
1472 } else if (info.type() == CSSTransformValue::TranslateZTransformOperatio n && !argNumber) { 1476 } else if (info.type() == CSSTransformValue::TranslateZTransformOperatio n && !argNumber) {
1473 // 1st param of translateZ() cannot be a percentage 1477 // 1st param of translateZ() cannot be a percentage
1474 if (!validUnit(a, FLength, HTMLStandardMode)) 1478 if (!validUnit(a, FLength, HTMLStandardMode))
1475 return nullptr; 1479 return nullptr;
1476 } else if (info.type() == CSSTransformValue::PerspectiveTransformOperati on && !argNumber) { 1480 } else if (info.type() == CSSTransformValue::PerspectiveTransformOperati on && !argNumber) {
1477 // 1st param of perspective() must be a non-negative number (depreca ted) or length. 1481 // 1st param of perspective() must be a non-negative number (depreca ted) or length.
1478 if (!validUnit(a, FNumber | FLength | FNonNeg, HTMLStandardMode)) 1482 if ((propId == CSSPropertyWebkitTransform && !validUnit(a, FNumber | FLength | FNonNeg, HTMLStandardMode))
1483 || (propId == CSSPropertyTransform && !validUnit(a, FLength | FN onNeg, HTMLStandardMode)))
1479 return nullptr; 1484 return nullptr;
1480 } else if (!validUnit(a, unit, HTMLStandardMode)) { 1485 } else if (!validUnit(a, unit, HTMLStandardMode)) {
1481 return nullptr; 1486 return nullptr;
1482 } 1487 }
1483 1488
1484 // Add the value to the current transform operation. 1489 // Add the value to the current transform operation.
1485 transformValue->append(createPrimitiveNumericValue(a)); 1490 transformValue->append(createPrimitiveNumericValue(a));
1486 1491
1487 a = args->next(); 1492 a = args->next();
1488 if (!a) 1493 if (!a)
(...skipping 716 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

Powered by Google App Engine
This is Rietveld 408576698