From 42ddbe5f2fec82c696c3b1fb159f3cb025679d3d Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Fri, 12 Dec 2025 14:27:49 +0100 Subject: [PATCH] refactor: add egc_chunk_col_pos function --- src/renderer/vaxis/Plane.zig | 15 +++++++++++++++ src/tui/tui.zig | 4 ++++ 2 files changed, 19 insertions(+) diff --git a/src/renderer/vaxis/Plane.zig b/src/renderer/vaxis/Plane.zig index 70e6ea5..3bf9dab 100644 --- a/src/renderer/vaxis/Plane.zig +++ b/src/renderer/vaxis/Plane.zig @@ -482,6 +482,21 @@ pub fn egc_chunk_width(self: *const Plane, chunk_: []const u8, abs_col_: usize, return colcount; } +pub fn egc_chunk_col_pos(self: *const Plane, chunk_: []const u8, abs_col_: usize, tab_width: usize, col: usize) usize { + var abs_col = abs_col_; + var chunk = chunk_; + var colcount: usize = 0; + var cols: c_int = 0; + while (chunk.len > 0 and colcount < col) { + const bytes = self.egc_length(chunk, &cols, abs_col, tab_width); + colcount += @intCast(cols); + abs_col += @intCast(cols); + if (chunk.len < bytes) break; + chunk = chunk[bytes..]; + } + return chunk_.len - chunk.len; +} + pub fn egc_last(egcs: []const u8) []const u8 { var iter = vaxis.unicode.graphemeIterator(egcs); var last: []const u8 = egcs[0..0]; diff --git a/src/tui/tui.zig b/src/tui/tui.zig index 3f92333..0707d84 100644 --- a/src/tui/tui.zig +++ b/src/tui/tui.zig @@ -1749,6 +1749,10 @@ pub fn egc_chunk_width(chunk: []const u8, abs_col: usize, tab_width: usize) usiz return plane().egc_chunk_width(chunk, abs_col, tab_width); } +pub fn egc_chunk_col_pos(chunk: []const u8, abs_col: usize, tab_width: usize, col: usize) usize { + return plane().egc_chunk_col_pos(chunk, abs_col, tab_width, col); +} + pub fn egc_last(egcs: []const u8) []const u8 { return renderer.Plane.egc_last(egcs); }