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.
50 lines
1.6 KiB
C++
50 lines
1.6 KiB
C++
/*
|
||
* 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. It’s 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);
|
||
}
|
||
|
||
}
|