disarm 0.15.0

Unicode canonicalization and TR39 visual confusable analysis: building blocks for text-security pipelines (homoglyph/bidi/zalgo handling) plus standards-based phonetic transliteration
Documentation
# Unicode UTS#39 confusables.txt 17.0.0, folded to Arabic, plus disarm cross-script additions (#336). Generated by scripts/gen_confusables.py - see docs/provenance.md.
0025	\u{066A}
0028	\u{FD3E}
0029	\u{FD3F}
002A	\u{066D}
002C	\u{060D}
002D	\u{06D4}
002E	\u{0660}
0049	\u{0627}
0056	\u{0667}
006C	\u{0627}
006F	\u{0647}
007C	\u{0627}
00B8	\u{060D}
00F6	\u{0629}
0196	\u{0627}
01C0	\u{0627}
0245	\u{0668}
02D7	\u{06D4}
0399	\u{0627}
039B	\u{0668}
03BF	\u{0647}
03C3	\u{0647}
03ED	\u{0647}
0406	\u{0627}
041B	\u{0668}
043E	\u{0647}
0474	\u{0667}
04C0	\u{0627}
04CF	\u{0627}
0585	\u{0647}
05C0	\u{0627}
05D5	\u{0627}
05DF	\u{0627}
05E1	\u{0647}
0701	\u{0660}
0702	\u{0660}
07CA	\u{0627}
088F	\u{0649}
0966	0
0967	1
09E6	0
0A66	0
0AE6	0
0B66	0
0BE6	0
0C02	\u{0647}
0C66	0
0C82	\u{0647}
0D02	\u{0647}
0D20	\u{0647}
0D66	0
0D82	\u{0647}
0E50	0
0ED0	0
101D	\u{0647}
1040	0
10FF	\u{0647}
13D9	\u{0667}
142F	\u{0667}
1431	\u{0668}
16C1	\u{0627}
17E0	0
1D0F	\u{0647}
1D11	\u{0647}
2010	\u{06D4}
2011	\u{06D4}
2012	\u{06D4}
2013	\u{06D4}
201A	\u{060D}
2024	\u{0660}
2030	\u{0609}
2031	\u{060A}
2043	\u{06D4}
204E	\u{066D}
2052	\u{066A}
20C1	\u{FDFC}
2110	\u{0627}
2111	\u{0627}
2113	\u{0627}
2134	\u{0647}
2160	\u{0627}
2164	\u{0667}
217C	\u{0627}
2212	\u{06D4}
2217	\u{066D}
2223	\u{0627}
2365	\u{0629}
23FD	\u{0627}
2768	\u{FD3E}
2769	\u{FD3F}
2772	\u{FD3E}
2773	\u{FD3F}
2796	\u{06D4}
2C92	\u{0627}
2C9F	\u{0647}
2CBA	\u{06D4}
2CBB	\u{06D4}
2D37	\u{0668}
2D38	\u{0667}
2D4F	\u{0627}
2E2E	\u{061F}
2E32	\u{060C}
2E35	\u{061B}
3014	\u{FD3E}
3015	\u{FD3F}
A4E5	\u{0668}
A4E6	\u{0667}
A4F2	\u{0627}
A4F8	\u{0660}
A4F9	\u{060D}
A60E	\u{0660}
A6CE	\u{0668}
A6DF	\u{0667}
A7DA	\u{0668}
A9CF	\u{0662}
AB3D	\u{0647}
FE58	\u{06D4}
FF29	\u{0627}
FF3B	\u{FD3E}
FF3D	\u{FD3F}
FF4C	\u{0627}
FF4F	\u{0647}
FFE8	\u{0627}
1028A	\u{0627}
1028D	\u{0668}
102E1	\u{062F}
102E4	\u{0648}
102E8	\u{0637}
102F2	\u{0635}
10309	\u{0627}
1031F	\u{066D}
10320	\u{0627}
1042C	\u{0647}
104B0	\u{0668}
104EA	\u{0647}
1051D	\u{0667}
10A50	\u{0660}
10EC6	\u{0646}
10EC7	\u{0680}
114D0	0
118A0	\u{0667}
118C8	\u{0647}
118D7	\u{0647}
118E4	4
11DDA	\u{0627}
11DE1	1
16EAA	\u{0627}
16F08	\u{0667}
16F28	\u{0627}
16F3D	\u{0668}
1CCDE	\u{0627}
1CCEB	\u{0667}
1CCF1	1
1D16D	\u{0660}
1D20D	\u{0667}
1D408	\u{0627}
1D415	\u{0667}
1D425	\u{0627}
1D428	\u{0647}
1D43C	\u{0627}
1D449	\u{0667}
1D459	\u{0627}
1D45C	\u{0647}
1D470	\u{0627}
1D47D	\u{0667}
1D48D	\u{0627}
1D490	\u{0647}
1D4B1	\u{0667}
1D4C1	\u{0627}
1D4D8	\u{0627}
1D4E5	\u{0667}
1D4F5	\u{0627}
1D4F8	\u{0647}
1D519	\u{0667}
1D529	\u{0627}
1D52C	\u{0647}
1D540	\u{0627}
1D54D	\u{0667}
1D55D	\u{0627}
1D560	\u{0647}
1D574	\u{0627}
1D581	\u{0667}
1D591	\u{0627}
1D594	\u{0647}
1D5A8	\u{0627}
1D5B5	\u{0667}
1D5C5	\u{0627}
1D5C8	\u{0647}
1D5DC	\u{0627}
1D5E9	\u{0667}
1D5F9	\u{0627}
1D5FC	\u{0647}
1D610	\u{0627}
1D61D	\u{0667}
1D62D	\u{0627}
1D630	\u{0647}
1D644	\u{0627}
1D651	\u{0667}
1D661	\u{0627}
1D664	\u{0647}
1D678	\u{0627}
1D685	\u{0667}
1D695	\u{0627}
1D698	\u{0647}
1D6B0	\u{0627}
1D6B2	\u{0668}
1D6D0	\u{0647}
1D6D4	\u{0647}
1D6EA	\u{0627}
1D6EC	\u{0668}
1D70A	\u{0647}
1D70E	\u{0647}
1D724	\u{0627}
1D726	\u{0668}
1D744	\u{0647}
1D748	\u{0647}
1D75E	\u{0627}
1D760	\u{0668}
1D77E	\u{0647}
1D782	\u{0647}
1D798	\u{0627}
1D79A	\u{0668}
1D7B8	\u{0647}
1D7BC	\u{0647}
1D7CF	1
1D7D9	1
1D7E3	1
1D7ED	1
1D7F7	1
1E8C7	\u{0627}
1E8C9	\u{0663}
1EE00	\u{0627}
1EE01	\u{0628}
1EE02	\u{062C}
1EE03	\u{062F}
1EE05	\u{0648}
1EE06	\u{0632}
1EE07	\u{062D}
1EE08	\u{0637}
1EE09	\u{0649}
1EE0A	\u{0643}
1EE0B	\u{0644}
1EE0C	\u{0645}
1EE0D	\u{0646}
1EE0E	\u{0633}
1EE0F	\u{0639}
1EE10	\u{0641}
1EE11	\u{0635}
1EE12	\u{0642}
1EE13	\u{0631}
1EE14	\u{0633}
1EE15	\u{062A}
1EE16	\u{0649}
1EE17	\u{062E}
1EE18	\u{0630}
1EE19	\u{0636}
1EE1A	\u{0638}
1EE1B	\u{063A}
1EE1C	\u{0649}
1EE1D	\u{0649}
1EE1E	\u{06A1}
1EE1F	\u{06A1}
1EE21	\u{0628}
1EE22	\u{062C}
1EE24	\u{0647}
1EE27	\u{062D}
1EE29	\u{0649}
1EE2A	\u{0643}
1EE2B	\u{0644}
1EE2C	\u{0645}
1EE2D	\u{0646}
1EE2E	\u{0633}
1EE2F	\u{0639}
1EE30	\u{0641}
1EE31	\u{0635}
1EE32	\u{0642}
1EE34	\u{0633}
1EE35	\u{062A}
1EE36	\u{0649}
1EE37	\u{062E}
1EE39	\u{0636}
1EE3B	\u{063A}
1EE42	\u{062C}
1EE47	\u{062D}
1EE49	\u{0649}
1EE4B	\u{0644}
1EE4D	\u{0646}
1EE4E	\u{0633}
1EE4F	\u{0639}
1EE51	\u{0635}
1EE52	\u{0642}
1EE54	\u{0633}
1EE57	\u{062E}
1EE59	\u{0636}
1EE5B	\u{063A}
1EE5D	\u{0649}
1EE5F	\u{06A1}
1EE61	\u{0628}
1EE62	\u{062C}
1EE64	\u{0647}
1EE67	\u{062D}
1EE68	\u{0637}
1EE69	\u{0649}
1EE6A	\u{0643}
1EE6C	\u{0645}
1EE6D	\u{0646}
1EE6E	\u{0633}
1EE6F	\u{0639}
1EE70	\u{0641}
1EE71	\u{0635}
1EE72	\u{0642}
1EE74	\u{0633}
1EE75	\u{062A}
1EE76	\u{0649}
1EE77	\u{062E}
1EE79	\u{0636}
1EE7A	\u{0638}
1EE7B	\u{063A}
1EE7C	\u{0649}
1EE7E	\u{06A1}
1EE80	\u{0627}
1EE81	\u{0628}
1EE82	\u{062C}
1EE83	\u{062F}
1EE84	\u{0647}
1EE85	\u{0648}
1EE86	\u{0632}
1EE87	\u{062D}
1EE88	\u{0637}
1EE89	\u{0649}
1EE8B	\u{0644}
1EE8C	\u{0645}
1EE8D	\u{0646}
1EE8E	\u{0633}
1EE8F	\u{0639}
1EE90	\u{0641}
1EE91	\u{0635}
1EE92	\u{0642}
1EE93	\u{0631}
1EE94	\u{0633}
1EE95	\u{062A}
1EE96	\u{0649}
1EE97	\u{062E}
1EE98	\u{0630}
1EE99	\u{0636}
1EE9A	\u{0638}
1EE9B	\u{063A}
1EEA1	\u{0628}
1EEA2	\u{062C}
1EEA3	\u{062F}
1EEA5	\u{0648}
1EEA6	\u{0632}
1EEA7	\u{062D}
1EEA8	\u{0637}
1EEA9	\u{0649}
1EEAB	\u{0644}
1EEAC	\u{0645}
1EEAD	\u{0646}
1EEAE	\u{0633}
1EEAF	\u{0639}
1EEB0	\u{0641}
1EEB1	\u{0635}
1EEB2	\u{0642}
1EEB3	\u{0631}
1EEB4	\u{0633}
1EEB5	\u{062A}
1EEB6	\u{0649}
1EEB7	\u{062E}
1EEB8	\u{0630}
1EEB9	\u{0636}
1EEBA	\u{0638}
1EEBB	\u{063A}
1FBF1	1