add Encoding::encode()
This commit is contained in:
parent
fdabf4432a
commit
ac439d30bc
@ -188,7 +188,48 @@ uint8_t Encoding::num_bytes_to_encode_code_point(uint32_t code_point, Type type)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CP_1252:
|
case CP_1252:
|
||||||
return 1u;
|
if (code_point <= 0xFFu)
|
||||||
|
{
|
||||||
|
return 1u;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 0u;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0u;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t Encoding::encode(uint32_t code_point, Type type, uint8_t * buffer)
|
||||||
|
{
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case UTF_8:
|
||||||
|
{
|
||||||
|
uint8_t size = num_bytes_to_encode_code_point(code_point, type);
|
||||||
|
if (size == 1u)
|
||||||
|
{
|
||||||
|
*buffer = code_point;
|
||||||
|
}
|
||||||
|
else if (size > 1u)
|
||||||
|
{
|
||||||
|
*buffer = (0xFFu << (8u - size)) | (code_point >> (6u * (size - 1u)));
|
||||||
|
for (uint8_t i = 0u, end = size - 1u; i < end; i++)
|
||||||
|
{
|
||||||
|
buffer[end - i] = 0x80u | (code_point >> (6u * i) & 0x3Fu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case CP_1252:
|
||||||
|
if (code_point <= 0xFFu)
|
||||||
|
{
|
||||||
|
*buffer = code_point;
|
||||||
|
return 1u;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user