From cbbad1f5666950ab9aa0751aeee73403b1c2cd83 Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Sat, 31 Aug 2024 07:02:07 +0300 Subject: replace trimming with just checking if the string is whitespace --- src/main.zig | 14 +++++++------- src/utils.zig | 27 +++++++-------------------- 2 files changed, 14 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/main.zig b/src/main.zig index 2e33cfc..b164284 100644 --- a/src/main.zig +++ b/src/main.zig @@ -199,10 +199,10 @@ fn onTextMessage(bot: *Bot, msg: types.Message, text: []const u8) !void { }, }); } else if (std.ascii.startsWithIgnoreCase(text, "big ")) { - const trimmed = try utils.trim(text[4..]); - const cd = try utils.getCD(); - if (trimmed.len > 0) { - const uppercased = try cd.toUpperStr(bot.allocator, trimmed); + const the_text = text[4..]; + if (!try utils.isTgWhitespaceStr(the_text)) { + const cd = try utils.getCD(); + const uppercased = try cd.toUpperStr(bot.allocator, the_text); defer bot.allocator.free(uppercased); var output = ArrayList(u8).init(bot.allocator); @@ -251,11 +251,11 @@ fn onTextMessage(bot: *Bot, msg: types.Message, text: []const u8) !void { }, }); } else if (std.ascii.startsWithIgnoreCase(text, "say ")) { - const trimmed = try utils.trim(text[4..]); - if (trimmed.len > 0) { + const the_text = text[4..]; + if (!try utils.isTgWhitespaceStr(the_text)) { try bot.sendMessage_(.{ .chat_id = msg.chat.id, - .text = trimmed, + .text = the_text, .reply_parameters = .{ .message_id = msg.message_id, .chat_id = msg.chat.id, diff --git a/src/utils.zig b/src/utils.zig index 631e464..b739f6f 100644 --- a/src/utils.zig +++ b/src/utils.zig @@ -46,34 +46,21 @@ pub inline fn isNull(value: anytype) bool { }; } -pub fn trim(str: []const u8) ![]const u8 { +pub fn isTgWhitespaceStr(str: []const u8) !bool { const view = try Utf8View.init(str); const gcd = try getGCD(); var it = view.iterator(); - var idx: usize = 0; - const first = while (it.nextCodepoint()) |cp| { - if (!isTrimmable(gcd, cp)) { - break idx; - } - idx = it.i; - } else { - return ""; - }; - - idx = it.i; - - var last = first; while (it.nextCodepoint()) |cp| { - if (!isTrimmable(gcd, cp)) { - last = idx + (std.unicode.utf8CodepointSequenceLength(cp) catch unreachable) - 1; + if (!isTgWhitespace(gcd, cp)) { + return false; } - idx = it.i; } - return str[first .. last + 1]; + return true; } -inline fn isTrimmable(gcd: GenCatData, cp: u21) bool { - return gcd.isSeparator(cp) or gcd.isControl(cp); +inline fn isTgWhitespace(gcd: GenCatData, cp: u21) bool { + return gcd.isSeparator(cp) or gcd.isControl(cp) or cp == 0x2800 // BRAILLE PATTERN BLANK, telegram treats messages with just this as invalid messages + ; } -- cgit v1.2.3