Browse Source

LibWeb: Use failable StringBuilder methods in StyleValue

This is quite verbose... but the errors must flow!
MacDue 2 years ago
parent
commit
fc7099b032
1 changed files with 65 additions and 77 deletions
  1. 65 77
      Userland/Libraries/LibWeb/CSS/StyleValue.cpp

+ 65 - 77
Userland/Libraries/LibWeb/CSS/StyleValue.cpp

@@ -329,10 +329,10 @@ ErrorOr<String> BackgroundStyleValue::to_string() const
     StringBuilder builder;
     for (size_t i = 0; i < m_layer_count; i++) {
         if (i)
-            builder.append(", "sv);
+            TRY(builder.try_append(", "sv));
         if (i == m_layer_count - 1)
-            builder.appendff("{} ", TRY(m_color->to_string()));
-        builder.appendff("{} {} {} {} {} {} {}", TRY(get_layer_value_string(m_image, i)), TRY(get_layer_value_string(m_position, i)), TRY(get_layer_value_string(m_size, i)), TRY(get_layer_value_string(m_repeat, i)), TRY(get_layer_value_string(m_attachment, i)), TRY(get_layer_value_string(m_origin, i)), TRY(get_layer_value_string(m_clip, i)));
+            TRY(builder.try_appendff("{} ", TRY(m_color->to_string())));
+        TRY(builder.try_appendff("{} {} {} {} {} {} {}", TRY(get_layer_value_string(m_image, i)), TRY(get_layer_value_string(m_position, i)), TRY(get_layer_value_string(m_size, i)), TRY(get_layer_value_string(m_repeat, i)), TRY(get_layer_value_string(m_attachment, i)), TRY(get_layer_value_string(m_origin, i)), TRY(get_layer_value_string(m_clip, i))));
     }
 
     return builder.to_string();
@@ -647,27 +647,27 @@ ErrorOr<String> CalculatedStyleValue::CalcValue::to_string() const
 ErrorOr<String> CalculatedStyleValue::CalcSum::to_string() const
 {
     StringBuilder builder;
-    builder.append(TRY(first_calc_product->to_string()));
+    TRY(builder.try_append(TRY(first_calc_product->to_string())));
     for (auto const& item : zero_or_more_additional_calc_products)
-        builder.append(TRY(item.to_string()));
+        TRY(builder.try_append(TRY(item.to_string())));
     return builder.to_string();
 }
 
 ErrorOr<String> CalculatedStyleValue::CalcNumberSum::to_string() const
 {
     StringBuilder builder;
-    builder.append(TRY(first_calc_number_product->to_string()));
+    TRY(builder.try_append(TRY(first_calc_number_product->to_string())));
     for (auto const& item : zero_or_more_additional_calc_number_products)
-        builder.append(TRY(item.to_string()));
+        TRY(builder.try_append(TRY(item.to_string())));
     return builder.to_string();
 }
 
 ErrorOr<String> CalculatedStyleValue::CalcProduct::to_string() const
 {
     StringBuilder builder;
-    builder.append(TRY(first_calc_value.to_string()));
+    TRY(builder.try_append(TRY(first_calc_value.to_string())));
     for (auto const& item : zero_or_more_additional_calc_values)
-        builder.append(TRY(item.to_string()));
+        TRY(builder.try_append(TRY(item.to_string())));
     return builder.to_string();
 }
 
@@ -687,9 +687,9 @@ ErrorOr<String> CalculatedStyleValue::CalcProductPartWithOperator::to_string() c
 ErrorOr<String> CalculatedStyleValue::CalcNumberProduct::to_string() const
 {
     StringBuilder builder;
-    builder.append(TRY(first_calc_number_value.to_string()));
+    TRY(builder.try_append(TRY(first_calc_number_value.to_string())));
     for (auto const& item : zero_or_more_additional_calc_number_values)
-        builder.append(TRY(item.to_string()));
+        TRY(builder.try_append(TRY(item.to_string())));
     return builder.to_string();
 }
 
@@ -1230,42 +1230,40 @@ ErrorOr<String> FilterValueListStyleValue::to_string() const
     bool first = true;
     for (auto& filter_function : filter_value_list()) {
         if (!first)
-            builder.append(' ');
+            TRY(builder.try_append(' '));
         TRY(filter_function.visit(
             [&](Filter::Blur const& blur) -> ErrorOr<void> {
-                builder.append("blur("sv);
+                TRY(builder.try_append("blur("sv));
                 if (blur.radius.has_value())
-                    builder.append(TRY(blur.radius->to_string()));
+                    TRY(builder.try_append(TRY(blur.radius->to_string())));
                 return {};
             },
             [&](Filter::DropShadow const& drop_shadow) -> ErrorOr<void> {
-                builder.appendff("drop-shadow({} {}"sv,
-                    drop_shadow.offset_x, drop_shadow.offset_y);
+                TRY(builder.try_appendff("drop-shadow({} {}"sv,
+                    drop_shadow.offset_x, drop_shadow.offset_y));
                 if (drop_shadow.radius.has_value())
-                    builder.appendff(" {}", TRY(drop_shadow.radius->to_string()));
+                    TRY(builder.try_appendff(" {}", TRY(drop_shadow.radius->to_string())));
                 if (drop_shadow.color.has_value()) {
-                    builder.append(' ');
+                    TRY(builder.try_append(' '));
                     serialize_a_srgb_value(builder, *drop_shadow.color);
                 }
                 return {};
             },
             [&](Filter::HueRotate const& hue_rotate) -> ErrorOr<void> {
-                builder.append("hue-rotate("sv);
+                TRY(builder.try_append("hue-rotate("sv));
                 if (hue_rotate.angle.has_value()) {
                     TRY(hue_rotate.angle->visit(
                         [&](Angle const& angle) -> ErrorOr<void> {
-                            builder.append(TRY(angle.to_string()));
-                            return {};
+                            return builder.try_append(TRY(angle.to_string()));
                         },
                         [&](auto&) -> ErrorOr<void> {
-                            builder.append('0');
-                            return {};
+                            return builder.try_append('0');
                         }));
                 }
                 return {};
             },
             [&](Filter::Color const& color) -> ErrorOr<void> {
-                builder.appendff("{}(",
+                TRY(builder.try_appendff("{}(",
                     [&] {
                         switch (color.operation) {
                         case Filter::Color::Operation::Brightness:
@@ -1285,12 +1283,12 @@ ErrorOr<String> FilterValueListStyleValue::to_string() const
                         default:
                             VERIFY_NOT_REACHED();
                         }
-                    }());
+                    }()));
                 if (color.amount.has_value())
-                    builder.append(TRY(color.amount->to_string()));
+                    TRY(builder.try_append(TRY(color.amount->to_string())));
                 return {};
             }));
-        builder.append(')');
+        TRY(builder.try_append(')'));
         first = false;
     }
     return builder.to_string();
@@ -1750,16 +1748,15 @@ static ErrorOr<void> serialize_color_stop_list(StringBuilder& builder, auto cons
     bool first = true;
     for (auto const& element : color_stop_list) {
         if (!first)
-            builder.append(", "sv);
+            TRY(builder.try_append(", "sv));
 
-        if (element.transition_hint.has_value()) {
-            builder.appendff("{}, "sv, TRY(element.transition_hint->value.to_string()));
-        }
+        if (element.transition_hint.has_value())
+            TRY(builder.try_appendff("{}, "sv, TRY(element.transition_hint->value.to_string())));
 
         serialize_a_srgb_value(builder, element.color_stop.color);
         for (auto position : Array { &element.color_stop.position, &element.color_stop.second_position }) {
             if (position->has_value())
-                builder.appendff(" {}"sv, TRY((*position)->to_string()));
+                TRY(builder.try_appendff(" {}"sv, TRY((*position)->to_string())));
         }
         first = false;
     }
@@ -1793,22 +1790,20 @@ ErrorOr<String> LinearGradientStyleValue::to_string() const
     };
 
     if (m_gradient_type == GradientType::WebKit)
-        builder.append("-webkit-"sv);
+        TRY(builder.try_append("-webkit-"sv));
     if (is_repeating())
-        builder.append("repeating-"sv);
-    builder.append("linear-gradient("sv);
+        TRY(builder.try_append("repeating-"sv));
+    TRY(builder.try_append("linear-gradient("sv));
     TRY(m_direction.visit(
         [&](SideOrCorner side_or_corner) -> ErrorOr<void> {
-            builder.appendff("{}{}, "sv, m_gradient_type == GradientType::Standard ? "to "sv : ""sv, side_or_corner_to_string(side_or_corner));
-            return {};
+            return builder.try_appendff("{}{}, "sv, m_gradient_type == GradientType::Standard ? "to "sv : ""sv, side_or_corner_to_string(side_or_corner));
         },
         [&](Angle const& angle) -> ErrorOr<void> {
-            builder.appendff("{}, "sv, TRY(angle.to_string()));
-            return {};
+            return builder.try_appendff("{}, "sv, TRY(angle.to_string()));
         }));
 
     TRY(serialize_color_stop_list(builder, m_color_stop_list));
-    builder.append(")"sv);
+    TRY(builder.try_append(")"sv));
     return builder.to_string();
 }
 
@@ -1940,10 +1935,10 @@ ErrorOr<void> PositionValue::serialize(StringBuilder& builder) const
     // Note: This means our serialization with simplify any with explicit edges that are just `top left`.
     bool has_relative_edges = x_relative_to == HorizontalEdge::Right || y_relative_to == VerticalEdge::Bottom;
     if (has_relative_edges)
-        builder.append(x_relative_to == HorizontalEdge::Left ? "left "sv : "right "sv);
+        TRY(builder.try_append(x_relative_to == HorizontalEdge::Left ? "left "sv : "right "sv));
     TRY(horizontal_position.visit(
         [&](HorizontalPreset preset) -> ErrorOr<void> {
-            builder.append([&] {
+            return builder.try_append([&] {
                 switch (preset) {
                 case HorizontalPreset::Left:
                     return "left"sv;
@@ -1955,18 +1950,16 @@ ErrorOr<void> PositionValue::serialize(StringBuilder& builder) const
                     VERIFY_NOT_REACHED();
                 }
             }());
-            return {};
         },
         [&](LengthPercentage length_percentage) -> ErrorOr<void> {
-            builder.appendff(TRY(length_percentage.to_string()));
-            return {};
+            return builder.try_appendff(TRY(length_percentage.to_string()));
         }));
-    builder.append(' ');
+    TRY(builder.try_append(' '));
     if (has_relative_edges)
-        builder.append(y_relative_to == VerticalEdge::Top ? "top "sv : "bottom "sv);
+        TRY(builder.try_append(y_relative_to == VerticalEdge::Top ? "top "sv : "bottom "sv));
     TRY(vertical_position.visit(
         [&](VerticalPreset preset) -> ErrorOr<void> {
-            builder.append([&] {
+            return builder.try_append([&] {
                 switch (preset) {
                 case VerticalPreset::Top:
                     return "top"sv;
@@ -1978,11 +1971,9 @@ ErrorOr<void> PositionValue::serialize(StringBuilder& builder) const
                     VERIFY_NOT_REACHED();
                 }
             }());
-            return {};
         },
         [&](LengthPercentage length_percentage) -> ErrorOr<void> {
-            builder.append(TRY(length_percentage.to_string()));
-            return {};
+            return builder.try_append(TRY(length_percentage.to_string()));
         }));
     return {};
 }
@@ -2000,13 +1991,13 @@ ErrorOr<String> RadialGradientStyleValue::to_string() const
 {
     StringBuilder builder;
     if (is_repeating())
-        builder.append("repeating-"sv);
-    builder.appendff("radial-gradient({} "sv,
-        m_ending_shape == EndingShape::Circle ? "circle"sv : "ellipse"sv);
+        TRY(builder.try_append("repeating-"sv));
+    TRY(builder.try_appendff("radial-gradient({} "sv,
+        m_ending_shape == EndingShape::Circle ? "circle"sv : "ellipse"sv));
 
     TRY(m_size.visit(
         [&](Extent extent) -> ErrorOr<void> {
-            builder.append([&] {
+            return builder.try_append([&] {
                 switch (extent) {
                 case Extent::ClosestCorner:
                     return "closest-corner"sv;
@@ -2020,25 +2011,22 @@ ErrorOr<String> RadialGradientStyleValue::to_string() const
                     VERIFY_NOT_REACHED();
                 }
             }());
-            return {};
         },
         [&](CircleSize const& circle_size) -> ErrorOr<void> {
-            builder.append(TRY(circle_size.radius.to_string()));
-            return {};
+            return builder.try_append(TRY(circle_size.radius.to_string()));
         },
         [&](EllipseSize const& ellipse_size) -> ErrorOr<void> {
-            builder.appendff("{} {}", TRY(ellipse_size.radius_a.to_string()), TRY(ellipse_size.radius_b.to_string()));
-            return {};
+            return builder.try_appendff("{} {}", TRY(ellipse_size.radius_a.to_string()), TRY(ellipse_size.radius_b.to_string()));
         }));
 
     if (m_position != PositionValue::center()) {
-        builder.appendff(" at "sv);
+        TRY(builder.try_appendff(" at "sv));
         TRY(m_position.serialize(builder));
     }
 
-    builder.append(", "sv);
+    TRY(builder.try_append(", "sv));
     TRY(serialize_color_stop_list(builder, m_color_stop_list));
-    builder.append(')');
+    TRY(builder.try_append(')'));
     return builder.to_string();
 }
 
@@ -2209,22 +2197,22 @@ ErrorOr<String> ConicGradientStyleValue::to_string() const
 {
     StringBuilder builder;
     if (is_repeating())
-        builder.append("repeating-"sv);
-    builder.append("conic-gradient("sv);
+        TRY(builder.try_append("repeating-"sv));
+    TRY(builder.try_append("conic-gradient("sv));
     bool has_from_angle = false;
     bool has_at_position = false;
     if ((has_from_angle = m_from_angle.to_degrees() != 0))
-        builder.appendff("from {}", TRY(m_from_angle.to_string()));
+        TRY(builder.try_appendff("from {}", TRY(m_from_angle.to_string())));
     if ((has_at_position = m_position != PositionValue::center())) {
         if (has_from_angle)
-            builder.append(' ');
-        builder.appendff("at "sv);
+            TRY(builder.try_append(' '));
+        TRY(builder.try_appendff("at "sv));
         TRY(m_position.serialize(builder));
     }
     if (has_from_angle || has_at_position)
-        builder.append(", "sv);
+        TRY(builder.try_append(", "sv));
     TRY(serialize_color_stop_list(builder, m_color_stop_list));
-    builder.append(')');
+    TRY(builder.try_append(')'));
     return builder.to_string();
 }
 
@@ -2390,9 +2378,9 @@ bool ResolutionStyleValue::equals(StyleValue const& other) const
 ErrorOr<String> ShadowStyleValue::to_string() const
 {
     StringBuilder builder;
-    builder.appendff("{} {} {} {} {}", m_color.to_deprecated_string(), TRY(m_offset_x.to_string()), TRY(m_offset_y.to_string()), TRY(m_blur_radius.to_string()), TRY(m_spread_distance.to_string()));
+    TRY(builder.try_appendff("{} {} {} {} {}", m_color.to_deprecated_string(), TRY(m_offset_x.to_string()), TRY(m_offset_y.to_string()), TRY(m_blur_radius.to_string()), TRY(m_spread_distance.to_string())));
     if (m_placement == ShadowPlacement::Inner)
-        builder.append(" inset"sv);
+        TRY(builder.try_append(" inset"sv));
     return builder.to_string();
 }
 
@@ -2442,10 +2430,10 @@ bool TimeStyleValue::equals(StyleValue const& other) const
 ErrorOr<String> TransformationStyleValue::to_string() const
 {
     StringBuilder builder;
-    builder.append(CSS::to_string(m_transform_function));
-    builder.append('(');
-    builder.join(", "sv, m_values);
-    builder.append(')');
+    TRY(builder.try_append(CSS::to_string(m_transform_function)));
+    TRY(builder.try_append('('));
+    TRY(builder.try_join(", "sv, m_values));
+    TRY(builder.try_append(')'));
 
     return builder.to_string();
 }
@@ -2470,7 +2458,7 @@ ErrorOr<String> UnresolvedStyleValue::to_string() const
 {
     StringBuilder builder;
     for (auto& value : m_values)
-        builder.append(value.to_deprecated_string());
+        TRY(builder.try_append(value.to_deprecated_string()));
     return builder.to_string();
 }