]>
git.proxmox.com Git - rustc.git/blob - src/vendor/utf8-ranges-0.1.3/src/char_utf8.rs
1 // Pulled from std::char until encode_utf8 stabilizes. ---AG
3 // UTF-8 ranges and tags for encoding characters
4 const TAG_CONT
: u8 = 0b1000_0000;
5 const TAG_TWO_B
: u8 = 0b1100_0000;
6 const TAG_THREE_B
: u8 = 0b1110_0000;
7 const TAG_FOUR_B
: u8 = 0b1111_0000;
8 const MAX_ONE_B
: u32 = 0x80;
9 const MAX_TWO_B
: u32 = 0x800;
10 const MAX_THREE_B
: u32 = 0x10000;
13 pub fn encode_utf8(character
: char, dst
: &mut [u8]) -> Option
<usize> {
14 let code
= character
as u32;
15 if code
< MAX_ONE_B
&& !dst
.is_empty() {
18 } else if code
< MAX_TWO_B
&& dst
.len() >= 2 {
19 dst
[0] = (code
>> 6 & 0x1F) as u8 | TAG_TWO_B
;
20 dst
[1] = (code
& 0x3F) as u8 | TAG_CONT
;
22 } else if code
< MAX_THREE_B
&& dst
.len() >= 3 {
23 dst
[0] = (code
>> 12 & 0x0F) as u8 | TAG_THREE_B
;
24 dst
[1] = (code
>> 6 & 0x3F) as u8 | TAG_CONT
;
25 dst
[2] = (code
& 0x3F) as u8 | TAG_CONT
;
27 } else if dst
.len() >= 4 {
28 dst
[0] = (code
>> 18 & 0x07) as u8 | TAG_FOUR_B
;
29 dst
[1] = (code
>> 12 & 0x3F) as u8 | TAG_CONT
;
30 dst
[2] = (code
>> 6 & 0x3F) as u8 | TAG_CONT
;
31 dst
[3] = (code
& 0x3F) as u8 | TAG_CONT
;