1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 04:37:34 +00:00

LibMarkdown: Implement introspection of the document tree

This commit is contained in:
Ben Wiederhake 2021-09-10 21:36:29 +02:00 committed by Brian Gianforcaro
parent aca01932bd
commit 24e7196158
23 changed files with 319 additions and 0 deletions

View file

@ -7,6 +7,7 @@
#include <AK/Debug.h>
#include <AK/StringBuilder.h>
#include <LibMarkdown/Table.h>
#include <LibMarkdown/Visitor.h>
namespace Markdown {
@ -96,6 +97,21 @@ String Table::render_to_html(bool) const
return builder.to_string();
}
RecursionDecision Table::walk(Visitor& visitor) const
{
RecursionDecision rd = visitor.visit(*this);
if (rd != RecursionDecision::Recurse)
return rd;
for (auto const& column : m_columns) {
rd = column.walk(visitor);
if (rd == RecursionDecision::Break)
return rd;
}
return RecursionDecision::Continue;
}
OwnPtr<Table> Table::parse(LineIterator& lines)
{
auto peek_it = lines;
@ -207,4 +223,23 @@ OwnPtr<Table> Table::parse(LineIterator& lines)
return table;
}
RecursionDecision Table::Column::walk(Visitor& visitor) const
{
RecursionDecision rd = visitor.visit(*this);
if (rd != RecursionDecision::Recurse)
return rd;
rd = header.walk(visitor);
if (rd != RecursionDecision::Recurse)
return rd;
for (auto const& row : rows) {
rd = row.walk(visitor);
if (rd == RecursionDecision::Break)
return rd;
}
return RecursionDecision::Continue;
}
}