static bool usesStyleBasedEditability(const StyleProperties& properties) { return properties.getPropertyCSSValue(CSSPropertyWebkitUserModify); }
static Optional<FontTraitsMask> computeTraitsMask(const StyleProperties& style) { unsigned traitsMask = 0; if (RefPtr<CSSValue> fontStyle = style.getPropertyCSSValue(CSSPropertyFontStyle)) { if (!is<CSSPrimitiveValue>(*fontStyle)) return Nullopt; switch (downcast<CSSPrimitiveValue>(*fontStyle).getValueID()) { case CSSValueNormal: traitsMask |= FontStyleNormalMask; break; case CSSValueItalic: case CSSValueOblique: traitsMask |= FontStyleItalicMask; break; default: break; } } else traitsMask |= FontStyleNormalMask; if (RefPtr<CSSValue> fontWeight = style.getPropertyCSSValue(CSSPropertyFontWeight)) { if (!is<CSSPrimitiveValue>(*fontWeight)) return Nullopt; switch (downcast<CSSPrimitiveValue>(*fontWeight).getValueID()) { case CSSValueBold: case CSSValue700: traitsMask |= FontWeight700Mask; break; case CSSValueNormal: case CSSValue400: traitsMask |= FontWeight400Mask; break; case CSSValue900: traitsMask |= FontWeight900Mask; break; case CSSValue800: traitsMask |= FontWeight800Mask; break; case CSSValue600: traitsMask |= FontWeight600Mask; break; case CSSValue500: traitsMask |= FontWeight500Mask; break; case CSSValue300: traitsMask |= FontWeight300Mask; break; case CSSValue200: traitsMask |= FontWeight200Mask; break; case CSSValue100: traitsMask |= FontWeight100Mask; break; default: break; } } else traitsMask |= FontWeight400Mask; if (RefPtr<CSSValue> fontVariant = style.getPropertyCSSValue(CSSPropertyFontVariant)) { // font-variant descriptor can be a value list. if (fontVariant->isPrimitiveValue()) { RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated(); list->append(fontVariant.releaseNonNull()); fontVariant = list.releaseNonNull(); } else if (!is<CSSValueList>(*fontVariant)) return Nullopt; CSSValueList& variantList = downcast<CSSValueList>(*fontVariant); unsigned numVariants = variantList.length(); if (!numVariants) return Nullopt; for (unsigned i = 0; i < numVariants; ++i) { switch (downcast<CSSPrimitiveValue>(variantList.itemWithoutBoundsCheck(i))->getValueID()) { case CSSValueNormal: traitsMask |= FontVariantNormalMask; break; case CSSValueSmallCaps: traitsMask |= FontVariantSmallCapsMask; break; default: break; } } } else traitsMask |= FontVariantMask; return static_cast<FontTraitsMask>(traitsMask); }