diff --git a/Libraries/LibWeb/CSS/Parser/CSSParser.cpp b/Libraries/LibWeb/CSS/Parser/CSSParser.cpp index 9e770d3856..0d3b6c2d39 100644 --- a/Libraries/LibWeb/CSS/Parser/CSSParser.cpp +++ b/Libraries/LibWeb/CSS/Parser/CSSParser.cpp @@ -396,6 +396,56 @@ static Optional value_id_from_string(const String& string) 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.starts_with("-libweb-palette-", CaseSensitivity::CaseInsensitive)) return value_id_for_palette_string(string.substring_view(16, string.length() - 16)); return {}; diff --git a/Libraries/LibWeb/CSS/StyleProperties.cpp b/Libraries/LibWeb/CSS/StyleProperties.cpp index dde0eeaea7..f374f29ec1 100644 --- a/Libraries/LibWeb/CSS/StyleProperties.cpp +++ b/Libraries/LibWeb/CSS/StyleProperties.cpp @@ -291,110 +291,122 @@ Optional StyleProperties::text_align() const Optional StyleProperties::white_space() const { auto value = property(CSS::PropertyID::WhiteSpace); - if (!value.has_value() || !value.value()->is_string()) + if (!value.has_value() || !value.value()->is_identifier()) return {}; - auto string = value.value()->to_string(); - if (string == "normal") + switch (static_cast(*value.value()).id()) { + case CSS::ValueID::Normal: return CSS::WhiteSpace::Normal; - if (string == "nowrap") + case CSS::ValueID::Nowrap: return CSS::WhiteSpace::Nowrap; - if (string == "pre") + case CSS::ValueID::Pre: return CSS::WhiteSpace::Pre; - if (string == "pre-line") + case CSS::ValueID::PreLine: return CSS::WhiteSpace::PreLine; - if (string == "pre-wrap") + case CSS::ValueID::PreWrap: return CSS::WhiteSpace::PreWrap; - return {}; + default: + return {}; + } } Optional StyleProperties::line_style(CSS::PropertyID property_id) const { auto value = property(property_id); - if (!value.has_value() || !value.value()->is_string()) + if (!value.has_value() || !value.value()->is_identifier()) return {}; - auto string = value.value()->to_string(); - if (string == "none") + switch (static_cast(*value.value()).id()) { + case CSS::ValueID::None: return CSS::LineStyle::None; - if (string == "hidden") + case CSS::ValueID::Hidden: return CSS::LineStyle::Hidden; - if (string == "dotted") + case CSS::ValueID::Dotted: return CSS::LineStyle::Dotted; - if (string == "dashed") + case CSS::ValueID::Dashed: return CSS::LineStyle::Dashed; - if (string == "solid") + case CSS::ValueID::Solid: return CSS::LineStyle::Solid; - if (string == "double") + case CSS::ValueID::Double: return CSS::LineStyle::Double; - if (string == "groove") + case CSS::ValueID::Groove: return CSS::LineStyle::Groove; - if (string == "ridge") + case CSS::ValueID::Ridge: return CSS::LineStyle::Ridge; - if (string == "inset") + case CSS::ValueID::Inset: return CSS::LineStyle::Inset; - if (string == "outset") + case CSS::ValueID::Outset: return CSS::LineStyle::Outset; - return {}; + default: + return {}; + } } Optional StyleProperties::float_() const { auto value = property(CSS::PropertyID::Float); - if (!value.has_value() || !value.value()->is_string()) + if (!value.has_value() || !value.value()->is_identifier()) return {}; - auto string = value.value()->to_string(); - if (string == "none") + switch (static_cast(*value.value()).id()) { + case CSS::ValueID::None: return CSS::Float::None; - if (string == "left") + case CSS::ValueID::Left: return CSS::Float::Left; - if (string == "right") + case CSS::ValueID::Right: return CSS::Float::Right; - return {}; + default: + return {}; + } } Optional StyleProperties::clear() const { auto value = property(CSS::PropertyID::Clear); - if (!value.has_value() || !value.value()->is_string()) + if (!value.has_value() || !value.value()->is_identifier()) return {}; - auto string = value.value()->to_string(); - if (string == "none") + switch (static_cast(*value.value()).id()) { + case CSS::ValueID::None: return CSS::Clear::None; - if (string == "left") + case CSS::ValueID::Left: return CSS::Clear::Left; - if (string == "right") + case CSS::ValueID::Right: return CSS::Clear::Right; - if (string == "both") + case CSS::ValueID::Both: return CSS::Clear::Both; - return {}; + default: + return {}; + } } CSS::Display StyleProperties::display() const { - auto display = string_or_fallback(CSS::PropertyID::Display, "inline"); - if (display == "none") - return CSS::Display::None; - if (display == "block") - return CSS::Display::Block; - if (display == "inline") + auto value = property(CSS::PropertyID::Display); + if (!value.has_value() || !value.value()->is_identifier()) return CSS::Display::Inline; - if (display == "inline-block") + switch (static_cast(*value.value()).id()) { + case CSS::ValueID::None: + return CSS::Display::None; + case CSS::ValueID::Block: + return CSS::Display::Block; + case CSS::ValueID::Inline: + return CSS::Display::Inline; + case CSS::ValueID::InlineBlock: return CSS::Display::InlineBlock; - if (display == "list-item") + case CSS::ValueID::ListItem: return CSS::Display::ListItem; - if (display == "table") + case CSS::ValueID::Table: return CSS::Display::Table; - if (display == "table-row") + case CSS::ValueID::TableRow: return CSS::Display::TableRow; - if (display == "table-cell") + case CSS::ValueID::TableCell: return CSS::Display::TableCell; - if (display == "table-row-group") + case CSS::ValueID::TableRowGroup: return CSS::Display::TableRowGroup; - if (display == "table-header-group") + case CSS::ValueID::TableHeaderGroup: return CSS::Display::TableHeaderGroup; - if (display == "table-footer-group") + case CSS::ValueID::TableFooterGroup: return CSS::Display::TableFooterGroup; - dbg() << "Unknown display type: _" << display << "_"; - return CSS::Display::Block; + default: + return CSS::Display::Block; + } } } diff --git a/Libraries/LibWeb/CSS/StyleValue.cpp b/Libraries/LibWeb/CSS/StyleValue.cpp index 79054484b3..6c37d102f6 100644 --- a/Libraries/LibWeb/CSS/StyleValue.cpp +++ b/Libraries/LibWeb/CSS/StyleValue.cpp @@ -163,7 +163,7 @@ String IdentifierStyleValue::to_string() const case CSS::ValueID::VendorSpecificPaletteSyntaxPreprocessorValue: return "-libweb-palette-syntax-preprocessor-value"; default: - ASSERT_NOT_REACHED(); + return String::formatted("-fixme-css-value-id-{}", (int)id()); } } diff --git a/Libraries/LibWeb/CSS/StyleValue.h b/Libraries/LibWeb/CSS/StyleValue.h index c3964d95d3..db3dc1aaf2 100644 --- a/Libraries/LibWeb/CSS/StyleValue.h +++ b/Libraries/LibWeb/CSS/StyleValue.h @@ -122,6 +122,31 @@ enum class ValueID { Absolute, Fixed, Sticky, + Both, + None, + Hidden, + Dotted, + Dashed, + Solid, + Double, + Groove, + Ridge, + Inset, + Outset, + Nowrap, + Pre, + PreLine, + PreWrap, + Block, + Inline, + InlineBlock, + ListItem, + Table, + TableRow, + TableCell, + TableHeaderGroup, + TableRowGroup, + TableFooterGroup, }; enum class Position {