# HG changeset patch # User Paper # Date 1718244953 14400 # Node ID c32467cd06bb71c984cfb2d9e8c6b48f422f201b # Parent 8141f409d52ce99c2130a8adcb541af36f8f587f core/strings: add Strings::Translate function as tr() -> ToUtf8String diff -r 8141f409d52c -r c32467cd06bb include/core/strings.h --- a/include/core/strings.h Wed Jun 12 20:42:44 2024 -0400 +++ b/include/core/strings.h Wed Jun 12 22:15:53 2024 -0400 @@ -21,9 +21,6 @@ /* Substring removal functions */ void ReplaceAll(std::string& string, std::string_view find, std::string_view replace); -void SanitizeLineEndings(std::string& string); -void RemoveHtmlTags(std::string& string); -void ParseHtmlEntities(std::string& string); void NormalizeUnicode(std::string& string); void NormalizeAnimeTitle(std::string& string); @@ -73,6 +70,8 @@ bool BeginningMatchesSubstring(const std::string& str, const std::string& sub); +std::string Translate(const char* str); + }; // namespace Strings #endif // MINORI_CORE_STRINGS_H_ diff -r 8141f409d52c -r c32467cd06bb src/core/strings.cc --- a/src/core/strings.cc Wed Jun 12 20:42:44 2024 -0400 +++ b/src/core/strings.cc Wed Jun 12 22:15:53 2024 -0400 @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -67,15 +68,6 @@ } } -void SanitizeLineEndings(std::string& string) { - /* LOL */ - ReplaceAll(string, "\r\n", "\n"); - ReplaceAll(string, "

", "\n"); - ReplaceAll(string, "
", "\n"); - ReplaceAll(string, "
", "\n"); - ReplaceAll(string, "\n\n\n", "\n\n"); -} - void ConvertRomanNumerals(std::string& string) { static const std::vector> vec = { {"2", "II"}, {"3", "III"}, {"4", "IV"}, {"5", "V"}, {"6", "VI"}, @@ -119,55 +111,11 @@ RemoveTrailingChars(string, ' '); } -/* removes dumb HTML tags because anilist is aids and - * gives us HTML for synopses :/ - */ -void RemoveHtmlTags(std::string& string) { - while (string.find("<") != std::string::npos) { - auto startpos = string.find("<"); - auto endpos = string.find(">") + 1; - - if (endpos != std::string::npos) - string.erase(startpos, endpos - startpos); - } -} - -/* e.g. "<" for "<" */ -void ParseHtmlEntities(std::string& string) { - const std::unordered_map map = { - {"<", "<"}, - {"&rt;", ">"}, - {" ", "\xA0"}, - {"&", "&"}, - {""", "\""}, - {"'", "'"}, - {"¢", "¢"}, - {"£", "£"}, - {"€", "€"}, - {"¥", "¥"}, - {"©", "©"}, - {"®", "®"}, - {"×", "×"}, - {"’", "’" } // Haibane Renmei, AniList - }; - - for (const auto& item : map) - ReplaceAll(string, item.first, item.second); -} - -/* removes stupid HTML stuff */ void TextifySynopsis(std::string& string) { -#if 1 /* Just let Qt deal with it. */ QTextDocument text; text.setHtml(Strings::ToQString(string)); string = Strings::ToUtf8String(text.toPlainText()); -#else - /* old implementation here... beware of jankiness */ - SanitizeLineEndings(string); - RemoveHtmlTags(string); - ParseHtmlEntities(string); -#endif } /* let Qt handle the heavy lifting of locale shit @@ -305,4 +253,8 @@ return true; } +std::string Translate(const char* str) { + return Strings::ToUtf8String(QCoreApplication::tr(str)); +} + } // namespace Strings diff -r 8141f409d52c -r c32467cd06bb src/gui/translate/anime.cc --- a/src/gui/translate/anime.cc Wed Jun 12 20:42:44 2024 -0400 +++ b/src/gui/translate/anime.cc Wed Jun 12 22:15:53 2024 -0400 @@ -192,81 +192,81 @@ std::string ToLocalString(const Anime::ListStatus status) { switch (status) { - case Anime::ListStatus::Current: return Strings::ToUtf8String(QCoreApplication::tr("Currently watching")); - case Anime::ListStatus::Planning: return Strings::ToUtf8String(QCoreApplication::tr("Plan to watch")); - case Anime::ListStatus::Completed: return Strings::ToUtf8String(QCoreApplication::tr("Completed")); - case Anime::ListStatus::Dropped: return Strings::ToUtf8String(QCoreApplication::tr("Dropped")); - case Anime::ListStatus::Paused: return Strings::ToUtf8String(QCoreApplication::tr("On hold")); + case Anime::ListStatus::Current: return Strings::Translate("Currently watching"); + case Anime::ListStatus::Planning: return Strings::Translate("Plan to watch"); + case Anime::ListStatus::Completed: return Strings::Translate("Completed"); + case Anime::ListStatus::Dropped: return Strings::Translate("Dropped"); + case Anime::ListStatus::Paused: return Strings::Translate("On hold"); default: - case Anime::ListStatus::NotInList: return Strings::ToUtf8String(QCoreApplication::tr("Not in list")); + case Anime::ListStatus::NotInList: return Strings::Translate("Not in list"); } } std::string ToLocalString(const Anime::SeriesFormat format) { switch (format) { - case Anime::SeriesFormat::Tv: return Strings::ToUtf8String(QCoreApplication::tr("TV")); - case Anime::SeriesFormat::TvShort: return Strings::ToUtf8String(QCoreApplication::tr("TV short")); - case Anime::SeriesFormat::Ova: return Strings::ToUtf8String(QCoreApplication::tr("OVA")); - case Anime::SeriesFormat::Movie: return Strings::ToUtf8String(QCoreApplication::tr("Movie")); - case Anime::SeriesFormat::Special: return Strings::ToUtf8String(QCoreApplication::tr("Special")); - case Anime::SeriesFormat::Ona: return Strings::ToUtf8String(QCoreApplication::tr("ONA")); - case Anime::SeriesFormat::Music: return Strings::ToUtf8String(QCoreApplication::tr("Music")); + case Anime::SeriesFormat::Tv: return Strings::Translate("TV"); + case Anime::SeriesFormat::TvShort: return Strings::Translate("TV short"); + case Anime::SeriesFormat::Ova: return Strings::Translate("OVA"); + case Anime::SeriesFormat::Movie: return Strings::Translate("Movie"); + case Anime::SeriesFormat::Special: return Strings::Translate("Special"); + case Anime::SeriesFormat::Ona: return Strings::Translate("ONA"); + case Anime::SeriesFormat::Music: return Strings::Translate("Music"); default: - case Anime::SeriesFormat::Unknown: return Strings::ToUtf8String(QCoreApplication::tr("Unknown")); + case Anime::SeriesFormat::Unknown: return Strings::Translate("Unknown"); } } std::string ToLocalString(const Anime::SeriesSeason season) { switch (season) { - case Anime::SeriesSeason::Winter: return Strings::ToUtf8String(QCoreApplication::tr("Winter")); - case Anime::SeriesSeason::Summer: return Strings::ToUtf8String(QCoreApplication::tr("Summer")); - case Anime::SeriesSeason::Fall: return Strings::ToUtf8String(QCoreApplication::tr("Fall")); - case Anime::SeriesSeason::Spring: return Strings::ToUtf8String(QCoreApplication::tr("Spring")); + case Anime::SeriesSeason::Winter: return Strings::Translate("Winter"); + case Anime::SeriesSeason::Summer: return Strings::Translate("Summer"); + case Anime::SeriesSeason::Fall: return Strings::Translate("Fall"); + case Anime::SeriesSeason::Spring: return Strings::Translate("Spring"); default: - case Anime::SeriesSeason::Unknown: return Strings::ToUtf8String(QCoreApplication::tr("Unknown")); + case Anime::SeriesSeason::Unknown: return Strings::Translate("Unknown"); } } std::string ToLocalString(const Anime::SeriesStatus status) { switch (status) { - case Anime::SeriesStatus::Releasing: return Strings::ToUtf8String(QCoreApplication::tr("Currently airing")); - case Anime::SeriesStatus::Finished: return Strings::ToUtf8String(QCoreApplication::tr("Finished airing")); - case Anime::SeriesStatus::NotYetReleased: return Strings::ToUtf8String(QCoreApplication::tr("Not yet aired")); - case Anime::SeriesStatus::Cancelled: return Strings::ToUtf8String(QCoreApplication::tr("Cancelled")); - case Anime::SeriesStatus::Hiatus: return Strings::ToUtf8String(QCoreApplication::tr("On hiatus")); + case Anime::SeriesStatus::Releasing: return Strings::Translate("Currently airing"); + case Anime::SeriesStatus::Finished: return Strings::Translate("Finished airing"); + case Anime::SeriesStatus::NotYetReleased: return Strings::Translate("Not yet aired"); + case Anime::SeriesStatus::Cancelled: return Strings::Translate("Cancelled"); + case Anime::SeriesStatus::Hiatus: return Strings::Translate("On hiatus"); default: - case Anime::SeriesStatus::Unknown: return Strings::ToUtf8String(QCoreApplication::tr("Unknown")); + case Anime::SeriesStatus::Unknown: return Strings::Translate("Unknown"); } } std::string ToLocalString(const Anime::Service service) { switch (service) { - case Anime::Service::AniList: return Strings::ToUtf8String(QCoreApplication::tr("AniList")); - case Anime::Service::MyAnimeList: return Strings::ToUtf8String(QCoreApplication::tr("MyAnimeList")); - case Anime::Service::Kitsu: return Strings::ToUtf8String(QCoreApplication::tr("Kitsu")); + case Anime::Service::AniList: return Strings::Translate("AniList"); + case Anime::Service::MyAnimeList: return Strings::Translate("MyAnimeList"); + case Anime::Service::Kitsu: return Strings::Translate("Kitsu"); default: - case Anime::Service::None: return Strings::ToUtf8String(QCoreApplication::tr("None")); + case Anime::Service::None: return Strings::Translate("None"); } } std::string ToLocalString(const Anime::TitleLanguage language) { switch (language) { - case Anime::TitleLanguage::Native: return Strings::ToUtf8String(QCoreApplication::tr("Native")); - case Anime::TitleLanguage::English: return Strings::ToUtf8String(QCoreApplication::tr("English")); + case Anime::TitleLanguage::Native: return Strings::Translate("Native"); + case Anime::TitleLanguage::English: return Strings::Translate("English"); default: - case Anime::TitleLanguage::Romaji: return Strings::ToUtf8String(QCoreApplication::tr("Romaji")); + case Anime::TitleLanguage::Romaji: return Strings::Translate("Romaji"); } } std::string ToLocalString(const Anime::ScoreFormat format) { switch (format) { - case Anime::ScoreFormat::Point3: return Strings::ToUtf8String(QCoreApplication::tr("3-point")); - case Anime::ScoreFormat::Point5: return Strings::ToUtf8String(QCoreApplication::tr("5-point")); - case Anime::ScoreFormat::Point10: return Strings::ToUtf8String(QCoreApplication::tr("10-point")); + case Anime::ScoreFormat::Point3: return Strings::Translate("3-point"); + case Anime::ScoreFormat::Point5: return Strings::Translate("5-point"); + case Anime::ScoreFormat::Point10: return Strings::Translate("10-point"); case Anime::ScoreFormat::Point10Decimal: - return Strings::ToUtf8String(QCoreApplication::tr("10-point Decimal")); + return Strings::Translate("10-point Decimal"); default: - case Anime::ScoreFormat::Point100: return Strings::ToUtf8String(QCoreApplication::tr("100-point")); + case Anime::ScoreFormat::Point100: return Strings::Translate("100-point"); } } diff -r 8141f409d52c -r c32467cd06bb src/gui/translate/config.cc --- a/src/gui/translate/config.cc Wed Jun 12 20:42:44 2024 -0400 +++ b/src/gui/translate/config.cc Wed Jun 12 22:15:53 2024 -0400 @@ -32,9 +32,9 @@ std::string ToLocalString(const Theme::Theme& theme) { switch (theme) { default: - case Theme::Theme::Default: return Strings::ToUtf8String(QCoreApplication::tr("Default")); - case Theme::Theme::Light: return Strings::ToUtf8String(QCoreApplication::tr("Light")); - case Theme::Theme::Dark: return Strings::ToUtf8String(QCoreApplication::tr("Dark")); + case Theme::Theme::Default: return Strings::Translate("Default"); + case Theme::Theme::Light: return Strings::Translate("Light"); + case Theme::Theme::Dark: return Strings::Translate("Dark"); } }