diff --git a/LibHTML/Dump.cpp b/LibHTML/Dump.cpp
index db50e4ecc2..41f964e299 100644
--- a/LibHTML/Dump.cpp
+++ b/LibHTML/Dump.cpp
@@ -38,7 +38,7 @@ void dump_tree(const LayoutNode& node)
printf(" ");
printf("%s{%p}", node.class_name(), &node);
if (node.is_text())
- printf(" \"%s\"", static_cast(node).node().data().characters());
+ printf(" \"%s\"", static_cast(node).text().characters());
printf("\n");
++indent;
node.for_each_child([](auto& child) {
diff --git a/LibHTML/LayoutText.cpp b/LibHTML/LayoutText.cpp
index e71c0cd8b4..8c1feb5f91 100644
--- a/LibHTML/LayoutText.cpp
+++ b/LibHTML/LayoutText.cpp
@@ -1,4 +1,5 @@
#include
+#include
LayoutText::LayoutText(const Text& text)
: LayoutNode(&text)
@@ -8,3 +9,20 @@ LayoutText::LayoutText(const Text& text)
LayoutText::~LayoutText()
{
}
+
+static bool is_all_whitespace(const String& string)
+{
+ for (int i = 0; i < string.length(); ++i) {
+ if (!isspace(string[i]))
+ return false;
+ }
+ return true;
+}
+
+const String& LayoutText::text() const
+{
+ static String one_space = " ";
+ if (is_all_whitespace(node().data()))
+ return one_space;
+ return node().data();
+}
diff --git a/LibHTML/LayoutText.h b/LibHTML/LayoutText.h
index 42127c0778..f9964b29c4 100644
--- a/LibHTML/LayoutText.h
+++ b/LibHTML/LayoutText.h
@@ -10,6 +10,8 @@ public:
const Text& node() const { return static_cast(*LayoutNode::node()); }
+ const String& text() const;
+
virtual const char* class_name() const override { return "LayoutText"; }
virtual bool is_text() const final { return true; }