BareGit
#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