diff --git a/src/core/Encoding.cc b/src/core/Encoding.cc index f8e1fb9..959b233 100644 --- a/src/core/Encoding.cc +++ b/src/core/Encoding.cc @@ -188,7 +188,48 @@ uint8_t Encoding::num_bytes_to_encode_code_point(uint32_t code_point, Type type) } break; 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; }