/* * Copyright (c) 2025, Jelle Raaijmakers * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include namespace Web::CSS { class CSSCounterStyleRule : public CSSRule { WEB_PLATFORM_OBJECT(CSSCounterStyleRule, CSSRule); GC_DECLARE_ALLOCATOR(CSSCounterStyleRule); public: static GC::Ref create(JS::Realm&, FlyString name, RefPtr system, RefPtr negative, RefPtr prefix, RefPtr suffix, RefPtr range, RefPtr pad, RefPtr fallback, RefPtr symbols, RefPtr additive_symbols, RefPtr speak_as); virtual ~CSSCounterStyleRule() = default; virtual String serialized() const override; FlyString name() const { return m_name; } void set_name(FlyString name); FlyString system() const; void set_system(FlyString const& system); FlyString negative() const; void set_negative(FlyString const& negative); FlyString prefix() const; void set_prefix(FlyString const& prefix); FlyString suffix() const; void set_suffix(FlyString const& suffix); FlyString range() const; void set_range(FlyString const& range); FlyString pad() const; void set_pad(FlyString const& pad); FlyString fallback() const; void set_fallback(FlyString const& fallback); FlyString symbols() const; void set_symbols(FlyString const& symbols); FlyString additive_symbols() const; void set_additive_symbols(FlyString const& additive_symbols); FlyString speak_as() const; void set_speak_as(FlyString const& speak_as); // https://drafts.csswg.org/css-counter-styles-3/#non-overridable-counter-style-names static bool matches_non_overridable_counter_style_name(FlyString const& name) { // The non-overridable counter-style names are the keywords decimal, disc, square, circle, disclosure-open, and disclosure-closed. return name.is_one_of_ignoring_ascii_case("decimal"sv, "disc"sv, "square"sv, "circle"sv, "disclosure-open"sv, "disclosure-closed"sv); } protected: CSSCounterStyleRule(JS::Realm&, FlyString name, RefPtr system, RefPtr negative, RefPtr prefix, RefPtr suffix, RefPtr range, RefPtr pad, RefPtr fallback, RefPtr symbols, RefPtr additive_symbols, RefPtr speak_as); FlyString m_name; RefPtr m_system; RefPtr m_negative; RefPtr m_prefix; RefPtr m_suffix; RefPtr m_range; RefPtr m_pad; RefPtr m_fallback; RefPtr m_symbols; RefPtr m_additive_symbols; RefPtr m_speak_as; virtual void initialize(JS::Realm&) override; }; }