| Index: third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
|
| diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
|
| index b408bd376112d6c43dc2a1f5df4ed2de317e4254..7e547902f3f8e7f6844c34c8b848f156ef2f3b68 100644
|
| --- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
|
| +++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
|
| @@ -10,7 +10,6 @@
|
| #include "core/css/CSSContentDistributionValue.h"
|
| #include "core/css/CSSCursorImageValue.h"
|
| #include "core/css/CSSFontFaceSrcValue.h"
|
| -#include "core/css/CSSFontFamilyValue.h"
|
| #include "core/css/CSSFunctionValue.h"
|
| #include "core/css/CSSGridAutoRepeatValue.h"
|
| #include "core/css/CSSGridLineNamesValue.h"
|
| @@ -35,8 +34,6 @@
|
| #include "core/css/parser/CSSParserLocalContext.h"
|
| #include "core/css/parser/CSSPropertyParserHelpers.h"
|
| #include "core/css/parser/CSSVariableParser.h"
|
| -#include "core/css/parser/FontVariantLigaturesParser.h"
|
| -#include "core/css/parser/FontVariantNumericParser.h"
|
| #include "core/css/properties/CSSPropertyAPIOffsetAnchor.h"
|
| #include "core/css/properties/CSSPropertyAPIOffsetPosition.h"
|
| #include "core/css/properties/CSSPropertyAlignmentUtils.h"
|
| @@ -70,12 +67,17 @@ CSSPropertyParser::CSSPropertyParser(
|
| range_.ConsumeWhitespace();
|
| }
|
|
|
| +// AddProperty takes implicit as an enum, below we're using a bool because
|
| +// AddParsedProperty will be removed after we finish implemenation of property
|
| +// APIs.
|
| void CSSPropertyParser::AddParsedProperty(CSSPropertyID resolved_property,
|
| CSSPropertyID current_shorthand,
|
| const CSSValue& value,
|
| bool important,
|
| bool implicit) {
|
| - AddProperty(resolved_property, current_shorthand, value, important, implicit,
|
| + AddProperty(resolved_property, current_shorthand, value, important,
|
| + implicit ? IsImplicitProperty::kImplicit
|
| + : IsImplicitProperty::kNotImplicit,
|
| *parsed_properties_);
|
| }
|
|
|
| @@ -281,10 +283,6 @@ bool CSSPropertyParser::ConsumeCSSWideKeyword(CSSPropertyID unresolved_property,
|
| return true;
|
| }
|
|
|
| -static CSSIdentifierValue* ConsumeFontVariantCSS21(CSSParserTokenRange& range) {
|
| - return ConsumeIdent<CSSValueNormal, CSSValueSmallCaps>(range);
|
| -}
|
| -
|
| static CSSValue* ConsumeFontVariantList(CSSParserTokenRange& range) {
|
| CSSValueList* values = CSSValueList::CreateCommaSeparated();
|
| do {
|
| @@ -297,7 +295,8 @@ static CSSValue* ConsumeFontVariantList(CSSParserTokenRange& range) {
|
| return nullptr;
|
| return ConsumeIdent(range);
|
| }
|
| - CSSIdentifierValue* font_variant = ConsumeFontVariantCSS21(range);
|
| + CSSIdentifierValue* font_variant =
|
| + CSSPropertyFontUtils::ConsumeFontVariantCSS21(range);
|
| if (font_variant)
|
| values->Append(*font_variant);
|
| } while (ConsumeCommaIncludingWhitespace(range));
|
| @@ -1802,211 +1801,6 @@ bool CSSPropertyParser::ParseFontFaceDescriptor(CSSPropertyID prop_id) {
|
| return true;
|
| }
|
|
|
| -bool CSSPropertyParser::ConsumeSystemFont(bool important) {
|
| - CSSValueID system_font_id = range_.ConsumeIncludingWhitespace().Id();
|
| - DCHECK_GE(system_font_id, CSSValueCaption);
|
| - DCHECK_LE(system_font_id, CSSValueStatusBar);
|
| - if (!range_.AtEnd())
|
| - return false;
|
| -
|
| - FontStyle font_style = kFontStyleNormal;
|
| - FontWeight font_weight = kFontWeightNormal;
|
| - float font_size = 0;
|
| - AtomicString font_family;
|
| - LayoutTheme::GetTheme().SystemFont(system_font_id, font_style, font_weight,
|
| - font_size, font_family);
|
| -
|
| - AddParsedProperty(CSSPropertyFontStyle, CSSPropertyFont,
|
| - *CSSIdentifierValue::Create(font_style == kFontStyleItalic
|
| - ? CSSValueItalic
|
| - : CSSValueNormal),
|
| - important);
|
| - AddParsedProperty(CSSPropertyFontWeight, CSSPropertyFont,
|
| - *CSSIdentifierValue::Create(font_weight), important);
|
| - AddParsedProperty(CSSPropertyFontSize, CSSPropertyFont,
|
| - *CSSPrimitiveValue::Create(
|
| - font_size, CSSPrimitiveValue::UnitType::kPixels),
|
| - important);
|
| - CSSValueList* font_family_list = CSSValueList::CreateCommaSeparated();
|
| - font_family_list->Append(*CSSFontFamilyValue::Create(font_family));
|
| - AddParsedProperty(CSSPropertyFontFamily, CSSPropertyFont, *font_family_list,
|
| - important);
|
| -
|
| - AddParsedProperty(CSSPropertyFontStretch, CSSPropertyFont,
|
| - *CSSIdentifierValue::Create(CSSValueNormal), important);
|
| - AddParsedProperty(CSSPropertyFontVariantCaps, CSSPropertyFont,
|
| - *CSSIdentifierValue::Create(CSSValueNormal), important);
|
| - AddParsedProperty(CSSPropertyFontVariantLigatures, CSSPropertyFont,
|
| - *CSSIdentifierValue::Create(CSSValueNormal), important);
|
| - AddParsedProperty(CSSPropertyFontVariantNumeric, CSSPropertyFont,
|
| - *CSSIdentifierValue::Create(CSSValueNormal), important);
|
| - AddParsedProperty(CSSPropertyLineHeight, CSSPropertyFont,
|
| - *CSSIdentifierValue::Create(CSSValueNormal), important);
|
| - return true;
|
| -}
|
| -
|
| -bool CSSPropertyParser::ConsumeFont(bool important) {
|
| - // Let's check if there is an inherit or initial somewhere in the shorthand.
|
| - CSSParserTokenRange range = range_;
|
| - while (!range.AtEnd()) {
|
| - CSSValueID id = range.ConsumeIncludingWhitespace().Id();
|
| - if (id == CSSValueInherit || id == CSSValueInitial)
|
| - return false;
|
| - }
|
| - // Optional font-style, font-variant, font-stretch and font-weight.
|
| - CSSIdentifierValue* font_style = nullptr;
|
| - CSSIdentifierValue* font_variant_caps = nullptr;
|
| - CSSIdentifierValue* font_weight = nullptr;
|
| - CSSIdentifierValue* font_stretch = nullptr;
|
| - while (!range_.AtEnd()) {
|
| - CSSValueID id = range_.Peek().Id();
|
| - if (!font_style && CSSParserFastPaths::IsValidKeywordPropertyAndValue(
|
| - CSSPropertyFontStyle, id, context_->Mode())) {
|
| - font_style = ConsumeIdent(range_);
|
| - continue;
|
| - }
|
| - if (!font_variant_caps &&
|
| - (id == CSSValueNormal || id == CSSValueSmallCaps)) {
|
| - // Font variant in the shorthand is particular, it only accepts normal or
|
| - // small-caps.
|
| - // See https://drafts.csswg.org/css-fonts/#propdef-font
|
| - font_variant_caps = ConsumeFontVariantCSS21(range_);
|
| - if (font_variant_caps)
|
| - continue;
|
| - }
|
| - if (!font_weight) {
|
| - font_weight = CSSPropertyFontUtils::ConsumeFontWeight(range_);
|
| - if (font_weight)
|
| - continue;
|
| - }
|
| - if (!font_stretch && CSSParserFastPaths::IsValidKeywordPropertyAndValue(
|
| - CSSPropertyFontStretch, id, context_->Mode()))
|
| - font_stretch = ConsumeIdent(range_);
|
| - else
|
| - break;
|
| - }
|
| -
|
| - if (range_.AtEnd())
|
| - return false;
|
| -
|
| - AddParsedProperty(
|
| - CSSPropertyFontStyle, CSSPropertyFont,
|
| - font_style ? *font_style : *CSSIdentifierValue::Create(CSSValueNormal),
|
| - important);
|
| - AddParsedProperty(CSSPropertyFontVariantCaps, CSSPropertyFont,
|
| - font_variant_caps
|
| - ? *font_variant_caps
|
| - : *CSSIdentifierValue::Create(CSSValueNormal),
|
| - important);
|
| - AddParsedProperty(CSSPropertyFontVariantLigatures, CSSPropertyFont,
|
| - *CSSIdentifierValue::Create(CSSValueNormal), important);
|
| - AddParsedProperty(CSSPropertyFontVariantNumeric, CSSPropertyFont,
|
| - *CSSIdentifierValue::Create(CSSValueNormal), important);
|
| -
|
| - AddParsedProperty(
|
| - CSSPropertyFontWeight, CSSPropertyFont,
|
| - font_weight ? *font_weight : *CSSIdentifierValue::Create(CSSValueNormal),
|
| - important);
|
| - AddParsedProperty(CSSPropertyFontStretch, CSSPropertyFont,
|
| - font_stretch ? *font_stretch
|
| - : *CSSIdentifierValue::Create(CSSValueNormal),
|
| - important);
|
| -
|
| - // Now a font size _must_ come.
|
| - CSSValue* font_size =
|
| - CSSPropertyFontUtils::ConsumeFontSize(range_, context_->Mode());
|
| - if (!font_size || range_.AtEnd())
|
| - return false;
|
| -
|
| - AddParsedProperty(CSSPropertyFontSize, CSSPropertyFont, *font_size,
|
| - important);
|
| -
|
| - if (ConsumeSlashIncludingWhitespace(range_)) {
|
| - CSSValue* line_height =
|
| - CSSPropertyFontUtils::ConsumeLineHeight(range_, context_->Mode());
|
| - if (!line_height)
|
| - return false;
|
| - AddParsedProperty(CSSPropertyLineHeight, CSSPropertyFont, *line_height,
|
| - important);
|
| - } else {
|
| - AddParsedProperty(CSSPropertyLineHeight, CSSPropertyFont,
|
| - *CSSIdentifierValue::Create(CSSValueNormal), important);
|
| - }
|
| -
|
| - // Font family must come now.
|
| - CSSValue* parsed_family_value =
|
| - CSSPropertyFontUtils::ConsumeFontFamily(range_);
|
| - if (!parsed_family_value)
|
| - return false;
|
| -
|
| - AddParsedProperty(CSSPropertyFontFamily, CSSPropertyFont,
|
| - *parsed_family_value, important);
|
| -
|
| - // FIXME: http://www.w3.org/TR/2011/WD-css3-fonts-20110324/#font-prop requires
|
| - // that "font-stretch", "font-size-adjust", and "font-kerning" be reset to
|
| - // their initial values but we don't seem to support them at the moment. They
|
| - // should also be added here once implemented.
|
| - return range_.AtEnd();
|
| -}
|
| -
|
| -bool CSSPropertyParser::ConsumeFontVariantShorthand(bool important) {
|
| - if (IdentMatches<CSSValueNormal, CSSValueNone>(range_.Peek().Id())) {
|
| - AddParsedProperty(CSSPropertyFontVariantLigatures, CSSPropertyFontVariant,
|
| - *ConsumeIdent(range_), important);
|
| - AddParsedProperty(CSSPropertyFontVariantCaps, CSSPropertyFontVariant,
|
| - *CSSIdentifierValue::Create(CSSValueNormal), important);
|
| - return range_.AtEnd();
|
| - }
|
| -
|
| - CSSIdentifierValue* caps_value = nullptr;
|
| - FontVariantLigaturesParser ligatures_parser;
|
| - FontVariantNumericParser numeric_parser;
|
| - do {
|
| - FontVariantLigaturesParser::ParseResult ligatures_parse_result =
|
| - ligatures_parser.ConsumeLigature(range_);
|
| - FontVariantNumericParser::ParseResult numeric_parse_result =
|
| - numeric_parser.ConsumeNumeric(range_);
|
| - if (ligatures_parse_result ==
|
| - FontVariantLigaturesParser::ParseResult::kConsumedValue ||
|
| - numeric_parse_result ==
|
| - FontVariantNumericParser::ParseResult::kConsumedValue)
|
| - continue;
|
| -
|
| - if (ligatures_parse_result ==
|
| - FontVariantLigaturesParser::ParseResult::kDisallowedValue ||
|
| - numeric_parse_result ==
|
| - FontVariantNumericParser::ParseResult::kDisallowedValue)
|
| - return false;
|
| -
|
| - CSSValueID id = range_.Peek().Id();
|
| - switch (id) {
|
| - case CSSValueSmallCaps:
|
| - case CSSValueAllSmallCaps:
|
| - case CSSValuePetiteCaps:
|
| - case CSSValueAllPetiteCaps:
|
| - case CSSValueUnicase:
|
| - case CSSValueTitlingCaps:
|
| - // Only one caps value permitted in font-variant grammar.
|
| - if (caps_value)
|
| - return false;
|
| - caps_value = ConsumeIdent(range_);
|
| - break;
|
| - default:
|
| - return false;
|
| - }
|
| - } while (!range_.AtEnd());
|
| -
|
| - AddParsedProperty(CSSPropertyFontVariantLigatures, CSSPropertyFontVariant,
|
| - *ligatures_parser.FinalizeValue(), important);
|
| - AddParsedProperty(CSSPropertyFontVariantNumeric, CSSPropertyFontVariant,
|
| - *numeric_parser.FinalizeValue(), important);
|
| - AddParsedProperty(
|
| - CSSPropertyFontVariantCaps, CSSPropertyFontVariant,
|
| - caps_value ? *caps_value : *CSSIdentifierValue::Create(CSSValueNormal),
|
| - important);
|
| - return true;
|
| -}
|
| -
|
| bool CSSPropertyParser::ConsumeBorderSpacing(bool important) {
|
| CSSValue* horizontal_spacing = ConsumeLength(
|
| range_, context_->Mode(), kValueRangeNonNegative, UnitlessQuirk::kAllow);
|
| @@ -3042,43 +2836,6 @@ bool CSSPropertyParser::ParseShorthand(CSSPropertyID unresolved_property,
|
| }
|
|
|
| switch (property) {
|
| - case CSSPropertyOverflow: {
|
| - CSSValueID id = range_.ConsumeIncludingWhitespace().Id();
|
| - if (!CSSParserFastPaths::IsValidKeywordPropertyAndValue(
|
| - CSSPropertyOverflowY, id, context_->Mode()))
|
| - return false;
|
| - if (!range_.AtEnd())
|
| - return false;
|
| - CSSValue* overflow_y_value = CSSIdentifierValue::Create(id);
|
| -
|
| - CSSValue* overflow_x_value = nullptr;
|
| -
|
| - // FIXME: -webkit-paged-x or -webkit-paged-y only apply to overflow-y.
|
| - // If
|
| - // this value has been set using the shorthand, then for now overflow-x
|
| - // will default to auto, but once we implement pagination controls, it
|
| - // should default to hidden. If the overflow-y value is anything but
|
| - // paged-x or paged-y, then overflow-x and overflow-y should have the
|
| - // same
|
| - // value.
|
| - if (id == CSSValueWebkitPagedX || id == CSSValueWebkitPagedY)
|
| - overflow_x_value = CSSIdentifierValue::Create(CSSValueAuto);
|
| - else
|
| - overflow_x_value = overflow_y_value;
|
| - AddParsedProperty(CSSPropertyOverflowX, CSSPropertyOverflow,
|
| - *overflow_x_value, important);
|
| - AddParsedProperty(CSSPropertyOverflowY, CSSPropertyOverflow,
|
| - *overflow_y_value, important);
|
| - return true;
|
| - }
|
| - case CSSPropertyFont: {
|
| - const CSSParserToken& token = range_.Peek();
|
| - if (token.Id() >= CSSValueCaption && token.Id() <= CSSValueStatusBar)
|
| - return ConsumeSystemFont(important);
|
| - return ConsumeFont(important);
|
| - }
|
| - case CSSPropertyFontVariant:
|
| - return ConsumeFontVariantShorthand(important);
|
| case CSSPropertyBorderSpacing:
|
| return ConsumeBorderSpacing(important);
|
| case CSSPropertyColumns:
|
|
|