#include "standard_library.h"
namespace macrodown
{
void StandardLibrary::registerMacros(Evaluator& evaluator)
{
// Blocks
evaluator.defineIntrinsic("p", [](const std::vector<std::string>& args) -> std::string
{
if(args.empty()) return "";
std::string content = args[0];
// Check if content is empty or just whitespace
if(content.find_first_not_of(" \t\n\r") == std::string::npos)
{
return "";
}
return "<p>" + content + "</p>\n";
});
evaluator.define("quote", {"content"}, "<blockquote>\n%content</blockquote>\n");
// Headings
evaluator.define("h1", {"content"}, "<h1>%content</h1>\n");
evaluator.define("h2", {"content"}, "<h2>%content</h2>\n");
evaluator.define("h3", {"content"}, "<h3>%content</h3>\n");
evaluator.define("h4", {"content"}, "<h4>%content</h4>\n");
evaluator.define("h5", {"content"}, "<h5>%content</h5>\n");
evaluator.define("h6", {"content"}, "<h6>%content</h6>\n");
// Inline
evaluator.define("em", {"content"}, "<em>%content</em>");
evaluator.define("strong", {"content"}, "<strong>%content</strong>");
evaluator.define("code", {"content"}, "<code>%content</code>");
evaluator.define("link", {"url", "text"}, "<a href=\"%url\">%text</a>");
evaluator.define("img", {"url", "alt"}, "<img src=\"%url\" alt=\"%alt\" />");
}
} // namespace macrodown