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 › Utf16LeIterator
Utf16LeIterator
unicode.Utf16LeIterator
pub const Utf16LeIterator = struct
File
Code
pub const Utf16LeIterator = struct {
bytes : []const u8 ,
i : usize ,
pub fn init (s : []const u16 ) Utf16LeIterator {
return Utf16LeIterator {
.bytes = mem .sliceAsBytes (s ),
.i = 0 ,
};
}
pub const NextCodepointError = error { DanglingSurrogateHalf , ExpectedSecondSurrogateHalf , UnexpectedSecondSurrogateHalf };
pub fn nextCodepoint (it : *Utf16LeIterator ) NextCodepointError !?u21 {
assert (it .i <= it .bytes .len );
if (it .i == it .bytes .len ) return null ;
var code_units : [2 ]u16 = undefined ;
code_units [0 ] = mem .readInt (u16 , it .bytes [it .i ..][0 ..2 ], .little );
it .i += 2 ;
if (utf16IsHighSurrogate (code_units [0 ])) {
if (it .i >= it .bytes .len ) return error .DanglingSurrogateHalf ;
code_units [1 ] = mem .readInt (u16 , it .bytes [it .i ..][0 ..2 ], .little );
const codepoint = try utf16DecodeSurrogatePair (&code_units );
it .i += 2 ;
return codepoint ;
} else if (utf16IsLowSurrogate (code_units [0 ])) {
return error .UnexpectedSecondSurrogateHalf ;
} else {
return code_units [0 ];
}
}
}