Serenity Operating System
at master 51 lines 1.2 kB view raw
1/* 2 * Copyright (c) 2020-2022, Andreas Kling <kling@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <LibWeb/DOM/Element.h> 10#include <LibWeb/Forward.h> 11 12namespace Web::HTML { 13 14class ListOfActiveFormattingElements { 15public: 16 ListOfActiveFormattingElements() = default; 17 ~ListOfActiveFormattingElements(); 18 19 struct Entry { 20 bool is_marker() const { return !element; } 21 22 JS::GCPtr<DOM::Element> element; 23 }; 24 25 bool is_empty() const { return m_entries.is_empty(); } 26 bool contains(const DOM::Element&) const; 27 28 void add(DOM::Element& element); 29 void add_marker(); 30 void insert_at(size_t index, DOM::Element& element); 31 32 void replace(DOM::Element& to_remove, DOM::Element& to_add); 33 34 void remove(DOM::Element&); 35 36 Vector<Entry> const& entries() const { return m_entries; } 37 Vector<Entry>& entries() { return m_entries; } 38 39 DOM::Element* last_element_with_tag_name_before_marker(DeprecatedFlyString const& tag_name); 40 41 void clear_up_to_the_last_marker(); 42 43 Optional<size_t> find_index(DOM::Element const&) const; 44 45 void visit_edges(JS::Cell::Visitor&); 46 47private: 48 Vector<Entry> m_entries; 49}; 50 51}