Advertisement
Guest User

Untitled

a guest
Mar 1st, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.56 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4.  
  5. class TextElement {
  6. public:
  7.     virtual std::string render() = 0 ;
  8.     virtual void add(TextElement* t) = 0 ;
  9. };
  10.  
  11. class ComposedElement : public TextElement {
  12.     std::string _begin;
  13.     std::string _end;
  14.     std::vector<TextElement*> _textElement;
  15. public:
  16.     ComposedElement(std::string begin, std::string end) : _begin(begin), _end(end) {}
  17.     std::string render() override {
  18.         std::string rendered = _begin;
  19.         for (size_t i = 0; i < _textElement.size(); i++)
  20.             rendered += "\n" + _textElement[i]->render();
  21.         return rendered + "\n" + _end;
  22.     }
  23.     void add(TextElement* t) override { _textElement.push_back(t); }
  24. };
  25.  
  26. class Page : public ComposedElement {
  27. public:
  28.     Page() : ComposedElement("<page>", "</page>") {}
  29. };
  30.  
  31. class Paragraph : public ComposedElement {
  32. public:
  33.     Paragraph() : ComposedElement("<p>", "</p>") {}
  34. };
  35.  
  36. class Span : public TextElement{
  37.     std::string _text;
  38. public:
  39.     Span(std::string text) : _text(text) {}
  40.     std::string render() { return "<span>" + _text + "</span>"; }
  41.     void add(TextElement* t) { throw "unsupported operation"; }
  42. };
  43.  
  44.  
  45. class Image : public TextElement{
  46.     std::string _src;
  47. public:
  48.     Image(std::string src) : _src(src) {}
  49.     std::string render() { return "<img src=" + _src + "/>"; }
  50.     void add(TextElement* t) { throw "unsupported operation"; }
  51. };
  52.  
  53. int main() {
  54.     Page page;
  55.     Paragraph p1, p2;
  56.     Span s1("TEXT"), s2("TEXT");
  57.     Image i("www.alfredo.com");
  58.     p1.add(&s1);
  59.     p1.add(&s2);
  60.     p2.add(&i);
  61.     page.add(&p1);
  62.     page.add(&p2);
  63.     std::cout << page.render();
  64.     return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement