mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 12:27:35 +00:00
LibWeb: Parse border-style correctly
This commit is contained in:
parent
b2a0552281
commit
d5eb09adc2
3 changed files with 41 additions and 13 deletions
|
@ -285,23 +285,31 @@ RefPtr<CSS::ColorStyleValue> parse_color(const CSS::ParsingContext& context, con
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<CSS::StringStyleValue> parse_line_style(const CSS::ParsingContext& context, const StringView& part)
|
RefPtr<CSS::IdentifierStyleValue> parse_line_style(const CSS::ParsingContext& context, const StringView& part)
|
||||||
{
|
{
|
||||||
auto parsed_value = parse_css_value(context, part);
|
auto parsed_value = parse_css_value(context, part);
|
||||||
if (!parsed_value || !parsed_value->is_string())
|
if (!parsed_value || parsed_value->type() != CSS::StyleValue::Type::Identifier)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
auto value = static_ptr_cast<CSS::StringStyleValue>(parsed_value);
|
auto value = static_ptr_cast<CSS::IdentifierStyleValue>(parsed_value);
|
||||||
if (value->to_string() == "dotted")
|
if (value->id() == CSS::ValueID::Dotted)
|
||||||
return value;
|
return value;
|
||||||
if (value->to_string() == "dashed")
|
if (value->id() == CSS::ValueID::Dashed)
|
||||||
return value;
|
return value;
|
||||||
if (value->to_string() == "solid")
|
if (value->id() == CSS::ValueID::Solid)
|
||||||
return value;
|
return value;
|
||||||
if (value->to_string() == "double")
|
if (value->id() == CSS::ValueID::Double)
|
||||||
return value;
|
return value;
|
||||||
if (value->to_string() == "groove")
|
if (value->id() == CSS::ValueID::Groove)
|
||||||
return value;
|
return value;
|
||||||
if (value->to_string() == "ridge")
|
if (value->id() == CSS::ValueID::Ridge)
|
||||||
|
return value;
|
||||||
|
if (value->id() == CSS::ValueID::None)
|
||||||
|
return value;
|
||||||
|
if (value->id() == CSS::ValueID::Hidden)
|
||||||
|
return value;
|
||||||
|
if (value->id() == CSS::ValueID::Inset)
|
||||||
|
return value;
|
||||||
|
if (value->id() == CSS::ValueID::Outset)
|
||||||
return value;
|
return value;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@ Optional<CSS::Selector> parse_selector(const CSS::ParsingContext&, const StringV
|
||||||
|
|
||||||
RefPtr<CSS::LengthStyleValue> parse_line_width(const CSS::ParsingContext&, const StringView&);
|
RefPtr<CSS::LengthStyleValue> parse_line_width(const CSS::ParsingContext&, const StringView&);
|
||||||
RefPtr<CSS::ColorStyleValue> parse_color(const CSS::ParsingContext&, const StringView&);
|
RefPtr<CSS::ColorStyleValue> parse_color(const CSS::ParsingContext&, const StringView&);
|
||||||
RefPtr<CSS::StringStyleValue> parse_line_style(const CSS::ParsingContext&, const StringView&);
|
RefPtr<CSS::IdentifierStyleValue> parse_line_style(const CSS::ParsingContext&, const StringView&);
|
||||||
|
|
||||||
RefPtr<CSS::StyleValue> parse_html_length(const DOM::Document&, const StringView&);
|
RefPtr<CSS::StyleValue> parse_html_length(const DOM::Document&, const StringView&);
|
||||||
|
|
||||||
|
|
|
@ -218,7 +218,7 @@ static inline void set_property_border_color(StyleProperties& style, const Style
|
||||||
|
|
||||||
static inline void set_property_border_style(StyleProperties& style, const StyleValue& value, Edge edge)
|
static inline void set_property_border_style(StyleProperties& style, const StyleValue& value, Edge edge)
|
||||||
{
|
{
|
||||||
VERIFY(value.is_string());
|
VERIFY(value.type() == CSS::StyleValue::Type::Identifier);
|
||||||
if (contains(Edge::Top, edge))
|
if (contains(Edge::Top, edge))
|
||||||
style.set_property(CSS::PropertyID::BorderTopStyle, value);
|
style.set_property(CSS::PropertyID::BorderTopStyle, value);
|
||||||
if (contains(Edge::Right, edge))
|
if (contains(Edge::Right, edge))
|
||||||
|
@ -330,7 +330,7 @@ static void set_property_expanding_shorthands(StyleProperties& style, CSS::Prope
|
||||||
|
|
||||||
RefPtr<LengthStyleValue> line_width_value;
|
RefPtr<LengthStyleValue> line_width_value;
|
||||||
RefPtr<ColorStyleValue> color_value;
|
RefPtr<ColorStyleValue> color_value;
|
||||||
RefPtr<StringStyleValue> line_style_value;
|
RefPtr<IdentifierStyleValue> line_style_value;
|
||||||
|
|
||||||
for (auto& part : parts) {
|
for (auto& part : parts) {
|
||||||
if (auto value = parse_line_width(context, part)) {
|
if (auto value = parse_line_width(context, part)) {
|
||||||
|
@ -367,7 +367,18 @@ static void set_property_expanding_shorthands(StyleProperties& style, CSS::Prope
|
||||||
|
|
||||||
if (property_id == CSS::PropertyID::BorderStyle) {
|
if (property_id == CSS::PropertyID::BorderStyle) {
|
||||||
auto parts = split_on_whitespace(value.to_string());
|
auto parts = split_on_whitespace(value.to_string());
|
||||||
if (value.is_string() && parts.size() == 3) {
|
if (value.is_string() && parts.size() == 4) {
|
||||||
|
auto top = parse_css_value(context, parts[0]);
|
||||||
|
auto right = parse_css_value(context, parts[1]);
|
||||||
|
auto bottom = parse_css_value(context, parts[2]);
|
||||||
|
auto left = parse_css_value(context, parts[3]);
|
||||||
|
if (top && right && bottom && left) {
|
||||||
|
style.set_property(CSS::PropertyID::BorderTopStyle, *top);
|
||||||
|
style.set_property(CSS::PropertyID::BorderRightStyle, *right);
|
||||||
|
style.set_property(CSS::PropertyID::BorderBottomStyle, *bottom);
|
||||||
|
style.set_property(CSS::PropertyID::BorderLeftStyle, *left);
|
||||||
|
}
|
||||||
|
} else if (value.is_string() && parts.size() == 3) {
|
||||||
auto top = parse_css_value(context, parts[0]);
|
auto top = parse_css_value(context, parts[0]);
|
||||||
auto right = parse_css_value(context, parts[1]);
|
auto right = parse_css_value(context, parts[1]);
|
||||||
auto bottom = parse_css_value(context, parts[2]);
|
auto bottom = parse_css_value(context, parts[2]);
|
||||||
|
@ -378,6 +389,15 @@ static void set_property_expanding_shorthands(StyleProperties& style, CSS::Prope
|
||||||
style.set_property(CSS::PropertyID::BorderBottomStyle, *bottom);
|
style.set_property(CSS::PropertyID::BorderBottomStyle, *bottom);
|
||||||
style.set_property(CSS::PropertyID::BorderLeftStyle, *left);
|
style.set_property(CSS::PropertyID::BorderLeftStyle, *left);
|
||||||
}
|
}
|
||||||
|
} else if (value.is_string() && parts.size() == 2) {
|
||||||
|
auto vertical = parse_css_value(context, parts[0]);
|
||||||
|
auto horizontal = parse_css_value(context, parts[1]);
|
||||||
|
if (vertical && horizontal) {
|
||||||
|
style.set_property(CSS::PropertyID::BorderTopStyle, *vertical);
|
||||||
|
style.set_property(CSS::PropertyID::BorderRightStyle, *horizontal);
|
||||||
|
style.set_property(CSS::PropertyID::BorderBottomStyle, *vertical);
|
||||||
|
style.set_property(CSS::PropertyID::BorderLeftStyle, *horizontal);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
style.set_property(CSS::PropertyID::BorderTopStyle, value);
|
style.set_property(CSS::PropertyID::BorderTopStyle, value);
|
||||||
style.set_property(CSS::PropertyID::BorderRightStyle, value);
|
style.set_property(CSS::PropertyID::BorderRightStyle, value);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue