static PassRefPtrWillBeRawPtr<CSSValue> parseKeywordValue(CSSPropertyID propertyId, const String& string) { ASSERT(!string.isEmpty()); if (!CSSParserFastPaths::isKeywordPropertyID(propertyId)) { // All properties accept the values of "initial" and "inherit". String lowerCaseString = string.lower(); if (lowerCaseString != "initial" && lowerCaseString != "inherit") return nullptr; // Parse initial/inherit shorthands using the CSSPropertyParser. if (shorthandForProperty(propertyId).length()) return nullptr; } CSSParserString cssString; cssString.init(string); CSSValueID valueID = cssValueKeywordID(cssString); if (!valueID) return nullptr; if (valueID == CSSValueInherit) return cssValuePool().createInheritedValue(); if (valueID == CSSValueInitial) return cssValuePool().createExplicitInitialValue(); if (CSSParserFastPaths::isValidKeywordPropertyAndValue(propertyId, valueID)) return cssValuePool().createIdentifierValue(valueID); return nullptr; }
static PassRefPtrWillBeRawPtr<CSSValue> parseColorValue(CSSPropertyID propertyId, const String& string, CSSParserMode cssParserMode) { ASSERT(!string.isEmpty()); bool quirksMode = isQuirksModeBehavior(cssParserMode); if (!isColorPropertyID(propertyId)) return nullptr; CSSParserString cssString; cssString.init(string); CSSValueID valueID = cssValueKeywordID(cssString); bool validPrimitive = false; if (valueID == CSSValueWebkitText) { validPrimitive = true; } else if (valueID == CSSValueCurrentcolor) { validPrimitive = true; } else if ((valueID >= CSSValueAqua && valueID <= CSSValueWindowtext) || valueID == CSSValueMenu || (quirksMode && valueID >= CSSValueWebkitFocusRingColor && valueID < CSSValueWebkitText)) { validPrimitive = true; } if (validPrimitive) return cssValuePool().createIdentifierValue(valueID); RGBA32 color; if (!CSSPropertyParser::fastParseColor(color, string, !quirksMode && string[0] != '#')) return nullptr; return cssValuePool().createColorValue(color); }
PassRefPtrWillBeRawPtr<CSSValue> CSSParserFastPaths::parseColor(const String& string, bool quirksMode) { ASSERT(!string.isEmpty()); CSSParserString cssString; cssString.init(string); CSSValueID valueID = cssValueKeywordID(cssString); if (valueID == CSSValueWebkitText || valueID == CSSValueCurrentcolor || valueID == CSSValueGrey || (valueID >= CSSValueAqua && valueID <= CSSValueWindowtext) || valueID == CSSValueMenu || (quirksMode && valueID >= CSSValueWebkitFocusRingColor && valueID < CSSValueWebkitText)) return cssValuePool().createIdentifierValue(valueID); RGBA32 color; // Fast path for hex colors and rgb()/rgba() colors bool parseResult; if (string.is8Bit()) parseResult = fastParseColorInternal(color, string.characters8(), string.length(), quirksMode); else parseResult = fastParseColorInternal(color, string.characters16(), string.length(), quirksMode); if (parseResult) return cssValuePool().createColorValue(color); Color namedColor; if (!namedColor.setNamedColor(string)) return nullptr; return cssValuePool().createColorValue(namedColor.rgb()); }
static CSSValue* parseKeywordValue(CSSPropertyID propertyId, const String& string, CSSParserMode parserMode) { ASSERT(!string.isEmpty()); if (!CSSParserFastPaths::isKeywordPropertyID(propertyId)) { // All properties accept the values of "initial" and "inherit". if (!equalIgnoringASCIICase(string, "initial") && !equalIgnoringASCIICase(string, "inherit")) return nullptr; // Parse initial/inherit shorthands using the CSSPropertyParser. if (shorthandForProperty(propertyId).length()) return nullptr; // Descriptors do not support css wide keywords. if (CSSPropertyMetadata::isDescriptorOnly(propertyId)) return nullptr; } CSSValueID valueID = cssValueKeywordID(string); if (!valueID) return nullptr; if (valueID == CSSValueInherit) return CSSInheritedValue::create(); if (valueID == CSSValueInitial) return CSSInitialValue::create(); if (CSSParserFastPaths::isValidKeywordPropertyAndValue(propertyId, valueID, parserMode)) return CSSIdentifierValue::create(valueID); return nullptr; }
CSSValue* CSSParserFastPaths::parseColor(const String& string, CSSParserMode parserMode) { ASSERT(!string.isEmpty()); CSSValueID valueID = cssValueKeywordID(string); if (StyleColor::isColorKeyword(valueID)) { if (!isValueAllowedInMode(valueID, parserMode)) return nullptr; return CSSIdentifierValue::create(valueID); } RGBA32 color; bool quirksMode = isQuirksModeBehavior(parserMode); // Fast path for hex colors and rgb()/rgba() colors bool parseResult; if (string.is8Bit()) parseResult = fastParseColorInternal(color, string.characters8(), string.length(), quirksMode); else parseResult = fastParseColorInternal(color, string.characters16(), string.length(), quirksMode); if (!parseResult) return nullptr; return CSSColorValue::create(color); }
CSSValueID CSSParserToken::functionId() const { if (m_type != FunctionToken) return CSSValueInvalid; if (m_id < 0) m_id = cssValueKeywordID(value()); return static_cast<CSSValueID>(m_id); }
CSSParserFunction* BisonCSSParser::createFloatingFunction(const CSSParserString& name, PassOwnPtr<CSSParserValueList> args) { CSSParserFunction* function = new CSSParserFunction; m_floatingFunctions.append(function); function->id = cssValueKeywordID(name); function->args = args; return function; }
Color CSSParser::parseSystemColor(const String& string, Document* document) { if (!document || !document->page()) return Color(); CSSValueID id = cssValueKeywordID(string); if (!StyleColor::isSystemColor(id)) return Color(); return document->page()->theme().systemColor(id); }
bool CSSParser::parseSystemColor(RGBA32& color, const String& colorString) { CSSParserString cssColor; cssColor.init(colorString); CSSValueID id = cssValueKeywordID(cssColor); if (!CSSPropertyParser::isSystemColor(id)) return false; Color parsedColor = LayoutTheme::theme().systemColor(id); color = parsedColor.rgb(); return true; }
void MediaQueryData::addParserValue(MediaQueryTokenType type, const MediaQueryToken& token) { CSSParserValue value; if (type == NumberToken || type == PercentageToken || type == DimensionToken) { value.setFromNumber(token.numericValue(), token.unitType()); value.isInt = (token.numericValueType() == IntegerValueType); } else if (type == DelimiterToken) { value.unit = CSSParserValue::Operator; value.iValue = token.delimiter(); } else { CSSParserFunction* function = new CSSParserFunction; function->name.init(token.value()); value.setFromFunction(function); CSSParserString tokenValue; tokenValue.init(token.value()); value.id = cssValueKeywordID(tokenValue); } m_valueList.addValue(value); }
void MediaQueryData::addParserValue(CSSParserTokenType type, const CSSParserToken& token) { CSSParserValue value; if (type == NumberToken || type == PercentageToken || type == DimensionToken) { value.setFromNumber(token.numericValue(), token.unitType()); value.isInt = (token.numericValueType() == IntegerValueType); } else if (type == DelimiterToken) { value.unit = CSSParserValue::Operator; value.iValue = token.delimiter(); value.id = CSSValueInvalid; value.isInt = false; } else { CSSParserString tokenValue; tokenValue.init(token.value()); value.unit = CSSPrimitiveValue::CSS_IDENT; value.string = tokenValue; value.id = cssValueKeywordID(tokenValue); value.isInt = false; } m_valueList.addValue(value); }