Improvements for markdown parsing.
This commit is contained in:
parent
fc44290e3f
commit
8705859115
40 changed files with 957 additions and 537 deletions
|
@ -10,6 +10,39 @@
|
|||
|
||||
#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<HtmlCodeElement>();
|
||||
html_quote->setText(child->getTextContent());
|
||||
htmlElement->addChild(std::move(html_quote));
|
||||
}
|
||||
else if(child->getType() == MarkdownElement::Type::TEXT_SPAN)
|
||||
{
|
||||
auto html_text = std::make_unique<HtmlTextRun>();
|
||||
html_text->setText(child->getTextContent());
|
||||
htmlElement->addChild(std::move(html_text));
|
||||
}
|
||||
else if(child->getType() == MarkdownElement::Type::LINK)
|
||||
{
|
||||
auto link_element = dynamic_cast<MarkdownLink*>(child);
|
||||
auto html_text = std::make_unique<HtmlHyperlinkElement>(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<MarkdownImage*>(child);
|
||||
auto html_text = std::make_unique<HtmlImageElement>(link_element->getSource(), link_element->getAlt());
|
||||
htmlElement->addChild(std::move(html_text));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MarkdownConverter::convert(MarkdownDocument* markdownDoc, HtmlElement* parentElement) const
|
||||
{
|
||||
for(unsigned idx=0; idx<markdownDoc->getNumElements();idx++)
|
||||
|
@ -29,35 +62,8 @@ void MarkdownConverter::convert(MarkdownDocument* markdownDoc, HtmlElement* pare
|
|||
auto html_p_element = std::make_unique<HtmlParagraphElement>();
|
||||
auto para_element = dynamic_cast<MarkdownParagraph*>(md_element);
|
||||
|
||||
for(unsigned idx=0; idx< para_element->getNumChildren(); idx++)
|
||||
{
|
||||
auto child = para_element->getChild(idx);
|
||||
if (child->getType() == MarkdownElement::Type::INLINE_QUOTE)
|
||||
{
|
||||
auto html_quote = std::make_unique<HtmlCodeElement>();
|
||||
html_quote->setText(child->getTextContent());
|
||||
html_p_element->addChild(std::move(html_quote));
|
||||
}
|
||||
else if(child->getType() == MarkdownElement::Type::TEXT_SPAN)
|
||||
{
|
||||
auto html_text = std::make_unique<HtmlTextRun>();
|
||||
html_text->setText(child->getTextContent());
|
||||
html_p_element->addChild(std::move(html_text));
|
||||
}
|
||||
else if(child->getType() == MarkdownElement::Type::LINK)
|
||||
{
|
||||
auto link_element = dynamic_cast<MarkdownLink*>(child);
|
||||
auto html_text = std::make_unique<HtmlHyperlinkElement>(link_element->getTarget());
|
||||
html_text->setText(link_element->getTextContent());
|
||||
html_p_element->addChild(std::move(html_text));
|
||||
}
|
||||
else if(child->getType() == MarkdownElement::Type::IMAGE)
|
||||
{
|
||||
auto link_element = dynamic_cast<MarkdownImage*>(child);
|
||||
auto html_text = std::make_unique<HtmlImageElement>(link_element->getSource(), link_element->getAlt());
|
||||
html_p_element->addChild(std::move(html_text));
|
||||
}
|
||||
}
|
||||
onBlockElement(para_element, html_p_element.get());
|
||||
|
||||
parentElement->addChild(std::move(html_p_element));
|
||||
}
|
||||
else if(md_element->getType() == MarkdownElement::Type::BULLET_LIST)
|
||||
|
@ -68,7 +74,9 @@ void MarkdownConverter::convert(MarkdownDocument* markdownDoc, HtmlElement* pare
|
|||
{
|
||||
auto child = list_element->getChild(idx);
|
||||
auto html_list_item = std::make_unique<HtmlListItem>();
|
||||
html_list_item->setText(child->getTextContent());
|
||||
|
||||
onBlockElement(child, html_list_item.get());
|
||||
|
||||
html_list->addChild(std::move(html_list_item));
|
||||
}
|
||||
parentElement->addChild(std::move(html_list));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue