#include "MarkdownConverter.h"
#include "HtmlDocument.h"
#include "HtmlElement.h"
#include "HtmlParagraphElement.h"
#include "HtmlBodyElement.h"
#include "HtmlTextRun.h"
#include "MarkdownElement.h"
#include "MarkdownComponents.h"
#include "MarkdownDocument.h"
void MarkdownConverter::onBlockElement(MarkdownElementWithChildren* mdElement, HtmlElement* htmlElement) const
{
for(unsigned idx=0; idx< mdElement->getNumChildren(); idx++)
{
auto child = mdElement->getChild(idx);
if (child->getType() == MarkdownElement::Type::INLINE_QUOTE)
{
auto html_quote = std::make_unique();
html_quote->setText(child->getTextContent());
htmlElement->addChild(std::move(html_quote));
}
else if (child->getType() == MarkdownElement::Type::CUSTOM_INLINE)
{
auto html_text = std::make_unique();
html_text->setText(child->getTextContent());
htmlElement->addChild(std::move(html_text));
}
else if(child->getType() == MarkdownElement::Type::TEXT_SPAN)
{
auto html_text = std::make_unique();
html_text->setText(child->getTextContent());
htmlElement->addChild(std::move(html_text));
}
else if(child->getType() == MarkdownElement::Type::LINK)
{
auto link_element = dynamic_cast(child);
auto html_text = std::make_unique(link_element->getTarget());
html_text->setText(link_element->getTextContent());
htmlElement->addChild(std::move(html_text));
}
else if(child->getType() == MarkdownElement::Type::IMAGE)
{
auto link_element = dynamic_cast(child);
auto html_text = std::make_unique(link_element->getSource(), link_element->getAlt());
htmlElement->addChild(std::move(html_text));
}
}
}
void MarkdownConverter::convert(MarkdownDocument* markdownDoc, HtmlElement* parentElement) const
{
for(unsigned idx=0; idxgetNumElements();idx++)
{
auto md_element = markdownDoc->getElement(idx);
if (md_element->getType() == MarkdownElement::Type::HEADING)
{
auto heading_level = dynamic_cast(md_element)->getLevel();
auto html_element = std::make_unique(heading_level);
html_element->setText(md_element->getTextContent());
parentElement->addChild(std::move(html_element));
}
else if(md_element->getType() == MarkdownElement::Type::PARAGRAPH)
{
auto html_p_element = std::make_unique();
auto para_element = dynamic_cast(md_element);
onBlockElement(para_element, html_p_element.get());
parentElement->addChild(std::move(html_p_element));
}
else if(md_element->getType() == MarkdownElement::Type::BULLET_LIST)
{
auto list_element = dynamic_cast(md_element);
auto html_list = std::make_unique();
for(unsigned idx=0; idx< list_element->getNumChildren(); idx++)
{
auto child = list_element->getChild(idx);
auto html_list_item = std::make_unique();
onBlockElement(child, html_list_item.get());
html_list->addChild(std::move(html_list_item));
}
parentElement->addChild(std::move(html_list));
}
else if(md_element->getType() == MarkdownElement::Type::MULTILINE_QUOTE)
{
auto html_quote = std::make_unique();
html_quote->setText(md_element->getTextContent());
parentElement->addChild(std::move(html_quote));
}
else if(md_element->getType() == MarkdownElement::Type::CUSTOM_MULTILINE)
{
auto html_text = std::make_unique();
html_text->setText("\n" + md_element->getTextContent() + "\n");
parentElement->addChild(std::move(html_text));
}
}
}
std::unique_ptr MarkdownConverter::convert(MarkdownDocument* markdownDoc) const
{
auto html_doc = std::make_unique();
auto body_element = html_doc->getBodyElement();
convert(markdownDoc, body_element);
return html_doc;
}