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

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

Issue 2824993002: Implemented CSSPropertyAPI for transform property. (Closed)
Patch Set: Created 3 years, 8 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/css/parser/CSSPropertyParser.h" 5 #include "core/css/parser/CSSPropertyParser.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include "core/StylePropertyShorthand.h" 8 #include "core/StylePropertyShorthand.h"
9 #include "core/css/CSSBasicShapeValues.h" 9 #include "core/css/CSSBasicShapeValues.h"
10 #include "core/css/CSSBorderImage.h" 10 #include "core/css/CSSBorderImage.h"
(...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after
792 792
793 return true; 793 return true;
794 } 794 }
795 795
796 static CSSValue* ConsumeBorderWidth(CSSParserTokenRange& range, 796 static CSSValue* ConsumeBorderWidth(CSSParserTokenRange& range,
797 CSSParserMode css_parser_mode, 797 CSSParserMode css_parser_mode,
798 UnitlessQuirk unitless) { 798 UnitlessQuirk unitless) {
799 return ConsumeLineWidth(range, css_parser_mode, unitless); 799 return ConsumeLineWidth(range, css_parser_mode, unitless);
800 } 800 }
801 801
802 static bool ConsumeTranslate3d(CSSParserTokenRange& args,
803 CSSParserMode css_parser_mode,
804 CSSFunctionValue*& transform_value) {
805 unsigned number_of_arguments = 2;
806 CSSValue* parsed_value = nullptr;
807 do {
808 parsed_value =
809 ConsumeLengthOrPercent(args, css_parser_mode, kValueRangeAll);
810 if (!parsed_value)
811 return false;
812 transform_value->Append(*parsed_value);
813 if (!ConsumeCommaIncludingWhitespace(args))
814 return false;
815 } while (--number_of_arguments);
816 parsed_value = ConsumeLength(args, css_parser_mode, kValueRangeAll);
817 if (!parsed_value)
818 return false;
819 transform_value->Append(*parsed_value);
820 return true;
821 }
822
823 static bool ConsumeNumbers(CSSParserTokenRange& args,
824 CSSFunctionValue*& transform_value,
825 unsigned number_of_arguments) {
826 do {
827 CSSValue* parsed_value = ConsumeNumber(args, kValueRangeAll);
828 if (!parsed_value)
829 return false;
830 transform_value->Append(*parsed_value);
831 if (--number_of_arguments && !ConsumeCommaIncludingWhitespace(args))
832 return false;
833 } while (number_of_arguments);
834 return true;
835 }
836
837 static bool ConsumePerspective(CSSParserTokenRange& args,
838 const CSSParserContext* context,
839 CSSFunctionValue*& transform_value,
840 bool use_legacy_parsing) {
841 CSSPrimitiveValue* parsed_value =
842 ConsumeLength(args, context->Mode(), kValueRangeNonNegative);
843 if (!parsed_value && use_legacy_parsing) {
844 double perspective;
845 if (!ConsumeNumberRaw(args, perspective) || perspective < 0)
846 return false;
847 context->Count(UseCounter::kUnitlessPerspectiveInTransformProperty);
848 parsed_value = CSSPrimitiveValue::Create(
849 perspective, CSSPrimitiveValue::UnitType::kPixels);
850 }
851 if (!parsed_value)
852 return false;
853 transform_value->Append(*parsed_value);
854 return true;
855 }
856
857 static CSSValue* ConsumeTransformValue(CSSParserTokenRange& range,
858 const CSSParserContext* context,
859 bool use_legacy_parsing) {
860 CSSValueID function_id = range.Peek().FunctionId();
861 if (function_id == CSSValueInvalid)
862 return nullptr;
863 CSSParserTokenRange args = ConsumeFunction(range);
864 if (args.AtEnd())
865 return nullptr;
866 CSSFunctionValue* transform_value = CSSFunctionValue::Create(function_id);
867 CSSValue* parsed_value = nullptr;
868 switch (function_id) {
869 case CSSValueRotate:
870 case CSSValueRotateX:
871 case CSSValueRotateY:
872 case CSSValueRotateZ:
873 case CSSValueSkewX:
874 case CSSValueSkewY:
875 case CSSValueSkew:
876 parsed_value = ConsumeAngle(args);
877 if (!parsed_value)
878 return nullptr;
879 if (function_id == CSSValueSkew &&
880 ConsumeCommaIncludingWhitespace(args)) {
881 transform_value->Append(*parsed_value);
882 parsed_value = ConsumeAngle(args);
883 if (!parsed_value)
884 return nullptr;
885 }
886 break;
887 case CSSValueScaleX:
888 case CSSValueScaleY:
889 case CSSValueScaleZ:
890 case CSSValueScale:
891 parsed_value = ConsumeNumber(args, kValueRangeAll);
892 if (!parsed_value)
893 return nullptr;
894 if (function_id == CSSValueScale &&
895 ConsumeCommaIncludingWhitespace(args)) {
896 transform_value->Append(*parsed_value);
897 parsed_value = ConsumeNumber(args, kValueRangeAll);
898 if (!parsed_value)
899 return nullptr;
900 }
901 break;
902 case CSSValuePerspective:
903 if (!ConsumePerspective(args, context, transform_value,
904 use_legacy_parsing))
905 return nullptr;
906 break;
907 case CSSValueTranslateX:
908 case CSSValueTranslateY:
909 case CSSValueTranslate:
910 parsed_value =
911 ConsumeLengthOrPercent(args, context->Mode(), kValueRangeAll);
912 if (!parsed_value)
913 return nullptr;
914 if (function_id == CSSValueTranslate &&
915 ConsumeCommaIncludingWhitespace(args)) {
916 transform_value->Append(*parsed_value);
917 parsed_value =
918 ConsumeLengthOrPercent(args, context->Mode(), kValueRangeAll);
919 if (!parsed_value)
920 return nullptr;
921 }
922 break;
923 case CSSValueTranslateZ:
924 parsed_value = ConsumeLength(args, context->Mode(), kValueRangeAll);
925 break;
926 case CSSValueMatrix:
927 case CSSValueMatrix3d:
928 if (!ConsumeNumbers(args, transform_value,
929 (function_id == CSSValueMatrix3d) ? 16 : 6))
930 return nullptr;
931 break;
932 case CSSValueScale3d:
933 if (!ConsumeNumbers(args, transform_value, 3))
934 return nullptr;
935 break;
936 case CSSValueRotate3d:
937 if (!ConsumeNumbers(args, transform_value, 3) ||
938 !ConsumeCommaIncludingWhitespace(args))
939 return nullptr;
940 parsed_value = ConsumeAngle(args);
941 if (!parsed_value)
942 return nullptr;
943 break;
944 case CSSValueTranslate3d:
945 if (!ConsumeTranslate3d(args, context->Mode(), transform_value))
946 return nullptr;
947 break;
948 default:
949 return nullptr;
950 }
951 if (parsed_value)
952 transform_value->Append(*parsed_value);
953 if (!args.AtEnd())
954 return nullptr;
955 return transform_value;
956 }
957
958 static CSSValue* ConsumeTransform(CSSParserTokenRange& range,
959 const CSSParserContext* context,
960 bool use_legacy_parsing) {
961 if (range.Peek().Id() == CSSValueNone)
962 return ConsumeIdent(range);
963
964 CSSValueList* list = CSSValueList::CreateSpaceSeparated();
965 do {
966 CSSValue* parsed_transform_value =
967 ConsumeTransformValue(range, context, use_legacy_parsing);
968 if (!parsed_transform_value)
969 return nullptr;
970 list->Append(*parsed_transform_value);
971 } while (!range.AtEnd());
972
973 return list;
974 }
975
976 static CSSValue* ConsumeNoneOrURI(CSSParserTokenRange& range, 802 static CSSValue* ConsumeNoneOrURI(CSSParserTokenRange& range,
977 const CSSParserContext* context) { 803 const CSSParserContext* context) {
978 if (range.Peek().Id() == CSSValueNone) 804 if (range.Peek().Id() == CSSValueNone)
979 return ConsumeIdent(range); 805 return ConsumeIdent(range);
980 return ConsumeUrl(range, context); 806 return ConsumeUrl(range, context);
981 } 807 }
982 808
983 static CSSValue* ConsumePerspective(CSSParserTokenRange& range, 809 static CSSValue* ConsumePerspective(CSSParserTokenRange& range,
984 const CSSParserContext* context, 810 const CSSParserContext* context,
985 CSSPropertyID unresolved_property) { 811 CSSPropertyID unresolved_property) {
(...skipping 966 matching lines...) Expand 10 before | Expand all | Expand 10 after
1952 case CSSPropertyOffsetPath: 1778 case CSSPropertyOffsetPath:
1953 return ConsumeOffsetPath( 1779 return ConsumeOffsetPath(
1954 range_, context_, 1780 range_, context_,
1955 current_shorthand == CSSPropertyMotion || 1781 current_shorthand == CSSPropertyMotion ||
1956 unresolved_property == CSSPropertyAliasMotionPath); 1782 unresolved_property == CSSPropertyAliasMotionPath);
1957 case CSSPropertyOffsetDistance: 1783 case CSSPropertyOffsetDistance:
1958 return ConsumeLengthOrPercent(range_, context_->Mode(), kValueRangeAll); 1784 return ConsumeLengthOrPercent(range_, context_->Mode(), kValueRangeAll);
1959 case CSSPropertyOffsetRotate: 1785 case CSSPropertyOffsetRotate:
1960 case CSSPropertyOffsetRotation: 1786 case CSSPropertyOffsetRotation:
1961 return ConsumeOffsetRotate(range_); 1787 return ConsumeOffsetRotate(range_);
1962 case CSSPropertyTransform:
1963 return ConsumeTransform(
1964 range_, context_,
1965 unresolved_property == CSSPropertyAliasWebkitTransform);
1966 case CSSPropertyWebkitTransformOriginX: 1788 case CSSPropertyWebkitTransformOriginX:
1967 case CSSPropertyWebkitPerspectiveOriginX: 1789 case CSSPropertyWebkitPerspectiveOriginX:
1968 return CSSPropertyPositionUtils::ConsumePositionLonghand<CSSValueLeft, 1790 return CSSPropertyPositionUtils::ConsumePositionLonghand<CSSValueLeft,
1969 CSSValueRight>( 1791 CSSValueRight>(
1970 range_, context_->Mode()); 1792 range_, context_->Mode());
1971 case CSSPropertyWebkitTransformOriginY: 1793 case CSSPropertyWebkitTransformOriginY:
1972 case CSSPropertyWebkitPerspectiveOriginY: 1794 case CSSPropertyWebkitPerspectiveOriginY:
1973 return CSSPropertyPositionUtils::ConsumePositionLonghand<CSSValueTop, 1795 return CSSPropertyPositionUtils::ConsumePositionLonghand<CSSValueTop,
1974 CSSValueBottom>( 1796 CSSValueBottom>(
1975 range_, context_->Mode()); 1797 range_, context_->Mode());
(...skipping 1660 matching lines...) Expand 10 before | Expand all | Expand 10 after
3636 case CSSPropertyPlaceItems: 3458 case CSSPropertyPlaceItems:
3637 return ConsumePlaceItemsShorthand(important); 3459 return ConsumePlaceItemsShorthand(important);
3638 case CSSPropertyPlaceSelf: 3460 case CSSPropertyPlaceSelf:
3639 return ConsumePlaceSelfShorthand(important); 3461 return ConsumePlaceSelfShorthand(important);
3640 default: 3462 default:
3641 return false; 3463 return false;
3642 } 3464 }
3643 } 3465 }
3644 3466
3645 } // namespace blink 3467 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698