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 › Wtf16LeIterator
Wtf16LeIterator
unicode.Wtf16LeIterator
pub const Wtf16LeIterator = struct
File
Code
pub const Wtf16LeIterator = struct {
bytes : []const u8 ,
i : usize ,
pub fn init (s : []const u16 ) Wtf16LeIterator {
return Wtf16LeIterator {
.bytes = mem .sliceAsBytes (s ),
.i = 0 ,
};
}
pub fn nextCodepoint (it : *Wtf16LeIterator ) ?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 ;
surrogate_pair : {
if (utf16IsHighSurrogate (code_units [0 ])) {
if (it .i >= it .bytes .len ) break :surrogate_pair ;
code_units [1 ] = mem .readInt (u16 , it .bytes [it .i ..][0 ..2 ], .little );
const codepoint = utf16DecodeSurrogatePair (&code_units ) catch break :surrogate_pair ;
it .i += 2 ;
return codepoint ;
}
}
return code_units [0 ];
}
}