1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 19:25:10 +00:00

LibWeb: Generate the CSS::ValueID enum and its helper functions

This commit is contained in:
Andreas Kling 2020-12-15 20:39:09 +01:00
parent 92d8e559ba
commit 17c529e6c5
11 changed files with 421 additions and 550 deletions

View file

@ -71,119 +71,6 @@ bool ParsingContext::in_quirks_mode() const
}
static Optional<CSS::ValueID> value_id_for_palette_string(const StringView& string)
{
if (string.equals_ignoring_case("desktop-background"))
return CSS::ValueID::VendorSpecificPaletteDesktopBackground;
if (string.equals_ignoring_case("active-window-border1"))
return CSS::ValueID::VendorSpecificPaletteActiveWindowBorder1;
if (string.equals_ignoring_case("active-window-border2"))
return CSS::ValueID::VendorSpecificPaletteActiveWindowBorder2;
if (string.equals_ignoring_case("active-window-title"))
return CSS::ValueID::VendorSpecificPaletteActiveWindowTitle;
if (string.equals_ignoring_case("inactive-window-border1"))
return CSS::ValueID::VendorSpecificPaletteInactiveWindowBorder1;
if (string.equals_ignoring_case("inactive-window-border2"))
return CSS::ValueID::VendorSpecificPaletteInactiveWindowBorder2;
if (string.equals_ignoring_case("inactive-window-title"))
return CSS::ValueID::VendorSpecificPaletteInactiveWindowTitle;
if (string.equals_ignoring_case("moving-window-border1"))
return CSS::ValueID::VendorSpecificPaletteMovingWindowBorder1;
if (string.equals_ignoring_case("moving-window-border2"))
return CSS::ValueID::VendorSpecificPaletteMovingWindowBorder2;
if (string.equals_ignoring_case("moving-window-title"))
return CSS::ValueID::VendorSpecificPaletteMovingWindowTitle;
if (string.equals_ignoring_case("highlight-window-border1"))
return CSS::ValueID::VendorSpecificPaletteHighlightWindowBorder1;
if (string.equals_ignoring_case("highlight-window-border2"))
return CSS::ValueID::VendorSpecificPaletteHighlightWindowBorder2;
if (string.equals_ignoring_case("highlight-window-title"))
return CSS::ValueID::VendorSpecificPaletteHighlightWindowTitle;
if (string.equals_ignoring_case("menu-stripe"))
return CSS::ValueID::VendorSpecificPaletteMenuStripe;
if (string.equals_ignoring_case("menu-base"))
return CSS::ValueID::VendorSpecificPaletteMenuBase;
if (string.equals_ignoring_case("menu-base-text"))
return CSS::ValueID::VendorSpecificPaletteMenuBaseText;
if (string.equals_ignoring_case("menu-selection"))
return CSS::ValueID::VendorSpecificPaletteMenuSelection;
if (string.equals_ignoring_case("menu-selection-text"))
return CSS::ValueID::VendorSpecificPaletteMenuSelectionText;
if (string.equals_ignoring_case("window"))
return CSS::ValueID::VendorSpecificPaletteWindow;
if (string.equals_ignoring_case("window-text"))
return CSS::ValueID::VendorSpecificPaletteWindowText;
if (string.equals_ignoring_case("button"))
return CSS::ValueID::VendorSpecificPaletteButton;
if (string.equals_ignoring_case("button-text"))
return CSS::ValueID::VendorSpecificPaletteButtonText;
if (string.equals_ignoring_case("base"))
return CSS::ValueID::VendorSpecificPaletteBase;
if (string.equals_ignoring_case("base-text"))
return CSS::ValueID::VendorSpecificPaletteBaseText;
if (string.equals_ignoring_case("threed-highlight"))
return CSS::ValueID::VendorSpecificPaletteThreedHighlight;
if (string.equals_ignoring_case("threed-shadow1"))
return CSS::ValueID::VendorSpecificPaletteThreedShadow1;
if (string.equals_ignoring_case("threed-shadow2"))
return CSS::ValueID::VendorSpecificPaletteThreedShadow2;
if (string.equals_ignoring_case("hover-highlight"))
return CSS::ValueID::VendorSpecificPaletteHoverHighlight;
if (string.equals_ignoring_case("selection"))
return CSS::ValueID::VendorSpecificPaletteSelection;
if (string.equals_ignoring_case("selection-text"))
return CSS::ValueID::VendorSpecificPaletteSelectionText;
if (string.equals_ignoring_case("inactive-selection"))
return CSS::ValueID::VendorSpecificPaletteInactiveSelection;
if (string.equals_ignoring_case("inactive-selection-text"))
return CSS::ValueID::VendorSpecificPaletteInactiveSelectionText;
if (string.equals_ignoring_case("rubber-band-fill"))
return CSS::ValueID::VendorSpecificPaletteRubberBandFill;
if (string.equals_ignoring_case("rubber-band-border"))
return CSS::ValueID::VendorSpecificPaletteRubberBandBorder;
if (string.equals_ignoring_case("link"))
return CSS::ValueID::VendorSpecificPaletteLink;
if (string.equals_ignoring_case("active-link"))
return CSS::ValueID::VendorSpecificPaletteActiveLink;
if (string.equals_ignoring_case("visited-link"))
return CSS::ValueID::VendorSpecificPaletteVisitedLink;
if (string.equals_ignoring_case("ruler"))
return CSS::ValueID::VendorSpecificPaletteRuler;
if (string.equals_ignoring_case("ruler-border"))
return CSS::ValueID::VendorSpecificPaletteRulerBorder;
if (string.equals_ignoring_case("ruler-active-text"))
return CSS::ValueID::VendorSpecificPaletteRulerActiveText;
if (string.equals_ignoring_case("ruler-inactive-text"))
return CSS::ValueID::VendorSpecificPaletteRulerInactiveText;
if (string.equals_ignoring_case("text-cursor"))
return CSS::ValueID::VendorSpecificPaletteTextCursor;
if (string.equals_ignoring_case("focus-outline"))
return CSS::ValueID::VendorSpecificPaletteFocusOutline;
if (string.equals_ignoring_case("syntax-comment"))
return CSS::ValueID::VendorSpecificPaletteSyntaxComment;
if (string.equals_ignoring_case("syntax-number"))
return CSS::ValueID::VendorSpecificPaletteSyntaxNumber;
if (string.equals_ignoring_case("syntax-string"))
return CSS::ValueID::VendorSpecificPaletteSyntaxString;
if (string.equals_ignoring_case("syntax-type"))
return CSS::ValueID::VendorSpecificPaletteSyntaxType;
if (string.equals_ignoring_case("syntax-punctuation"))
return CSS::ValueID::VendorSpecificPaletteSyntaxPunctuation;
if (string.equals_ignoring_case("syntax-operator"))
return CSS::ValueID::VendorSpecificPaletteSyntaxOperator;
if (string.equals_ignoring_case("syntax-keyword"))
return CSS::ValueID::VendorSpecificPaletteSyntaxKeyword;
if (string.equals_ignoring_case("syntax-control-keyword"))
return CSS::ValueID::VendorSpecificPaletteSyntaxControlKeyword;
if (string.equals_ignoring_case("syntax-identifier"))
return CSS::ValueID::VendorSpecificPaletteSyntaxIdentifier;
if (string.equals_ignoring_case("syntax-preprocessor-statement"))
return CSS::ValueID::VendorSpecificPaletteSyntaxPreprocessorStatement;
if (string.equals_ignoring_case("syntax-preprocessor-value"))
return CSS::ValueID::VendorSpecificPaletteSyntaxPreprocessorValue;
return {};
}
static Optional<Color> parse_css_color(const CSS::ParsingContext&, const StringView& view)
{
if (view.equals_ignoring_case("transparent"))
@ -342,141 +229,6 @@ static bool takes_integer_value(CSS::PropertyID property_id)
return property_id == CSS::PropertyID::ZIndex || property_id == CSS::PropertyID::FontWeight;
}
static Optional<CSS::ValueID> value_id_from_string(const String& string)
{
// FIXME: Handle all identifiers
// FIXME: Generate this code
if (string.equals_ignoring_case("bold"))
return CSS::ValueID::Bold;
if (string.equals_ignoring_case("bolder"))
return CSS::ValueID::Bolder;
if (string.equals_ignoring_case("center"))
return CSS::ValueID::Center;
if (string.equals_ignoring_case("justify"))
return CSS::ValueID::Justify;
if (string.equals_ignoring_case("large"))
return CSS::ValueID::Large;
if (string.equals_ignoring_case("larger"))
return CSS::ValueID::Larger;
if (string.equals_ignoring_case("left"))
return CSS::ValueID::Left;
if (string.equals_ignoring_case("lighter"))
return CSS::ValueID::Lighter;
if (string.equals_ignoring_case("medium"))
return CSS::ValueID::Medium;
if (string.equals_ignoring_case("normal"))
return CSS::ValueID::Normal;
if (string.equals_ignoring_case("small"))
return CSS::ValueID::Small;
if (string.equals_ignoring_case("right"))
return CSS::ValueID::Right;
if (string.equals_ignoring_case("smaller"))
return CSS::ValueID::Smaller;
if (string.equals_ignoring_case("x-large"))
return CSS::ValueID::XLarge;
if (string.equals_ignoring_case("x-small"))
return CSS::ValueID::XSmall;
if (string.equals_ignoring_case("xx-large"))
return CSS::ValueID::XxLarge;
if (string.equals_ignoring_case("xx-small"))
return CSS::ValueID::XxSmall;
if (string.equals_ignoring_case("xxx-large"))
return CSS::ValueID::XxxLarge;
if (string.equals_ignoring_case("-libweb-center"))
return CSS::ValueID::VendorSpecificCenter;
if (string.equals_ignoring_case("-libweb-link"))
return CSS::ValueID::VendorSpecificLink;
if (string.equals_ignoring_case("static"))
return CSS::ValueID::Static;
if (string.equals_ignoring_case("relative"))
return CSS::ValueID::Relative;
if (string.equals_ignoring_case("absolute"))
return CSS::ValueID::Absolute;
if (string.equals_ignoring_case("fixed"))
return CSS::ValueID::Fixed;
if (string.equals_ignoring_case("sticky"))
return CSS::ValueID::Sticky;
if (string.equals_ignoring_case("none"))
return CSS::ValueID::None;
if (string.equals_ignoring_case("both"))
return CSS::ValueID::Both;
if (string.equals_ignoring_case("hidden"))
return CSS::ValueID::Hidden;
if (string.equals_ignoring_case("dotted"))
return CSS::ValueID::Dotted;
if (string.equals_ignoring_case("dashed"))
return CSS::ValueID::Dashed;
if (string.equals_ignoring_case("solid"))
return CSS::ValueID::Solid;
if (string.equals_ignoring_case("double"))
return CSS::ValueID::Double;
if (string.equals_ignoring_case("groove"))
return CSS::ValueID::Groove;
if (string.equals_ignoring_case("ridge"))
return CSS::ValueID::Ridge;
if (string.equals_ignoring_case("inset"))
return CSS::ValueID::Inset;
if (string.equals_ignoring_case("outset"))
return CSS::ValueID::Outset;
if (string.equals_ignoring_case("nowrap"))
return CSS::ValueID::Nowrap;
if (string.equals_ignoring_case("pre"))
return CSS::ValueID::Pre;
if (string.equals_ignoring_case("pre-line"))
return CSS::ValueID::PreLine;
if (string.equals_ignoring_case("pre-wrap"))
return CSS::ValueID::PreWrap;
if (string.equals_ignoring_case("block"))
return CSS::ValueID::Block;
if (string.equals_ignoring_case("inline"))
return CSS::ValueID::Inline;
if (string.equals_ignoring_case("inline-block"))
return CSS::ValueID::InlineBlock;
if (string.equals_ignoring_case("list-item"))
return CSS::ValueID::ListItem;
if (string.equals_ignoring_case("table"))
return CSS::ValueID::Table;
if (string.equals_ignoring_case("table-row"))
return CSS::ValueID::TableRow;
if (string.equals_ignoring_case("table-cell"))
return CSS::ValueID::TableCell;
if (string.equals_ignoring_case("table-row-group"))
return CSS::ValueID::TableRowGroup;
if (string.equals_ignoring_case("table-header-group"))
return CSS::ValueID::TableHeaderGroup;
if (string.equals_ignoring_case("table-footer-group"))
return CSS::ValueID::TableFooterGroup;
if (string.equals_ignoring_case("underline"))
return CSS::ValueID::Underline;
if (string.equals_ignoring_case("overline"))
return CSS::ValueID::Overline;
if (string.equals_ignoring_case("line-through"))
return CSS::ValueID::LineThrough;
if (string.equals_ignoring_case("blink"))
return CSS::ValueID::Blink;
if (string.equals_ignoring_case("capitalize"))
return CSS::ValueID::Capitalize;
if (string.equals_ignoring_case("uppercase"))
return CSS::ValueID::Uppercase;
if (string.equals_ignoring_case("lowercase"))
return CSS::ValueID::Lowercase;
if (string.equals_ignoring_case("full-width"))
return CSS::ValueID::FullWidth;
if (string.equals_ignoring_case("full-size-kana"))
return CSS::ValueID::FullSizeKana;
if (string.equals_ignoring_case("disc"))
return CSS::ValueID::Disc;
if (string.equals_ignoring_case("circle"))
return CSS::ValueID::Circle;
if (string.equals_ignoring_case("square"))
return CSS::ValueID::Square;
if (string.equals_ignoring_case("decimal"))
return CSS::ValueID::Decimal;
if (string.starts_with("-libweb-palette-", CaseSensitivity::CaseInsensitive))
return value_id_for_palette_string(string.substring_view(16, string.length() - 16));
return {};
}
RefPtr<CSS::StyleValue> parse_css_value(const CSS::ParsingContext& context, const StringView& string, CSS::PropertyID property_id)
{
bool is_bad_length = false;
@ -500,9 +252,9 @@ RefPtr<CSS::StyleValue> parse_css_value(const CSS::ParsingContext& context, cons
if (string.equals_ignoring_case("auto"))
return CSS::LengthStyleValue::create(CSS::Length::make_auto());
auto value_id = value_id_from_string(string);
if (value_id.has_value())
return CSS::IdentifierStyleValue::create(value_id.value());
auto value_id = CSS::value_id_from_string(string);
if (value_id != CSS::ValueID::Invalid)
return CSS::IdentifierStyleValue::create(value_id);
auto color = parse_css_color(context, string);
if (color.has_value())