Mercurial > minori
comparison src/core/strings.cc @ 260:dd211ff68b36
pages/seasons: add initial functionality
the menu doesn't work yet, but it's a good start
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Wed, 03 Apr 2024 19:48:38 -0400 |
parents | 862d0d8619f6 |
children | 9a04802848c0 |
comparison
equal
deleted
inserted
replaced
259:0362f3c4534c | 260:dd211ff68b36 |
---|---|
68 } | 68 } |
69 | 69 |
70 /* This function is really only used for cleaning up the synopsis of | 70 /* This function is really only used for cleaning up the synopsis of |
71 * horrible HTML debris from AniList :) | 71 * horrible HTML debris from AniList :) |
72 */ | 72 */ |
73 std::string ReplaceAll(std::string string, const std::string& find, const std::string& replace) { | 73 void ReplaceAll(std::string& string, std::string_view find, std::string_view replace) { |
74 size_t pos = 0; | 74 size_t pos = 0; |
75 while ((pos = string.find(find, pos)) != std::string::npos) { | 75 while ((pos = string.find(find, pos)) != std::string::npos) { |
76 string.replace(pos, find.length(), replace); | 76 string.replace(pos, find.length(), replace); |
77 pos += replace.length(); | 77 pos += replace.length(); |
78 } | 78 } |
79 return string; | 79 } |
80 } | 80 |
81 | 81 void SanitizeLineEndings(std::string& string) { |
82 std::string SanitizeLineEndings(const std::string& string) { | |
83 /* LOL */ | 82 /* LOL */ |
84 return ReplaceAll(ReplaceAll(ReplaceAll(ReplaceAll(ReplaceAll(string, "\r\n", "\n"), "</p>", "\n"), "<br>", "\n"), | 83 ReplaceAll(string, "\r\n", "\n"); |
85 "<br />", "\n"), | 84 ReplaceAll(string, "</p>", "\n"); |
86 "\n\n\n", "\n\n"); | 85 ReplaceAll(string, "<br>", "\n"); |
86 ReplaceAll(string, "<br />", "\n"); | |
87 ReplaceAll(string, "\n\n\n", "\n\n"); | |
88 } | |
89 | |
90 void ConvertRomanNumerals(std::string& string) { | |
91 static const std::vector<std::pair<std::string_view, std::string_view>> vec = { | |
92 {"2", "II"}, {"3", "III"}, {"4", "IV"}, {"5", "V"}, {"6", "VI"}, | |
93 {"7", "VII"}, {"8", "VIII"}, {"9", "IX"}, {"11", "XI"}, {"12", "XII"}, | |
94 {"13", "XIII"} | |
95 }; | |
96 | |
97 for (const auto& item : vec) | |
98 ReplaceAll(string, item.second, item.first); | |
87 } | 99 } |
88 | 100 |
89 /* removes dumb HTML tags because anilist is aids and | 101 /* removes dumb HTML tags because anilist is aids and |
90 * gives us HTML for synopses :/ | 102 * gives us HTML for synopses :/ |
91 */ | 103 */ |
92 std::string RemoveHtmlTags(std::string string) { | 104 void RemoveHtmlTags(std::string& string) { |
93 while (string.find("<") != std::string::npos) { | 105 while (string.find("<") != std::string::npos) { |
94 auto startpos = string.find("<"); | 106 auto startpos = string.find("<"); |
95 auto endpos = string.find(">") + 1; | 107 auto endpos = string.find(">") + 1; |
96 | 108 |
97 if (endpos != std::string::npos) | 109 if (endpos != std::string::npos) |
98 string.erase(startpos, endpos - startpos); | 110 string.erase(startpos, endpos - startpos); |
99 } | 111 } |
100 return string; | |
101 } | 112 } |
102 | 113 |
103 /* e.g. "<" for "<" */ | 114 /* e.g. "<" for "<" */ |
104 std::string ParseHtmlEntities(std::string string) { | 115 void ParseHtmlEntities(std::string& string) { |
116 /* The only one of these I can understand using are the first | |
117 * three. why do the rest of these exist? | |
118 * | |
119 * probably mojibake. | |
120 */ | |
105 const std::unordered_map<std::string, std::string> map = { | 121 const std::unordered_map<std::string, std::string> map = { |
106 /* The only one of these I can understand using are the first | |
107 * three. why do the rest of these exist? | |
108 * | |
109 * probably mojibake. | |
110 */ | |
111 {"<", "<" }, | 122 {"<", "<" }, |
112 {"&rt;", ">" }, | 123 {"&rt;", ">" }, |
113 {" ", "\xA0"}, | 124 {" ", "\xA0"}, |
114 {"&", "&" }, | 125 {"&", "&" }, |
115 {""", "\"" }, | 126 {""", "\"" }, |
122 {"®", "®" }, | 133 {"®", "®" }, |
123 {"’", "’" } // Haibane Renmei, AniList | 134 {"’", "’" } // Haibane Renmei, AniList |
124 }; | 135 }; |
125 | 136 |
126 for (const auto& item : map) | 137 for (const auto& item : map) |
127 string = ReplaceAll(string, item.first, item.second); | 138 ReplaceAll(string, item.first, item.second); |
128 return string; | |
129 } | 139 } |
130 | 140 |
131 /* removes stupid HTML stuff */ | 141 /* removes stupid HTML stuff */ |
132 std::string TextifySynopsis(const std::string& string) { | 142 void TextifySynopsis(std::string& string) { |
133 return ParseHtmlEntities(RemoveHtmlTags(SanitizeLineEndings(string))); | 143 SanitizeLineEndings(string); |
144 RemoveHtmlTags(string); | |
145 ParseHtmlEntities(string); | |
134 } | 146 } |
135 | 147 |
136 /* let Qt handle the heavy lifting of locale shit | 148 /* let Qt handle the heavy lifting of locale shit |
137 * I don't want to deal with | 149 * I don't want to deal with |
138 */ | 150 */ |