/* * 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); RefPtr const& system_style_value() const { return m_system; } FlyString negative() const; void set_negative(FlyString const& negative); RefPtr const& negative_style_value() const { return m_negative; } FlyString prefix() const; void set_prefix(FlyString const& prefix); RefPtr const& prefix_style_value() const { return m_prefix; } FlyString suffix() const; void set_suffix(FlyString const& suffix); RefPtr const& suffix_style_value() const { return m_suffix; } FlyString range() const; void set_range(FlyString const& range); RefPtr const& range_style_value() const { return m_range; } FlyString pad() const; void set_pad(FlyString const& pad); RefPtr const& pad_style_value() const { return m_pad; } FlyString fallback() const; void set_fallback(FlyString const& fallback); RefPtr const& fallback_style_value() const { return m_fallback; } FlyString symbols() const; void set_symbols(FlyString const& symbols); RefPtr const& symbols_style_value() const { return m_symbols; } FlyString additive_symbols() const; void set_additive_symbols(FlyString const& additive_symbols); RefPtr const& additive_symbols_style_value() const { return m_additive_symbols; } FlyString speak_as() const; void set_speak_as(FlyString const& speak_as); RefPtr const& speak_as_style_value() const { return m_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); } virtual void clear_caches() override; 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; }; }