ar_reshaper/
ligatures.rs

1//! Ligatures
2// Each ligature is of the format:
3//
4//   ('<key>', <replacement>)
5//
6// Where <key> is used in the configuration and <replacement> is of the format:
7//
8//   ('<match>', ('<isolated>', '<initial>', '<medial>', '<final>'))
9//
10// Where <match> is the string to replace, and <isolated> is the replacement in
11// case <match> was in isolated form, <initial> is the replacement in case
12// <match> was in initial form, <medial> is the replacement in case <match> was
13// in medial form, and <final> is the replacement in case <match> was in final
14// form. If no replacement is specified for a form, then no replacement of
15// <match> will occur.
16//
17// Order here is important, it should be:
18//   1. Sentences
19//   2. Words
20//   3. Letters
21// This way we make sure we replace the longest ligatures first
22
23use core::ops::Range;
24
25use crate::form::Forms;
26
27pub(crate) const SENTENCES_LIGATURES_RANGE: Range<usize> = 0..3;
28pub(crate) const WORDS_LIGATURES_RANGE: Range<usize> = 3..12;
29pub(crate) const LETTERS_LIGATURES_RANGE: Range<usize> = 12..286;
30
31macro_rules! create_ligatures {
32    ($ligatures_size:literal, $($id:ident => ($words:expr, [$isolated:literal, $initial:literal, $medial:literal, $final:literal]),)*) => {
33        /// All the Ligature names.
34        #[allow(non_camel_case_types)]
35        #[derive(Copy, Clone, Eq, PartialEq, Hash)]
36        #[repr(usize)]
37        pub enum LigatureNames {
38            $($id),*
39        }
40
41
42        /// All the supported ligatures
43        pub const LIGATURES: [(&[&'static str], Forms); $ligatures_size] = [
44            $(($words, Forms::new($isolated, $initial, $medial, $final))),*
45        ];
46
47    };
48}
49
50create_ligatures! [
51    286,
52
53    ARABIC_LIGATURE_BISMILLAH_AR_RAHMAN_AR_RAHEEM => (
54        &[concat!(
55            "\u{0628}\u{0633}\u{0645}\u{0020}",
56            "\u{0627}\u{0644}\u{0644}\u{0647}\u{0020}",
57            "\u{0627}\u{0644}\u{0631}\u{062D}\u{0645}\u{0646}\u{0020}",
58            "\u{0627}\u{0644}\u{0631}\u{062D}\u{064A}\u{0645}",
59        )],
60        ['\u{FDFD}', '\0', '\0', '\0']
61    ),
62    ARABIC_LIGATURE_JALLAJALALOUHOU => (
63        &["\u{062C}\u{0644}\u{0020}\u{062C}\u{0644}\u{0627}\u{0644}\u{0647}"],
64        ['\u{FDFB}', '\0', '\0', '\0']
65    ),
66    ARABIC_LIGATURE_SALLALLAHOU_ALAYHE_WASALLAM => (
67        &[concat!(
68            "\u{0635}\u{0644}\u{0649}\u{0020}",
69            "\u{0627}\u{0644}\u{0644}\u{0647}\u{0020}",
70            "\u{0639}\u{0644}\u{064A}\u{0647}\u{0020}",
71            "\u{0648}\u{0633}\u{0644}\u{0645}",
72        )],
73        ['\u{FDFA}', '\0', '\0', '\0']
74    ),
75
76    ARABIC_LIGATURE_ALLAH => (
77        &["\u{0627}\u{0644}\u{0644}\u{0647}"],
78        ['\u{FDF2}', '\0', '\0', '\0']
79    ),
80    ARABIC_LIGATURE_AKBAR => (
81        &["\u{0623}\u{0643}\u{0628}\u{0631}"],
82        ['\u{FDF3}', '\0', '\0', '\0']
83    ),
84    ARABIC_LIGATURE_ALAYHE => (
85        &["\u{0639}\u{0644}\u{064A}\u{0647}"],
86        ['\u{FDF7}', '\0', '\0', '\0']
87    ),
88    ARABIC_LIGATURE_MOHAMMAD => (
89        &["\u{0645}\u{062D}\u{0645}\u{062F}"],
90        ['\u{FDF4}', '\0', '\0', '\0']
91    ),
92    ARABIC_LIGATURE_RASOUL => (
93        &["\u{0631}\u{0633}\u{0648}\u{0644}"],
94        ['\u{FDF6}', '\0', '\0', '\0']
95    ),
96    ARABIC_LIGATURE_SALAM => (
97        &["\u{0635}\u{0644}\u{0639}\u{0645}"],
98        ['\u{FDF5}', '\0', '\0', '\0']
99    ),
100    ARABIC_LIGATURE_SALLA => (
101        &["\u{0635}\u{0644}\u{0649}"],
102        ['\u{FDF9}', '\0', '\0', '\0']
103    ),
104    ARABIC_LIGATURE_WASALLAM => (
105        &["\u{0648}\u{0633}\u{0644}\u{0645}"],
106        ['\u{FDF8}', '\0', '\0', '\0']
107    ),
108    RIAL_SIGN => (
109        &["\u{0631}[\u{06CC}\u{064A}]\u{0627}\u{0644}"],
110        ['\u{FDFC}', '\0', '\0', '\0']
111    ),
112
113    ARABIC_LIGATURE_AIN_WITH_ALEF_MAKSURA => (
114        &["\u{0639}\u{0649}"],
115        ['\u{FCF7}', '\0', '\0', '\u{FD13}']
116    ),
117    ARABIC_LIGATURE_AIN_WITH_JEEM => (
118        &["\u{0639}\u{062C}"],
119        ['\u{FC29}', '\u{FCBA}', '\0', '\0']
120    ),
121    ARABIC_LIGATURE_AIN_WITH_JEEM_WITH_MEEM => (
122        &["\u{0639}\u{062C}\u{0645}"],
123        ['\0', '\u{FDC4}', '\0', '\u{FD75}']
124    ),
125    ARABIC_LIGATURE_AIN_WITH_MEEM => (
126        &["\u{0639}\u{0645}"],
127        ['\u{FC2A}', '\u{FCBB}', '\0', '\0']
128    ),
129    ARABIC_LIGATURE_AIN_WITH_MEEM_WITH_ALEF_MAKSURA => (
130        &["\u{0639}\u{0645}\u{0649}"],
131        ['\0', '\0', '\0', '\u{FD78}']
132    ),
133    ARABIC_LIGATURE_AIN_WITH_MEEM_WITH_MEEM => (
134        &["\u{0639}\u{0645}\u{0645}"],
135        ['\0', '\u{FD77}', '\0', '\u{FD76}']
136    ),
137    ARABIC_LIGATURE_AIN_WITH_MEEM_WITH_YEH => (
138        &["\u{0639}\u{0645}\u{064A}"],
139        ['\0', '\0', '\0', '\u{FDB6}']
140    ),
141    ARABIC_LIGATURE_AIN_WITH_YEH => (
142        &["\u{0639}\u{064A}"],
143        ['\u{FCF8}', '\0', '\0', '\u{FD14}']
144    ),
145    ARABIC_LIGATURE_ALEF_MAKSURA_WITH_SUPERSCRIPT_ALEF => (
146        &["\u{0649}\u{0670}"],
147        ['\u{FC5D}', '\0', '\0', '\u{FC90}']
148    ),
149    ARABIC_LIGATURE_ALEF_WITH_FATHATAN => (
150        &["\u{0627}\u{064B}"],
151        ['\u{FD3D}', '\0', '\0', '\u{FD3C}']
152    ),
153    ARABIC_LIGATURE_BEH_WITH_ALEF_MAKSURA => (
154        &["\u{0628}\u{0649}"],
155        ['\u{FC09}', '\0', '\0', '\u{FC6E}']
156    ),
157    ARABIC_LIGATURE_BEH_WITH_HAH => (
158        &["\u{0628}\u{062D}"],
159        ['\u{FC06}', '\u{FC9D}', '\0', '\0']
160    ),
161    ARABIC_LIGATURE_BEH_WITH_HAH_WITH_YEH => (
162        &["\u{0628}\u{062D}\u{064A}"],
163        ['\0', '\0', '\0', '\u{FDC2}']
164    ),
165    ARABIC_LIGATURE_BEH_WITH_HEH => (
166        &["\u{0628}\u{0647}"],
167        ['\0', '\u{FCA0}', '\u{FCE2}', '\0']
168    ),
169    ARABIC_LIGATURE_BEH_WITH_JEEM => (
170        &["\u{0628}\u{062C}"],
171        ['\u{FC05}', '\u{FC9C}', '\0', '\0']
172    ),
173    ARABIC_LIGATURE_BEH_WITH_KHAH => (
174        &["\u{0628}\u{062E}"],
175        ['\u{FC07}', '\u{FC9E}', '\0', '\0']
176    ),
177    ARABIC_LIGATURE_BEH_WITH_KHAH_WITH_YEH => (
178        &["\u{0628}\u{062E}\u{064A}"],
179        ['\0', '\0', '\0', '\u{FD9E}']
180    ),
181    ARABIC_LIGATURE_BEH_WITH_MEEM => (
182        &["\u{0628}\u{0645}"],
183        ['\u{FC08}', '\u{FC9F}', '\u{FCE1}', '\u{FC6C}']
184    ),
185    ARABIC_LIGATURE_BEH_WITH_NOON => (
186        &["\u{0628}\u{0646}"],
187        ['\0', '\0', '\0', '\u{FC6D}']
188    ),
189    ARABIC_LIGATURE_BEH_WITH_REH => (
190        &["\u{0628}\u{0631}"],
191        ['\0', '\0', '\0', '\u{FC6A}']
192    ),
193    ARABIC_LIGATURE_BEH_WITH_YEH => (
194        &["\u{0628}\u{064A}"],
195        ['\u{FC0A}', '\0', '\0', '\u{FC6F}']
196    ),
197    ARABIC_LIGATURE_BEH_WITH_ZAIN => (
198        &["\u{0628}\u{0632}"],
199        ['\0', '\0', '\0', '\u{FC6B}']
200    ),
201    ARABIC_LIGATURE_DAD_WITH_ALEF_MAKSURA => (
202        &["\u{0636}\u{0649}"],
203        ['\u{FD07}', '\0', '\0', '\u{FD23}']
204    ),
205    ARABIC_LIGATURE_DAD_WITH_HAH => (
206        &["\u{0636}\u{062D}"],
207        ['\u{FC23}', '\u{FCB5}', '\0', '\0']
208    ),
209    ARABIC_LIGATURE_DAD_WITH_HAH_WITH_ALEF_MAKSURA => (
210        &["\u{0636}\u{062D}\u{0649}"],
211        ['\0', '\0', '\0', '\u{FD6E}']
212    ),
213    ARABIC_LIGATURE_DAD_WITH_HAH_WITH_YEH => (
214        &["\u{0636}\u{062D}\u{064A}"],
215        ['\0', '\0', '\0', '\u{FDAB}']
216    ),
217    ARABIC_LIGATURE_DAD_WITH_JEEM => (
218        &["\u{0636}\u{062C}"],
219        ['\u{FC22}', '\u{FCB4}', '\0', '\0']
220    ),
221    ARABIC_LIGATURE_DAD_WITH_KHAH => (
222        &["\u{0636}\u{062E}"],
223        ['\u{FC24}', '\u{FCB6}', '\0', '\0']
224    ),
225    ARABIC_LIGATURE_DAD_WITH_KHAH_WITH_MEEM => (
226        &["\u{0636}\u{062E}\u{0645}"],
227        ['\0', '\u{FD70}', '\0', '\u{FD6F}']
228    ),
229    ARABIC_LIGATURE_DAD_WITH_MEEM => (
230        &["\u{0636}\u{0645}"],
231        ['\u{FC25}', '\u{FCB7}', '\0', '\0']
232    ),
233    ARABIC_LIGATURE_DAD_WITH_REH => (
234        &["\u{0636}\u{0631}"],
235        ['\u{FD10}', '\0', '\0', '\u{FD2C}']
236    ),
237    ARABIC_LIGATURE_DAD_WITH_YEH => (
238        &["\u{0636}\u{064A}"],
239        ['\u{FD08}', '\0', '\0', '\u{FD24}']
240    ),
241    ARABIC_LIGATURE_FEH_WITH_ALEF_MAKSURA => (
242        &["\u{0641}\u{0649}"],
243        ['\u{FC31}', '\0', '\0', '\u{FC7C}']
244    ),
245    ARABIC_LIGATURE_FEH_WITH_HAH => (
246        &["\u{0641}\u{062D}"],
247        ['\u{FC2E}', '\u{FCBF}', '\0', '\0']
248    ),
249    ARABIC_LIGATURE_FEH_WITH_JEEM => (
250        &["\u{0641}\u{062C}"],
251        ['\u{FC2D}', '\u{FCBE}', '\0', '\0']
252    ),
253    ARABIC_LIGATURE_FEH_WITH_KHAH => (
254        &["\u{0641}\u{062E}"],
255        ['\u{FC2F}', '\u{FCC0}', '\0', '\0']
256    ),
257    ARABIC_LIGATURE_FEH_WITH_KHAH_WITH_MEEM => (
258        &["\u{0641}\u{062E}\u{0645}"],
259        ['\0', '\u{FD7D}', '\0', '\u{FD7C}']
260    ),
261    ARABIC_LIGATURE_FEH_WITH_MEEM => (
262        &["\u{0641}\u{0645}"],
263        ['\u{FC30}', '\u{FCC1}', '\0', '\0']
264    ),
265    ARABIC_LIGATURE_FEH_WITH_MEEM_WITH_YEH => (
266        &["\u{0641}\u{0645}\u{064A}"],
267        ['\0', '\0', '\0', '\u{FDC1}']
268    ),
269    ARABIC_LIGATURE_FEH_WITH_YEH => (
270        &["\u{0641}\u{064A}"],
271        ['\u{FC32}', '\0', '\0', '\u{FC7D}']
272    ),
273    ARABIC_LIGATURE_GHAIN_WITH_ALEF_MAKSURA => (
274        &["\u{063A}\u{0649}"],
275        ['\u{FCF9}', '\0', '\0', '\u{FD15}']
276    ),
277    ARABIC_LIGATURE_GHAIN_WITH_JEEM => (
278        &["\u{063A}\u{062C}"],
279        ['\u{FC2B}', '\u{FCBC}', '\0', '\0']
280    ),
281    ARABIC_LIGATURE_GHAIN_WITH_MEEM => (
282        &["\u{063A}\u{0645}"],
283        ['\u{FC2C}', '\u{FCBD}', '\0', '\0']
284    ),
285    ARABIC_LIGATURE_GHAIN_WITH_MEEM_WITH_ALEF_MAKSURA => (
286        &["\u{063A}\u{0645}\u{0649}"],
287        ['\0', '\0', '\0', '\u{FD7B}']
288    ),
289    ARABIC_LIGATURE_GHAIN_WITH_MEEM_WITH_MEEM => (
290        &["\u{063A}\u{0645}\u{0645}"],
291        ['\0', '\0', '\0', '\u{FD79}']
292    ),
293    ARABIC_LIGATURE_GHAIN_WITH_MEEM_WITH_YEH => (
294        &["\u{063A}\u{0645}\u{064A}"],
295        ['\0', '\0', '\0', '\u{FD7A}']
296    ),
297    ARABIC_LIGATURE_GHAIN_WITH_YEH => (
298        &["\u{063A}\u{064A}"],
299        ['\u{FCFA}', '\0', '\0', '\u{FD16}']
300    ),
301    ARABIC_LIGATURE_HAH_WITH_ALEF_MAKSURA => (
302        &["\u{062D}\u{0649}"],
303        ['\u{FCFF}', '\0', '\0', '\u{FD1B}']
304    ),
305    ARABIC_LIGATURE_HAH_WITH_JEEM => (
306        &["\u{062D}\u{062C}"],
307        ['\u{FC17}', '\u{FCA9}', '\0', '\0']
308    ),
309    ARABIC_LIGATURE_HAH_WITH_JEEM_WITH_YEH => (
310        &["\u{062D}\u{062C}\u{064A}"],
311        ['\0', '\0', '\0', '\u{FDBF}']
312    ),
313    ARABIC_LIGATURE_HAH_WITH_MEEM => (
314        &["\u{062D}\u{0645}"],
315        ['\u{FC18}', '\u{FCAA}', '\0', '\0']
316    ),
317    ARABIC_LIGATURE_HAH_WITH_MEEM_WITH_ALEF_MAKSURA => (
318        &["\u{062D}\u{0645}\u{0649}"],
319        ['\0', '\0', '\0', '\u{FD5B}']
320    ),
321    ARABIC_LIGATURE_HAH_WITH_MEEM_WITH_YEH => (
322        &["\u{062D}\u{0645}\u{064A}"],
323        ['\0', '\0', '\0', '\u{FD5A}']
324    ),
325    ARABIC_LIGATURE_HAH_WITH_YEH => (
326        &["\u{062D}\u{064A}"],
327        ['\u{FD00}', '\0', '\0', '\u{FD1C}']
328    ),
329    ARABIC_LIGATURE_HEH_WITH_ALEF_MAKSURA => (
330        &["\u{0647}\u{0649}"],
331        ['\u{FC53}', '\0', '\0', '\0']
332    ),
333    ARABIC_LIGATURE_HEH_WITH_JEEM => (
334        &["\u{0647}\u{062C}"],
335        ['\u{FC51}', '\u{FCD7}', '\0', '\0']
336    ),
337    ARABIC_LIGATURE_HEH_WITH_MEEM => (
338        &["\u{0647}\u{0645}"],
339        ['\u{FC52}', '\u{FCD8}', '\0', '\0']
340    ),
341    ARABIC_LIGATURE_HEH_WITH_MEEM_WITH_JEEM => (
342        &["\u{0647}\u{0645}\u{062C}"],
343        ['\0', '\u{FD93}', '\0', '\0']
344    ),
345    ARABIC_LIGATURE_HEH_WITH_MEEM_WITH_MEEM => (
346        &["\u{0647}\u{0645}\u{0645}"],
347        ['\0', '\u{FD94}', '\0', '\0']
348    ),
349    ARABIC_LIGATURE_HEH_WITH_SUPERSCRIPT_ALEF => (
350        &["\u{0647}\u{0670}"],
351        ['\0', '\u{FCD9}', '\0', '\0']
352    ),
353    ARABIC_LIGATURE_HEH_WITH_YEH => (
354        &["\u{0647}\u{064A}"],
355        ['\u{FC54}', '\0', '\0', '\0']
356    ),
357    ARABIC_LIGATURE_JEEM_WITH_ALEF_MAKSURA => (
358        &["\u{062C}\u{0649}"],
359        ['\u{FD01}', '\0', '\0', '\u{FD1D}']
360    ),
361    ARABIC_LIGATURE_JEEM_WITH_HAH => (
362        &["\u{062C}\u{062D}"],
363        ['\u{FC15}', '\u{FCA7}', '\0', '\0']
364    ),
365    ARABIC_LIGATURE_JEEM_WITH_HAH_WITH_ALEF_MAKSURA => (
366        &["\u{062C}\u{062D}\u{0649}"],
367        ['\0', '\0', '\0', '\u{FDA6}']
368    ),
369    ARABIC_LIGATURE_JEEM_WITH_HAH_WITH_YEH => (
370        &["\u{062C}\u{062D}\u{064A}"],
371        ['\0', '\0', '\0', '\u{FDBE}']
372    ),
373    ARABIC_LIGATURE_JEEM_WITH_MEEM => (
374        &["\u{062C}\u{0645}"],
375        ['\u{FC16}', '\u{FCA8}', '\0', '\0']
376    ),
377    ARABIC_LIGATURE_JEEM_WITH_MEEM_WITH_ALEF_MAKSURA => (
378        &["\u{062C}\u{0645}\u{0649}"],
379        ['\0', '\0', '\0', '\u{FDA7}']
380    ),
381    ARABIC_LIGATURE_JEEM_WITH_MEEM_WITH_HAH => (
382        &["\u{062C}\u{0645}\u{062D}"],
383        ['\0', '\u{FD59}', '\0', '\u{FD58}']
384    ),
385    ARABIC_LIGATURE_JEEM_WITH_MEEM_WITH_YEH => (
386        &["\u{062C}\u{0645}\u{064A}"],
387        ['\0', '\0', '\0', '\u{FDA5}']
388    ),
389    ARABIC_LIGATURE_JEEM_WITH_YEH => (
390        &["\u{062C}\u{064A}"],
391        ['\u{FD02}', '\0', '\0', '\u{FD1E}']
392    ),
393    ARABIC_LIGATURE_KAF_WITH_ALEF => (
394        &["\u{0643}\u{0627}"],
395        ['\u{FC37}', '\0', '\0', '\u{FC80}']
396    ),
397    ARABIC_LIGATURE_KAF_WITH_ALEF_MAKSURA => (
398        &["\u{0643}\u{0649}"],
399        ['\u{FC3D}', '\0', '\0', '\u{FC83}']
400    ),
401    ARABIC_LIGATURE_KAF_WITH_HAH => (
402        &["\u{0643}\u{062D}"],
403        ['\u{FC39}', '\u{FCC5}', '\0', '\0']
404    ),
405    ARABIC_LIGATURE_KAF_WITH_JEEM => (
406        &["\u{0643}\u{062C}"],
407        ['\u{FC38}', '\u{FCC4}', '\0', '\0']
408    ),
409    ARABIC_LIGATURE_KAF_WITH_KHAH => (
410        &["\u{0643}\u{062E}"],
411        ['\u{FC3A}', '\u{FCC6}', '\0', '\0']
412    ),
413    ARABIC_LIGATURE_KAF_WITH_LAM => (
414        &["\u{0643}\u{0644}"],
415        ['\u{FC3B}', '\u{FCC7}', '\u{FCEB}', '\u{FC81}']
416    ),
417    ARABIC_LIGATURE_KAF_WITH_MEEM => (
418        &["\u{0643}\u{0645}"],
419        ['\u{FC3C}', '\u{FCC8}', '\u{FCEC}', '\u{FC82}']
420    ),
421    ARABIC_LIGATURE_KAF_WITH_MEEM_WITH_MEEM => (
422        &["\u{0643}\u{0645}\u{0645}"],
423        ['\0', '\u{FDC3}', '\0', '\u{FDBB}']
424    ),
425    ARABIC_LIGATURE_KAF_WITH_MEEM_WITH_YEH => (
426        &["\u{0643}\u{0645}\u{064A}"],
427        ['\0', '\0', '\0', '\u{FDB7}']
428    ),
429    ARABIC_LIGATURE_KAF_WITH_YEH => (
430        &["\u{0643}\u{064A}"],
431        ['\u{FC3E}', '\0', '\0', '\u{FC84}']
432    ),
433    ARABIC_LIGATURE_KHAH_WITH_ALEF_MAKSURA => (
434        &["\u{062E}\u{0649}"],
435        ['\u{FD03}', '\0', '\0', '\u{FD1F}']
436    ),
437    ARABIC_LIGATURE_KHAH_WITH_HAH => (
438        &["\u{062E}\u{062D}"],
439        ['\u{FC1A}', '\0', '\0', '\0']
440    ),
441    ARABIC_LIGATURE_KHAH_WITH_JEEM => (
442        &["\u{062E}\u{062C}"],
443        ['\u{FC19}', '\u{FCAB}', '\0', '\0']
444    ),
445    ARABIC_LIGATURE_KHAH_WITH_MEEM => (
446        &["\u{062E}\u{0645}"],
447        ['\u{FC1B}', '\u{FCAC}', '\0', '\0']
448    ),
449    ARABIC_LIGATURE_KHAH_WITH_YEH => (
450        &["\u{062E}\u{064A}"],
451        ['\u{FD04}', '\0', '\0', '\u{FD20}']
452    ),
453    ARABIC_LIGATURE_LAM_WITH_ALEF => (
454        &["\u{0644}\u{0627}"],
455        ['\u{FEFB}', '\0', '\0', '\u{FEFC}']
456    ),
457    ARABIC_LIGATURE_LAM_WITH_ALEF_MAKSURA => (
458        &["\u{0644}\u{0649}"],
459        ['\u{FC43}', '\0', '\0', '\u{FC86}']
460    ),
461    ARABIC_LIGATURE_LAM_WITH_ALEF_WITH_HAMZA_ABOVE => (
462        &["\u{0644}\u{0623}"],
463        ['\u{FEF7}', '\0', '\0', '\u{FEF8}']
464    ),
465    ARABIC_LIGATURE_LAM_WITH_ALEF_WITH_HAMZA_BELOW => (
466        &["\u{0644}\u{0625}"],
467        ['\u{FEF9}', '\0', '\0', '\u{FEFA}']
468    ),
469    ARABIC_LIGATURE_LAM_WITH_ALEF_WITH_MADDA_ABOVE => (
470        &["\u{0644}\u{0622}"],
471        ['\u{FEF5}', '\0', '\0', '\u{FEF6}']
472    ),
473    ARABIC_LIGATURE_LAM_WITH_HAH => (
474        &["\u{0644}\u{062D}"],
475        ['\u{FC40}', '\u{FCCA}', '\0', '\0']
476    ),
477    ARABIC_LIGATURE_LAM_WITH_HAH_WITH_ALEF_MAKSURA => (
478        &["\u{0644}\u{062D}\u{0649}"],
479        ['\0', '\0', '\0', '\u{FD82}']
480    ),
481    ARABIC_LIGATURE_LAM_WITH_HAH_WITH_MEEM => (
482        &["\u{0644}\u{062D}\u{0645}"],
483        ['\0', '\u{FDB5}', '\0', '\u{FD80}']
484    ),
485    ARABIC_LIGATURE_LAM_WITH_HAH_WITH_YEH => (
486        &["\u{0644}\u{062D}\u{064A}"],
487        ['\0', '\0', '\0', '\u{FD81}']
488    ),
489    ARABIC_LIGATURE_LAM_WITH_HEH => (
490        &["\u{0644}\u{0647}"],
491        ['\0', '\u{FCCD}', '\0', '\0']
492    ),
493    ARABIC_LIGATURE_LAM_WITH_JEEM => (
494        &["\u{0644}\u{062C}"],
495        ['\u{FC3F}', '\u{FCC9}', '\0', '\0']
496    ),
497    ARABIC_LIGATURE_LAM_WITH_JEEM_WITH_JEEM => (
498        &["\u{0644}\u{062C}\u{062C}"],
499        ['\0', '\u{FD83}', '\0', '\u{FD84}']
500    ),
501    ARABIC_LIGATURE_LAM_WITH_JEEM_WITH_MEEM => (
502        &["\u{0644}\u{062C}\u{0645}"],
503        ['\0', '\u{FDBA}', '\0', '\u{FDBC}']
504    ),
505    ARABIC_LIGATURE_LAM_WITH_JEEM_WITH_YEH => (
506        &["\u{0644}\u{062C}\u{064A}"],
507        ['\0', '\0', '\0', '\u{FDAC}']
508    ),
509    ARABIC_LIGATURE_LAM_WITH_KHAH => (
510        &["\u{0644}\u{062E}"],
511        ['\u{FC41}', '\u{FCCB}', '\0', '\0']
512    ),
513    ARABIC_LIGATURE_LAM_WITH_KHAH_WITH_MEEM => (
514        &["\u{0644}\u{062E}\u{0645}"],
515        ['\0', '\u{FD86}', '\0', '\u{FD85}']
516    ),
517    ARABIC_LIGATURE_LAM_WITH_MEEM => (
518        &["\u{0644}\u{0645}"],
519        ['\u{FC42}', '\u{FCCC}', '\u{FCED}', '\u{FC85}']
520    ),
521    ARABIC_LIGATURE_LAM_WITH_MEEM_WITH_HAH => (
522        &["\u{0644}\u{0645}\u{062D}"],
523        ['\0', '\u{FD88}', '\0', '\u{FD87}']
524    ),
525    ARABIC_LIGATURE_LAM_WITH_MEEM_WITH_YEH => (
526        &["\u{0644}\u{0645}\u{064A}"],
527        ['\0', '\0', '\0', '\u{FDAD}']
528    ),
529    ARABIC_LIGATURE_LAM_WITH_YEH => (
530        &["\u{0644}\u{064A}"],
531        ['\u{FC44}', '\0', '\0', '\u{FC87}']
532    ),
533    ARABIC_LIGATURE_MEEM_WITH_ALEF => (
534        &["\u{0645}\u{0627}"],
535        ['\0', '\0', '\0', '\u{FC88}']
536    ),
537    ARABIC_LIGATURE_MEEM_WITH_ALEF_MAKSURA => (
538        &["\u{0645}\u{0649}"],
539        ['\u{FC49}', '\0', '\0', '\0']
540    ),
541    ARABIC_LIGATURE_MEEM_WITH_HAH => (
542        &["\u{0645}\u{062D}"],
543        ['\u{FC46}', '\u{FCCF}', '\0', '\0']
544    ),
545    ARABIC_LIGATURE_MEEM_WITH_HAH_WITH_JEEM => (
546        &["\u{0645}\u{062D}\u{062C}"],
547        ['\0', '\u{FD89}', '\0', '\0']
548    ),
549    ARABIC_LIGATURE_MEEM_WITH_HAH_WITH_MEEM => (
550        &["\u{0645}\u{062D}\u{0645}"],
551        ['\0', '\u{FD8A}', '\0', '\0']
552    ),
553    ARABIC_LIGATURE_MEEM_WITH_HAH_WITH_YEH => (
554        &["\u{0645}\u{062D}\u{064A}"],
555        ['\0', '\0', '\0', '\u{FD8B}']
556    ),
557    ARABIC_LIGATURE_MEEM_WITH_JEEM => (
558        &["\u{0645}\u{062C}"],
559        ['\u{FC45}', '\u{FCCE}', '\0', '\0']
560    ),
561    ARABIC_LIGATURE_MEEM_WITH_JEEM_WITH_HAH => (
562        &["\u{0645}\u{062C}\u{062D}"],
563        ['\0', '\u{FD8C}', '\0', '\0']
564    ),
565    ARABIC_LIGATURE_MEEM_WITH_JEEM_WITH_KHAH => (
566        &["\u{0645}\u{062C}\u{062E}"],
567        ['\0', '\u{FD92}', '\0', '\0']
568    ),
569    ARABIC_LIGATURE_MEEM_WITH_JEEM_WITH_MEEM => (
570        &["\u{0645}\u{062C}\u{0645}"],
571        ['\0', '\u{FD8D}', '\0', '\0']
572    ),
573    ARABIC_LIGATURE_MEEM_WITH_JEEM_WITH_YEH => (
574        &["\u{0645}\u{062C}\u{064A}"],
575        ['\0', '\0', '\0', '\u{FDC0}']
576    ),
577    ARABIC_LIGATURE_MEEM_WITH_KHAH => (
578        &["\u{0645}\u{062E}"],
579        ['\u{FC47}', '\u{FCD0}', '\0', '\0']
580    ),
581    ARABIC_LIGATURE_MEEM_WITH_KHAH_WITH_JEEM => (
582        &["\u{0645}\u{062E}\u{062C}"],
583        ['\0', '\u{FD8E}', '\0', '\0']
584    ),
585    ARABIC_LIGATURE_MEEM_WITH_KHAH_WITH_MEEM => (
586        &["\u{0645}\u{062E}\u{0645}"],
587        ['\0', '\u{FD8F}', '\0', '\0']
588    ),
589    ARABIC_LIGATURE_MEEM_WITH_KHAH_WITH_YEH => (
590        &["\u{0645}\u{062E}\u{064A}"],
591        ['\0', '\0', '\0', '\u{FDB9}']
592    ),
593    ARABIC_LIGATURE_MEEM_WITH_MEEM => (
594        &["\u{0645}\u{0645}"],
595        ['\u{FC48}', '\u{FCD1}', '\0', '\u{FC89}']
596    ),
597    ARABIC_LIGATURE_MEEM_WITH_MEEM_WITH_YEH => (
598        &["\u{0645}\u{0645}\u{064A}"],
599        ['\0', '\0', '\0', '\u{FDB1}']
600    ),
601    ARABIC_LIGATURE_MEEM_WITH_YEH => (
602        &["\u{0645}\u{064A}"],
603        ['\u{FC4A}', '\0', '\0', '\0']
604    ),
605    ARABIC_LIGATURE_NOON_WITH_ALEF_MAKSURA => (
606        &["\u{0646}\u{0649}"],
607        ['\u{FC4F}', '\0', '\0', '\u{FC8E}']
608    ),
609    ARABIC_LIGATURE_NOON_WITH_HAH => (
610        &["\u{0646}\u{062D}"],
611        ['\u{FC4C}', '\u{FCD3}', '\0', '\0']
612    ),
613    ARABIC_LIGATURE_NOON_WITH_HAH_WITH_ALEF_MAKSURA => (
614        &["\u{0646}\u{062D}\u{0649}"],
615        ['\0', '\0', '\0', '\u{FD96}']
616    ),
617    ARABIC_LIGATURE_NOON_WITH_HAH_WITH_MEEM => (
618        &["\u{0646}\u{062D}\u{0645}"],
619        ['\0', '\u{FD95}', '\0', '\0']
620    ),
621    ARABIC_LIGATURE_NOON_WITH_HAH_WITH_YEH => (
622        &["\u{0646}\u{062D}\u{064A}"],
623        ['\0', '\0', '\0', '\u{FDB3}']
624    ),
625    ARABIC_LIGATURE_NOON_WITH_HEH => (
626        &["\u{0646}\u{0647}"],
627        ['\0', '\u{FCD6}', '\u{FCEF}', '\0']
628    ),
629    ARABIC_LIGATURE_NOON_WITH_JEEM => (
630        &["\u{0646}\u{062C}"],
631        ['\u{FC4B}', '\u{FCD2}', '\0', '\0']
632    ),
633    ARABIC_LIGATURE_NOON_WITH_JEEM_WITH_ALEF_MAKSURA => (
634        &["\u{0646}\u{062C}\u{0649}"],
635        ['\0', '\0', '\0', '\u{FD99}']
636    ),
637    ARABIC_LIGATURE_NOON_WITH_JEEM_WITH_HAH => (
638        &["\u{0646}\u{062C}\u{062D}"],
639        ['\0', '\u{FDB8}', '\0', '\u{FDBD}']
640    ),
641    ARABIC_LIGATURE_NOON_WITH_JEEM_WITH_MEEM => (
642        &["\u{0646}\u{062C}\u{0645}"],
643        ['\0', '\u{FD98}', '\0', '\u{FD97}']
644    ),
645    ARABIC_LIGATURE_NOON_WITH_JEEM_WITH_YEH => (
646        &["\u{0646}\u{062C}\u{064A}"],
647        ['\0', '\0', '\0', '\u{FDC7}']
648    ),
649    ARABIC_LIGATURE_NOON_WITH_KHAH => (
650        &["\u{0646}\u{062E}"],
651        ['\u{FC4D}', '\u{FCD4}', '\0', '\0']
652    ),
653    ARABIC_LIGATURE_NOON_WITH_MEEM => (
654        &["\u{0646}\u{0645}"],
655        ['\u{FC4E}', '\u{FCD5}', '\u{FCEE}', '\u{FC8C}']
656    ),
657    ARABIC_LIGATURE_NOON_WITH_MEEM_WITH_ALEF_MAKSURA => (
658        &["\u{0646}\u{0645}\u{0649}"],
659        ['\0', '\0', '\0', '\u{FD9B}']
660    ),
661    ARABIC_LIGATURE_NOON_WITH_MEEM_WITH_YEH => (
662        &["\u{0646}\u{0645}\u{064A}"],
663        ['\0', '\0', '\0', '\u{FD9A}']
664    ),
665    ARABIC_LIGATURE_NOON_WITH_NOON => (
666        &["\u{0646}\u{0646}"],
667        ['\0', '\0', '\0', '\u{FC8D}']
668    ),
669    ARABIC_LIGATURE_NOON_WITH_REH => (
670        &["\u{0646}\u{0631}"],
671        ['\0', '\0', '\0', '\u{FC8A}']
672    ),
673    ARABIC_LIGATURE_NOON_WITH_YEH => (
674        &["\u{0646}\u{064A}"],
675        ['\u{FC50}', '\0', '\0', '\u{FC8F}']
676    ),
677    ARABIC_LIGATURE_NOON_WITH_ZAIN => (
678        &["\u{0646}\u{0632}"],
679        ['\0', '\0', '\0', '\u{FC8B}']
680    ),
681    ARABIC_LIGATURE_QAF_WITH_ALEF_MAKSURA => (
682        &["\u{0642}\u{0649}"],
683        ['\u{FC35}', '\0', '\0', '\u{FC7E}']
684    ),
685    ARABIC_LIGATURE_QAF_WITH_HAH => (
686        &["\u{0642}\u{062D}"],
687        ['\u{FC33}', '\u{FCC2}', '\0', '\0']
688    ),
689    ARABIC_LIGATURE_QAF_WITH_MEEM => (
690        &["\u{0642}\u{0645}"],
691        ['\u{FC34}', '\u{FCC3}', '\0', '\0']
692    ),
693    ARABIC_LIGATURE_QAF_WITH_MEEM_WITH_HAH => (
694        &["\u{0642}\u{0645}\u{062D}"],
695        ['\0', '\u{FDB4}', '\0', '\u{FD7E}']
696    ),
697    ARABIC_LIGATURE_QAF_WITH_MEEM_WITH_MEEM => (
698        &["\u{0642}\u{0645}\u{0645}"],
699        ['\0', '\0', '\0', '\u{FD7F}']
700    ),
701    ARABIC_LIGATURE_QAF_WITH_MEEM_WITH_YEH => (
702        &["\u{0642}\u{0645}\u{064A}"],
703        ['\0', '\0', '\0', '\u{FDB2}']
704    ),
705    ARABIC_LIGATURE_QAF_WITH_YEH => (
706        &["\u{0642}\u{064A}"],
707        ['\u{FC36}', '\0', '\0', '\u{FC7F}']
708    ),
709    ARABIC_LIGATURE_QALA_USED_AS_KORANIC_STOP_SIGN => (
710        &["\u{0642}\u{0644}\u{06D2}"],
711        ['\u{FDF1}', '\0', '\0', '\0']
712    ),
713    ARABIC_LIGATURE_REH_WITH_SUPERSCRIPT_ALEF => (
714        &["\u{0631}\u{0670}"],
715        ['\u{FC5C}', '\0', '\0', '\0']
716    ),
717    ARABIC_LIGATURE_SAD_WITH_ALEF_MAKSURA => (
718        &["\u{0635}\u{0649}"],
719        ['\u{FD05}', '\0', '\0', '\u{FD21}']
720    ),
721    ARABIC_LIGATURE_SAD_WITH_HAH => (
722        &["\u{0635}\u{062D}"],
723        ['\u{FC20}', '\u{FCB1}', '\0', '\0']
724    ),
725    ARABIC_LIGATURE_SAD_WITH_HAH_WITH_HAH => (
726        &["\u{0635}\u{062D}\u{062D}"],
727        ['\0', '\u{FD65}', '\0', '\u{FD64}']
728    ),
729    ARABIC_LIGATURE_SAD_WITH_HAH_WITH_YEH => (
730        &["\u{0635}\u{062D}\u{064A}"],
731        ['\0', '\0', '\0', '\u{FDA9}']
732    ),
733    ARABIC_LIGATURE_SAD_WITH_KHAH => (
734        &["\u{0635}\u{062E}"],
735        ['\0', '\u{FCB2}', '\0', '\0']
736    ),
737    ARABIC_LIGATURE_SAD_WITH_MEEM => (
738        &["\u{0635}\u{0645}"],
739        ['\u{FC21}', '\u{FCB3}', '\0', '\0']
740    ),
741    ARABIC_LIGATURE_SAD_WITH_MEEM_WITH_MEEM => (
742        &["\u{0635}\u{0645}\u{0645}"],
743        ['\0', '\u{FDC5}', '\0', '\u{FD66}']
744    ),
745    ARABIC_LIGATURE_SAD_WITH_REH => (
746        &["\u{0635}\u{0631}"],
747        ['\u{FD0F}', '\0', '\0', '\u{FD2B}']
748    ),
749    ARABIC_LIGATURE_SAD_WITH_YEH => (
750        &["\u{0635}\u{064A}"],
751        ['\u{FD06}', '\0', '\0', '\u{FD22}']
752    ),
753    ARABIC_LIGATURE_SALLA_USED_AS_KORANIC_STOP_SIGN => (
754        &["\u{0635}\u{0644}\u{06D2}"],
755        ['\u{FDF0}', '\0', '\0', '\0']
756    ),
757    ARABIC_LIGATURE_SEEN_WITH_ALEF_MAKSURA => (
758        &["\u{0633}\u{0649}"],
759        ['\u{FCFB}', '\0', '\0', '\u{FD17}']
760    ),
761    ARABIC_LIGATURE_SEEN_WITH_HAH => (
762        &["\u{0633}\u{062D}"],
763        ['\u{FC1D}', '\u{FCAE}', '\u{FD35}', '\0']
764    ),
765    ARABIC_LIGATURE_SEEN_WITH_HAH_WITH_JEEM => (
766        &["\u{0633}\u{062D}\u{062C}"],
767        ['\0', '\u{FD5C}', '\0', '\0']
768    ),
769    ARABIC_LIGATURE_SEEN_WITH_HEH => (
770        &["\u{0633}\u{0647}"],
771        ['\0', '\u{FD31}', '\u{FCE8}', '\0']
772    ),
773    ARABIC_LIGATURE_SEEN_WITH_JEEM => (
774        &["\u{0633}\u{062C}"],
775        ['\u{FC1C}', '\u{FCAD}', '\u{FD34}', '\0']
776    ),
777    ARABIC_LIGATURE_SEEN_WITH_JEEM_WITH_ALEF_MAKSURA => (
778        &["\u{0633}\u{062C}\u{0649}"],
779        ['\0', '\0', '\0', '\u{FD5E}']
780    ),
781    ARABIC_LIGATURE_SEEN_WITH_JEEM_WITH_HAH => (
782        &["\u{0633}\u{062C}\u{062D}"],
783        ['\0', '\u{FD5D}', '\0', '\0']
784    ),
785    ARABIC_LIGATURE_SEEN_WITH_KHAH => (
786        &["\u{0633}\u{062E}"],
787        ['\u{FC1E}', '\u{FCAF}', '\u{FD36}', '\0']
788    ),
789    ARABIC_LIGATURE_SEEN_WITH_KHAH_WITH_ALEF_MAKSURA => (
790        &["\u{0633}\u{062E}\u{0649}"],
791        ['\0', '\0', '\0', '\u{FDA8}']
792    ),
793    ARABIC_LIGATURE_SEEN_WITH_KHAH_WITH_YEH => (
794        &["\u{0633}\u{062E}\u{064A}"],
795        ['\0', '\0', '\0', '\u{FDC6}']
796    ),
797    ARABIC_LIGATURE_SEEN_WITH_MEEM => (
798        &["\u{0633}\u{0645}"],
799        ['\u{FC1F}', '\u{FCB0}', '\u{FCE7}', '\0']
800    ),
801    ARABIC_LIGATURE_SEEN_WITH_MEEM_WITH_HAH => (
802        &["\u{0633}\u{0645}\u{062D}"],
803        ['\0', '\u{FD60}', '\0', '\u{FD5F}']
804    ),
805    ARABIC_LIGATURE_SEEN_WITH_MEEM_WITH_JEEM => (
806        &["\u{0633}\u{0645}\u{062C}"],
807        ['\0', '\u{FD61}', '\0', '\0']
808    ),
809    ARABIC_LIGATURE_SEEN_WITH_MEEM_WITH_MEEM => (
810        &["\u{0633}\u{0645}\u{0645}"],
811        ['\0', '\u{FD63}', '\0', '\u{FD62}']
812    ),
813    ARABIC_LIGATURE_SEEN_WITH_REH => (
814        &["\u{0633}\u{0631}"],
815        ['\u{FD0E}', '\0', '\0', '\u{FD2A}']
816    ),
817    ARABIC_LIGATURE_SEEN_WITH_YEH => (
818        &["\u{0633}\u{064A}"],
819        ['\u{FCFC}', '\0', '\0', '\u{FD18}']
820    ),
821
822    // Arabic ligatures with Shadda, the order of characters doesn't matter
823    ARABIC_LIGATURE_SHADDA_WITH_DAMMATAN_ISOLATED_FORM => (
824        &["\u{064C}\u{0651}", "\u{0651}\u{064C}"],
825        ['\u{FC5E}', '\u{FC5E}', '\u{FC5E}', '\u{FC5E}']
826    ),
827    ARABIC_LIGATURE_SHADDA_WITH_KASRATAN_ISOLATED_FORM => (
828        &["\u{064D}\u{0651}", "\u{0651}\u{064D}"],
829        ['\u{FC5F}', '\u{FC5F}', '\u{FC5F}', '\u{FC5F}']
830    ),
831    ARABIC_LIGATURE_SHADDA_WITH_FATHA_ISOLATED_FORM => (
832        &["\u{064E}\u{0651}", "\u{0651}\u{064E}"],
833        ['\u{FC60}', '\u{FC60}', '\u{FC60}', '\u{FC60}']
834    ),
835    ARABIC_LIGATURE_SHADDA_WITH_DAMMA_ISOLATED_FORM => (
836        &["\u{064F}\u{0651}", "\u{0651}\u{064F}"],
837        ['\u{FC61}', '\u{FC61}', '\u{FC61}', '\u{FC61}']
838    ),
839    ARABIC_LIGATURE_SHADDA_WITH_KASRA_ISOLATED_FORM => (
840        &["\u{0650}\u{0651}", "\u{0651}\u{0650}"],
841        ['\u{FC62}', '\u{FC62}', '\u{FC62}', '\u{FC62}']
842    ),
843    ARABIC_LIGATURE_SHADDA_WITH_SUPERSCRIPT_ALEF => (
844        &["\u{0651}\u{0670}", "\u{0670}\u{0651}"],
845        ['\u{FC63}', '\0', '\0', '\0']
846    ),
847
848    // There is a special case when they are with Tatweel
849    ARABIC_LIGATURE_SHADDA_WITH_FATHA_MEDIAL_FORM => (
850        &["\u{0640}\u{064E}\u{0651}", "\u{0640}\u{0651}\u{064E}"],
851        ['\u{FCF2}', '\u{FCF2}', '\u{FCF2}', '\u{FCF2}']
852    ),
853    ARABIC_LIGATURE_SHADDA_WITH_DAMMA_MEDIAL_FORM => (
854        &["\u{0640}\u{064F}\u{0651}", "\u{0640}\u{0651}\u{064F}"],
855        ['\u{FCF3}', '\u{FCF3}', '\u{FCF3}', '\u{FCF3}']
856    ),
857    ARABIC_LIGATURE_SHADDA_WITH_KASRA_MEDIAL_FORM => (
858        &["\u{0640}\u{0650}\u{0651}", "\u{0640}\u{0651}\u{0650}"],
859        ['\u{FCF4}', '\u{FCF4}', '\u{FCF4}', '\u{FCF4}']
860    ),
861
862    // Repeated with different keys to be backward compatible
863    ARABIC_LIGATURE_SHADDA_WITH_FATHA => (
864        &["\u{0640}\u{064E}\u{0651}", "\u{0640}\u{0651}\u{064E}"],
865        ['\u{FCF2}', '\u{FCF2}', '\u{FCF2}', '\u{FCF2}']
866    ),
867    ARABIC_LIGATURE_SHADDA_WITH_DAMMA => (
868        &["\u{0640}\u{064F}\u{0651}", "\u{0640}\u{0651}\u{064F}"],
869        ['\u{FCF3}', '\u{FCF3}', '\u{FCF3}', '\u{FCF3}']
870    ),
871    ARABIC_LIGATURE_SHADDA_WITH_KASRA => (
872        &["\u{0640}\u{0650}\u{0651}", "\u{0640}\u{0651}\u{0650}"],
873        ['\u{FCF4}', '\u{FCF4}', '\u{FCF4}', '\u{FCF4}']
874    ),
875
876    ARABIC_LIGATURE_SHEEN_WITH_ALEF_MAKSURA => (
877        &["\u{0634}\u{0649}"],
878        ['\u{FCFD}', '\0', '\0', '\u{FD19}']
879    ),
880    ARABIC_LIGATURE_SHEEN_WITH_HAH => (
881        &["\u{0634}\u{062D}"],
882        ['\u{FD0A}', '\u{FD2E}', '\u{FD38}', '\u{FD26}']
883    ),
884    ARABIC_LIGATURE_SHEEN_WITH_HAH_WITH_MEEM => (
885        &["\u{0634}\u{062D}\u{0645}"],
886        ['\0', '\u{FD68}', '\0', '\u{FD67}']
887    ),
888    ARABIC_LIGATURE_SHEEN_WITH_HAH_WITH_YEH => (
889        &["\u{0634}\u{062D}\u{064A}"],
890        ['\0', '\0', '\0', '\u{FDAA}']
891    ),
892    ARABIC_LIGATURE_SHEEN_WITH_HEH => (
893        &["\u{0634}\u{0647}"],
894        ['\0', '\u{FD32}', '\u{FCEA}', '\0']
895    ),
896    ARABIC_LIGATURE_SHEEN_WITH_JEEM => (
897        &["\u{0634}\u{062C}"],
898        ['\u{FD09}', '\u{FD2D}', '\u{FD37}', '\u{FD25}']
899    ),
900    ARABIC_LIGATURE_SHEEN_WITH_JEEM_WITH_YEH => (
901        &["\u{0634}\u{062C}\u{064A}"],
902        ['\0', '\0', '\0', '\u{FD69}']
903    ),
904    ARABIC_LIGATURE_SHEEN_WITH_KHAH => (
905        &["\u{0634}\u{062E}"],
906        ['\u{FD0B}', '\u{FD2F}', '\u{FD39}', '\u{FD27}']
907    ),
908    ARABIC_LIGATURE_SHEEN_WITH_MEEM => (
909        &["\u{0634}\u{0645}"],
910        ['\u{FD0C}', '\u{FD30}', '\u{FCE9}', '\u{FD28}']
911    ),
912    ARABIC_LIGATURE_SHEEN_WITH_MEEM_WITH_KHAH => (
913        &["\u{0634}\u{0645}\u{062E}"],
914        ['\0', '\u{FD6B}', '\0', '\u{FD6A}']
915    ),
916    ARABIC_LIGATURE_SHEEN_WITH_MEEM_WITH_MEEM => (
917        &["\u{0634}\u{0645}\u{0645}"],
918        ['\0', '\u{FD6D}', '\0', '\u{FD6C}']
919    ),
920    ARABIC_LIGATURE_SHEEN_WITH_REH => (
921        &["\u{0634}\u{0631}"],
922        ['\u{FD0D}', '\0', '\0', '\u{FD29}']
923    ),
924    ARABIC_LIGATURE_SHEEN_WITH_YEH => (
925        &["\u{0634}\u{064A}"],
926        ['\u{FCFE}', '\0', '\0', '\u{FD1A}']
927    ),
928    ARABIC_LIGATURE_TAH_WITH_ALEF_MAKSURA => (
929        &["\u{0637}\u{0649}"],
930        ['\u{FCF5}', '\0', '\0', '\u{FD11}']
931    ),
932    ARABIC_LIGATURE_TAH_WITH_HAH => (
933        &["\u{0637}\u{062D}"],
934        ['\u{FC26}', '\u{FCB8}', '\0', '\0']
935    ),
936    ARABIC_LIGATURE_TAH_WITH_MEEM => (
937        &["\u{0637}\u{0645}"],
938        ['\u{FC27}', '\u{FD33}', '\u{FD3A}', '\0']
939    ),
940    ARABIC_LIGATURE_TAH_WITH_MEEM_WITH_HAH => (
941        &["\u{0637}\u{0645}\u{062D}"],
942        ['\0', '\u{FD72}', '\0', '\u{FD71}']
943    ),
944    ARABIC_LIGATURE_TAH_WITH_MEEM_WITH_MEEM => (
945        &["\u{0637}\u{0645}\u{0645}"],
946        ['\0', '\u{FD73}', '\0', '\0']
947    ),
948    ARABIC_LIGATURE_TAH_WITH_MEEM_WITH_YEH => (
949        &["\u{0637}\u{0645}\u{064A}"],
950        ['\0', '\0', '\0', '\u{FD74}']
951    ),
952    ARABIC_LIGATURE_TAH_WITH_YEH => (
953        &["\u{0637}\u{064A}"],
954        ['\u{FCF6}', '\0', '\0', '\u{FD12}']
955    ),
956    ARABIC_LIGATURE_TEH_WITH_ALEF_MAKSURA => (
957        &["\u{062A}\u{0649}"],
958        ['\u{FC0F}', '\0', '\0', '\u{FC74}']
959    ),
960    ARABIC_LIGATURE_TEH_WITH_HAH => (
961        &["\u{062A}\u{062D}"],
962        ['\u{FC0C}', '\u{FCA2}', '\0', '\0']
963    ),
964    ARABIC_LIGATURE_TEH_WITH_HAH_WITH_JEEM => (
965        &["\u{062A}\u{062D}\u{062C}"],
966        ['\0', '\u{FD52}', '\0', '\u{FD51}']
967    ),
968    ARABIC_LIGATURE_TEH_WITH_HAH_WITH_MEEM => (
969        &["\u{062A}\u{062D}\u{0645}"],
970        ['\0', '\u{FD53}', '\0', '\0']
971    ),
972    ARABIC_LIGATURE_TEH_WITH_HEH => (
973        &["\u{062A}\u{0647}"],
974        ['\0', '\u{FCA5}', '\u{FCE4}', '\0']
975    ),
976    ARABIC_LIGATURE_TEH_WITH_JEEM => (
977        &["\u{062A}\u{062C}"],
978        ['\u{FC0B}', '\u{FCA1}', '\0', '\0']
979    ),
980    ARABIC_LIGATURE_TEH_WITH_JEEM_WITH_ALEF_MAKSURA => (
981        &["\u{062A}\u{062C}\u{0649}"],
982        ['\0', '\0', '\0', '\u{FDA0}']
983    ),
984    ARABIC_LIGATURE_TEH_WITH_JEEM_WITH_MEEM => (
985        &["\u{062A}\u{062C}\u{0645}"],
986        ['\0', '\u{FD50}', '\0', '\0']
987    ),
988    ARABIC_LIGATURE_TEH_WITH_JEEM_WITH_YEH => (
989        &["\u{062A}\u{062C}\u{064A}"],
990        ['\0', '\0', '\0', '\u{FD9F}']
991    ),
992    ARABIC_LIGATURE_TEH_WITH_KHAH => (
993        &["\u{062A}\u{062E}"],
994        ['\u{FC0D}', '\u{FCA3}', '\0', '\0']
995    ),
996    ARABIC_LIGATURE_TEH_WITH_KHAH_WITH_ALEF_MAKSURA => (
997        &["\u{062A}\u{062E}\u{0649}"],
998        ['\0', '\0', '\0', '\u{FDA2}']
999    ),
1000    ARABIC_LIGATURE_TEH_WITH_KHAH_WITH_MEEM => (
1001        &["\u{062A}\u{062E}\u{0645}"],
1002        ['\0', '\u{FD54}', '\0', '\0']
1003    ),
1004    ARABIC_LIGATURE_TEH_WITH_KHAH_WITH_YEH => (
1005        &["\u{062A}\u{062E}\u{064A}"],
1006        ['\0', '\0', '\0', '\u{FDA1}']
1007    ),
1008    ARABIC_LIGATURE_TEH_WITH_MEEM => (
1009        &["\u{062A}\u{0645}"],
1010        ['\u{FC0E}', '\u{FCA4}', '\u{FCE3}', '\u{FC72}']
1011    ),
1012    ARABIC_LIGATURE_TEH_WITH_MEEM_WITH_ALEF_MAKSURA => (
1013        &["\u{062A}\u{0645}\u{0649}"],
1014        ['\0', '\0', '\0', '\u{FDA4}']
1015    ),
1016    ARABIC_LIGATURE_TEH_WITH_MEEM_WITH_HAH => (
1017        &["\u{062A}\u{0645}\u{062D}"],
1018        ['\0', '\u{FD56}', '\0', '\0']
1019    ),
1020    ARABIC_LIGATURE_TEH_WITH_MEEM_WITH_JEEM => (
1021        &["\u{062A}\u{0645}\u{062C}"],
1022        ['\0', '\u{FD55}', '\0', '\0']
1023    ),
1024    ARABIC_LIGATURE_TEH_WITH_MEEM_WITH_KHAH => (
1025        &["\u{062A}\u{0645}\u{062E}"],
1026        ['\0', '\u{FD57}', '\0', '\0']
1027    ),
1028    ARABIC_LIGATURE_TEH_WITH_MEEM_WITH_YEH => (
1029        &["\u{062A}\u{0645}\u{064A}"],
1030        ['\0', '\0', '\0', '\u{FDA3}']
1031    ),
1032    ARABIC_LIGATURE_TEH_WITH_NOON => (
1033        &["\u{062A}\u{0646}"],
1034        ['\0', '\0', '\0', '\u{FC73}']
1035    ),
1036    ARABIC_LIGATURE_TEH_WITH_REH => (
1037        &["\u{062A}\u{0631}"],
1038        ['\0', '\0', '\0', '\u{FC70}']
1039    ),
1040    ARABIC_LIGATURE_TEH_WITH_YEH => (
1041        &["\u{062A}\u{064A}"],
1042        ['\u{FC10}', '\0', '\0', '\u{FC75}']
1043    ),
1044    ARABIC_LIGATURE_TEH_WITH_ZAIN => (
1045        &["\u{062A}\u{0632}"],
1046        ['\0', '\0', '\0', '\u{FC71}']
1047    ),
1048    ARABIC_LIGATURE_THAL_WITH_SUPERSCRIPT_ALEF => (
1049        &["\u{0630}\u{0670}"],
1050        ['\u{FC5B}', '\0', '\0', '\0']
1051    ),
1052    ARABIC_LIGATURE_THEH_WITH_ALEF_MAKSURA => (
1053        &["\u{062B}\u{0649}"],
1054        ['\u{FC13}', '\0', '\0', '\u{FC7A}']
1055    ),
1056    ARABIC_LIGATURE_THEH_WITH_HEH => (
1057        &["\u{062B}\u{0647}"],
1058        ['\0', '\0', '\u{FCE6}', '\0']
1059    ),
1060    ARABIC_LIGATURE_THEH_WITH_JEEM => (
1061        &["\u{062B}\u{062C}"],
1062        ['\u{FC11}', '\0', '\0', '\0']
1063    ),
1064    ARABIC_LIGATURE_THEH_WITH_MEEM => (
1065        &["\u{062B}\u{0645}"],
1066        ['\u{FC12}', '\u{FCA6}', '\u{FCE5}', '\u{FC78}']
1067    ),
1068    ARABIC_LIGATURE_THEH_WITH_NOON => (
1069        &["\u{062B}\u{0646}"],
1070        ['\0', '\0', '\0', '\u{FC79}']
1071    ),
1072    ARABIC_LIGATURE_THEH_WITH_REH => (
1073        &["\u{062B}\u{0631}"],
1074        ['\0', '\0', '\0', '\u{FC76}']
1075    ),
1076    ARABIC_LIGATURE_THEH_WITH_YEH => (
1077        &["\u{062B}\u{064A}"],
1078        ['\u{FC14}', '\0', '\0', '\u{FC7B}']
1079    ),
1080    ARABIC_LIGATURE_THEH_WITH_ZAIN => (
1081        &["\u{062B}\u{0632}"],
1082        ['\0', '\0', '\0', '\u{FC77}']
1083    ),
1084    ARABIC_LIGATURE_UIGHUR_KIRGHIZ_YEH_WITH_HAMZA_ABOVE_WITH_ALEF_MAKSURA => (
1085        &["\u{0626}\u{0649}"],
1086        ['\u{FBF9}', '\u{FBFB}', '\0', '\u{FBFA}']
1087    ),
1088    ARABIC_LIGATURE_YEH_WITH_ALEF_MAKSURA => (
1089        &["\u{064A}\u{0649}"],
1090        ['\u{FC59}', '\0', '\0', '\u{FC95}']
1091    ),
1092    ARABIC_LIGATURE_YEH_WITH_HAH => (
1093        &["\u{064A}\u{062D}"],
1094        ['\u{FC56}', '\u{FCDB}', '\0', '\0']
1095    ),
1096    ARABIC_LIGATURE_YEH_WITH_HAH_WITH_YEH => (
1097        &["\u{064A}\u{062D}\u{064A}"],
1098        ['\0', '\0', '\0', '\u{FDAE}']
1099    ),
1100    ARABIC_LIGATURE_YEH_WITH_HAMZA_ABOVE_WITH_AE => (
1101        &["\u{0626}\u{06D5}"],
1102        ['\u{FBEC}', '\0', '\0', '\u{FBED}']
1103    ),
1104    ARABIC_LIGATURE_YEH_WITH_HAMZA_ABOVE_WITH_ALEF => (
1105        &["\u{0626}\u{0627}"],
1106        ['\u{FBEA}', '\0', '\0', '\u{FBEB}']
1107    ),
1108    ARABIC_LIGATURE_YEH_WITH_HAMZA_ABOVE_WITH_ALEF_MAKSURA => (
1109        &["\u{0626}\u{0649}"],
1110        ['\u{FC03}', '\0', '\0', '\u{FC68}']
1111    ),
1112    ARABIC_LIGATURE_YEH_WITH_HAMZA_ABOVE_WITH_E => (
1113        &["\u{0626}\u{06D0}"],
1114        ['\u{FBF6}', '\u{FBF8}', '\0', '\u{FBF7}']
1115    ),
1116    ARABIC_LIGATURE_YEH_WITH_HAMZA_ABOVE_WITH_HAH => (
1117        &["\u{0626}\u{062D}"],
1118        ['\u{FC01}', '\u{FC98}', '\0', '\0']
1119    ),
1120    ARABIC_LIGATURE_YEH_WITH_HAMZA_ABOVE_WITH_HEH => (
1121        &["\u{0626}\u{0647}"],
1122        ['\0', '\u{FC9B}', '\u{FCE0}', '\0']
1123    ),
1124    ARABIC_LIGATURE_YEH_WITH_HAMZA_ABOVE_WITH_JEEM => (
1125        &["\u{0626}\u{062C}"],
1126        ['\u{FC00}', '\u{FC97}', '\0', '\0']
1127    ),
1128    ARABIC_LIGATURE_YEH_WITH_HAMZA_ABOVE_WITH_KHAH => (
1129        &["\u{0626}\u{062E}"],
1130        ['\0', '\u{FC99}', '\0', '\0']
1131    ),
1132    ARABIC_LIGATURE_YEH_WITH_HAMZA_ABOVE_WITH_MEEM => (
1133        &["\u{0626}\u{0645}"],
1134        ['\u{FC02}', '\u{FC9A}', '\u{FCDF}', '\u{FC66}']
1135    ),
1136    ARABIC_LIGATURE_YEH_WITH_HAMZA_ABOVE_WITH_NOON => (
1137        &["\u{0626}\u{0646}"],
1138        ['\0', '\0', '\0', '\u{FC67}']
1139    ),
1140    ARABIC_LIGATURE_YEH_WITH_HAMZA_ABOVE_WITH_OE => (
1141        &["\u{0626}\u{06C6}"],
1142        ['\u{FBF2}', '\0', '\0', '\u{FBF3}']
1143    ),
1144    ARABIC_LIGATURE_YEH_WITH_HAMZA_ABOVE_WITH_REH => (
1145        &["\u{0626}\u{0631}"],
1146        ['\0', '\0', '\0', '\u{FC64}']
1147    ),
1148    ARABIC_LIGATURE_YEH_WITH_HAMZA_ABOVE_WITH_U => (
1149        &["\u{0626}\u{06C7}"],
1150        ['\u{FBF0}', '\0', '\0', '\u{FBF1}']
1151    ),
1152    ARABIC_LIGATURE_YEH_WITH_HAMZA_ABOVE_WITH_WAW => (
1153        &["\u{0626}\u{0648}"],
1154        ['\u{FBEE}', '\0', '\0', '\u{FBEF}']
1155    ),
1156    ARABIC_LIGATURE_YEH_WITH_HAMZA_ABOVE_WITH_YEH => (
1157        &["\u{0626}\u{064A}"],
1158        ['\u{FC04}', '\0', '\0', '\u{FC69}']
1159    ),
1160    ARABIC_LIGATURE_YEH_WITH_HAMZA_ABOVE_WITH_YU => (
1161        &["\u{0626}\u{06C8}"],
1162        ['\u{FBF4}', '\0', '\0', '\u{FBF5}']
1163    ),
1164    ARABIC_LIGATURE_YEH_WITH_HAMZA_ABOVE_WITH_ZAIN => (
1165        &["\u{0626}\u{0632}"],
1166        ['\0', '\0', '\0', '\u{FC65}']
1167    ),
1168    ARABIC_LIGATURE_YEH_WITH_HEH => (
1169        &["\u{064A}\u{0647}"],
1170        ['\0', '\u{FCDE}', '\u{FCF1}', '\0']
1171    ),
1172    ARABIC_LIGATURE_YEH_WITH_JEEM => (
1173        &["\u{064A}\u{062C}"],
1174        ['\u{FC55}', '\u{FCDA}', '\0', '\0']
1175    ),
1176    ARABIC_LIGATURE_YEH_WITH_JEEM_WITH_YEH => (
1177        &["\u{064A}\u{062C}\u{064A}"],
1178        ['\0', '\0', '\0', '\u{FDAF}']
1179    ),
1180    ARABIC_LIGATURE_YEH_WITH_KHAH => (
1181        &["\u{064A}\u{062E}"],
1182        ['\u{FC57}', '\u{FCDC}', '\0', '\0']
1183    ),
1184    ARABIC_LIGATURE_YEH_WITH_MEEM => (
1185        &["\u{064A}\u{0645}"],
1186        ['\u{FC58}', '\u{FCDD}', '\u{FCF0}', '\u{FC93}']
1187    ),
1188    ARABIC_LIGATURE_YEH_WITH_MEEM_WITH_MEEM => (
1189        &["\u{064A}\u{0645}\u{0645}"],
1190        ['\0', '\u{FD9D}', '\0', '\u{FD9C}']
1191    ),
1192    ARABIC_LIGATURE_YEH_WITH_MEEM_WITH_YEH => (
1193        &["\u{064A}\u{0645}\u{064A}"],
1194        ['\0', '\0', '\0', '\u{FDB0}']
1195    ),
1196    ARABIC_LIGATURE_YEH_WITH_NOON => (
1197        &["\u{064A}\u{0646}"],
1198        ['\0', '\0', '\0', '\u{FC94}']
1199    ),
1200    ARABIC_LIGATURE_YEH_WITH_REH => (
1201        &["\u{064A}\u{0631}"],
1202        ['\0', '\0', '\0', '\u{FC91}']
1203    ),
1204    ARABIC_LIGATURE_YEH_WITH_YEH => (
1205        &["\u{064A}\u{064A}"],
1206        ['\u{FC5A}', '\0', '\0', '\u{FC96}']
1207    ),
1208    ARABIC_LIGATURE_YEH_WITH_ZAIN => (
1209        &["\u{064A}\u{0632}"],
1210        ['\0', '\0', '\0', '\u{FC92}']
1211    ),
1212    ARABIC_LIGATURE_ZAH_WITH_MEEM => (
1213        &["\u{0638}\u{0645}"],
1214        ['\u{FC28}', '\u{FCB9}', '\u{FD3B}', '\0']
1215    ),
1216];