ascii-chat 0.6.0
Real-time terminal-based video chat with ASCII art conversion
Loading...
Searching...
No Matches
utf8.c
Go to the documentation of this file.
1
7#include "utf8.h"
8
9int utf8_decode(const uint8_t *s, uint32_t *codepoint) {
10 if (s[0] < 0x80) {
11 *codepoint = s[0];
12 return 1;
13 }
14 if ((s[0] & 0xE0) == 0xC0) {
15 // Validate continuation byte
16 if ((s[1] & 0xC0) != 0x80)
17 return -1;
18 *codepoint = (((uint32_t)(s[0] & 0x1F) << 6) | (uint32_t)(s[1] & 0x3F));
19 return 2;
20 } else if ((s[0] & 0xF0) == 0xE0) {
21 // Validate continuation bytes
22 if ((s[1] & 0xC0) != 0x80 || (s[2] & 0xC0) != 0x80)
23 return -1;
24 *codepoint = (((uint32_t)(s[0] & 0x0F) << 12) | ((uint32_t)(s[1] & 0x3F) << 6) | (uint32_t)(s[2] & 0x3F));
25 return 3;
26 } else if ((s[0] & 0xF8) == 0xF0) {
27 // Validate continuation bytes
28 if ((s[1] & 0xC0) != 0x80 || (s[2] & 0xC0) != 0x80 || (s[3] & 0xC0) != 0x80)
29 return -1;
30 *codepoint = (((uint32_t)(s[0] & 0x07) << 18) | ((uint32_t)(s[1] & 0x3F) << 12) | ((uint32_t)(s[2] & 0x3F) << 6) |
31 (uint32_t)(s[3] & 0x3F));
32 return 4;
33 }
34 return -1; // Invalid
35}
unsigned int uint32_t
Definition common.h:58
unsigned char uint8_t
Definition common.h:56
int utf8_decode(const uint8_t *s, uint32_t *codepoint)
Decode a UTF-8 sequence to a Unicode codepoint.
Definition utf8.c:9
🔤 UTF-8 Encoding and Decoding Utilities