xtd - Reference Guide  0.1.1
Modern c++17/20 framework to create console, GUI and unit test applications on Windows, macOS, Linux, iOS and android.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
emoticon.h
Go to the documentation of this file.
1 #pragma once
5 #include "../forms_export.h"
6 #include <xtd/object.h>
7 #include <xtd/static.h>
8 #include <xtd/ustring.h>
9 #include <ostream>
10 #include <vector>
11 
13 namespace xtd {
15  namespace forms {
25  class forms_export_ emoticon : public object {
26  public:
28  static const emoticon empty();
29 
33  emoticon(const xtd::ustring& name, std::initializer_list<char32_t> codepoints) : name_(name), codepoints_(codepoints) {}
34 
38  emoticon(const xtd::ustring& name, const std::vector<char32_t>& codepoints) : name_(name), codepoints_(codepoints) {}
39 
43  emoticon(const xtd::ustring& name, char32_t codepoint) : name_(name), codepoints_({codepoint}) {}
44 
47  emoticon(std::initializer_list<char32_t> codepoints) : codepoints_(codepoints) {}
48 
51  emoticon(const std::vector<char32_t>& codepoints) : codepoints_(codepoints) {}
52 
55  emoticon(char32_t codepoint) : codepoints_({codepoint}) {}
56 
58  template<typename type_t>
59  emoticon(const xtd::ustring& name, std::initializer_list<type_t> codepoints) : name_(name) {
60  for(auto codepoint : codepoints)
61  codepoints_.push_back(static_cast<char32_t>(codepoint));
62  }
63 
64  template<typename type_t>
65  emoticon(const xtd::ustring& name, const std::vector<type_t>& codepoints) : name_(name) {
66  for(auto codepoint : codepoints)
67  codepoints_.push_back(static_cast<char32_t>(codepoint));
68  }
69 
70  template<typename type_t>
71  emoticon(const xtd::ustring& name, type_t codepoint) : name_(name), codepoints_({static_cast<char32_t>(codepoint)}) {}
72 
73  template<typename type_t>
74  emoticon(std::initializer_list<type_t> codepoints) {
75  for(auto codepoint : codepoints)
76  codepoints_.push_back(static_cast<char32_t>(codepoint));
77  }
78 
79  template<typename type_t>
80  emoticon(const std::vector<type_t>& codepoints) {
81  for(auto codepoint : codepoints)
82  codepoints_.push_back(static_cast<char32_t>(codepoint));
83  }
84 
85  template<typename type_t>
86  emoticon(type_t codepoint) : codepoints_({static_cast<char32_t>(codepoint)}) {}
87 
88  emoticon() = default;
89  emoticon(const emoticon&) = default;
90  emoticon& operator=(const emoticon&) = default;
91  bool operator==(const emoticon& value) {return name_ == value.name_ && codepoints_ == value.codepoints_;}
92  bool operator!=(const emoticon& value) {return !operator==(value);}
93  friend std::ostream& operator<<(std::ostream& os, const xtd::forms::emoticon& emoticon) noexcept {
94  return os << emoticon.to_string();
95  }
97 
100  const xtd::ustring& name() const {return name_;}
101 
104  const std::vector<char32_t>& codepoints() const {return codepoints_;}
105 
108  xtd::ustring to_string() const noexcept override {
109  std::string result;
110  for (auto codepoint : codepoints_) {
111  if (codepoint < 0x80) {
112  result.push_back(static_cast<char>(codepoint));
113  } else if (codepoint < 0x800) {
114  result.push_back(static_cast<char>((codepoint >> 6) | 0xc0));
115  result.push_back(static_cast<char>((codepoint & 0x3f) | 0x80));
116  } else if (codepoint < 0x10000) {
117  result.push_back(static_cast<char>((codepoint >> 12) | 0xe0));
118  result.push_back(static_cast<char>(((codepoint >> 6) & 0x3f) | 0x80));
119  result.push_back(static_cast<char>((codepoint & 0x3f) | 0x80));
120  } else {
121  result.push_back(static_cast<char>((codepoint >> 18) | 0xf0));
122  result.push_back(static_cast<char>(((codepoint >> 12) & 0x3f) | 0x80));
123  result.push_back(static_cast<char>(((codepoint >> 6) & 0x3f) | 0x80));
124  result.push_back(static_cast<char>((codepoint & 0x3f) | 0x80));
125  }
126  }
127  return result;
128  }
129 
130  private:
131  xtd::ustring name_;
132  std::vector<char32_t> codepoints_;
133  };
134  }
135 }
136 
138 inline xtd::ustring operator+(const xtd::forms::emoticon& value_a, const xtd::forms::emoticon& value_b) {
139  return value_a.to_string() + value_b.to_string();
140 }
141 
142 inline xtd::ustring operator+(const xtd::forms::emoticon& value_a, const char* value_b) {
143  return value_a.to_string() + value_b;
144 }
145 
146 inline xtd::ustring operator+(const xtd::forms::emoticon& value_a, const xtd::ustring& value_b) {
147  return value_a.to_string() + value_b;
148 }
149 
150 inline xtd::ustring operator+(const xtd::ustring& value_a, const xtd::forms::emoticon& value_b) {
151  return value_a + value_b.to_string();
152 }
153 
154 inline xtd::ustring operator+(const char* value_a, const xtd::forms::emoticon& value_b) {
155  return xtd::ustring(value_a) + value_b.to_string();
156 }
Represent a emoticon with name and codepoints.
Definition: emoticon.h:25
const xtd::ustring & name() const
Gets name of emoticon.
Definition: emoticon.h:100
emoticon(const xtd::ustring &name, char32_t codepoint)
Initialize a new instance of emoticon class with specified name and codepoint.
Definition: emoticon.h:43
static const emoticon empty()
Represents an empty emoticon.
emoticon(const std::vector< char32_t > &codepoints)
Initialize a new instance of emoticon class with specified codepoints.
Definition: emoticon.h:51
emoticon(char32_t codepoint)
Initialize a new instance of emoticon class with specified codepoint.
Definition: emoticon.h:55
emoticon(const xtd::ustring &name, std::initializer_list< char32_t > codepoints)
Initialize a new instance of emoticon class with specified name and codepoints.
Definition: emoticon.h:33
const std::vector< char32_t > & codepoints() const
Gets codepoints of emoticon.
Definition: emoticon.h:104
emoticon(const xtd::ustring &name, const std::vector< char32_t > &codepoints)
Initialize a new instance of emoticon class with specified name and codepoints.
Definition: emoticon.h:38
emoticon(std::initializer_list< char32_t > codepoints)
Initialize a new instance of emoticon class with specified codepoints.
Definition: emoticon.h:47
xtd::ustring to_string() const noexcept override
Returns a string containing the codepoints of the emoticons.
Definition: emoticon.h:108
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes....
Definition: object.h:26
Represents text as a sequence of UTF-8 code units.
Definition: ustring.h:48
#define forms_export_
Define shared library export.
Definition: forms_export.h:13
The xtd::forms namespace contains classes for creating Windows-based applications that take full adva...
Definition: about_box.h:13
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition: system_report.h:17
Contains xtd::object class.
Contains xtd::static_object class.
Contains xtd::ustring class.