#include "MarkdownDocument.h" #include "MarkdownElement.h" #include "MarkdownComponents.h" 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(); } void MarkdownDocument::doLinkTargetSubstitution(const std::string& targetString, const std::string& replacementString) { for(auto& element : mElements) { element->doFieldSubstitution(MarkdownElement::Type::LINK, targetString, replacementString); } } 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; }