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