diff --git a/Libraries/LibHTML/DOM/Node.cpp b/Libraries/LibHTML/DOM/Node.cpp index 0126f4c13d..d477cfd1a5 100644 --- a/Libraries/LibHTML/DOM/Node.cpp +++ b/Libraries/LibHTML/DOM/Node.cpp @@ -1,11 +1,12 @@ -#include +#include +#include #include #include -#include -#include +#include #include #include #include +#include #include Node::Node(Document& document, NodeType type) @@ -39,7 +40,6 @@ RefPtr Node::create_layout_node(const StyleResolver& resolver, const ASSERT_NOT_REACHED(); } - RefPtr Node::create_layout_tree(const StyleResolver& resolver, const StyleProperties* parent_properties) const { auto layout_node = create_layout_node(resolver, parent_properties); @@ -88,3 +88,19 @@ const HTMLElement* Node::enclosing_html_element() const return static_cast(this); return parent() ? parent()->enclosing_html_element() : nullptr; } + +String Node::text_content() const +{ + Vector strings; + StringBuilder builder; + for (auto* child = first_child(); child; child = child->next_sibling()) { + auto text = child->text_content(); + if (!text.is_empty()) { + builder.append(child->text_content()); + builder.append(' '); + } + } + if (builder.length() > 1) + builder.trim(1); + return builder.to_string(); +} diff --git a/Libraries/LibHTML/DOM/Node.h b/Libraries/LibHTML/DOM/Node.h index 24bbf9f0ad..25659e5a29 100644 --- a/Libraries/LibHTML/DOM/Node.h +++ b/Libraries/LibHTML/DOM/Node.h @@ -36,6 +36,8 @@ public: virtual String tag_name() const = 0; + virtual String text_content() const; + Document& document() { return m_document; } const Document& document() const { return m_document; } diff --git a/Libraries/LibHTML/DOM/Text.h b/Libraries/LibHTML/DOM/Text.h index 79b3d6730d..adc5fcb265 100644 --- a/Libraries/LibHTML/DOM/Text.h +++ b/Libraries/LibHTML/DOM/Text.h @@ -12,6 +12,8 @@ public: virtual String tag_name() const override { return "#text"; } + virtual String text_content() const override { return m_data; } + private: String m_data; };