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
commit 24e7196158
Notes: sideshowbarker 2024-07-18 02:50:37 +09:00
23 changed files with 319 additions and 0 deletions

View file

@ -7,6 +7,7 @@
#include <AK/StringBuilder.h>
#include <LibJS/MarkupGenerator.h>
#include <LibMarkdown/CodeBlock.h>
#include <LibMarkdown/Visitor.h>
#include <LibRegex/Regex.h>
namespace Markdown {
@ -54,6 +55,22 @@ String CodeBlock::render_for_terminal(size_t) const
return builder.build();
}
RecursionDecision CodeBlock::walk(Visitor& visitor) const
{
RecursionDecision rd = visitor.visit(*this);
if (rd != RecursionDecision::Recurse)
return rd;
rd = visitor.visit(m_code);
if (rd != RecursionDecision::Recurse)
return rd;
// Don't recurse on m_language and m_style.
// Normalize return value.
return RecursionDecision::Continue;
}
static Regex<ECMA262> style_spec_re("\\s*([\\*_]*)\\s*([^\\*_\\s]*).*");
OwnPtr<CodeBlock> CodeBlock::parse(LineIterator& lines)