xref: /aosp_15_r20/external/fonttools/Lib/fontTools/merge/unicode.py (revision e1fe3e4ad2793916b15cccdc4a7da52a7e1dd0e9)
1# Copyright 2021 Behdad Esfahbod. All Rights Reserved.
2
3
4def is_Default_Ignorable(u):
5    # http://www.unicode.org/reports/tr44/#Default_Ignorable_Code_Point
6    #
7    # TODO Move me to unicodedata module and autogenerate.
8    #
9    # Unicode 14.0:
10    # $ grep '; Default_Ignorable_Code_Point ' DerivedCoreProperties.txt | sed 's/;.*#/#/'
11    # 00AD          # Cf       SOFT HYPHEN
12    # 034F          # Mn       COMBINING GRAPHEME JOINER
13    # 061C          # Cf       ARABIC LETTER MARK
14    # 115F..1160    # Lo   [2] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER
15    # 17B4..17B5    # Mn   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
16    # 180B..180D    # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
17    # 180E          # Cf       MONGOLIAN VOWEL SEPARATOR
18    # 180F          # Mn       MONGOLIAN FREE VARIATION SELECTOR FOUR
19    # 200B..200F    # Cf   [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK
20    # 202A..202E    # Cf   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
21    # 2060..2064    # Cf   [5] WORD JOINER..INVISIBLE PLUS
22    # 2065          # Cn       <reserved-2065>
23    # 2066..206F    # Cf  [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
24    # 3164          # Lo       HANGUL FILLER
25    # FE00..FE0F    # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
26    # FEFF          # Cf       ZERO WIDTH NO-BREAK SPACE
27    # FFA0          # Lo       HALFWIDTH HANGUL FILLER
28    # FFF0..FFF8    # Cn   [9] <reserved-FFF0>..<reserved-FFF8>
29    # 1BCA0..1BCA3  # Cf   [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
30    # 1D173..1D17A  # Cf   [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
31    # E0000         # Cn       <reserved-E0000>
32    # E0001         # Cf       LANGUAGE TAG
33    # E0002..E001F  # Cn  [30] <reserved-E0002>..<reserved-E001F>
34    # E0020..E007F  # Cf  [96] TAG SPACE..CANCEL TAG
35    # E0080..E00FF  # Cn [128] <reserved-E0080>..<reserved-E00FF>
36    # E0100..E01EF  # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
37    # E01F0..E0FFF  # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
38    return (
39        u == 0x00AD
40        or u == 0x034F  # Cf       SOFT HYPHEN
41        or u == 0x061C  # Mn       COMBINING GRAPHEME JOINER
42        or 0x115F <= u <= 0x1160  # Cf       ARABIC LETTER MARK
43        or 0x17B4  # Lo   [2] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER
44        <= u
45        <= 0x17B5
46        or 0x180B  # Mn   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
47        <= u
48        <= 0x180D
49        or u  # Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
50        == 0x180E
51        or u == 0x180F  # Cf       MONGOLIAN VOWEL SEPARATOR
52        or 0x200B <= u <= 0x200F  # Mn       MONGOLIAN FREE VARIATION SELECTOR FOUR
53        or 0x202A <= u <= 0x202E  # Cf   [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK
54        or 0x2060  # Cf   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
55        <= u
56        <= 0x2064
57        or u == 0x2065  # Cf   [5] WORD JOINER..INVISIBLE PLUS
58        or 0x2066 <= u <= 0x206F  # Cn       <reserved-2065>
59        or u == 0x3164  # Cf  [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
60        or 0xFE00 <= u <= 0xFE0F  # Lo       HANGUL FILLER
61        or u == 0xFEFF  # Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
62        or u == 0xFFA0  # Cf       ZERO WIDTH NO-BREAK SPACE
63        or 0xFFF0 <= u <= 0xFFF8  # Lo       HALFWIDTH HANGUL FILLER
64        or 0x1BCA0 <= u <= 0x1BCA3  # Cn   [9] <reserved-FFF0>..<reserved-FFF8>
65        or 0x1D173  # Cf   [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
66        <= u
67        <= 0x1D17A
68        or u == 0xE0000  # Cf   [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
69        or u == 0xE0001  # Cn       <reserved-E0000>
70        or 0xE0002 <= u <= 0xE001F  # Cf       LANGUAGE TAG
71        or 0xE0020 <= u <= 0xE007F  # Cn  [30] <reserved-E0002>..<reserved-E001F>
72        or 0xE0080 <= u <= 0xE00FF  # Cf  [96] TAG SPACE..CANCEL TAG
73        or 0xE0100 <= u <= 0xE01EF  # Cn [128] <reserved-E0080>..<reserved-E00FF>
74        or 0xE01F0  # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
75        <= u
76        <= 0xE0FFF
77        or False  # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
78    )
79