a modern tui library written in zig

fix: pass tests

authored by Rylee Lyman and committed by rockorager.dev f7cbd42e 74fb1307

+29 -10
+29 -10
src/Window.zig
··· 328 .word => { 329 var col: usize = opts.col_offset; 330 var overflow: bool = false; 331 for (segments) |segment| { 332 var start: usize = 0; 333 var tokenizer = std.mem.tokenizeAny(u8, segment.text, "\r\n"); 334 while (tokenizer.peek() != null) { 335 const returns = segment.text[start..tokenizer.index]; 336 const line = tokenizer.next().?; 337 start = tokenizer.index; ··· 351 const word = iter.next().?; 352 ws_start = iter.index; 353 var j: usize = 0; 354 - while (j < whitespace.len) : (j += 1) { 355 - if (opts.commit) self.writeCell(col, row, .{ 356 - .char = .{ 357 - .grapheme = " ", 358 - .width = 1, 359 - }, 360 - .style = segment.style, 361 - .link = segment.link, 362 - }); 363 - col += 1; 364 } 365 if (col >= self.width) { 366 col = 0; 367 row += 1; 368 } 369 const width = self.gwidth(word); 370 if (width + col > self.width and width < self.width) { ··· 378 379 var grapheme_iterator = self.screen.unicode.graphemeIterator(word); 380 while (grapheme_iterator.next()) |grapheme| { 381 const s = grapheme.bytes(word); 382 const w = self.gwidth(s); 383 if (opts.commit) self.writeCell(col, row, .{ ··· 392 if (col >= self.width) { 393 row += 1; 394 col = 0; 395 } 396 } 397 } 398 } 399 }
··· 328 .word => { 329 var col: usize = opts.col_offset; 330 var overflow: bool = false; 331 + var soft_wrapped = false; 332 for (segments) |segment| { 333 var start: usize = 0; 334 var tokenizer = std.mem.tokenizeAny(u8, segment.text, "\r\n"); 335 while (tokenizer.peek() != null) { 336 + soft_wrapped = false; 337 const returns = segment.text[start..tokenizer.index]; 338 const line = tokenizer.next().?; 339 start = tokenizer.index; ··· 353 const word = iter.next().?; 354 ws_start = iter.index; 355 var j: usize = 0; 356 + if (soft_wrapped) soft_wrapped = false else { 357 + while (j < whitespace.len) : (j += 1) { 358 + if (opts.commit) self.writeCell(col, row, .{ 359 + .char = .{ 360 + .grapheme = " ", 361 + .width = 1, 362 + }, 363 + .style = segment.style, 364 + .link = segment.link, 365 + }); 366 + col += 1; 367 + } 368 } 369 if (col >= self.width) { 370 col = 0; 371 row += 1; 372 + soft_wrapped = true; 373 } 374 const width = self.gwidth(word); 375 if (width + col > self.width and width < self.width) { ··· 383 384 var grapheme_iterator = self.screen.unicode.graphemeIterator(word); 385 while (grapheme_iterator.next()) |grapheme| { 386 + soft_wrapped = false; 387 const s = grapheme.bytes(word); 388 const w = self.gwidth(s); 389 if (opts.commit) self.writeCell(col, row, .{ ··· 398 if (col >= self.width) { 399 row += 1; 400 col = 0; 401 + soft_wrapped = true; 402 } 403 } 404 + } 405 + } else { 406 + const returns = segment.text[start..tokenizer.index]; 407 + start = tokenizer.index; 408 + var i: usize = 0; 409 + while (i < returns.len) : (i += 1) { 410 + const b = returns[i]; 411 + if (b == '\r' and i + 1 < returns.len and returns[i + 1] == '\n') { 412 + i += 1; 413 + } 414 + row += 1; 415 + col = 0; 416 } 417 } 418 }