blob: 31ed2aebdd0ff5ba06c53466b6a8c53f973d36de (
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
|
#pragma once
#include <u.h>
#include <base.h>
#include <libunicode.h>
/* UTF-8 code
* 1 byte:
* 0xxxxxxx
* 2 byte:
* 110xxxxx 10xxxxxx
* 3 byte:
* 1110xxxx 10xxxxxx 10xxxxxx
* 4 byte:
* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
*/
#define Bit(i) (7-(i))
/* 0's preceded by i 1's e.g. T(Bit(2)) is 1100 0000 */
#define Tbyte(i) (((1 << (Bit(i)+1))-1) ^ 0xFF)
/* 0000 0000 0000 0111 1111 1111 */
#define RuneX(i) ((1 << (Bit(i) + ((i)-1)*Bitx))-1)
enum
{
Bitx = Bit(1),
Tx = Tbyte(1),
Rune1 = (1 << (Bit(0)+0*Bitx)) - 1,
Maskx = (1 << Bitx) - 1, /* 0011 1111 */
Testx = Maskx ^ 0xff, /* 1100 0000 */
SurrogateMin = 0xD800,
SurrogateMax = 0xDFFF,
Bad = RuneErr,
};
|