| Index: third_party/WebKit/Source/core/css/properties/CSSPropertyAPITransform.cpp
|
| diff --git a/third_party/WebKit/Source/core/css/properties/CSSPropertyAPITransform.cpp b/third_party/WebKit/Source/core/css/properties/CSSPropertyAPITransform.cpp
|
| index 57fc684f0836f7b6d62ad2925d4e55f6319224dc..9dbeb4271afeb6c75820e22076d44865fa4603cc 100644
|
| --- a/third_party/WebKit/Source/core/css/properties/CSSPropertyAPITransform.cpp
|
| +++ b/third_party/WebKit/Source/core/css/properties/CSSPropertyAPITransform.cpp
|
| @@ -4,207 +4,19 @@
|
|
|
| #include "core/css/properties/CSSPropertyAPITransform.h"
|
|
|
| -#include "core/css/CSSFunctionValue.h"
|
| -#include "core/css/CSSValueList.h"
|
| #include "core/css/parser/CSSParserContext.h"
|
| #include "core/css/parser/CSSParserLocalContext.h"
|
| -#include "core/css/parser/CSSPropertyParserHelpers.h"
|
| -#include "platform/Length.h"
|
| +#include "core/css/parser/CSSParserTokenRange.h"
|
| +#include "core/css/properties/CSSPropertyTransformUtils.h"
|
|
|
| namespace blink {
|
|
|
| -namespace {
|
| -
|
| -bool ConsumeNumbers(CSSParserTokenRange& args,
|
| - CSSFunctionValue*& transform_value,
|
| - unsigned number_of_arguments) {
|
| - do {
|
| - CSSValue* parsed_value =
|
| - CSSPropertyParserHelpers::ConsumeNumber(args, kValueRangeAll);
|
| - if (!parsed_value)
|
| - return false;
|
| - transform_value->Append(*parsed_value);
|
| - if (--number_of_arguments &&
|
| - !CSSPropertyParserHelpers::ConsumeCommaIncludingWhitespace(args)) {
|
| - return false;
|
| - }
|
| - } while (number_of_arguments);
|
| - return true;
|
| -}
|
| -
|
| -bool ConsumePerspective(CSSParserTokenRange& args,
|
| - const CSSParserContext* context,
|
| - CSSFunctionValue*& transform_value,
|
| - bool use_legacy_parsing) {
|
| - CSSPrimitiveValue* parsed_value = CSSPropertyParserHelpers::ConsumeLength(
|
| - args, context->Mode(), kValueRangeNonNegative);
|
| - if (!parsed_value && use_legacy_parsing) {
|
| - double perspective;
|
| - if (!CSSPropertyParserHelpers::ConsumeNumberRaw(args, perspective) ||
|
| - perspective < 0) {
|
| - return false;
|
| - }
|
| - context->Count(WebFeature::kUnitlessPerspectiveInTransformProperty);
|
| - parsed_value = CSSPrimitiveValue::Create(
|
| - perspective, CSSPrimitiveValue::UnitType::kPixels);
|
| - }
|
| - if (!parsed_value)
|
| - return false;
|
| - transform_value->Append(*parsed_value);
|
| - return true;
|
| -}
|
| -
|
| -bool ConsumeTranslate3d(CSSParserTokenRange& args,
|
| - CSSParserMode css_parser_mode,
|
| - CSSFunctionValue*& transform_value) {
|
| - unsigned number_of_arguments = 2;
|
| - CSSValue* parsed_value = nullptr;
|
| - do {
|
| - parsed_value = CSSPropertyParserHelpers::ConsumeLengthOrPercent(
|
| - args, css_parser_mode, kValueRangeAll);
|
| - if (!parsed_value)
|
| - return false;
|
| - transform_value->Append(*parsed_value);
|
| - if (!CSSPropertyParserHelpers::ConsumeCommaIncludingWhitespace(args))
|
| - return false;
|
| - } while (--number_of_arguments);
|
| - parsed_value = CSSPropertyParserHelpers::ConsumeLength(args, css_parser_mode,
|
| - kValueRangeAll);
|
| - if (!parsed_value)
|
| - return false;
|
| - transform_value->Append(*parsed_value);
|
| - return true;
|
| -}
|
| -
|
| -CSSValue* ConsumeTransformValue(CSSParserTokenRange& range,
|
| - const CSSParserContext* context,
|
| - bool use_legacy_parsing) {
|
| - CSSValueID function_id = range.Peek().FunctionId();
|
| - if (function_id == CSSValueInvalid)
|
| - return nullptr;
|
| - CSSParserTokenRange args = CSSPropertyParserHelpers::ConsumeFunction(range);
|
| - if (args.AtEnd())
|
| - return nullptr;
|
| - CSSFunctionValue* transform_value = CSSFunctionValue::Create(function_id);
|
| - CSSValue* parsed_value = nullptr;
|
| - switch (function_id) {
|
| - case CSSValueRotate:
|
| - case CSSValueRotateX:
|
| - case CSSValueRotateY:
|
| - case CSSValueRotateZ:
|
| - case CSSValueSkewX:
|
| - case CSSValueSkewY:
|
| - case CSSValueSkew:
|
| - parsed_value = CSSPropertyParserHelpers::ConsumeAngle(
|
| - args, *context, WebFeature::kUnitlessZeroAngleTransform);
|
| - if (!parsed_value)
|
| - return nullptr;
|
| - if (function_id == CSSValueSkew &&
|
| - CSSPropertyParserHelpers::ConsumeCommaIncludingWhitespace(args)) {
|
| - transform_value->Append(*parsed_value);
|
| - parsed_value = CSSPropertyParserHelpers::ConsumeAngle(
|
| - args, *context, WebFeature::kUnitlessZeroAngleTransform);
|
| - if (!parsed_value)
|
| - return nullptr;
|
| - }
|
| - break;
|
| - case CSSValueScaleX:
|
| - case CSSValueScaleY:
|
| - case CSSValueScaleZ:
|
| - case CSSValueScale:
|
| - parsed_value =
|
| - CSSPropertyParserHelpers::ConsumeNumber(args, kValueRangeAll);
|
| - if (!parsed_value)
|
| - return nullptr;
|
| - if (function_id == CSSValueScale &&
|
| - CSSPropertyParserHelpers::ConsumeCommaIncludingWhitespace(args)) {
|
| - transform_value->Append(*parsed_value);
|
| - parsed_value =
|
| - CSSPropertyParserHelpers::ConsumeNumber(args, kValueRangeAll);
|
| - if (!parsed_value)
|
| - return nullptr;
|
| - }
|
| - break;
|
| - case CSSValuePerspective:
|
| - if (!ConsumePerspective(args, context, transform_value,
|
| - use_legacy_parsing)) {
|
| - return nullptr;
|
| - }
|
| - break;
|
| - case CSSValueTranslateX:
|
| - case CSSValueTranslateY:
|
| - case CSSValueTranslate:
|
| - parsed_value = CSSPropertyParserHelpers::ConsumeLengthOrPercent(
|
| - args, context->Mode(), kValueRangeAll);
|
| - if (!parsed_value)
|
| - return nullptr;
|
| - if (function_id == CSSValueTranslate &&
|
| - CSSPropertyParserHelpers::ConsumeCommaIncludingWhitespace(args)) {
|
| - transform_value->Append(*parsed_value);
|
| - parsed_value = CSSPropertyParserHelpers::ConsumeLengthOrPercent(
|
| - args, context->Mode(), kValueRangeAll);
|
| - if (!parsed_value)
|
| - return nullptr;
|
| - }
|
| - break;
|
| - case CSSValueTranslateZ:
|
| - parsed_value = CSSPropertyParserHelpers::ConsumeLength(
|
| - args, context->Mode(), kValueRangeAll);
|
| - break;
|
| - case CSSValueMatrix:
|
| - case CSSValueMatrix3d:
|
| - if (!ConsumeNumbers(args, transform_value,
|
| - (function_id == CSSValueMatrix3d) ? 16 : 6)) {
|
| - return nullptr;
|
| - }
|
| - break;
|
| - case CSSValueScale3d:
|
| - if (!ConsumeNumbers(args, transform_value, 3))
|
| - return nullptr;
|
| - break;
|
| - case CSSValueRotate3d:
|
| - if (!ConsumeNumbers(args, transform_value, 3) ||
|
| - !CSSPropertyParserHelpers::ConsumeCommaIncludingWhitespace(args)) {
|
| - return nullptr;
|
| - }
|
| - parsed_value = CSSPropertyParserHelpers::ConsumeAngle(
|
| - args, *context, WebFeature::kUnitlessZeroAngleTransform);
|
| - if (!parsed_value)
|
| - return nullptr;
|
| - break;
|
| - case CSSValueTranslate3d:
|
| - if (!ConsumeTranslate3d(args, context->Mode(), transform_value))
|
| - return nullptr;
|
| - break;
|
| - default:
|
| - return nullptr;
|
| - }
|
| - if (parsed_value)
|
| - transform_value->Append(*parsed_value);
|
| - if (!args.AtEnd())
|
| - return nullptr;
|
| - return transform_value;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| const CSSValue* CSSPropertyAPITransform::parseSingleValue(
|
| CSSParserTokenRange& range,
|
| const CSSParserContext& context,
|
| const CSSParserLocalContext& local_context) {
|
| - if (range.Peek().Id() == CSSValueNone)
|
| - return CSSPropertyParserHelpers::ConsumeIdent(range);
|
| -
|
| - CSSValueList* list = CSSValueList::CreateSpaceSeparated();
|
| - do {
|
| - CSSValue* parsed_transform_value =
|
| - ConsumeTransformValue(range, &context, local_context.UseAliasParsing());
|
| - if (!parsed_transform_value)
|
| - return nullptr;
|
| - list->Append(*parsed_transform_value);
|
| - } while (!range.AtEnd());
|
| -
|
| - return list;
|
| + return CSSPropertyTransformUtils::ConsumeTransformList(range, context,
|
| + local_context);
|
| }
|
|
|
| } // namespace blink
|
|
|