aboutsummaryrefslogtreecommitdiff
path: root/sys/libutf/internal.h
blob: 971997721b0b87e8d9d980baf412c7b93785e920 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#pragma once

#include <u.h>
#include <base.h>
#include <libutf.h>

/*
 * NOTE: we use the preprocessor to ensure we have unsigned constants.
 * UTF-8 code:
 * 1 byte:
 * 0xxxxxxx
 * 2 byte:
 * 110xxxxx 10xxxxxx
 * 3 byte:
 * 1110xxxx 10xxxxxx 10xxxxxx
 * 4 byte:
 * 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
 */

#define Tx     0x80u // 0b10000000 transfer header
#define TMask  0x3Fu // 0b00111111 transfer mask

#define TByte1 0xC0u // 0b11000000
#define TByte2 0xE0u // 0b11100000
#define TByte3 0xF0u // 0b11110000
#define TByte4 0xF8u // 0b11111000

#define RuneMask  0x1FFFFFu

#define Rune1Byte 0x000080u  // 1 << 8   (1 byte)
#define Rune2Byte 0x001000u  // 1 << 12  (2 bytes)
#define Rune3Byte 0x020000u  // 1 << 17  (3 bytes)
#define Rune4Byte 0x400000u  // 1 << 22  (4 bytes)


/* UTF-16 nonsense */
#define RuneSurrogateMin 0x0D8000
#define RuneSurrogateMax 0x0D8FFF