#include "macrodown.h"
#include "block_parser.h"
#include "converter.h"
#include "standard_library.h"
namespace macrodown
{
MacroDown::MacroDown()
{
StandardLibrary::registerMacros(evaluator_);
}
std::unique_ptr<Node> MacroDown::parse(const std::string& input)
{
auto block_root = BlockParser::parse(input);
auto macro_nodes = Converter::convert(block_root.get(), prefix_markups_, delimited_markups_);
if(macro_nodes.empty())
{
return std::make_unique<Node>(Group{});
}
if(macro_nodes.size() == 1)
{
return std::move(macro_nodes[0]);
}
Group root_group;
for(auto& node : macro_nodes)
{
root_group.addChild(std::move(node));
}
return std::make_unique<Node>(std::move(root_group));
}
std::string MacroDown::render(const Node& root)
{
return evaluator_.evaluate(root);
}
void MacroDown::definePrefixMarkup(const PrefixMarkup& markup)
{
prefix_markups_.push_back(markup);
}
void MacroDown::defineDelimitedMarkup(const DelimitedMarkup& markup)
{
delimited_markups_.push_back(markup);
}
} // namespace macrodown