structstd.unicode.Utf8Iterator[src]

Fields

bytes: []const u8
i: usize

Functions

FunctionnextCodepointSlice[src]

pub fn nextCodepointSlice(it: *Utf8Iterator) ?[]const u8

Parameters

Source Code

Source code
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];
}

FunctionnextCodepoint[src]

pub fn nextCodepoint(it: *Utf8Iterator) ?u21

Parameters

Source Code

Source code
pub fn nextCodepoint(it: *Utf8Iterator) ?u21 {
    const slice = it.nextCodepointSlice() orelse return null;
    return utf8Decode(slice) catch unreachable;
}

Functionpeek[src]

pub fn peek(it: *Utf8Iterator, n: usize) []const u8

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.

Parameters

n: usize

Source Code

Source code
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];
}

Source Code

Source code
pub 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];
    }
}