#include "MarkdownDocument.h" #include "MarkdownElement.h" #include "MarkdownComponents.h" MarkdownDocument::~MarkdownDocument() { } void MarkdownDocument::addElement(std::unique_ptr element) { mElements.push_back(std::move(element)); } std::size_t MarkdownDocument::getNumElements() const { return mElements.size(); } MarkdownElement* MarkdownDocument::getElement(std::size_t idx) const { return mElements[idx].get(); } std::vector MarkdownDocument::getAllLinks() const { std::vector links; for(auto& element : mElements) { if (element->getType() == MarkdownElement::Type::PARAGRAPH) { auto para_links = dynamic_cast(element.get())->getAllLinks(); links.insert(links.end(), para_links.begin(), para_links.end()); } else if (element->getType() == MarkdownElement::Type::BULLET_LIST) { auto bullet_list = dynamic_cast(element.get()); for(unsigned idx=0; idxgetNumChildren(); idx++) { auto para_links = bullet_list->getChild(idx)->getAllLinks(); links.insert(links.end(), para_links.begin(), para_links.end()); } } } return links; } std::size_t MarkdownDocument::getNumMultilineContexts() const { return mCustomMultilineContexts.size(); } std::size_t MarkdownDocument::getNumInlineContexts() const { return mCustomInlineContexts.size(); } MarkdownCustomMultilineElementContext* MarkdownDocument::getMultilineContext(std::size_t idx) const { return mCustomMultilineContexts[idx].get(); } MarkdownCustomInlineElementContext* MarkdownDocument::getInlineContext(std::size_t idx) const { return mCustomInlineContexts[idx].get(); } void MarkdownDocument::registerCustomInlineElement(std::unique_ptr context) { mCustomInlineContexts.push_back(std::move(context)); } void MarkdownDocument::registerCustomMultilineElement(std::unique_ptr context) { mCustomMultilineContexts.push_back(std::move(context)); }