aboutsummaryrefslogtreecommitdiff
path: root/sys/libunicode/internal.h
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,
};