Mercurial > minori
comparison src/core/strings.cc @ 274:f6a756c19bfb
anime_list.cc: use mutexes so we don't sex the stack
strings.cc: use Qt to convert from HTML to plain text.
| author | Paper <paper@paper.us.eu.org> |
|---|---|
| date | Thu, 18 Apr 2024 17:24:42 -0400 |
| parents | f31305b9f60a |
| children | 1b5c04268d6a |
comparison
equal
deleted
inserted
replaced
| 273:f31305b9f60a | 274:f6a756c19bfb |
|---|---|
| 6 | 6 |
| 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 | 12 |
| 12 #include <algorithm> | 13 #include <algorithm> |
| 13 #include <cctype> | 14 #include <cctype> |
| 14 #include <codecvt> | 15 #include <codecvt> |
| 15 #include <iostream> | 16 #include <iostream> |
| 146 } | 147 } |
| 147 } | 148 } |
| 148 | 149 |
| 149 /* e.g. "<" for "<" */ | 150 /* e.g. "<" for "<" */ |
| 150 void ParseHtmlEntities(std::string& string) { | 151 void ParseHtmlEntities(std::string& string) { |
| 151 /* The only one of these I can understand using are the first | |
| 152 * three. why do the rest of these exist? | |
| 153 * | |
| 154 * probably mojibake. | |
| 155 */ | |
| 156 const std::unordered_map<std::string, std::string> map = { | 152 const std::unordered_map<std::string, std::string> map = { |
| 157 {"<", "<" }, | 153 {"<", "<"}, |
| 158 {"&rt;", ">" }, | 154 {"&rt;", ">"}, |
| 159 {" ", "\xA0"}, | 155 {" ", "\xA0"}, |
| 160 {"&", "&" }, | 156 {"&", "&"}, |
| 161 {""", "\"" }, | 157 {""", "\""}, |
| 162 {"'", "'" }, | 158 {"'", "'"}, |
| 163 {"¢", "¢" }, | 159 {"¢", "¢"}, |
| 164 {"£", "£" }, | 160 {"£", "£"}, |
| 165 {"€", "€" }, | 161 {"€", "€"}, |
| 166 {"¥", "¥" }, | 162 {"¥", "¥"}, |
| 167 {"©", "©" }, | 163 {"©", "©"}, |
| 168 {"®", "®" }, | 164 {"®", "®"}, |
| 165 {"×", "×"}, | |
| 169 {"’", "’" } // Haibane Renmei, AniList | 166 {"’", "’" } // Haibane Renmei, AniList |
| 170 }; | 167 }; |
| 171 | 168 |
| 172 for (const auto& item : map) | 169 for (const auto& item : map) |
| 173 ReplaceAll(string, item.first, item.second); | 170 ReplaceAll(string, item.first, item.second); |
| 174 } | 171 } |
| 175 | 172 |
| 176 /* removes stupid HTML stuff */ | 173 /* removes stupid HTML stuff */ |
| 177 void TextifySynopsis(std::string& string) { | 174 void TextifySynopsis(std::string& string) { |
| 175 #if 1 | |
| 176 /* Just let Qt deal with it. */ | |
| 177 QTextDocument text; | |
| 178 text.setHtml(Strings::ToQString(string)); | |
| 179 string = Strings::ToUtf8String(text.toPlainText()); | |
| 180 #else | |
| 181 /* old implementation here... beware of jankiness */ | |
| 178 SanitizeLineEndings(string); | 182 SanitizeLineEndings(string); |
| 179 RemoveHtmlTags(string); | 183 RemoveHtmlTags(string); |
| 180 ParseHtmlEntities(string); | 184 ParseHtmlEntities(string); |
| 185 #endif | |
| 181 } | 186 } |
| 182 | 187 |
| 183 /* let Qt handle the heavy lifting of locale shit | 188 /* let Qt handle the heavy lifting of locale shit |
| 184 * I don't want to deal with | 189 * I don't want to deal with |
| 185 */ | 190 */ |
| 271 } | 276 } |
| 272 | 277 |
| 273 std::string BytesToHumanReadableSize(uint64_t bytes, int precision) { | 278 std::string BytesToHumanReadableSize(uint64_t bytes, int precision) { |
| 274 #if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) | 279 #if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) |
| 275 /* QLocale in Qt >= 5.10.0 has a function for this */ | 280 /* QLocale in Qt >= 5.10.0 has a function for this */ |
| 276 return Strings::ToUtf8String(session.config.locale.GetLocale().formattedDataSize(bytes), precision); | 281 return Strings::ToUtf8String(session.config.locale.GetLocale().formattedDataSize(bytes, precision)); |
| 277 #else | 282 #else |
| 278 static const std::unordered_map<uint64_t, std::string> map = { | 283 static const std::unordered_map<uint64_t, std::string> map = { |
| 279 {1ull << 10, "KiB"}, | 284 {1ull << 10, "KiB"}, |
| 280 {1ull << 20, "MiB"}, | 285 {1ull << 20, "MiB"}, |
| 281 {1ull << 30, "GiB"}, | 286 {1ull << 30, "GiB"}, |
