Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- class TextElement {
- public:
- virtual std::string render() = 0 ;
- virtual void add(TextElement* t) = 0 ;
- };
- class ComposedElement : public TextElement {
- std::string _begin;
- std::string _end;
- std::vector<TextElement*> _textElement;
- public:
- ComposedElement(std::string begin, std::string end) : _begin(begin), _end(end) {}
- std::string render() override {
- std::string rendered = _begin;
- for (size_t i = 0; i < _textElement.size(); i++)
- rendered += "\n" + _textElement[i]->render();
- return rendered + "\n" + _end;
- }
- void add(TextElement* t) override { _textElement.push_back(t); }
- };
- class Page : public ComposedElement {
- public:
- Page() : ComposedElement("<page>", "</page>") {}
- };
- class Paragraph : public ComposedElement {
- public:
- Paragraph() : ComposedElement("<p>", "</p>") {}
- };
- class Span : public TextElement{
- std::string _text;
- public:
- Span(std::string text) : _text(text) {}
- std::string render() { return "<span>" + _text + "</span>"; }
- void add(TextElement* t) { throw "unsupported operation"; }
- };
- class Image : public TextElement{
- std::string _src;
- public:
- Image(std::string src) : _src(src) {}
- std::string render() { return "<img src=" + _src + "/>"; }
- void add(TextElement* t) { throw "unsupported operation"; }
- };
- int main() {
- Page page;
- Paragraph p1, p2;
- Span s1("TEXT"), s2("TEXT");
- Image i("www.alfredo.com");
- p1.add(&s1);
- p1.add(&s2);
- p2.add(&i);
- page.add(&p1);
- page.add(&p2);
- std::cout << page.render();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement