Zig 0.17.0-dev (Split by item)
This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig library itself.
Zig › std/ › unicode.zig › utf8EncodeImpl
utf8EncodeImpl
unicode.utf8EncodeImpl
fn utf8EncodeImpl (c : u21 , out : []u8 , comptime surrogates : Surrogates ) !u3
File
Code
fn utf8EncodeImpl (c : u21 , out : []u8 , comptime surrogates : Surrogates ) !u3 {
const length = try utf8CodepointSequenceLength (c );
assert (out .len >= length );
switch (length ) {
// - Increasing the initial shift by 6 each time
// - Each time after the first shorten the shifted
// value to a max of 0b111111 (63)
1 => out [0 ] = @as (u8 , @intCast (c )),
2 => {
out [0 ] = @as (u8 , @intCast (0b11000000 | (c >> 6 )));
out [1 ] = @as (u8 , @intCast (0b10000000 | (c & 0b111111 )));
},
3 => {
if (surrogates == .cannot_encode_surrogate_half and isSurrogateCodepoint (c )) {
return error .Utf8CannotEncodeSurrogateHalf ;
}
out [0 ] = @as (u8 , @intCast (0b11100000 | (c >> 12 )));
out [1 ] = @as (u8 , @intCast (0b10000000 | ((c >> 6 ) & 0b111111 )));
out [2 ] = @as (u8 , @intCast (0b10000000 | (c & 0b111111 )));
},
4 => {
out [0 ] = @as (u8 , @intCast (0b11110000 | (c >> 18 )));
out [1 ] = @as (u8 , @intCast (0b10000000 | ((c >> 12 ) & 0b111111 )));
out [2 ] = @as (u8 , @intCast (0b10000000 | ((c >> 6 ) & 0b111111 )));
out [3 ] = @as (u8 , @intCast (0b10000000 | (c & 0b111111 )));
},
else => unreachable ,
}
return length ;
}