Euphoria
ui_text.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <memory>
4 
5 #include "base/stringbuilder.h"
6 
7 
8 namespace eu::core
9 {
10  struct UiText;
11 
12  namespace textparser
13  {
14  struct Visitor;
15 
16  struct Node
17  {
18  Node() = default;
19  virtual ~Node() = default;
20 
21  Node(const Node& other) = delete;
22  void operator=(const Node&) = delete;
23  Node(Node&& other) = delete;
24  void operator=(Node&&) = delete;
25 
26  virtual void
27  accept(Visitor* visitor) const = 0;
28  };
29 
30  // todo(Gustav): move nodes to private
31 
32  struct NodeText : Node
33  {
34  std::string text;
35 
36  explicit NodeText(const std::string& t);
37 
38  void
39  accept(Visitor* visitor) const override;
40  };
41 
42  struct NodeImage : Node
43  {
44  std::string image;
45 
46  explicit NodeImage(const std::string& t);
47 
48  void
49  accept(Visitor* visitor) const override;
50  };
51 
53  {
54  bool begin;
55 
56  explicit NodeBeginOrEnd(bool b);
57 
58  void
59  accept(Visitor* visitor) const override;
60  };
61 
62  struct Visitor
63  {
64  Visitor() = default;
65  virtual ~Visitor() = default;
66 
67  Visitor(const Visitor& other) = delete;
68  void operator=(const Visitor&) = delete;
69  Visitor(Visitor&& other) = delete;
70  void operator=(Visitor&&) = delete;
71 
72  virtual void
73  on_text(const std::string& text) = 0;
74 
75  virtual void
76  on_image(const std::string& image) = 0;
77 
78  virtual void
79  on_begin() = 0;
80 
81  virtual void
82  on_end() = 0;
83  };
84 
85  struct VisitorDebugString : public Visitor
86  {
88 
89  static std::string accept_all_nodes(UiText* visitor);
90 
91  void on_text(const std::string& text) override;
92  void on_image(const std::string& img) override;
93  void on_begin() override;
94  void on_end() override;
95  };
96  }
97 
101  // todo(Gustav): add ability to specify button/keys so that we can use:
102  // use "[jump] to jump" and said [jump] would look up the keybind and display a
103  // sprite/ninepath w/ text representing the bind this could also be useful when
104  // displaying all the keybinds. needs to work out how (or if) the joystick
105  // id/number also should be displayed.
106  struct UiText
107  {
108  std::vector<std::shared_ptr<textparser::Node>> nodes;
109 
110  [[nodiscard]] static UiText create_from_text(const std::string& str);
111 
112  void clear();
113 
114  void add_text(const std::string& str);
115  void add_image(const std::string& img);
116  void add_begin();
117  void add_end();
118 
119  void init_with_text(const std::string& str);
120  bool init_by_parsing_source(const std::string& str);
121 
122  void accept(textparser::Visitor* visitor);
123  void accept(textparser::Visitor* visitor) const;
124  };
125 
126 }
Represents displayed text.
Definition: ui_text.h:107
bool init_by_parsing_source(const std::string &str)
Definition: ui_text.cc:225
void clear()
Definition: ui_text.cc:84
std::vector< std::shared_ptr< textparser::Node > > nodes
Definition: ui_text.h:108
static UiText create_from_text(const std::string &str)
Definition: ui_text.cc:254
void add_begin()
Definition: ui_text.cc:102
void init_with_text(const std::string &str)
Definition: ui_text.cc:114
void accept(textparser::Visitor *visitor)
Definition: ui_text.cc:262
void add_image(const std::string &img)
Definition: ui_text.cc:96
void add_end()
Definition: ui_text.cc:108
void add_text(const std::string &str)
Definition: ui_text.cc:90
void accept(Visitor *visitor) const override
Definition: ui_text.cc:31
void accept(Visitor *visitor) const override
Definition: ui_text.cc:23
NodeImage(const std::string &t)
Definition: ui_text.cc:20
NodeText(const std::string &t)
Definition: ui_text.cc:12
void accept(Visitor *visitor) const override
Definition: ui_text.cc:15
Node(Node &&other)=delete
virtual ~Node()=default
void operator=(Node &&)=delete
Node(const Node &other)=delete
virtual void accept(Visitor *visitor) const =0
void operator=(const Node &)=delete
static std::string accept_all_nodes(UiText *visitor)
Definition: ui_text.cc:73
void on_image(const std::string &img) override
Definition: ui_text.cc:55
void on_text(const std::string &text) override
Definition: ui_text.cc:49
void operator=(Visitor &&)=delete
virtual void on_text(const std::string &text)=0
void operator=(const Visitor &)=delete
virtual ~Visitor()=default
virtual void on_image(const std::string &image)=0
Visitor(Visitor &&other)=delete
Visitor(const Visitor &other)=delete