ladybird/Libraries/LibWeb/CSS/CustomPropertyRegistration.h
Andreas Kling d641bfd7e2 LibWeb: Store custom property names as UTF-16
Move PropertyNameAndID, custom property data, registered custom
properties, and Typed OM associated property names to Utf16FlyString.

This removes the FlyString storage boundary from CSS property-name
handling and lets CSSStyleProperties keep the name it receives from
CSSOM instead of converting it back to UTF-8.
2026-06-09 11:48:02 +02:00

50 lines
1.6 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (c) 2026, Sam Atkins <sam@ladybird.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/RefPtr.h>
#include <AK/Utf16FlyString.h>
#include <LibWeb/CSS/StyleValues/StyleValue.h>
#include <LibWeb/Forward.h>
namespace Web::CSS {
// https://drafts.css-houdini.org/css-properties-values-api/#custom-property-registration
// A registered custom property has a custom property registration that contains all the data necessary to treat it
// like a real property. Its a struct consisting of:
struct CustomPropertyRegistration {
// - a property name (a custom property name string)
Utf16FlyString property_name;
// - a syntax (a syntax string)
String syntax;
// - an inherit flag (a boolean)
bool inherit;
// - optionally, an initial value (a string which successfully parses according to the syntax)
// NB: Spec actually wants this to be a parsed value, and that's what's most useful to us.
// See https://drafts.css-houdini.org/css-properties-values-api/#register-a-custom-property
RefPtr<StyleValue const> initial_value;
};
inline bool operator==(CustomPropertyRegistration const& a, CustomPropertyRegistration const& b)
{
if (a.property_name != b.property_name)
return false;
if (a.syntax != b.syntax)
return false;
if (a.inherit != b.inherit)
return false;
if (a.initial_value.ptr() == b.initial_value.ptr())
return true;
if (!a.initial_value || !b.initial_value)
return false;
return a.initial_value->equals(*b.initial_value);
}
}