2 ** Copyright 2011 Double Precision, Inc.
3 ** See COPYING for distribution information.
7 #include "unicode_config.h"
10 #define BLOCK_SIZE 256
12 uint8_t unicode_tab_lookup(unicode_char ch
,
13 const size_t *unicode_indextab
,
14 size_t unicode_indextab_sizeof
,
15 const uint8_t (*unicode_rangetab
)[2],
16 const uint8_t *unicode_classtab
,
19 size_t cl
=ch
/ BLOCK_SIZE
;
21 if (cl
< unicode_indextab_sizeof
-1)
23 const size_t start_pos
=unicode_indextab
[cl
];
24 const uint8_t (*p
)[2]=unicode_rangetab
+ start_pos
;
25 size_t b
=0, e
=unicode_indextab
[cl
+1] - start_pos
;
26 uint8_t chmodcl
= ch
& (BLOCK_SIZE
-1);
32 if (chmodcl
>= p
[n
][0])
34 if (chmodcl
<= p
[n
][1])
36 uclass
=unicode_classtab
[start_pos
+n
];