@@ 36,13 36,17 @@ fn writeMatch(writer: anytype, line: []const u8, needle: []const u8) !void {
const category = col_it.next() orelse return error.MissingCategory;
const cp = try std.fmt.parseInt(u21, code, 16);
const len = try std.unicode.utf8Encode(cp, &utf8_char);
- try writer.print("{s} code: 0x{x:<6} name: {s}\x1b[1m{s}\x1b[0m{s} category: {s}\n", .{
- utf8_char[0..len],
- cp,
+ var buf: [1024]u8 = undefined;
+ const fancy_name = try std.fmt.bufPrint(&buf, "{s}\x1b[1m{s}\x1b[0m{s}", .{
name[0..idx],
name[idx .. idx + needle.len],
name[idx + needle.len ..],
+ });
+ try writer.print("0x{x:<6} {s:<40} {s:<4} {s}\n", .{
+ cp,
+ fancy_name,
category,
+ utf8_char[0..len],
});
}
}
@@ 60,6 64,9 @@ test "find poo" {
var stream = std.io.fixedBufferStream(&out_buf);
try writeMatches(stream.writer(), "PILE");
var it = (try std.unicode.Utf8View.init(stream.getWritten())).iterator();
- const cp = it.nextCodepoint() orelse unreachable;
- try std.testing.expectEqual(@as(u21, '💩'), cp);
+ var found = false;
+ while (it.nextCodepoint()) |cp| {
+ if (cp == '💩') found = true;
+ }
+ try std.testing.expect(found);
}