#pragma once #include "MarkdownElement.h" #include #include class MarkdownTextSpan : public MarkdownInlineElement { public: virtual ~MarkdownTextSpan() = default; Type getType() const override; }; class MarkdownParagraph : public MarkdownElement { public: virtual ~MarkdownParagraph() = default; Type getType() const override; void addChild(std::unique_ptr child); std::size_t getNumChildren() const; MarkdownInlineElement* getChild(std::size_t idx) const; private: std::vector > mChildren; }; class MarkdownBulletItem : public MarkdownElement { public: virtual ~MarkdownBulletItem() = default; Type getType() const override; }; class MarkdownBulletList : public MarkdownElement { public: virtual ~MarkdownBulletList() = default; Type getType() const override; void addChild(std::unique_ptr child); std::size_t getNumChildren() const; MarkdownBulletItem* getChild(std::size_t idx) const; private: std::vector > mChildren; }; class MarkdownHeading : public MarkdownElement { public: MarkdownHeading(unsigned level); virtual ~MarkdownHeading() = default; Type getType() const override; unsigned getLevel() const; private: unsigned mLevel{1}; }; class MarkdownInlineQuote : public MarkdownInlineElement { public: virtual ~MarkdownInlineQuote() = default; Type getType() const override; }; class MarkdownLink : public MarkdownInlineElement { public: MarkdownLink(const std::string& target); virtual ~MarkdownLink() = default; const std::string& getTarget() const; Type getType() const override; private: std::string mTarget; }; class MarkdownImage : public MarkdownInlineElement { public: MarkdownImage(const std::string& source, const std::string& alt); virtual ~MarkdownImage() = default; Type getType() const override; const std::string& getSource() const; const std::string& getAlt() const; private: std::string mSource; std::string mAlt; }; class MarkdownMultilineQuote : public MarkdownElement { public: MarkdownMultilineQuote(const std::string& tag); virtual ~MarkdownMultilineQuote() = default; Type getType() const override; private: std::string mTag; };