MiKTeX 26.5-next
A scalable TeX distribution
Loading...
Searching...
No Matches
StringUtil.h
Go to the documentation of this file.
1
13
14#pragma once
15
16#include <miktex/Util/config.h>
17
18#include <cstddef>
19#include <cwchar>
20
21#include <string>
22#include <unordered_map>
23#include <vector>
24
27MIKTEX_UTIL_BEGIN_NAMESPACE;
28
29class Flattener
30{
31
32public:
33
34 Flattener() :
35 Flattener('\n')
36 {
37 }
38
39 Flattener(char sep) :
40 sep(sep)
41 {
42 }
43
44 void operator()(const std::string& s)
45 {
46 if (!result.empty())
47 {
48 result += sep;
49 }
50 result += s;
51 }
52
53 std::string result;
54
55private:
56
57 char sep;
58};
59
60class MIKTEXNOVTABLE StringUtil
61{
62
63public:
64
65 StringUtil() = delete;
66 StringUtil(const StringUtil& other) = delete;
67 StringUtil& operator=(const StringUtil& other) = delete;
68 StringUtil(StringUtil&& other) = delete;
69 StringUtil& operator=(StringUtil&& other) = delete;
70 ~StringUtil() = delete;
71
72 static MIKTEXUTILCEEAPI(std::string) Flatten(const std::vector<std::string>& vec, char sep);
73 static MIKTEXUTILCEEAPI(std::vector<std::string>) Split(const std::string& s, char sep);
74 static MIKTEXUTILCEEAPI(std::size_t) AppendCeeString(char* dest, std::size_t destSize, const char* source);
75 static MIKTEXUTILCEEAPI(std::size_t) CopyCeeString(char* dest, std::size_t destSize, const char* source);
76 static MIKTEXUTILCEEAPI(std::size_t) CopyCeeString(wchar_t* dest, std::size_t destSize, const wchar_t* source);
77 static MIKTEXUTILCEEAPI(std::size_t) CopyCeeString(char* dest, std::size_t destSize, const wchar_t* source);
78 static MIKTEXUTILCEEAPI(std::size_t) CopyCeeString(char16_t* dest, std::size_t destSize, const char* source);
79 static MIKTEXUTILCEEAPI(std::size_t) CopyCeeString(wchar_t* dest, std::size_t destSize, const char* source);
80 static MIKTEXUTILCEEAPI(bool) Contains(const std::string& list, const std::string& element, const std::string& delims, bool ignoreCase);
81 static MIKTEXUTILCEEAPI(std::string) FormatString2(const std::string& message, const std::unordered_map<std::string, std::string>& args);
82 static MIKTEXUTILCEEAPI(std::u16string) UTF8ToUTF16(const std::string& utf8Chars);
83 static MIKTEXUTILCEEAPI(std::string) UTF16ToUTF8(const std::u16string& utf16Chars);
84 static MIKTEXUTILCEEAPI(std::u32string) UTF8ToUTF32(const std::string& utf8Chars);
85 static MIKTEXUTILCEEAPI(std::wstring) UTF8ToWideChar(const std::string& utf8);
86 static MIKTEXUTILCEEAPI(std::string) WideCharToUTF8(const std::wstring& wideChars);
87
88#if defined(MIKTEX_WINDOWS)
89 static MIKTEXUTILCEEAPI(std::string) AnsiToUTF8(const std::string& ansi);
90#endif
91
92 static bool Contains(const std::string& list, const std::string& element, const std::string& delims)
93 {
94 return Contains(list, element, delims, true);
95 }
96
97 static bool Contains(const std::string& list, const std::string& element)
98 {
99 return Contains(list, element, ",;:", true);
100 }
101};
102
103MIKTEX_UTIL_END_NAMESPACE;