1 /* == Start of generated table == */
2 /*
3 * The following table is generated by running:
4 *
5 * ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt
6 *
7 * on files with these headers:
8 *
9 * # ArabicShaping-9.0.0.txt
10 * # Date: 2016-02-24, 22:25:00 GMT [RP]
11 * # Blocks-9.0.0.txt
12 * # Date: 2016-02-05, 23:48:00 GMT [KW]
13 * UnicodeData.txt does not have a header.
14 */
15
16 #ifndef HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH
17 #define HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH
18
19
20 #define X JOINING_TYPE_X
21 #define R JOINING_TYPE_R
22 #define T JOINING_TYPE_T
23 #define U JOINING_TYPE_U
24 #define A JOINING_GROUP_ALAPH
25 #define DR JOINING_GROUP_DALATH_RISH
26 #define L JOINING_TYPE_L
27 #define C JOINING_TYPE_C
28 #define D JOINING_TYPE_D
29
30 static const uint8_t joining_table[] =
31 {
32
55 /* 0760 */ D,D,D,D,D,D,D,D,D,D,D,R,R,D,D,D,D,R,D,R,R,D,D,D,R,R,D,D,D,D,D,D,
56
57 /* FILLER */
58
59 /* 0780 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
60 /* 07A0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
61
62 /* NKo */
63
64 /* 07C0 */ X,X,X,X,X,X,X,X,X,X,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
65 /* 07E0 */ D,D,D,D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,C,X,X,X,X,X,
66
67 /* FILLER */
68
69 /* 0800 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
70 /* 0820 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
71
72 /* Mandaic */
73
74 /* 0840 */ R,D,D,D,D,D,R,R,D,R,D,D,D,D,D,D,D,D,D,D,R,D,U,U,U,X,X,X,X,X,X,X,
75 /* 0860 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
76 /* 0880 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
77
78 /* Arabic Extended-A */
79
80 /* 08A0 */ D,D,D,D,D,D,D,D,D,D,R,R,R,U,R,D,D,R,R,D,D,X,D,D,D,R,D,D,D,D,X,X,
81 /* 08C0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
82 /* 08E0 */ X,X,U,
83
84 #define joining_offset_0x1806u 739
85
86 /* Mongolian */
87
88 /* 1800 */ U,D,X,X,C,X,X,X,U,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
89 /* 1820 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
90 /* 1840 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
91 /* 1860 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,
92 /* 1880 */ U,U,U,U,U,T,T,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
93 /* 18A0 */ D,D,D,D,D,D,D,D,D,X,D,
94
95 #define joining_offset_0x200cu 904
113 /* Manichaean */
114
115 /* 10AC0 */ D,D,D,D,D,R,U,R,U,R,R,U,U,L,R,R,R,R,R,D,D,D,D,L,D,D,D,D,D,R,D,D,
116 /* 10AE0 */ D,R,U,U,R,X,X,X,X,X,X,D,D,D,D,R,
117
118 #define joining_offset_0x10b80u 1098
119
120 /* Psalter Pahlavi */
121
122 /* 10B80 */ D,R,D,R,R,R,D,D,D,R,D,D,R,D,R,R,D,R,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
123 /* 10BA0 */ X,X,X,X,X,X,X,X,X,R,R,R,R,D,D,U,
124
125 #define joining_offset_0x1e900u 1146
126
127 /* Adlam */
128
129 /* 1E900 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
130 /* 1E920 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
131 /* 1E940 */ D,D,D,D,
132
133 }; /* Table items: 1214; occupancy: 54% */
134
135
136 static unsigned int
137 joining_type (hb_codepoint_t u)
138 {
139 switch (u >> 12)
140 {
141 case 0x0u:
142 if (hb_in_range (u, 0x0600u, 0x08E2u)) return joining_table[u - 0x0600u + joining_offset_0x0600u];
143 break;
144
145 case 0x1u:
146 if (hb_in_range (u, 0x1806u, 0x18AAu)) return joining_table[u - 0x1806u + joining_offset_0x1806u];
147 break;
148
149 case 0x2u:
150 if (hb_in_range (u, 0x200Cu, 0x2069u)) return joining_table[u - 0x200Cu + joining_offset_0x200cu];
151 break;
152
153 case 0xAu:
154 if (hb_in_range (u, 0xA840u, 0xA873u)) return joining_table[u - 0xA840u + joining_offset_0xa840u];
155 break;
156
157 case 0x10u:
158 if (hb_in_range (u, 0x10AC0u, 0x10AEFu)) return joining_table[u - 0x10AC0u + joining_offset_0x10ac0u];
159 if (hb_in_range (u, 0x10B80u, 0x10BAFu)) return joining_table[u - 0x10B80u + joining_offset_0x10b80u];
160 break;
161
162 case 0x1Eu:
163 if (hb_in_range (u, 0x1E900u, 0x1E943u)) return joining_table[u - 0x1E900u + joining_offset_0x1e900u];
164 break;
165
166 default:
167 break;
168 }
169 return X;
170 }
171
172 #undef X
173 #undef R
174 #undef T
175 #undef U
176 #undef A
177 #undef DR
178 #undef L
179 #undef C
180 #undef D
181
182
183 static const uint16_t shaping_table[][4] =
|
1 /* == Start of generated table == */
2 /*
3 * The following table is generated by running:
4 *
5 * ./gen-arabic-table.py ArabicShaping.txt UnicodeData.txt Blocks.txt
6 *
7 * on files with these headers:
8 *
9 * # ArabicShaping-10.0.0.txt
10 * # Date: 2017-02-16, 00:00:00 GMT [RP, KW]
11 * # Blocks-10.0.0.txt
12 * # Date: 2017-04-12, 17:30:00 GMT [KW]
13 * UnicodeData.txt does not have a header.
14 */
15
16 #ifndef HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH
17 #define HB_OT_SHAPE_COMPLEX_ARABIC_TABLE_HH
18
19
20 #define X JOINING_TYPE_X
21 #define R JOINING_TYPE_R
22 #define T JOINING_TYPE_T
23 #define U JOINING_TYPE_U
24 #define A JOINING_GROUP_ALAPH
25 #define DR JOINING_GROUP_DALATH_RISH
26 #define L JOINING_TYPE_L
27 #define C JOINING_TYPE_C
28 #define D JOINING_TYPE_D
29
30 static const uint8_t joining_table[] =
31 {
32
55 /* 0760 */ D,D,D,D,D,D,D,D,D,D,D,R,R,D,D,D,D,R,D,R,R,D,D,D,R,R,D,D,D,D,D,D,
56
57 /* FILLER */
58
59 /* 0780 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
60 /* 07A0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
61
62 /* NKo */
63
64 /* 07C0 */ X,X,X,X,X,X,X,X,X,X,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
65 /* 07E0 */ D,D,D,D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,C,X,X,X,X,X,
66
67 /* FILLER */
68
69 /* 0800 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
70 /* 0820 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
71
72 /* Mandaic */
73
74 /* 0840 */ R,D,D,D,D,D,R,R,D,R,D,D,D,D,D,D,D,D,D,D,R,D,U,U,U,X,X,X,X,X,X,X,
75
76 /* Syriac Supplement */
77
78 /* 0860 */ D,U,D,D,D,D,U,R,D,R,R,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
79 /* 0880 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
80
81 /* Arabic Extended-A */
82
83 /* 08A0 */ D,D,D,D,D,D,D,D,D,D,R,R,R,U,R,D,D,R,R,D,D,X,D,D,D,R,D,D,D,D,X,X,
84 /* 08C0 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
85 /* 08E0 */ X,X,U,
86
87 #define joining_offset_0x1806u 739
88
89 /* Mongolian */
90
91 /* 1800 */ U,D,X,X,C,X,X,X,U,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
92 /* 1820 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
93 /* 1840 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
94 /* 1860 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,
95 /* 1880 */ U,U,U,U,U,T,T,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
96 /* 18A0 */ D,D,D,D,D,D,D,D,D,X,D,
97
98 #define joining_offset_0x200cu 904
116 /* Manichaean */
117
118 /* 10AC0 */ D,D,D,D,D,R,U,R,U,R,R,U,U,L,R,R,R,R,R,D,D,D,D,L,D,D,D,D,D,R,D,D,
119 /* 10AE0 */ D,R,U,U,R,X,X,X,X,X,X,D,D,D,D,R,
120
121 #define joining_offset_0x10b80u 1098
122
123 /* Psalter Pahlavi */
124
125 /* 10B80 */ D,R,D,R,R,R,D,D,D,R,D,D,R,D,R,R,D,R,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
126 /* 10BA0 */ X,X,X,X,X,X,X,X,X,R,R,R,R,D,D,U,
127
128 #define joining_offset_0x1e900u 1146
129
130 /* Adlam */
131
132 /* 1E900 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
133 /* 1E920 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
134 /* 1E940 */ D,D,D,D,
135
136 }; /* Table items: 1214; occupancy: 55% */
137
138
139 static unsigned int
140 joining_type (hb_codepoint_t u)
141 {
142 switch (u >> 12)
143 {
144 case 0x0u:
145 if (hb_in_range<hb_codepoint_t> (u, 0x0600u, 0x08E2u)) return joining_table[u - 0x0600u + joining_offset_0x0600u];
146 break;
147
148 case 0x1u:
149 if (hb_in_range<hb_codepoint_t> (u, 0x1806u, 0x18AAu)) return joining_table[u - 0x1806u + joining_offset_0x1806u];
150 break;
151
152 case 0x2u:
153 if (hb_in_range<hb_codepoint_t> (u, 0x200Cu, 0x2069u)) return joining_table[u - 0x200Cu + joining_offset_0x200cu];
154 break;
155
156 case 0xAu:
157 if (hb_in_range<hb_codepoint_t> (u, 0xA840u, 0xA873u)) return joining_table[u - 0xA840u + joining_offset_0xa840u];
158 break;
159
160 case 0x10u:
161 if (hb_in_range<hb_codepoint_t> (u, 0x10AC0u, 0x10AEFu)) return joining_table[u - 0x10AC0u + joining_offset_0x10ac0u];
162 if (hb_in_range<hb_codepoint_t> (u, 0x10B80u, 0x10BAFu)) return joining_table[u - 0x10B80u + joining_offset_0x10b80u];
163 break;
164
165 case 0x1Eu:
166 if (hb_in_range<hb_codepoint_t> (u, 0x1E900u, 0x1E943u)) return joining_table[u - 0x1E900u + joining_offset_0x1e900u];
167 break;
168
169 default:
170 break;
171 }
172 return X;
173 }
174
175 #undef X
176 #undef R
177 #undef T
178 #undef U
179 #undef A
180 #undef DR
181 #undef L
182 #undef C
183 #undef D
184
185
186 static const uint16_t shaping_table[][4] =
|