SDL Window Engine  20200905
swe_cunicode.h
1 /***************************************************************************
2  * Copyright (C) 2017 by SWE team <sdl.window.engine@gmail.com> *
3  * *
4  * Part of the SWE: SDL Window Engine: *
5  * https://github.com/AndreyBarmaley/sdl-window-engine *
6  * *
7  * This program is free software; you can redistribute it and/or modify *
8  * it under the terms of the GNU General Public License as published by *
9  * the Free Software Foundation; either version 3 of the License, or *
10  * (at your option) any later version. *
11  * *
12  * This program is distributed in the hope that it will be useful, *
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15  * GNU General Public License for more details. *
16  * *
17  * You should have received a copy of the GNU General Public License *
18  * along with this program; if not, write to the *
19  * Free Software Foundation, Inc., *
20  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
21  ***************************************************************************/
22 
23 #ifndef _SWE_CUNICODE_
24 #define _SWE_CUNICODE_
25 
26 #include <functional>
27 #include <string>
28 #include <vector>
29 #include <list>
30 
31 #include "swe_types.h"
32 
34 namespace SWE
35 {
36 
37  class UnicodeList;
38  class FontRender;
39 
41  class UnicodeString : public std::u16string
42  {
43  protected:
44  static std::u16string utf8_to_utf16(const std::string &);
45  static std::string utf16_to_utf8(const std::u16string &);
46 
47  public:
48  UnicodeString();
49  UnicodeString(size_t len, int ch);
50  UnicodeString(const std::u16string & v);
51  UnicodeString(const UnicodeString & v);
52  UnicodeString(const_iterator it1, const_iterator it2);
53  UnicodeString(std::u16string && v) noexcept;
54  UnicodeString(UnicodeString && v) noexcept;
55  UnicodeString(const std::string & v);
56  UnicodeString(const char* v);
57 
58  UnicodeString & operator= (const UnicodeString & v);
59  UnicodeString & operator= (UnicodeString && v) noexcept;
60  UnicodeString & operator= (std::u16string && v) noexcept;
61 
62  bool operator== (const std::string &) const;
63  bool operator!= (const std::string &) const;
64 
65  void assign(const std::string &);
66  void assign(size_t len, int ch);
67  void assign(const_iterator it1, const_iterator it2);
68 
69  UnicodeString & append(int);
70  UnicodeString & append(const UnicodeString &);
71 
72  UnicodeList split(int sep) const;
73  UnicodeList split(std::function<bool(int)>) const;
74  UnicodeList splitWidth(const FontRender &, int width) const;
75  UnicodeList wrap(int) const;
76 
77  static std::list<UnicodeString>
78  split(const UnicodeString & str, const UnicodeString & sep);
79 
80 
81  int index(int) const;
82  UnicodeString substr(size_t, int = -1) const;
83  std::string toString(void) const;
84  std::string toHexString(const std::string & sep = ", ", bool prefix = true) const;
85 
86  UnicodeString ucFirst(void) const;
87  UnicodeString toLower(void) const;
88  UnicodeString toUpper(void) const;
89  UnicodeString firstLower(void) const;
90  UnicodeString firstUpper(void) const;
91  };
92 
95  {
96  int cur;
97 
98  public:
99  UnicodeFormat(const char*);
100 
101  UnicodeFormat & arg(const UnicodeString &);
102  UnicodeFormat & arg(const std::string &);
103  UnicodeFormat & arg(const char*);
104  UnicodeFormat & arg(int);
105  UnicodeFormat & arg(double, int prec);
106  };
107 
109  class UnicodeList : public std::list<UnicodeString>
110  {
111  public:
112  UnicodeList();
113  UnicodeList(const std::list<std::string> &);
114  UnicodeList(const std::list<UnicodeString> &);
115  UnicodeList(const std::initializer_list<const char*> &);
116  UnicodeList(const UnicodeList &);
117 
118  UnicodeList(UnicodeList &&) noexcept;
119  UnicodeList(std::list<UnicodeString> &&) noexcept;
120 
121  UnicodeList & operator= (const UnicodeList &);
122  UnicodeList & operator= (UnicodeList &&) noexcept;
123  UnicodeList & operator= (std::list<UnicodeString> &&) noexcept;
124 
125  size_t maxStringWidth(void) const;
126  size_t totalStringsWidth(void) const;
127 
128  UnicodeString join(void) const;
129  UnicodeString join(const UnicodeString &) const;
130 
131  UnicodeList & append(const UnicodeString &);
132  UnicodeList & append(const std::list<std::string> &);
133  UnicodeList & append(const UnicodeList &);
134 
135  UnicodeList & operator<< (const UnicodeString &);
136  UnicodeList & operator<< (const std::list<std::string> &);
137  UnicodeList & operator<< (const UnicodeList &);
138 
139  StringList toStringList(void) const;
140  };
141 
142 } // SWE
143 #endif
пространство SWE.
Definition: swe_binarybuf.cpp:30
класс списка unicode строк
Definition: swe_cunicode.h:109
базовый класс шрифта
Definition: swe_fontset.h:151
класс списка строк
Definition: swe_cstring.h:36
класс форматной unicode строки
Definition: swe_cunicode.h:94
класс unicode строки
Definition: swe_cunicode.h:41