This source file includes following definitions.
- lookup_withtable
- uc_is_general_category_withtable
- uc_general_category
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #include <config.h>
19
20
21 #include "unictype.h"
22
23
24 #include "categ_of.h"
25
26 static inline int
27 lookup_withtable (ucs4_t uc)
28 {
29 unsigned int index1 = uc >> category_header_0;
30 if (index1 < category_header_1)
31 {
32 int lookup1 = u_category.level1[index1];
33 if (lookup1 >= 0)
34 {
35 unsigned int index2 = (uc >> category_header_2) & category_header_3;
36 int lookup2 = u_category.level2[lookup1 + index2];
37 if (lookup2 >= 0)
38 {
39 unsigned int index3 = ((uc & category_header_4) + lookup2) * 5;
40
41 unsigned int lookup3 =
42 (((unsigned int) u_category.level3[index3>>4]
43 | ((unsigned int) u_category.level3[(index3>>4)+1] << 16))
44 >> (index3 % 16))
45 & 0x1f;
46
47 return lookup3;
48 }
49 }
50 return 29;
51 }
52 return -1;
53 }
54
55 bool
56 uc_is_general_category_withtable (ucs4_t uc, uint32_t bitmask)
57 {
58 int bit = lookup_withtable (uc);
59
60 if (bit >= 0)
61 return ((bitmask >> bit) & 1);
62 else
63 return false;
64 }
65
66 uc_general_category_t
67 uc_general_category (ucs4_t uc)
68 {
69 int bit = lookup_withtable (uc);
70 uc_general_category_t result;
71
72 if (bit >= 0)
73 {
74 result.bitmask = 1 << bit;
75 result.generic = 1;
76 result.lookup.lookup_fn = &uc_is_general_category_withtable;
77 return result;
78 }
79 else
80 return _UC_CATEGORY_NONE;
81 }