Mercurial > minori
comparison src/core/strings.cc @ 322:c32467cd06bb
core/strings: add Strings::Translate function as tr() -> ToUtf8String
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Wed, 12 Jun 2024 22:15:53 -0400 |
parents | 1b5c04268d6a |
children | a0aa8c8c4307 |
comparison
equal
deleted
inserted
replaced
321:8141f409d52c | 322:c32467cd06bb |
---|---|
7 #include <QByteArray> | 7 #include <QByteArray> |
8 #include <QDebug> | 8 #include <QDebug> |
9 #include <QLocale> | 9 #include <QLocale> |
10 #include <QString> | 10 #include <QString> |
11 #include <QTextDocument> | 11 #include <QTextDocument> |
12 #include <QCoreApplication> | |
12 | 13 |
13 #include <algorithm> | 14 #include <algorithm> |
14 #include <cctype> | 15 #include <cctype> |
15 #include <codecvt> | 16 #include <codecvt> |
16 #include <iostream> | 17 #include <iostream> |
65 string.replace(pos, find.length(), replace); | 66 string.replace(pos, find.length(), replace); |
66 pos += replace.length(); | 67 pos += replace.length(); |
67 } | 68 } |
68 } | 69 } |
69 | 70 |
70 void SanitizeLineEndings(std::string& string) { | |
71 /* LOL */ | |
72 ReplaceAll(string, "\r\n", "\n"); | |
73 ReplaceAll(string, "</p>", "\n"); | |
74 ReplaceAll(string, "<br>", "\n"); | |
75 ReplaceAll(string, "<br />", "\n"); | |
76 ReplaceAll(string, "\n\n\n", "\n\n"); | |
77 } | |
78 | |
79 void ConvertRomanNumerals(std::string& string) { | 71 void ConvertRomanNumerals(std::string& string) { |
80 static const std::vector<std::pair<std::string_view, std::string_view>> vec = { | 72 static const std::vector<std::pair<std::string_view, std::string_view>> vec = { |
81 {"2", "II"}, {"3", "III"}, {"4", "IV"}, {"5", "V"}, {"6", "VI"}, | 73 {"2", "II"}, {"3", "III"}, {"4", "IV"}, {"5", "V"}, {"6", "VI"}, |
82 {"7", "VII"}, {"8", "VIII"}, {"9", "IX"}, {"11", "XI"}, {"12", "XII"}, | 74 {"7", "VII"}, {"8", "VIII"}, {"9", "IX"}, {"11", "XI"}, {"12", "XII"}, |
83 {"13", "XIII"} | 75 {"13", "XIII"} |
117 NormalizeUnicode(string); | 109 NormalizeUnicode(string); |
118 RemoveLeadingChars(string, ' '); | 110 RemoveLeadingChars(string, ' '); |
119 RemoveTrailingChars(string, ' '); | 111 RemoveTrailingChars(string, ' '); |
120 } | 112 } |
121 | 113 |
122 /* removes dumb HTML tags because anilist is aids and | |
123 * gives us HTML for synopses :/ | |
124 */ | |
125 void RemoveHtmlTags(std::string& string) { | |
126 while (string.find("<") != std::string::npos) { | |
127 auto startpos = string.find("<"); | |
128 auto endpos = string.find(">") + 1; | |
129 | |
130 if (endpos != std::string::npos) | |
131 string.erase(startpos, endpos - startpos); | |
132 } | |
133 } | |
134 | |
135 /* e.g. "<" for "<" */ | |
136 void ParseHtmlEntities(std::string& string) { | |
137 const std::unordered_map<std::string, std::string> map = { | |
138 {"<", "<"}, | |
139 {"&rt;", ">"}, | |
140 {" ", "\xA0"}, | |
141 {"&", "&"}, | |
142 {""", "\""}, | |
143 {"'", "'"}, | |
144 {"¢", "¢"}, | |
145 {"£", "£"}, | |
146 {"€", "€"}, | |
147 {"¥", "¥"}, | |
148 {"©", "©"}, | |
149 {"®", "®"}, | |
150 {"×", "×"}, | |
151 {"’", "’" } // Haibane Renmei, AniList | |
152 }; | |
153 | |
154 for (const auto& item : map) | |
155 ReplaceAll(string, item.first, item.second); | |
156 } | |
157 | |
158 /* removes stupid HTML stuff */ | |
159 void TextifySynopsis(std::string& string) { | 114 void TextifySynopsis(std::string& string) { |
160 #if 1 | |
161 /* Just let Qt deal with it. */ | 115 /* Just let Qt deal with it. */ |
162 QTextDocument text; | 116 QTextDocument text; |
163 text.setHtml(Strings::ToQString(string)); | 117 text.setHtml(Strings::ToQString(string)); |
164 string = Strings::ToUtf8String(text.toPlainText()); | 118 string = Strings::ToUtf8String(text.toPlainText()); |
165 #else | |
166 /* old implementation here... beware of jankiness */ | |
167 SanitizeLineEndings(string); | |
168 RemoveHtmlTags(string); | |
169 ParseHtmlEntities(string); | |
170 #endif | |
171 } | 119 } |
172 | 120 |
173 /* let Qt handle the heavy lifting of locale shit | 121 /* let Qt handle the heavy lifting of locale shit |
174 * I don't want to deal with | 122 * I don't want to deal with |
175 */ | 123 */ |
303 return false; | 251 return false; |
304 | 252 |
305 return true; | 253 return true; |
306 } | 254 } |
307 | 255 |
256 std::string Translate(const char* str) { | |
257 return Strings::ToUtf8String(QCoreApplication::tr(str)); | |
258 } | |
259 | |
308 } // namespace Strings | 260 } // namespace Strings |