pub const Utf8Iterator = struct bytes: []const u8i: usizepub fn nextCodepointSlice(it: *Utf8Iterator) ?[]const u8pub fn nextCodepoint(it: *Utf8Iterator) ?u21pub fn peek(it: *Utf8Iterator, n: usize) []const u8Look ahead at the next n codepoints without advancing the iterator. If fewer than n codepoints are available, then return the remainder of the string.
pub fn peekCodepoint(it: *Utf8Iterator) ?u21Look ahead at the next codepoint without advancing the iterator. If no codepoints exist, then returns null.
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437pub const Utf8Iterator = struct {
bytes: []const u8,
i: usize,
pub fn nextCodepointSlice(it: *Utf8Iterator) ?[]const u8 {
if (it.i >= it.bytes.len) {
return null;
}
const cp_len = utf8ByteSequenceLength(it.bytes[it.i]) catch unreachable;
it.i += cp_len;
return it.bytes[it.i - cp_len .. it.i];
}
pub fn nextCodepoint(it: *Utf8Iterator) ?u21 {
const slice = it.nextCodepointSlice() orelse return null;
return utf8Decode(slice) catch unreachable;
}
/// Look ahead at the next n codepoints without advancing the iterator.
/// If fewer than n codepoints are available, then return the remainder of the string.
pub fn peek(it: *Utf8Iterator, n: usize) []const u8 {
const original_i = it.i;
defer it.i = original_i;
var end_ix = original_i;
var found: usize = 0;
while (found < n) : (found += 1) {
const next_codepoint = it.nextCodepointSlice() orelse return it.bytes[original_i..];
end_ix += next_codepoint.len;
}
return it.bytes[original_i..end_ix];
}
/// Look ahead at the next codepoint without advancing the iterator.
/// If no codepoints exist, then returns null.
pub fn peekCodepoint(it: *Utf8Iterator) ?u21 {
const original_i = it.i;
defer it.i = original_i;
return it.nextCodepoint();
}
}