Serenity Operating System
1/*
2 * Copyright (c) 2021-2023, Sam Atkins <atkinssj@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <AK/String.h>
10#include <AK/StringBuilder.h>
11#include <AK/StringView.h>
12#include <AK/Vector.h>
13#include <LibGfx/Color.h>
14#include <LibWeb/CSS/UnicodeRange.h>
15
16namespace Web::CSS {
17
18ErrorOr<void> escape_a_character(StringBuilder&, u32 character);
19ErrorOr<void> escape_a_character_as_code_point(StringBuilder&, u32 character);
20ErrorOr<void> serialize_an_identifier(StringBuilder&, StringView ident);
21ErrorOr<void> serialize_a_string(StringBuilder&, StringView string);
22ErrorOr<void> serialize_a_url(StringBuilder&, StringView url);
23ErrorOr<void> serialize_a_local(StringBuilder&, StringView path);
24ErrorOr<void> serialize_unicode_ranges(StringBuilder&, Vector<UnicodeRange> const& unicode_ranges);
25ErrorOr<void> serialize_a_srgb_value(StringBuilder&, Color color);
26
27ErrorOr<String> escape_a_character(u32 character);
28ErrorOr<String> escape_a_character_as_code_point(u32 character);
29ErrorOr<String> serialize_an_identifier(StringView ident);
30ErrorOr<String> serialize_a_string(StringView string);
31ErrorOr<String> serialize_a_url(StringView url);
32ErrorOr<String> serialize_a_srgb_value(Color color);
33
34template<typename T, typename SerializeItem>
35ErrorOr<void> serialize_a_comma_separated_list(StringBuilder& builder, Vector<T> const& items, SerializeItem serialize_item)
36{
37 for (size_t i = 0; i < items.size(); i++) {
38 auto& item = items.at(i);
39 TRY(serialize_item(builder, item));
40 if ((i + 1) < items.size()) {
41 TRY(builder.try_append(",\n"sv));
42 }
43 }
44 return {};
45}
46
47}