apro:rbs.

This commit is contained in:
taynpg 2025-01-14 12:14:43 +08:00
parent a1fb6ec779
commit 3d369e81c2
2 changed files with 11 additions and 10 deletions

View File

@ -166,19 +166,16 @@ ofString CCodec::rbs(const ofString& str)
std::vector<char32_t> processed_chars; std::vector<char32_t> processed_chars;
bool last_was_whitespace = false; bool last_was_whitespace = false;
for (size_t i = 0; i < unicode_chars.size(); ++i) { for (char32_t current : unicode_chars) {
char32_t current = unicode_chars[i];
bool is_whitespace = (current == U' ' || current == U'\t' || current == U'\n' || current == U'\r'); bool is_whitespace = (current == U' ' || current == U'\t' || current == U'\n' || current == U'\r');
if (is_whitespace) { if (is_whitespace) {
bool near_non_ascii = last_was_whitespace = true;
(i > 0 && unicode_chars[i - 1] > 0x7F) || (i + 1 < unicode_chars.size() && unicode_chars[i + 1] > 0x7F);
if (near_non_ascii || last_was_whitespace) {
continue; continue;
} }
current = U' '; if (last_was_whitespace) {
last_was_whitespace = false;
} }
last_was_whitespace = is_whitespace;
processed_chars.push_back(current); processed_chars.push_back(current);
} }

View File

@ -25,6 +25,10 @@ void testC()
std::string source(u8"这是 一 个测试 用例。 "); std::string source(u8"这是 一 个测试 用例。 ");
std::string expect(u8"这是一个测试用例。"); std::string expect(u8"这是一个测试用例。");
assert(CCodec::rbs(source) == expect); assert(CCodec::rbs(source) == expect);
std::string source1(u8"1. 氣 壓 不 足 2. I/O 輸出未 設 定3.氣壓缸異常");
std::string expect1(u8"1.氣壓不足2.I/O輸出未設定3.氣壓缸異常");
assert(CCodec::rbs(source1) == expect1);
} }
int main() int main()