-- Adapted from a pure haskell port of wcwidth by agentm, released under the -- "Unlicense" licence, taken from: -- https://raw.githubusercontent.com/agentm/project-m36/master/src/lib/ProjectM36/WCWidth.hs module WCWidth (wcwidth) where import Data.Char import Data.Set.Range wIDEEASTASIAN :: RangeSet Int wIDEEASTASIAN = foldr insertRange empty [ (0x1100, 0x115f), -- Hangul Choseong Kiyeok ..Hangul Choseong Filler (0x231a, 0x231b), -- Watch ..Hourglass (0x2329, 0x232a), -- Left-pointing Angle Brac..Right-pointing Angle Bra (0x23e9, 0x23ec), -- Black Right-pointing Dou..Black Down-pointing Doub (0x23f0, 0x23f0), -- Alarm Clock ..Alarm Clock (0x23f3, 0x23f3), -- Hourglass With Flowing S..Hourglass With Flowing S (0x25fd, 0x25fe), -- White Medium Small Squar..Black Medium Small Squar (0x2614, 0x2615), -- Umbrella With Rain Drops..Hot Beverage (0x2648, 0x2653), -- Aries ..Pisces (0x267f, 0x267f), -- Wheelchair Symbol ..Wheelchair Symbol (0x2693, 0x2693), -- Anchor ..Anchor (0x26a1, 0x26a1), -- High Voltage Sign ..High Voltage Sign (0x26aa, 0x26ab), -- Medium White Circle ..Medium Black Circle (0x26bd, 0x26be), -- Soccer Ball ..Baseball (0x26c4, 0x26c5), -- Snowman Without Snow ..Sun Behind Cloud (0x26ce, 0x26ce), -- Ophiuchus ..Ophiuchus (0x26d4, 0x26d4), -- No Entry ..No Entry (0x26ea, 0x26ea), -- Church ..Church (0x26f2, 0x26f3), -- Fountain ..Flag In Hole (0x26f5, 0x26f5), -- Sailboat ..Sailboat (0x26fa, 0x26fa), -- Tent ..Tent (0x26fd, 0x26fd), -- Fuel Pump ..Fuel Pump (0x2705, 0x2705), -- White Heavy Check Mark ..White Heavy Check Mark (0x270a, 0x270b), -- Raised Fist ..Raised Hand (0x2728, 0x2728), -- Sparkles ..Sparkles (0x274c, 0x274c), -- Cross Mark ..Cross Mark (0x274e, 0x274e), -- Negative Squared Cross M..Negative Squared Cross M (0x2753, 0x2755), -- Black Question Mark Orna..White Exclamation Mark O (0x2757, 0x2757), -- Heavy Exclamation Mark S..Heavy Exclamation Mark S (0x2795, 0x2797), -- Heavy Plus Sign ..Heavy Division Sign (0x27b0, 0x27b0), -- Curly Loop ..Curly Loop (0x27bf, 0x27bf), -- Double Curly Loop ..Double Curly Loop (0x2b1b, 0x2b1c), -- Black Large Square ..White Large Square (0x2b50, 0x2b50), -- White Medium Star ..White Medium Star (0x2b55, 0x2b55), -- Heavy Large Circle ..Heavy Large Circle (0x2e80, 0x2e99), -- Cjk Radical Repeat ..Cjk Radical Rap (0x2e9b, 0x2ef3), -- Cjk Radical Choke ..Cjk Radical C-simplified (0x2f00, 0x2fd5), -- Kangxi Radical One ..Kangxi Radical Flute (0x2ff0, 0x2ffb), -- Ideographic Description ..Ideographic Description (0x3000, 0x303e), -- Ideographic Space ..Ideographic Variation In (0x3041, 0x3096), -- Hiragana Letter Small A ..Hiragana Letter Small Ke (0x3099, 0x30ff), -- Combining Katakana-hirag..Katakana Digraph Koto (0x3105, 0x312d), -- Bopomofo Letter B ..Bopomofo Letter Ih (0x3131, 0x318e), -- Hangul Letter Kiyeok ..Hangul Letter Araeae (0x3190, 0x31ba), -- Ideographic Annotation L..Bopomofo Letter Zy (0x31c0, 0x31e3), -- Cjk Stroke T ..Cjk Stroke Q (0x31f0, 0x321e), -- Katakana Letter Small Ku..Parenthesized Korean Cha (0x3220, 0x3247), -- Parenthesized Ideograph ..Circled Ideograph Koto (0x3250, 0x32fe), -- Partnership Sign ..Circled Katakana Wo (0x3300, 0x4dbf), -- Square Apaato .. (0x4e00, 0xa48c), -- Cjk Unified Ideograph-4e..Yi Syllable Yyr (0xa490, 0xa4c6), -- Yi Radical Qot ..Yi Radical Ke (0xa960, 0xa97c), -- Hangul Choseong Tikeut-m..Hangul Choseong Ssangyeo (0xac00, 0xd7a3), -- Hangul Syllable Ga ..Hangul Syllable Hih (0xf900, 0xfaff), -- Cjk Compatibility Ideogr.. (0xfe10, 0xfe19), -- Presentation Form For Ve..Presentation Form For Ve (0xfe30, 0xfe52), -- Presentation Form For Ve..Small Full Stop (0xfe54, 0xfe66), -- Small Semicolon ..Small Equals Sign (0xfe68, 0xfe6b), -- Small Reverse Solidus ..Small Commercial At (0xff01, 0xff60), -- Fullwidth Exclamation Ma..Fullwidth Right White Pa (0xffe0, 0xffe6), -- Fullwidth Cent Sign ..Fullwidth Won Sign (0x16fe0, 0x16fe0), -- (nil) .. (0x17000, 0x187ec), -- (nil) .. (0x18800, 0x18af2), -- (nil) .. (0x1b000, 0x1b001), -- Katakana Letter Archaic ..Hiragana Letter Archaic (0x1f004, 0x1f004), -- Mahjong Tile Red Dragon ..Mahjong Tile Red Dragon (0x1f0cf, 0x1f0cf), -- Playing Card Black Joker..Playing Card Black Joker (0x1f18e, 0x1f18e), -- Negative Squared Ab ..Negative Squared Ab (0x1f191, 0x1f19a), -- Squared Cl ..Squared Vs (0x1f200, 0x1f202), -- Square Hiragana Hoka ..Squared Katakana Sa (0x1f210, 0x1f23b), -- Squared Cjk Unified Ideo.. (0x1f240, 0x1f248), -- Tortoise Shell Bracketed..Tortoise Shell Bracketed (0x1f250, 0x1f251), -- Circled Ideograph Advant..Circled Ideograph Accept (0x1f300, 0x1f320), -- Cyclone ..Shooting Star (0x1f32d, 0x1f335), -- Hot Dog ..Cactus (0x1f337, 0x1f37c), -- Tulip ..Baby Bottle (0x1f37e, 0x1f393), -- Bottle With Popping Cork..Graduation Cap (0x1f3a0, 0x1f3ca), -- Carousel Horse ..Swimmer (0x1f3cf, 0x1f3d3), -- Cricket Bat And Ball ..Table Tennis Paddle And (0x1f3e0, 0x1f3f0), -- House Building ..European Castle (0x1f3f4, 0x1f3f4), -- Waving Black Flag ..Waving Black Flag (0x1f3f8, 0x1f43e), -- Badminton Racquet And Sh..Paw Prints (0x1f440, 0x1f440), -- Eyes ..Eyes (0x1f442, 0x1f4fc), -- Ear ..Videocassette (0x1f4ff, 0x1f53d), -- Prayer Beads ..Down-pointing Small Red (0x1f54b, 0x1f54e), -- Kaaba ..Menorah With Nine Branch (0x1f550, 0x1f567), -- Clock Face One Oclock ..Clock Face Twelve-thirty (0x1f57a, 0x1f57a), -- (nil) .. (0x1f595, 0x1f596), -- Reversed Hand With Middl..Raised Hand With Part Be (0x1f5a4, 0x1f5a4), -- (nil) .. (0x1f5fb, 0x1f64f), -- Mount Fuji ..Person With Folded Hands (0x1f680, 0x1f6c5), -- Rocket ..Left Luggage (0x1f6cc, 0x1f6cc), -- Sleeping Accommodation ..Sleeping Accommodation (0x1f6d0, 0x1f6d2), -- Place Of Worship .. (0x1f6eb, 0x1f6ec), -- Airplane Departure ..Airplane Arriving (0x1f6f4, 0x1f6f6), -- (nil) .. (0x1f910, 0x1f91e), -- Zipper-mouth Face .. (0x1f920, 0x1f927), -- (nil) .. (0x1f930, 0x1f930), -- (nil) .. (0x1f933, 0x1f93e), -- (nil) .. (0x1f940, 0x1f94b), -- (nil) .. (0x1f950, 0x1f95e), -- (nil) .. (0x1f980, 0x1f991), -- Crab .. (0x1f9c0, 0x1f9c0), -- Cheese Wedge ..Cheese Wedge (0x20000, 0x2fffd), -- Cjk Unified Ideograph-20.. (0x30000, 0x3fffd) -- (nil) .. ] zEROWIDTH :: RangeSet Int zEROWIDTH = foldr insertRange empty [ (0x0300, 0x036f), -- Combining Grave Accent ..Combining Latin Small Le (0x0483, 0x0489), -- Combining Cyrillic Titlo..Combining Cyrillic Milli (0x0591, 0x05bd), -- Hebrew Accent Etnahta ..Hebrew Point Meteg (0x05bf, 0x05bf), -- Hebrew Point Rafe ..Hebrew Point Rafe (0x05c1, 0x05c2), -- Hebrew Point Shin Dot ..Hebrew Point Sin Dot (0x05c4, 0x05c5), -- Hebrew Mark Upper Dot ..Hebrew Mark Lower Dot (0x05c7, 0x05c7), -- Hebrew Point Qamats Qata..Hebrew Point Qamats Qata (0x0610, 0x061a), -- Arabic Sign Sallallahou ..Arabic Small Kasra (0x064b, 0x065f), -- Arabic Fathatan ..Arabic Wavy Hamza Below (0x0670, 0x0670), -- Arabic Letter Superscrip..Arabic Letter Superscrip (0x06d6, 0x06dc), -- Arabic Small High Ligatu..Arabic Small High Seen (0x06df, 0x06e4), -- Arabic Small High Rounde..Arabic Small High Madda (0x06e7, 0x06e8), -- Arabic Small High Yeh ..Arabic Small High Noon (0x06ea, 0x06ed), -- Arabic Empty Centre Low ..Arabic Small Low Meem (0x0711, 0x0711), -- Syriac Letter Superscrip..Syriac Letter Superscrip (0x0730, 0x074a), -- Syriac Pthaha Above ..Syriac Barrekh (0x07a6, 0x07b0), -- Thaana Abafili ..Thaana Sukun (0x07eb, 0x07f3), -- Nko Combining Short High..Nko Combining Double Dot (0x0816, 0x0819), -- Samaritan Mark In ..Samaritan Mark Dagesh (0x081b, 0x0823), -- Samaritan Mark Epentheti..Samaritan Vowel Sign A (0x0825, 0x0827), -- Samaritan Vowel Sign Sho..Samaritan Vowel Sign U (0x0829, 0x082d), -- Samaritan Vowel Sign Lon..Samaritan Mark Nequdaa (0x0859, 0x085b), -- Mandaic Affrication Mark..Mandaic Gemination Mark (0x08d4, 0x08e1), -- (nil) .. (0x08e3, 0x0902), -- Arabic Turned Damma Belo..Devanagari Sign Anusvara (0x093a, 0x093a), -- Devanagari Vowel Sign Oe..Devanagari Vowel Sign Oe (0x093c, 0x093c), -- Devanagari Sign Nukta ..Devanagari Sign Nukta (0x0941, 0x0948), -- Devanagari Vowel Sign U ..Devanagari Vowel Sign Ai (0x094d, 0x094d), -- Devanagari Sign Virama ..Devanagari Sign Virama (0x0951, 0x0957), -- Devanagari Stress Sign U..Devanagari Vowel Sign Uu (0x0962, 0x0963), -- Devanagari Vowel Sign Vo..Devanagari Vowel Sign Vo (0x0981, 0x0981), -- Bengali Sign Candrabindu..Bengali Sign Candrabindu (0x09bc, 0x09bc), -- Bengali Sign Nukta ..Bengali Sign Nukta (0x09c1, 0x09c4), -- Bengali Vowel Sign U ..Bengali Vowel Sign Vocal (0x09cd, 0x09cd), -- Bengali Sign Virama ..Bengali Sign Virama (0x09e2, 0x09e3), -- Bengali Vowel Sign Vocal..Bengali Vowel Sign Vocal (0x0a01, 0x0a02), -- Gurmukhi Sign Adak Bindi..Gurmukhi Sign Bindi (0x0a3c, 0x0a3c), -- Gurmukhi Sign Nukta ..Gurmukhi Sign Nukta (0x0a41, 0x0a42), -- Gurmukhi Vowel Sign U ..Gurmukhi Vowel Sign Uu (0x0a47, 0x0a48), -- Gurmukhi Vowel Sign Ee ..Gurmukhi Vowel Sign Ai (0x0a4b, 0x0a4d), -- Gurmukhi Vowel Sign Oo ..Gurmukhi Sign Virama (0x0a51, 0x0a51), -- Gurmukhi Sign Udaat ..Gurmukhi Sign Udaat (0x0a70, 0x0a71), -- Gurmukhi Tippi ..Gurmukhi Addak (0x0a75, 0x0a75), -- Gurmukhi Sign Yakash ..Gurmukhi Sign Yakash (0x0a81, 0x0a82), -- Gujarati Sign Candrabind..Gujarati Sign Anusvara (0x0abc, 0x0abc), -- Gujarati Sign Nukta ..Gujarati Sign Nukta (0x0ac1, 0x0ac5), -- Gujarati Vowel Sign U ..Gujarati Vowel Sign Cand (0x0ac7, 0x0ac8), -- Gujarati Vowel Sign E ..Gujarati Vowel Sign Ai (0x0acd, 0x0acd), -- Gujarati Sign Virama ..Gujarati Sign Virama (0x0ae2, 0x0ae3), -- Gujarati Vowel Sign Voca..Gujarati Vowel Sign Voca (0x0b01, 0x0b01), -- Oriya Sign Candrabindu ..Oriya Sign Candrabindu (0x0b3c, 0x0b3c), -- Oriya Sign Nukta ..Oriya Sign Nukta (0x0b3f, 0x0b3f), -- Oriya Vowel Sign I ..Oriya Vowel Sign I (0x0b41, 0x0b44), -- Oriya Vowel Sign U ..Oriya Vowel Sign Vocalic (0x0b4d, 0x0b4d), -- Oriya Sign Virama ..Oriya Sign Virama (0x0b56, 0x0b56), -- Oriya Ai Length Mark ..Oriya Ai Length Mark (0x0b62, 0x0b63), -- Oriya Vowel Sign Vocalic..Oriya Vowel Sign Vocalic (0x0b82, 0x0b82), -- Tamil Sign Anusvara ..Tamil Sign Anusvara (0x0bc0, 0x0bc0), -- Tamil Vowel Sign Ii ..Tamil Vowel Sign Ii (0x0bcd, 0x0bcd), -- Tamil Sign Virama ..Tamil Sign Virama (0x0c00, 0x0c00), -- Telugu Sign Combining Ca..Telugu Sign Combining Ca (0x0c3e, 0x0c40), -- Telugu Vowel Sign Aa ..Telugu Vowel Sign Ii (0x0c46, 0x0c48), -- Telugu Vowel Sign E ..Telugu Vowel Sign Ai (0x0c4a, 0x0c4d), -- Telugu Vowel Sign O ..Telugu Sign Virama (0x0c55, 0x0c56), -- Telugu Length Mark ..Telugu Ai Length Mark (0x0c62, 0x0c63), -- Telugu Vowel Sign Vocali..Telugu Vowel Sign Vocali (0x0c81, 0x0c81), -- Kannada Sign Candrabindu..Kannada Sign Candrabindu (0x0cbc, 0x0cbc), -- Kannada Sign Nukta ..Kannada Sign Nukta (0x0cbf, 0x0cbf), -- Kannada Vowel Sign I ..Kannada Vowel Sign I (0x0cc6, 0x0cc6), -- Kannada Vowel Sign E ..Kannada Vowel Sign E (0x0ccc, 0x0ccd), -- Kannada Vowel Sign Au ..Kannada Sign Virama (0x0ce2, 0x0ce3), -- Kannada Vowel Sign Vocal..Kannada Vowel Sign Vocal (0x0d01, 0x0d01), -- Malayalam Sign Candrabin..Malayalam Sign Candrabin (0x0d41, 0x0d44), -- Malayalam Vowel Sign U ..Malayalam Vowel Sign Voc (0x0d4d, 0x0d4d), -- Malayalam Sign Virama ..Malayalam Sign Virama (0x0d62, 0x0d63), -- Malayalam Vowel Sign Voc..Malayalam Vowel Sign Voc (0x0dca, 0x0dca), -- Sinhala Sign Al-lakuna ..Sinhala Sign Al-lakuna (0x0dd2, 0x0dd4), -- Sinhala Vowel Sign Ketti..Sinhala Vowel Sign Ketti (0x0dd6, 0x0dd6), -- Sinhala Vowel Sign Diga ..Sinhala Vowel Sign Diga (0x0e31, 0x0e31), -- Thai Character Mai Han-a..Thai Character Mai Han-a (0x0e34, 0x0e3a), -- Thai Character Sara I ..Thai Character Phinthu (0x0e47, 0x0e4e), -- Thai Character Maitaikhu..Thai Character Yamakkan (0x0eb1, 0x0eb1), -- Lao Vowel Sign Mai Kan ..Lao Vowel Sign Mai Kan (0x0eb4, 0x0eb9), -- Lao Vowel Sign I ..Lao Vowel Sign Uu (0x0ebb, 0x0ebc), -- Lao Vowel Sign Mai Kon ..Lao Semivowel Sign Lo (0x0ec8, 0x0ecd), -- Lao Tone Mai Ek ..Lao Niggahita (0x0f18, 0x0f19), -- Tibetan Astrological Sig..Tibetan Astrological Sig (0x0f35, 0x0f35), -- Tibetan Mark Ngas Bzung ..Tibetan Mark Ngas Bzung (0x0f37, 0x0f37), -- Tibetan Mark Ngas Bzung ..Tibetan Mark Ngas Bzung (0x0f39, 0x0f39), -- Tibetan Mark Tsa -phru ..Tibetan Mark Tsa -phru (0x0f71, 0x0f7e), -- Tibetan Vowel Sign Aa ..Tibetan Sign Rjes Su Nga (0x0f80, 0x0f84), -- Tibetan Vowel Sign Rever..Tibetan Mark Halanta (0x0f86, 0x0f87), -- Tibetan Sign Lci Rtags ..Tibetan Sign Yang Rtags (0x0f8d, 0x0f97), -- Tibetan Subjoined Sign L..Tibetan Subjoined Letter (0x0f99, 0x0fbc), -- Tibetan Subjoined Letter..Tibetan Subjoined Letter (0x0fc6, 0x0fc6), -- Tibetan Symbol Padma Gda..Tibetan Symbol Padma Gda (0x102d, 0x1030), -- Myanmar Vowel Sign I ..Myanmar Vowel Sign Uu (0x1032, 0x1037), -- Myanmar Vowel Sign Ai ..Myanmar Sign Dot Below (0x1039, 0x103a), -- Myanmar Sign Virama ..Myanmar Sign Asat (0x103d, 0x103e), -- Myanmar Consonant Sign M..Myanmar Consonant Sign M (0x1058, 0x1059), -- Myanmar Vowel Sign Vocal..Myanmar Vowel Sign Vocal (0x105e, 0x1060), -- Myanmar Consonant Sign M..Myanmar Consonant Sign M (0x1071, 0x1074), -- Myanmar Vowel Sign Geba ..Myanmar Vowel Sign Kayah (0x1082, 0x1082), -- Myanmar Consonant Sign S..Myanmar Consonant Sign S (0x1085, 0x1086), -- Myanmar Vowel Sign Shan ..Myanmar Vowel Sign Shan (0x108d, 0x108d), -- Myanmar Sign Shan Counci..Myanmar Sign Shan Counci (0x109d, 0x109d), -- Myanmar Vowel Sign Aiton..Myanmar Vowel Sign Aiton (0x135d, 0x135f), -- Ethiopic Combining Gemin..Ethiopic Combining Gemin (0x1712, 0x1714), -- Tagalog Vowel Sign I ..Tagalog Sign Virama (0x1732, 0x1734), -- Hanunoo Vowel Sign I ..Hanunoo Sign Pamudpod (0x1752, 0x1753), -- Buhid Vowel Sign I ..Buhid Vowel Sign U (0x1772, 0x1773), -- Tagbanwa Vowel Sign I ..Tagbanwa Vowel Sign U (0x17b4, 0x17b5), -- Khmer Vowel Inherent Aq ..Khmer Vowel Inherent Aa (0x17b7, 0x17bd), -- Khmer Vowel Sign I ..Khmer Vowel Sign Ua (0x17c6, 0x17c6), -- Khmer Sign Nikahit ..Khmer Sign Nikahit (0x17c9, 0x17d3), -- Khmer Sign Muusikatoan ..Khmer Sign Bathamasat (0x17dd, 0x17dd), -- Khmer Sign Atthacan ..Khmer Sign Atthacan (0x180b, 0x180d), -- Mongolian Free Variation..Mongolian Free Variation (0x1885, 0x1886), -- Mongolian Letter Ali Gal..Mongolian Letter Ali Gal (0x18a9, 0x18a9), -- Mongolian Letter Ali Gal..Mongolian Letter Ali Gal (0x1920, 0x1922), -- Limbu Vowel Sign A ..Limbu Vowel Sign U (0x1927, 0x1928), -- Limbu Vowel Sign E ..Limbu Vowel Sign O (0x1932, 0x1932), -- Limbu Small Letter Anusv..Limbu Small Letter Anusv (0x1939, 0x193b), -- Limbu Sign Mukphreng ..Limbu Sign Sa-i (0x1a17, 0x1a18), -- Buginese Vowel Sign I ..Buginese Vowel Sign U (0x1a1b, 0x1a1b), -- Buginese Vowel Sign Ae ..Buginese Vowel Sign Ae (0x1a56, 0x1a56), -- Tai Tham Consonant Sign ..Tai Tham Consonant Sign (0x1a58, 0x1a5e), -- Tai Tham Sign Mai Kang L..Tai Tham Consonant Sign (0x1a60, 0x1a60), -- Tai Tham Sign Sakot ..Tai Tham Sign Sakot (0x1a62, 0x1a62), -- Tai Tham Vowel Sign Mai ..Tai Tham Vowel Sign Mai (0x1a65, 0x1a6c), -- Tai Tham Vowel Sign I ..Tai Tham Vowel Sign Oa B (0x1a73, 0x1a7c), -- Tai Tham Vowel Sign Oa A..Tai Tham Sign Khuen-lue (0x1a7f, 0x1a7f), -- Tai Tham Combining Crypt..Tai Tham Combining Crypt (0x1ab0, 0x1abe), -- Combining Doubled Circum..Combining Parentheses Ov (0x1b00, 0x1b03), -- Balinese Sign Ulu Ricem ..Balinese Sign Surang (0x1b34, 0x1b34), -- Balinese Sign Rerekan ..Balinese Sign Rerekan (0x1b36, 0x1b3a), -- Balinese Vowel Sign Ulu ..Balinese Vowel Sign Ra R (0x1b3c, 0x1b3c), -- Balinese Vowel Sign La L..Balinese Vowel Sign La L (0x1b42, 0x1b42), -- Balinese Vowel Sign Pepe..Balinese Vowel Sign Pepe (0x1b6b, 0x1b73), -- Balinese Musical Symbol ..Balinese Musical Symbol (0x1b80, 0x1b81), -- Sundanese Sign Panyecek ..Sundanese Sign Panglayar (0x1ba2, 0x1ba5), -- Sundanese Consonant Sign..Sundanese Vowel Sign Pan (0x1ba8, 0x1ba9), -- Sundanese Vowel Sign Pam..Sundanese Vowel Sign Pan (0x1bab, 0x1bad), -- Sundanese Sign Virama ..Sundanese Consonant Sign (0x1be6, 0x1be6), -- Batak Sign Tompi ..Batak Sign Tompi (0x1be8, 0x1be9), -- Batak Vowel Sign Pakpak ..Batak Vowel Sign Ee (0x1bed, 0x1bed), -- Batak Vowel Sign Karo O ..Batak Vowel Sign Karo O (0x1bef, 0x1bf1), -- Batak Vowel Sign U For S..Batak Consonant Sign H (0x1c2c, 0x1c33), -- Lepcha Vowel Sign E ..Lepcha Consonant Sign T (0x1c36, 0x1c37), -- Lepcha Sign Ran ..Lepcha Sign Nukta (0x1cd0, 0x1cd2), -- Vedic Tone Karshana ..Vedic Tone Prenkha (0x1cd4, 0x1ce0), -- Vedic Sign Yajurvedic Mi..Vedic Tone Rigvedic Kash (0x1ce2, 0x1ce8), -- Vedic Sign Visarga Svari..Vedic Sign Visarga Anuda (0x1ced, 0x1ced), -- Vedic Sign Tiryak ..Vedic Sign Tiryak (0x1cf4, 0x1cf4), -- Vedic Tone Candra Above ..Vedic Tone Candra Above (0x1cf8, 0x1cf9), -- Vedic Tone Ring Above ..Vedic Tone Double Ring A (0x1dc0, 0x1df5), -- Combining Dotted Grave A..Combining Up Tack Above (0x1dfb, 0x1dff), -- (nil) ..Combining Right Arrowhea (0x20d0, 0x20f0), -- Combining Left Harpoon A..Combining Asterisk Above (0x2cef, 0x2cf1), -- Coptic Combining Ni Abov..Coptic Combining Spiritu (0x2d7f, 0x2d7f), -- Tifinagh Consonant Joine..Tifinagh Consonant Joine (0x2de0, 0x2dff), -- Combining Cyrillic Lette..Combining Cyrillic Lette (0x302a, 0x302d), -- Ideographic Level Tone M..Ideographic Entering Ton (0x3099, 0x309a), -- Combining Katakana-hirag..Combining Katakana-hirag (0xa66f, 0xa672), -- Combining Cyrillic Vzmet..Combining Cyrillic Thous (0xa674, 0xa67d), -- Combining Cyrillic Lette..Combining Cyrillic Payer (0xa69e, 0xa69f), -- Combining Cyrillic Lette..Combining Cyrillic Lette (0xa6f0, 0xa6f1), -- Bamum Combining Mark Koq..Bamum Combining Mark Tuk (0xa802, 0xa802), -- Syloti Nagri Sign Dvisva..Syloti Nagri Sign Dvisva (0xa806, 0xa806), -- Syloti Nagri Sign Hasant..Syloti Nagri Sign Hasant (0xa80b, 0xa80b), -- Syloti Nagri Sign Anusva..Syloti Nagri Sign Anusva (0xa825, 0xa826), -- Syloti Nagri Vowel Sign ..Syloti Nagri Vowel Sign (0xa8c4, 0xa8c5), -- Saurashtra Sign Virama .. (0xa8e0, 0xa8f1), -- Combining Devanagari Dig..Combining Devanagari Sig (0xa926, 0xa92d), -- Kayah Li Vowel Ue ..Kayah Li Tone Calya Plop (0xa947, 0xa951), -- Rejang Vowel Sign I ..Rejang Consonant Sign R (0xa980, 0xa982), -- Javanese Sign Panyangga ..Javanese Sign Layar (0xa9b3, 0xa9b3), -- Javanese Sign Cecak Telu..Javanese Sign Cecak Telu (0xa9b6, 0xa9b9), -- Javanese Vowel Sign Wulu..Javanese Vowel Sign Suku (0xa9bc, 0xa9bc), -- Javanese Vowel Sign Pepe..Javanese Vowel Sign Pepe (0xa9e5, 0xa9e5), -- Myanmar Sign Shan Saw ..Myanmar Sign Shan Saw (0xaa29, 0xaa2e), -- Cham Vowel Sign Aa ..Cham Vowel Sign Oe (0xaa31, 0xaa32), -- Cham Vowel Sign Au ..Cham Vowel Sign Ue (0xaa35, 0xaa36), -- Cham Consonant Sign La ..Cham Consonant Sign Wa (0xaa43, 0xaa43), -- Cham Consonant Sign Fina..Cham Consonant Sign Fina (0xaa4c, 0xaa4c), -- Cham Consonant Sign Fina..Cham Consonant Sign Fina (0xaa7c, 0xaa7c), -- Myanmar Sign Tai Laing T..Myanmar Sign Tai Laing T (0xaab0, 0xaab0), -- Tai Viet Mai Kang ..Tai Viet Mai Kang (0xaab2, 0xaab4), -- Tai Viet Vowel I ..Tai Viet Vowel U (0xaab7, 0xaab8), -- Tai Viet Mai Khit ..Tai Viet Vowel Ia (0xaabe, 0xaabf), -- Tai Viet Vowel Am ..Tai Viet Tone Mai Ek (0xaac1, 0xaac1), -- Tai Viet Tone Mai Tho ..Tai Viet Tone Mai Tho (0xaaec, 0xaaed), -- Meetei Mayek Vowel Sign ..Meetei Mayek Vowel Sign (0xaaf6, 0xaaf6), -- Meetei Mayek Virama ..Meetei Mayek Virama (0xabe5, 0xabe5), -- Meetei Mayek Vowel Sign ..Meetei Mayek Vowel Sign (0xabe8, 0xabe8), -- Meetei Mayek Vowel Sign ..Meetei Mayek Vowel Sign (0xabed, 0xabed), -- Meetei Mayek Apun Iyek ..Meetei Mayek Apun Iyek (0xfb1e, 0xfb1e), -- Hebrew Point Judeo-spani..Hebrew Point Judeo-spani (0xfe00, 0xfe0f), -- Variation Selector-1 ..Variation Selector-16 (0xfe20, 0xfe2f), -- Combining Ligature Left ..Combining Cyrillic Titlo (0x101fd, 0x101fd), -- Phaistos Disc Sign Combi..Phaistos Disc Sign Combi (0x102e0, 0x102e0), -- Coptic Epact Thousands M..Coptic Epact Thousands M (0x10376, 0x1037a), -- Combining Old Permic Let..Combining Old Permic Let (0x10a01, 0x10a03), -- Kharoshthi Vowel Sign I ..Kharoshthi Vowel Sign Vo (0x10a05, 0x10a06), -- Kharoshthi Vowel Sign E ..Kharoshthi Vowel Sign O (0x10a0c, 0x10a0f), -- Kharoshthi Vowel Length ..Kharoshthi Sign Visarga (0x10a38, 0x10a3a), -- Kharoshthi Sign Bar Abov..Kharoshthi Sign Dot Belo (0x10a3f, 0x10a3f), -- Kharoshthi Virama ..Kharoshthi Virama (0x10ae5, 0x10ae6), -- Manichaean Abbreviation ..Manichaean Abbreviation (0x11001, 0x11001), -- Brahmi Sign Anusvara ..Brahmi Sign Anusvara (0x11038, 0x11046), -- Brahmi Vowel Sign Aa ..Brahmi Virama (0x1107f, 0x11081), -- Brahmi Number Joiner ..Kaithi Sign Anusvara (0x110b3, 0x110b6), -- Kaithi Vowel Sign U ..Kaithi Vowel Sign Ai (0x110b9, 0x110ba), -- Kaithi Sign Virama ..Kaithi Sign Nukta (0x11100, 0x11102), -- Chakma Sign Candrabindu ..Chakma Sign Visarga (0x11127, 0x1112b), -- Chakma Vowel Sign A ..Chakma Vowel Sign Uu (0x1112d, 0x11134), -- Chakma Vowel Sign Ai ..Chakma Maayyaa (0x11173, 0x11173), -- Mahajani Sign Nukta ..Mahajani Sign Nukta (0x11180, 0x11181), -- Sharada Sign Candrabindu..Sharada Sign Anusvara (0x111b6, 0x111be), -- Sharada Vowel Sign U ..Sharada Vowel Sign O (0x111ca, 0x111cc), -- Sharada Sign Nukta ..Sharada Extra Short Vowe (0x1122f, 0x11231), -- Khojki Vowel Sign U ..Khojki Vowel Sign Ai (0x11234, 0x11234), -- Khojki Sign Anusvara ..Khojki Sign Anusvara (0x11236, 0x11237), -- Khojki Sign Nukta ..Khojki Sign Shadda (0x1123e, 0x1123e), -- (nil) .. (0x112df, 0x112df), -- Khudawadi Sign Anusvara ..Khudawadi Sign Anusvara (0x112e3, 0x112ea), -- Khudawadi Vowel Sign U ..Khudawadi Sign Virama (0x11300, 0x11301), -- Grantha Sign Combining A..Grantha Sign Candrabindu (0x1133c, 0x1133c), -- Grantha Sign Nukta ..Grantha Sign Nukta (0x11340, 0x11340), -- Grantha Vowel Sign Ii ..Grantha Vowel Sign Ii (0x11366, 0x1136c), -- Combining Grantha Digit ..Combining Grantha Digit (0x11370, 0x11374), -- Combining Grantha Letter..Combining Grantha Letter (0x11438, 0x1143f), -- (nil) .. (0x11442, 0x11444), -- (nil) .. (0x11446, 0x11446), -- (nil) .. (0x114b3, 0x114b8), -- Tirhuta Vowel Sign U ..Tirhuta Vowel Sign Vocal (0x114ba, 0x114ba), -- Tirhuta Vowel Sign Short..Tirhuta Vowel Sign Short (0x114bf, 0x114c0), -- Tirhuta Sign Candrabindu..Tirhuta Sign Anusvara (0x114c2, 0x114c3), -- Tirhuta Sign Virama ..Tirhuta Sign Nukta (0x115b2, 0x115b5), -- Siddham Vowel Sign U ..Siddham Vowel Sign Vocal (0x115bc, 0x115bd), -- Siddham Sign Candrabindu..Siddham Sign Anusvara (0x115bf, 0x115c0), -- Siddham Sign Virama ..Siddham Sign Nukta (0x115dc, 0x115dd), -- Siddham Vowel Sign Alter..Siddham Vowel Sign Alter (0x11633, 0x1163a), -- Modi Vowel Sign U ..Modi Vowel Sign Ai (0x1163d, 0x1163d), -- Modi Sign Anusvara ..Modi Sign Anusvara (0x1163f, 0x11640), -- Modi Sign Virama ..Modi Sign Ardhacandra (0x116ab, 0x116ab), -- Takri Sign Anusvara ..Takri Sign Anusvara (0x116ad, 0x116ad), -- Takri Vowel Sign Aa ..Takri Vowel Sign Aa (0x116b0, 0x116b5), -- Takri Vowel Sign U ..Takri Vowel Sign Au (0x116b7, 0x116b7), -- Takri Sign Nukta ..Takri Sign Nukta (0x1171d, 0x1171f), -- Ahom Consonant Sign Medi..Ahom Consonant Sign Medi (0x11722, 0x11725), -- Ahom Vowel Sign I ..Ahom Vowel Sign Uu (0x11727, 0x1172b), -- Ahom Vowel Sign Aw ..Ahom Sign Killer (0x11c30, 0x11c36), -- (nil) .. (0x11c38, 0x11c3d), -- (nil) .. (0x11c3f, 0x11c3f), -- (nil) .. (0x11c92, 0x11ca7), -- (nil) .. (0x11caa, 0x11cb0), -- (nil) .. (0x11cb2, 0x11cb3), -- (nil) .. (0x11cb5, 0x11cb6), -- (nil) .. (0x16af0, 0x16af4), -- Bassa Vah Combining High..Bassa Vah Combining High (0x16b30, 0x16b36), -- Pahawh Hmong Mark Cim Tu..Pahawh Hmong Mark Cim Ta (0x16f8f, 0x16f92), -- Miao Tone Right ..Miao Tone Below (0x1bc9d, 0x1bc9e), -- Duployan Thick Letter Se..Duployan Double Mark (0x1d167, 0x1d169), -- Musical Symbol Combining..Musical Symbol Combining (0x1d17b, 0x1d182), -- Musical Symbol Combining..Musical Symbol Combining (0x1d185, 0x1d18b), -- Musical Symbol Combining..Musical Symbol Combining (0x1d1aa, 0x1d1ad), -- Musical Symbol Combining..Musical Symbol Combining (0x1d242, 0x1d244), -- Combining Greek Musical ..Combining Greek Musical (0x1da00, 0x1da36), -- Signwriting Head Rim ..Signwriting Air Sucking (0x1da3b, 0x1da6c), -- Signwriting Mouth Closed..Signwriting Excitement (0x1da75, 0x1da75), -- Signwriting Upper Body T..Signwriting Upper Body T (0x1da84, 0x1da84), -- Signwriting Location Hea..Signwriting Location Hea (0x1da9b, 0x1da9f), -- Signwriting Fill Modifie..Signwriting Fill Modifie (0x1daa1, 0x1daaf), -- Signwriting Rotation Mod..Signwriting Rotation Mod (0x1e000, 0x1e006), -- (nil) .. (0x1e008, 0x1e018), -- (nil) .. (0x1e01b, 0x1e021), -- (nil) .. (0x1e023, 0x1e024), -- (nil) .. (0x1e026, 0x1e02a), -- (nil) .. (0x1e8d0, 0x1e8d6), -- Mende Kikakui Combining ..Mende Kikakui Combining (0x1e944, 0x1e94a), -- (nil) .. (0xe0100, 0xe01ef) -- Variation Selector-17 ..Variation Selector-256 ] basicZero :: RangeSet Int basicZero = foldr insertRange empty [ (0, 0), (0x034f, 0x034f), (0x200b, 0x200f), (0x2028, 0x2029), (0x202a, 0x202e), (0x2060, 0x2063) ] ctrlChars :: RangeSet Int ctrlChars = foldr insertRange empty [ (1, 31), (0x07f, 0x09F) ] wcwidth :: Char -> Int wcwidth c | queryPoint v basicZero = 0 | queryPoint v ctrlChars = -1 | queryPoint v wIDEEASTASIAN = 2 | queryPoint v zEROWIDTH = 0 | otherwise = 1 where v = ord c