/* wcwidth - Unicode 15.1.0, generated by scripts/mkwcwidth. * Copyright (C) 2024 Avi Halachmi * License: MIT * * Data imported on 2024-03-29 from https://github.com/jquast/wcwidth * commit 0.2.13-3-g056ee4b (2024-02-14 15:05:06 -0500) */ int FAST_FUNC wcwidth(uint32_t ucs) { /* sorted ranges, "first" is clipped to 16 bit, and its high bits * (plane) are deduced from the "planes" array below. * (imported from table_zero.py and table_wide.py) */ static const struct range { uint16_t first; uint16_t iswide: 1; /* bitfield order empirically faster */ uint16_t difflast: 15; } ranges[] = { #define R(first, last, width) {first & 0xffff, width/2, last-first} R(0x000000, 0x000000, 0), /* nil */ R(0x0000ad, 0x0000ad, 0), /* Soft Hyphen */ R(0x000300, 0x00036f, 0), /* Combining Grave Accent ..Combining Latin Small Le */ R(0x000483, 0x000489, 0), /* Combining Cyrillic Titlo..Combining Cyrillic Milli */ R(0x000591, 0x0005bd, 0), /* Hebrew Accent Etnahta ..Hebrew Point Meteg */ R(0x0005bf, 0x0005bf, 0), /* Hebrew Point Rafe */ R(0x0005c1, 0x0005c2, 0), /* Hebrew Point Shin Dot ..Hebrew Point Sin Dot */ R(0x0005c4, 0x0005c5, 0), /* Hebrew Mark Upper Dot ..Hebrew Mark Lower Dot */ R(0x0005c7, 0x0005c7, 0), /* Hebrew Point Qamats Qatan */ R(0x000600, 0x000605, 0), /* Arabic Number Sign ..Arabic Number Mark Above */ R(0x000610, 0x00061a, 0), /* Arabic Sign Sallallahou ..Arabic Small Kasra */ R(0x00061c, 0x00061c, 0), /* Arabic Letter Mark */ R(0x00064b, 0x00065f, 0), /* Arabic Fathatan ..Arabic Wavy Hamza Below */ R(0x000670, 0x000670, 0), /* Arabic Letter Superscript Alef */ R(0x0006d6, 0x0006dd, 0), /* Arabic Small High Ligatu..Arabic End Of Ayah */ R(0x0006df, 0x0006e4, 0), /* Arabic Small High Rounde..Arabic Small High Madda */ R(0x0006e7, 0x0006e8, 0), /* Arabic Small High Yeh ..Arabic Small High Noon */ R(0x0006ea, 0x0006ed, 0), /* Arabic Empty Centre Low ..Arabic Small Low Meem */ R(0x00070f, 0x00070f, 0), /* Syriac Abbreviation Mark */ R(0x000711, 0x000711, 0), /* Syriac Letter Superscript Alaph */ R(0x000730, 0x00074a, 0), /* Syriac Pthaha Above ..Syriac Barrekh */ R(0x0007a6, 0x0007b0, 0), /* Thaana Abafili ..Thaana Sukun */ R(0x0007eb, 0x0007f3, 0), /* Nko Combining Short High..Nko Combining Double Dot */ R(0x0007fd, 0x0007fd, 0), /* Nko Dantayalan */ R(0x000816, 0x000819, 0), /* Samaritan Mark In ..Samaritan Mark Dagesh */ R(0x00081b, 0x000823, 0), /* Samaritan Mark Epentheti..Samaritan Vowel Sign A */ R(0x000825, 0x000827, 0), /* Samaritan Vowel Sign Sho..Samaritan Vowel Sign U */ R(0x000829, 0x00082d, 0), /* Samaritan Vowel Sign Lon..Samaritan Mark Nequdaa */ R(0x000859, 0x00085b, 0), /* Mandaic Affrication Mark..Mandaic Gemination Mark */ R(0x000890, 0x000891, 0), /* Arabic Pound Mark Above ..Arabic Piastre Mark Abov */ R(0x000898, 0x00089f, 0), /* Arabic Small High Word A..Arabic Half Madda Over M */ R(0x0008ca, 0x000903, 0), /* Arabic Small High Farsi ..Devanagari Sign Visarga */ R(0x00093a, 0x00093c, 0), /* Devanagari Vowel Sign Oe..Devanagari Sign Nukta */ R(0x00093e, 0x00094f, 0), /* Devanagari Vowel Sign Aa..Devanagari Vowel Sign Aw */ R(0x000951, 0x000957, 0), /* Devanagari Stress Sign U..Devanagari Vowel Sign Uu */ R(0x000962, 0x000963, 0), /* Devanagari Vowel Sign Vo..Devanagari Vowel Sign Vo */ R(0x000981, 0x000983, 0), /* Bengali Sign Candrabindu..Bengali Sign Visarga */ R(0x0009bc, 0x0009bc, 0), /* Bengali Sign Nukta */ R(0x0009be, 0x0009c4, 0), /* Bengali Vowel Sign Aa ..Bengali Vowel Sign Vocal */ R(0x0009c7, 0x0009c8, 0), /* Bengali Vowel Sign E ..Bengali Vowel Sign Ai */ R(0x0009cb, 0x0009cd, 0), /* Bengali Vowel Sign O ..Bengali Sign Virama */ R(0x0009d7, 0x0009d7, 0), /* Bengali Au Length Mark */ R(0x0009e2, 0x0009e3, 0), /* Bengali Vowel Sign Vocal..Bengali Vowel Sign Vocal */ R(0x0009fe, 0x0009fe, 0), /* Bengali Sandhi Mark */ R(0x000a01, 0x000a03, 0), /* Gurmukhi Sign Adak Bindi..Gurmukhi Sign Visarga */ R(0x000a3c, 0x000a3c, 0), /* Gurmukhi Sign Nukta */ R(0x000a3e, 0x000a42, 0), /* Gurmukhi Vowel Sign Aa ..Gurmukhi Vowel Sign Uu */ R(0x000a47, 0x000a48, 0), /* Gurmukhi Vowel Sign Ee ..Gurmukhi Vowel Sign Ai */ R(0x000a4b, 0x000a4d, 0), /* Gurmukhi Vowel Sign Oo ..Gurmukhi Sign Virama */ R(0x000a51, 0x000a51, 0), /* Gurmukhi Sign Udaat */ R(0x000a70, 0x000a71, 0), /* Gurmukhi Tippi ..Gurmukhi Addak */ R(0x000a75, 0x000a75, 0), /* Gurmukhi Sign Yakash */ R(0x000a81, 0x000a83, 0), /* Gujarati Sign Candrabind..Gujarati Sign Visarga */ R(0x000abc, 0x000abc, 0), /* Gujarati Sign Nukta */ R(0x000abe, 0x000ac5, 0), /* Gujarati Vowel Sign Aa ..Gujarati Vowel Sign Cand */ R(0x000ac7, 0x000ac9, 0), /* Gujarati Vowel Sign E ..Gujarati Vowel Sign Cand */ R(0x000acb, 0x000acd, 0), /* Gujarati Vowel Sign O ..Gujarati Sign Virama */ R(0x000ae2, 0x000ae3, 0), /* Gujarati Vowel Sign Voca..Gujarati Vowel Sign Voca */ R(0x000afa, 0x000aff, 0), /* Gujarati Sign Sukun ..Gujarati Sign Two-circle */ R(0x000b01, 0x000b03, 0), /* Oriya Sign Candrabindu ..Oriya Sign Visarga */ R(0x000b3c, 0x000b3c, 0), /* Oriya Sign Nukta */ R(0x000b3e, 0x000b44, 0), /* Oriya Vowel Sign Aa ..Oriya Vowel Sign Vocalic */ R(0x000b47, 0x000b48, 0), /* Oriya Vowel Sign E ..Oriya Vowel Sign Ai */ R(0x000b4b, 0x000b4d, 0), /* Oriya Vowel Sign O ..Oriya Sign Virama */ R(0x000b55, 0x000b57, 0), /* Oriya Sign Overline ..Oriya Au Length Mark */ R(0x000b62, 0x000b63, 0), /* Oriya Vowel Sign Vocalic..Oriya Vowel Sign Vocalic */ R(0x000b82, 0x000b82, 0), /* Tamil Sign Anusvara */ R(0x000bbe, 0x000bc2, 0), /* Tamil Vowel Sign Aa ..Tamil Vowel Sign Uu */ R(0x000bc6, 0x000bc8, 0), /* Tamil Vowel Sign E ..Tamil Vowel Sign Ai */ R(0x000bca, 0x000bcd, 0), /* Tamil Vowel Sign O ..Tamil Sign Virama */ R(0x000bd7, 0x000bd7, 0), /* Tamil Au Length Mark */ R(0x000c00, 0x000c04, 0), /* Telugu Sign Combining Ca..Telugu Sign Combining An */ R(0x000c3c, 0x000c3c, 0), /* Telugu Sign Nukta */ R(0x000c3e, 0x000c44, 0), /* Telugu Vowel Sign Aa ..Telugu Vowel Sign Vocali */ R(0x000c46, 0x000c48, 0), /* Telugu Vowel Sign E ..Telugu Vowel Sign Ai */ R(0x000c4a, 0x000c4d, 0), /* Telugu Vowel Sign O ..Telugu Sign Virama */ R(0x000c55, 0x000c56, 0), /* Telugu Length Mark ..Telugu Ai Length Mark */ R(0x000c62, 0x000c63, 0), /* Telugu Vowel Sign Vocali..Telugu Vowel Sign Vocali */ R(0x000c81, 0x000c83, 0), /* Kannada Sign Candrabindu..Kannada Sign Visarga */ R(0x000cbc, 0x000cbc, 0), /* Kannada Sign Nukta */ R(0x000cbe, 0x000cc4, 0), /* Kannada Vowel Sign Aa ..Kannada Vowel Sign Vocal */ R(0x000cc6, 0x000cc8, 0), /* Kannada Vowel Sign E ..Kannada Vowel Sign Ai */ R(0x000cca, 0x000ccd, 0), /* Kannada Vowel Sign O ..Kannada Sign Virama */ R(0x000cd5, 0x000cd6, 0), /* Kannada Length Mark ..Kannada Ai Length Mark */ R(0x000ce2, 0x000ce3, 0), /* Kannada Vowel Sign Vocal..Kannada Vowel Sign Vocal */ R(0x000cf3, 0x000cf3, 0), /* Kannada Sign Combining Anusvara Above Right */ R(0x000d00, 0x000d03, 0), /* Malayalam Sign Combining..Malayalam Sign Visarga */ R(0x000d3b, 0x000d3c, 0), /* Malayalam Sign Vertical ..Malayalam Sign Circular */ R(0x000d3e, 0x000d44, 0), /* Malayalam Vowel Sign Aa ..Malayalam Vowel Sign Voc */ R(0x000d46, 0x000d48, 0), /* Malayalam Vowel Sign E ..Malayalam Vowel Sign Ai */ R(0x000d4a, 0x000d4d, 0), /* Malayalam Vowel Sign O ..Malayalam Sign Virama */ R(0x000d57, 0x000d57, 0), /* Malayalam Au Length Mark */ R(0x000d62, 0x000d63, 0), /* Malayalam Vowel Sign Voc..Malayalam Vowel Sign Voc */ R(0x000d81, 0x000d83, 0), /* Sinhala Sign Candrabindu..Sinhala Sign Visargaya */ R(0x000dca, 0x000dca, 0), /* Sinhala Sign Al-lakuna */ R(0x000dcf, 0x000dd4, 0), /* Sinhala Vowel Sign Aela-..Sinhala Vowel Sign Ketti */ R(0x000dd6, 0x000dd6, 0), /* Sinhala Vowel Sign Diga Paa-pilla */ R(0x000dd8, 0x000ddf, 0), /* Sinhala Vowel Sign Gaett..Sinhala Vowel Sign Gayan */ R(0x000df2, 0x000df3, 0), /* Sinhala Vowel Sign Diga ..Sinhala Vowel Sign Diga */ R(0x000e31, 0x000e31, 0), /* Thai Character Mai Han-akat */ R(0x000e34, 0x000e3a, 0), /* Thai Character Sara I ..Thai Character Phinthu */ R(0x000e47, 0x000e4e, 0), /* Thai Character Maitaikhu..Thai Character Yamakkan */ R(0x000eb1, 0x000eb1, 0), /* Lao Vowel Sign Mai Kan */ R(0x000eb4, 0x000ebc, 0), /* Lao Vowel Sign I ..Lao Semivowel Sign Lo */ R(0x000ec8, 0x000ece, 0), /* Lao Tone Mai Ek ..Lao Yamakkan */ R(0x000f18, 0x000f19, 0), /* Tibetan Astrological Sig..Tibetan Astrological Sig */ R(0x000f35, 0x000f35, 0), /* Tibetan Mark Ngas Bzung Nyi Zla */ R(0x000f37, 0x000f37, 0), /* Tibetan Mark Ngas Bzung Sgor Rtags */ R(0x000f39, 0x000f39, 0), /* Tibetan Mark Tsa -phru */ R(0x000f3e, 0x000f3f, 0), /* Tibetan Sign Yar Tshes ..Tibetan Sign Mar Tshes */ R(0x000f71, 0x000f84, 0), /* Tibetan Vowel Sign Aa ..Tibetan Mark Halanta */ R(0x000f86, 0x000f87, 0), /* Tibetan Sign Lci Rtags ..Tibetan Sign Yang Rtags */ R(0x000f8d, 0x000f97, 0), /* Tibetan Subjoined Sign L..Tibetan Subjoined Letter */ R(0x000f99, 0x000fbc, 0), /* Tibetan Subjoined Letter..Tibetan Subjoined Letter */ R(0x000fc6, 0x000fc6, 0), /* Tibetan Symbol Padma Gdan */ R(0x00102b, 0x00103e, 0), /* Myanmar Vowel Sign Tall ..Myanmar Consonant Sign M */ R(0x001056, 0x001059, 0), /* Myanmar Vowel Sign Vocal..Myanmar Vowel Sign Vocal */ R(0x00105e, 0x001060, 0), /* Myanmar Consonant Sign M..Myanmar Consonant Sign M */ R(0x001062, 0x001064, 0), /* Myanmar Vowel Sign Sgaw ..Myanmar Tone Mark Sgaw K */ R(0x001067, 0x00106d, 0), /* Myanmar Vowel Sign Weste..Myanmar Sign Western Pwo */ R(0x001071, 0x001074, 0), /* Myanmar Vowel Sign Geba ..Myanmar Vowel Sign Kayah */ R(0x001082, 0x00108d, 0), /* Myanmar Consonant Sign S..Myanmar Sign Shan Counci */ R(0x00108f, 0x00108f, 0), /* Myanmar Sign Rumai Palaung Tone-5 */ R(0x00109a, 0x00109d, 0), /* Myanmar Sign Khamti Tone..Myanmar Vowel Sign Aiton */ R(0x001100, 0x00115f, 2), /* Hangul Choseong Kiyeok ..Hangul Choseong Filler */ R(0x001160, 0x0011ff, 0), /* Hangul Jungseong Filler ..Hangul Jongseong Ssangni */ R(0x00135d, 0x00135f, 0), /* Ethiopic Combining Gemin..Ethiopic Combining Gemin */ R(0x001712, 0x001715, 0), /* Tagalog Vowel Sign I ..Tagalog Sign Pamudpod */ R(0x001732, 0x001734, 0), /* Hanunoo Vowel Sign I ..Hanunoo Sign Pamudpod */ R(0x001752, 0x001753, 0), /* Buhid Vowel Sign I ..Buhid Vowel Sign U */ R(0x001772, 0x001773, 0), /* Tagbanwa Vowel Sign I ..Tagbanwa Vowel Sign U */ R(0x0017b4, 0x0017d3, 0), /* Khmer Vowel Inherent Aq ..Khmer Sign Bathamasat */ R(0x0017dd, 0x0017dd, 0), /* Khmer Sign Atthacan */ R(0x00180b, 0x00180f, 0), /* Mongolian Free Variation..Mongolian Free Variation */ R(0x001885, 0x001886, 0), /* Mongolian Letter Ali Gal..Mongolian Letter Ali Gal */ R(0x0018a9, 0x0018a9, 0), /* Mongolian Letter Ali Gali Dagalga */ R(0x001920, 0x00192b, 0), /* Limbu Vowel Sign A ..Limbu Subjoined Letter W */ R(0x001930, 0x00193b, 0), /* Limbu Small Letter Ka ..Limbu Sign Sa-i */ R(0x001a17, 0x001a1b, 0), /* Buginese Vowel Sign I ..Buginese Vowel Sign Ae */ R(0x001a55, 0x001a5e, 0), /* Tai Tham Consonant Sign ..Tai Tham Consonant Sign */ R(0x001a60, 0x001a7c, 0), /* Tai Tham Sign Sakot ..Tai Tham Sign Khuen-lue */ R(0x001a7f, 0x001a7f, 0), /* Tai Tham Combining Cryptogrammic Dot */ R(0x001ab0, 0x001ace, 0), /* Combining Doubled Circum..Combining Latin Small Le */ R(0x001b00, 0x001b04, 0), /* Balinese Sign Ulu Ricem ..Balinese Sign Bisah */ R(0x001b34, 0x001b44, 0), /* Balinese Sign Rerekan ..Balinese Adeg Adeg */ R(0x001b6b, 0x001b73, 0), /* Balinese Musical Symbol ..Balinese Musical Symbol */ R(0x001b80, 0x001b82, 0), /* Sundanese Sign Panyecek ..Sundanese Sign Pangwisad */ R(0x001ba1, 0x001bad, 0), /* Sundanese Consonant Sign..Sundanese Consonant Sign */ R(0x001be6, 0x001bf3, 0), /* Batak Sign Tompi ..Batak Panongonan */ R(0x001c24, 0x001c37, 0), /* Lepcha Subjoined Letter ..Lepcha Sign Nukta */ R(0x001cd0, 0x001cd2, 0), /* Vedic Tone Karshana ..Vedic Tone Prenkha */ R(0x001cd4, 0x001ce8, 0), /* Vedic Sign Yajurvedic Mi..Vedic Sign Visarga Anuda */ R(0x001ced, 0x001ced, 0), /* Vedic Sign Tiryak */ R(0x001cf4, 0x001cf4, 0), /* Vedic Tone Candra Above */ R(0x001cf7, 0x001cf9, 0), /* Vedic Sign Atikrama ..Vedic Tone Double Ring A */ R(0x001dc0, 0x001dff, 0), /* Combining Dotted Grave A..Combining Right Arrowhea */ R(0x00200b, 0x00200f, 0), /* Zero Width Space ..Right-to-left Mark */ R(0x002028, 0x00202e, 0), /* Line Separator ..Right-to-left Override */ R(0x002060, 0x002064, 0), /* Word Joiner ..Invisible Plus */ R(0x002066, 0x00206f, 0), /* Left-to-right Isolate ..Nominal Digit Shapes */ R(0x0020d0, 0x0020f0, 0), /* Combining Left Harpoon A..Combining Asterisk Above */ R(0x00231a, 0x00231b, 2), /* Watch ..Hourglass */ R(0x002329, 0x00232a, 2), /* Left-pointing Angle Brac..Right-pointing Angle Bra */ R(0x0023e9, 0x0023ec, 2), /* Black Right-pointing Dou..Black Down-pointing Doub */ R(0x0023f0, 0x0023f0, 2), /* Alarm Clock */ R(0x0023f3, 0x0023f3, 2), /* Hourglass With Flowing Sand */ R(0x0025fd, 0x0025fe, 2), /* White Medium Small Squar..Black Medium Small Squar */ R(0x002614, 0x002615, 2), /* Umbrella With Rain Drops..Hot Beverage */ R(0x002648, 0x002653, 2), /* Aries ..Pisces */ R(0x00267f, 0x00267f, 2), /* Wheelchair Symbol */ R(0x002693, 0x002693, 2), /* Anchor */ R(0x0026a1, 0x0026a1, 2), /* High Voltage Sign */ R(0x0026aa, 0x0026ab, 2), /* Medium White Circle ..Medium Black Circle */ R(0x0026bd, 0x0026be, 2), /* Soccer Ball ..Baseball */ R(0x0026c4, 0x0026c5, 2), /* Snowman Without Snow ..Sun Behind Cloud */ R(0x0026ce, 0x0026ce, 2), /* Ophiuchus */ R(0x0026d4, 0x0026d4, 2), /* No Entry */ R(0x0026ea, 0x0026ea, 2), /* Church */ R(0x0026f2, 0x0026f3, 2), /* Fountain ..Flag In Hole */ R(0x0026f5, 0x0026f5, 2), /* Sailboat */ R(0x0026fa, 0x0026fa, 2), /* Tent */ R(0x0026fd, 0x0026fd, 2), /* Fuel Pump */ R(0x002705, 0x002705, 2), /* White Heavy Check Mark */ R(0x00270a, 0x00270b, 2), /* Raised Fist ..Raised Hand */ R(0x002728, 0x002728, 2), /* Sparkles */ R(0x00274c, 0x00274c, 2), /* Cross Mark */ R(0x00274e, 0x00274e, 2), /* Negative Squared Cross Mark */ R(0x002753, 0x002755, 2), /* Black Question Mark Orna..White Exclamation Mark O */ R(0x002757, 0x002757, 2), /* Heavy Exclamation Mark Symbol */ R(0x002795, 0x002797, 2), /* Heavy Plus Sign ..Heavy Division Sign */ R(0x0027b0, 0x0027b0, 2), /* Curly Loop */ R(0x0027bf, 0x0027bf, 2), /* Double Curly Loop */ R(0x002b1b, 0x002b1c, 2), /* Black Large Square ..White Large Square */ R(0x002b50, 0x002b50, 2), /* White Medium Star */ R(0x002b55, 0x002b55, 2), /* Heavy Large Circle */ R(0x002cef, 0x002cf1, 0), /* Coptic Combining Ni Abov..Coptic Combining Spiritu */ R(0x002d7f, 0x002d7f, 0), /* Tifinagh Consonant Joiner */ R(0x002de0, 0x002dff, 0), /* Combining Cyrillic Lette..Combining Cyrillic Lette */ R(0x002e80, 0x002e99, 2), /* Cjk Radical Repeat ..Cjk Radical Rap */ R(0x002e9b, 0x002ef3, 2), /* Cjk Radical Choke ..Cjk Radical C-simplified */ R(0x002f00, 0x002fd5, 2), /* Kangxi Radical One ..Kangxi Radical Flute */ R(0x002ff0, 0x003029, 2), /* Ideographic Description ..Hangzhou Numeral Nine */ R(0x00302a, 0x00302f, 0), /* Ideographic Level Tone M..Hangul Double Dot Tone M */ R(0x003030, 0x00303e, 2), /* Wavy Dash ..Ideographic Variation In */ R(0x003041, 0x003096, 2), /* Hiragana Letter Small A ..Hiragana Letter Small Ke */ R(0x003099, 0x00309a, 0), /* Combining Katakana-hirag..Combining Katakana-hirag */ R(0x00309b, 0x0030ff, 2), /* Katakana-hiragana Voiced..Katakana Digraph Koto */ R(0x003105, 0x00312f, 2), /* Bopomofo Letter B ..Bopomofo Letter Nn */ R(0x003131, 0x00318e, 2), /* Hangul Letter Kiyeok ..Hangul Letter Araeae */ R(0x003190, 0x0031e3, 2), /* Ideographic Annotation L..Cjk Stroke Q */ R(0x0031ef, 0x00321e, 2), /* nil ..Parenthesized Korean Cha */ R(0x003220, 0x003247, 2), /* Parenthesized Ideograph ..Circled Ideograph Koto */ R(0x003250, 0x004dbf, 2), /* Partnership Sign ..Cjk Unified Ideograph-4d */ R(0x004e00, 0x00a48c, 2), /* Cjk Unified Ideograph-4e..Yi Syllable Yyr */ R(0x00a490, 0x00a4c6, 2), /* Yi Radical Qot ..Yi Radical Ke */ R(0x00a66f, 0x00a672, 0), /* Combining Cyrillic Vzmet..Combining Cyrillic Thous */ R(0x00a674, 0x00a67d, 0), /* Combining Cyrillic Lette..Combining Cyrillic Payer */ R(0x00a69e, 0x00a69f, 0), /* Combining Cyrillic Lette..Combining Cyrillic Lette */ R(0x00a6f0, 0x00a6f1, 0), /* Bamum Combining Mark Koq..Bamum Combining Mark Tuk */ R(0x00a802, 0x00a802, 0), /* Syloti Nagri Sign Dvisvara */ R(0x00a806, 0x00a806, 0), /* Syloti Nagri Sign Hasanta */ R(0x00a80b, 0x00a80b, 0), /* Syloti Nagri Sign Anusvara */ R(0x00a823, 0x00a827, 0), /* Syloti Nagri Vowel Sign ..Syloti Nagri Vowel Sign */ R(0x00a82c, 0x00a82c, 0), /* Syloti Nagri Sign Alternate Hasanta */ R(0x00a880, 0x00a881, 0), /* Saurashtra Sign Anusvara..Saurashtra Sign Visarga */ R(0x00a8b4, 0x00a8c5, 0), /* Saurashtra Consonant Sig..Saurashtra Sign Candrabi */ R(0x00a8e0, 0x00a8f1, 0), /* Combining Devanagari Dig..Combining Devanagari Sig */ R(0x00a8ff, 0x00a8ff, 0), /* Devanagari Vowel Sign Ay */ R(0x00a926, 0x00a92d, 0), /* Kayah Li Vowel Ue ..Kayah Li Tone Calya Plop */ R(0x00a947, 0x00a953, 0), /* Rejang Vowel Sign I ..Rejang Virama */ R(0x00a960, 0x00a97c, 2), /* Hangul Choseong Tikeut-m..Hangul Choseong Ssangyeo */ R(0x00a980, 0x00a983, 0), /* Javanese Sign Panyangga ..Javanese Sign Wignyan */ R(0x00a9b3, 0x00a9c0, 0), /* Javanese Sign Cecak Telu..Javanese Pangkon */ R(0x00a9e5, 0x00a9e5, 0), /* Myanmar Sign Shan Saw */ R(0x00aa29, 0x00aa36, 0), /* Cham Vowel Sign Aa ..Cham Consonant Sign Wa */ R(0x00aa43, 0x00aa43, 0), /* Cham Consonant Sign Final Ng */ R(0x00aa4c, 0x00aa4d, 0), /* Cham Consonant Sign Fina..Cham Consonant Sign Fina */ R(0x00aa7b, 0x00aa7d, 0), /* Myanmar Sign Pao Karen T..Myanmar Sign Tai Laing T */ R(0x00aab0, 0x00aab0, 0), /* Tai Viet Mai Kang */ R(0x00aab2, 0x00aab4, 0), /* Tai Viet Vowel I ..Tai Viet Vowel U */ R(0x00aab7, 0x00aab8, 0), /* Tai Viet Mai Khit ..Tai Viet Vowel Ia */ R(0x00aabe, 0x00aabf, 0), /* Tai Viet Vowel Am ..Tai Viet Tone Mai Ek */ R(0x00aac1, 0x00aac1, 0), /* Tai Viet Tone Mai Tho */ R(0x00aaeb, 0x00aaef, 0), /* Meetei Mayek Vowel Sign ..Meetei Mayek Vowel Sign */ R(0x00aaf5, 0x00aaf6, 0), /* Meetei Mayek Vowel Sign ..Meetei Mayek Virama */ R(0x00abe3, 0x00abea, 0), /* Meetei Mayek Vowel Sign ..Meetei Mayek Vowel Sign */ R(0x00abec, 0x00abed, 0), /* Meetei Mayek Lum Iyek ..Meetei Mayek Apun Iyek */ R(0x00ac00, 0x00d7a3, 2), /* Hangul Syllable Ga ..Hangul Syllable Hih */ R(0x00d7b0, 0x00d7ff, 0), /* Hangul Jungseong O-yeo .. nil */ R(0x00f900, 0x00faff, 2), /* Cjk Compatibility Ideogr.. nil */ R(0x00fb1e, 0x00fb1e, 0), /* Hebrew Point Judeo-spanish Varika */ R(0x00fe00, 0x00fe0f, 0), /* Variation Selector-1 ..Variation Selector-16 */ R(0x00fe10, 0x00fe19, 2), /* Presentation Form For Ve..Presentation Form For Ve */ R(0x00fe20, 0x00fe2f, 0), /* Combining Ligature Left ..Combining Cyrillic Titlo */ R(0x00fe30, 0x00fe52, 2), /* Presentation Form For Ve..Small Full Stop */ R(0x00fe54, 0x00fe66, 2), /* Small Semicolon ..Small Equals Sign */ R(0x00fe68, 0x00fe6b, 2), /* Small Reverse Solidus ..Small Commercial At */ R(0x00feff, 0x00feff, 0), /* Zero Width No-break Space */ R(0x00ff01, 0x00ff60, 2), /* Fullwidth Exclamation Ma..Fullwidth Right White Pa */ R(0x00ffe0, 0x00ffe6, 2), /* Fullwidth Cent Sign ..Fullwidth Won Sign */ R(0x00fff9, 0x00fffb, 0), /* Interlinear Annotation A..Interlinear Annotation T */ R(0x0101fd, 0x0101fd, 0), /* Phaistos Disc Sign Combining Oblique Stroke */ R(0x0102e0, 0x0102e0, 0), /* Coptic Epact Thousands Mark */ R(0x010376, 0x01037a, 0), /* Combining Old Permic Let..Combining Old Permic Let */ R(0x010a01, 0x010a03, 0), /* Kharoshthi Vowel Sign I ..Kharoshthi Vowel Sign Vo */ R(0x010a05, 0x010a06, 0), /* Kharoshthi Vowel Sign E ..Kharoshthi Vowel Sign O */ R(0x010a0c, 0x010a0f, 0), /* Kharoshthi Vowel Length ..Kharoshthi Sign Visarga */ R(0x010a38, 0x010a3a, 0), /* Kharoshthi Sign Bar Abov..Kharoshthi Sign Dot Belo */ R(0x010a3f, 0x010a3f, 0), /* Kharoshthi Virama */ R(0x010ae5, 0x010ae6, 0), /* Manichaean Abbreviation ..Manichaean Abbreviation */ R(0x010d24, 0x010d27, 0), /* Hanifi Rohingya Sign Har..Hanifi Rohingya Sign Tas */ R(0x010eab, 0x010eac, 0), /* Yezidi Combining Hamza M..Yezidi Combining Madda M */ R(0x010efd, 0x010eff, 0), /* Arabic Small Low Word Sa..Arabic Small Low Word Ma */ R(0x010f46, 0x010f50, 0), /* Sogdian Combining Dot Be..Sogdian Combining Stroke */ R(0x010f82, 0x010f85, 0), /* Old Uyghur Combining Dot..Old Uyghur Combining Two */ R(0x011000, 0x011002, 0), /* Brahmi Sign Candrabindu ..Brahmi Sign Visarga */ R(0x011038, 0x011046, 0), /* Brahmi Vowel Sign Aa ..Brahmi Virama */ R(0x011070, 0x011070, 0), /* Brahmi Sign Old Tamil Virama */ R(0x011073, 0x011074, 0), /* Brahmi Vowel Sign Old Ta..Brahmi Vowel Sign Old Ta */ R(0x01107f, 0x011082, 0), /* Brahmi Number Joiner ..Kaithi Sign Visarga */ R(0x0110b0, 0x0110ba, 0), /* Kaithi Vowel Sign Aa ..Kaithi Sign Nukta */ R(0x0110bd, 0x0110bd, 0), /* Kaithi Number Sign */ R(0x0110c2, 0x0110c2, 0), /* Kaithi Vowel Sign Vocalic R */ R(0x0110cd, 0x0110cd, 0), /* Kaithi Number Sign Above */ R(0x011100, 0x011102, 0), /* Chakma Sign Candrabindu ..Chakma Sign Visarga */ R(0x011127, 0x011134, 0), /* Chakma Vowel Sign A ..Chakma Maayyaa */ R(0x011145, 0x011146, 0), /* Chakma Vowel Sign Aa ..Chakma Vowel Sign Ei */ R(0x011173, 0x011173, 0), /* Mahajani Sign Nukta */ R(0x011180, 0x011182, 0), /* Sharada Sign Candrabindu..Sharada Sign Visarga */ R(0x0111b3, 0x0111c0, 0), /* Sharada Vowel Sign Aa ..Sharada Sign Virama */ R(0x0111c9, 0x0111cc, 0), /* Sharada Sandhi Mark ..Sharada Extra Short Vowe */ R(0x0111ce, 0x0111cf, 0), /* Sharada Vowel Sign Prish..Sharada Sign Inverted Ca */ R(0x01122c, 0x011237, 0), /* Khojki Vowel Sign Aa ..Khojki Sign Shadda */ R(0x01123e, 0x01123e, 0), /* Khojki Sign Sukun */ R(0x011241, 0x011241, 0), /* Khojki Vowel Sign Vocalic R */ R(0x0112df, 0x0112ea, 0), /* Khudawadi Sign Anusvara ..Khudawadi Sign Virama */ R(0x011300, 0x011303, 0), /* Grantha Sign Combining A..Grantha Sign Visarga */ R(0x01133b, 0x01133c, 0), /* Combining Bindu Below ..Grantha Sign Nukta */ R(0x01133e, 0x011344, 0), /* Grantha Vowel Sign Aa ..Grantha Vowel Sign Vocal */ R(0x011347, 0x011348, 0), /* Grantha Vowel Sign Ee ..Grantha Vowel Sign Ai */ R(0x01134b, 0x01134d, 0), /* Grantha Vowel Sign Oo ..Grantha Sign Virama */ R(0x011357, 0x011357, 0), /* Grantha Au Length Mark */ R(0x011362, 0x011363, 0), /* Grantha Vowel Sign Vocal..Grantha Vowel Sign Vocal */ R(0x011366, 0x01136c, 0), /* Combining Grantha Digit ..Combining Grantha Digit */ R(0x011370, 0x011374, 0), /* Combining Grantha Letter..Combining Grantha Letter */ R(0x011435, 0x011446, 0), /* Newa Vowel Sign Aa ..Newa Sign Nukta */ R(0x01145e, 0x01145e, 0), /* Newa Sandhi Mark */ R(0x0114b0, 0x0114c3, 0), /* Tirhuta Vowel Sign Aa ..Tirhuta Sign Nukta */ R(0x0115af, 0x0115b5, 0), /* Siddham Vowel Sign Aa ..Siddham Vowel Sign Vocal */ R(0x0115b8, 0x0115c0, 0), /* Siddham Vowel Sign E ..Siddham Sign Nukta */ R(0x0115dc, 0x0115dd, 0), /* Siddham Vowel Sign Alter..Siddham Vowel Sign Alter */ R(0x011630, 0x011640, 0), /* Modi Vowel Sign Aa ..Modi Sign Ardhacandra */ R(0x0116ab, 0x0116b7, 0), /* Takri Sign Anusvara ..Takri Sign Nukta */ R(0x01171d, 0x01172b, 0), /* Ahom Consonant Sign Medi..Ahom Sign Killer */ R(0x01182c, 0x01183a, 0), /* Dogra Vowel Sign Aa ..Dogra Sign Nukta */ R(0x011930, 0x011935, 0), /* Dives Akuru Vowel Sign A..Dives Akuru Vowel Sign E */ R(0x011937, 0x011938, 0), /* Dives Akuru Vowel Sign A..Dives Akuru Vowel Sign O */ R(0x01193b, 0x01193e, 0), /* Dives Akuru Sign Anusvar..Dives Akuru Virama */ R(0x011940, 0x011940, 0), /* Dives Akuru Medial Ya */ R(0x011942, 0x011943, 0), /* Dives Akuru Medial Ra ..Dives Akuru Sign Nukta */ R(0x0119d1, 0x0119d7, 0), /* Nandinagari Vowel Sign A..Nandinagari Vowel Sign V */ R(0x0119da, 0x0119e0, 0), /* Nandinagari Vowel Sign E..Nandinagari Sign Virama */ R(0x0119e4, 0x0119e4, 0), /* Nandinagari Vowel Sign Prishthamatra E */ R(0x011a01, 0x011a0a, 0), /* Zanabazar Square Vowel S..Zanabazar Square Vowel L */ R(0x011a33, 0x011a39, 0), /* Zanabazar Square Final C..Zanabazar Square Sign Vi */ R(0x011a3b, 0x011a3e, 0), /* Zanabazar Square Cluster..Zanabazar Square Cluster */ R(0x011a47, 0x011a47, 0), /* Zanabazar Square Subjoiner */ R(0x011a51, 0x011a5b, 0), /* Soyombo Vowel Sign I ..Soyombo Vowel Length Mar */ R(0x011a8a, 0x011a99, 0), /* Soyombo Final Consonant ..Soyombo Subjoiner */ R(0x011c2f, 0x011c36, 0), /* Bhaiksuki Vowel Sign Aa ..Bhaiksuki Vowel Sign Voc */ R(0x011c38, 0x011c3f, 0), /* Bhaiksuki Vowel Sign E ..Bhaiksuki Sign Virama */ R(0x011c92, 0x011ca7, 0), /* Marchen Subjoined Letter..Marchen Subjoined Letter */ R(0x011ca9, 0x011cb6, 0), /* Marchen Subjoined Letter..Marchen Sign Candrabindu */ R(0x011d31, 0x011d36, 0), /* Masaram Gondi Vowel Sign..Masaram Gondi Vowel Sign */ R(0x011d3a, 0x011d3a, 0), /* Masaram Gondi Vowel Sign E */ R(0x011d3c, 0x011d3d, 0), /* Masaram Gondi Vowel Sign..Masaram Gondi Vowel Sign */ R(0x011d3f, 0x011d45, 0), /* Masaram Gondi Vowel Sign..Masaram Gondi Virama */ R(0x011d47, 0x011d47, 0), /* Masaram Gondi Ra-kara */ R(0x011d8a, 0x011d8e, 0), /* Gunjala Gondi Vowel Sign..Gunjala Gondi Vowel Sign */ R(0x011d90, 0x011d91, 0), /* Gunjala Gondi Vowel Sign..Gunjala Gondi Vowel Sign */ R(0x011d93, 0x011d97, 0), /* Gunjala Gondi Vowel Sign..Gunjala Gondi Virama */ R(0x011ef3, 0x011ef6, 0), /* Makasar Vowel Sign I ..Makasar Vowel Sign O */ R(0x011f00, 0x011f01, 0), /* Kawi Sign Candrabindu ..Kawi Sign Anusvara */ R(0x011f03, 0x011f03, 0), /* Kawi Sign Visarga */ R(0x011f34, 0x011f3a, 0), /* Kawi Vowel Sign Aa ..Kawi Vowel Sign Vocalic */ R(0x011f3e, 0x011f42, 0), /* Kawi Vowel Sign E ..Kawi Conjoiner */ R(0x013430, 0x013440, 0), /* Egyptian Hieroglyph Vert..Egyptian Hieroglyph Mirr */ R(0x013447, 0x013455, 0), /* Egyptian Hieroglyph Modi..Egyptian Hieroglyph Modi */ R(0x016af0, 0x016af4, 0), /* Bassa Vah Combining High..Bassa Vah Combining High */ R(0x016b30, 0x016b36, 0), /* Pahawh Hmong Mark Cim Tu..Pahawh Hmong Mark Cim Ta */ R(0x016f4f, 0x016f4f, 0), /* Miao Sign Consonant Modifier Bar */ R(0x016f51, 0x016f87, 0), /* Miao Sign Aspiration ..Miao Vowel Sign Ui */ R(0x016f8f, 0x016f92, 0), /* Miao Tone Right ..Miao Tone Below */ R(0x016fe0, 0x016fe3, 2), /* Tangut Iteration Mark ..Old Chinese Iteration Ma */ R(0x016fe4, 0x016fe4, 0), /* Khitan Small Script Filler */ R(0x016ff0, 0x016ff1, 0), /* Vietnamese Alternate Rea..Vietnamese Alternate Rea */ R(0x017000, 0x0187f7, 2), /* nil */ R(0x018800, 0x018cd5, 2), /* Tangut Component-001 ..Khitan Small Script Char */ R(0x018d00, 0x018d08, 2), /* nil */ R(0x01aff0, 0x01aff3, 2), /* Katakana Letter Minnan T..Katakana Letter Minnan T */ R(0x01aff5, 0x01affb, 2), /* Katakana Letter Minnan T..Katakana Letter Minnan N */ R(0x01affd, 0x01affe, 2), /* Katakana Letter Minnan N..Katakana Letter Minnan N */ R(0x01b000, 0x01b122, 2), /* Katakana Letter Archaic ..Katakana Letter Archaic */ R(0x01b132, 0x01b132, 2), /* Hiragana Letter Small Ko */ R(0x01b150, 0x01b152, 2), /* Hiragana Letter Small Wi..Hiragana Letter Small Wo */ R(0x01b155, 0x01b155, 2), /* Katakana Letter Small Ko */ R(0x01b164, 0x01b167, 2), /* Katakana Letter Small Wi..Katakana Letter Small N */ R(0x01b170, 0x01b2fb, 2), /* Nushu Character-1b170 ..Nushu Character-1b2fb */ R(0x01bc9d, 0x01bc9e, 0), /* Duployan Thick Letter Se..Duployan Double Mark */ R(0x01bca0, 0x01bca3, 0), /* Shorthand Format Letter ..Shorthand Format Up Step */ R(0x01cf00, 0x01cf2d, 0), /* Znamenny Combining Mark ..Znamenny Combining Mark */ R(0x01cf30, 0x01cf46, 0), /* Znamenny Combining Tonal..Znamenny Priznak Modifie */ R(0x01d165, 0x01d169, 0), /* Musical Symbol Combining..Musical Symbol Combining */ R(0x01d16d, 0x01d182, 0), /* Musical Symbol Combining..Musical Symbol Combining */ R(0x01d185, 0x01d18b, 0), /* Musical Symbol Combining..Musical Symbol Combining */ R(0x01d1aa, 0x01d1ad, 0), /* Musical Symbol Combining..Musical Symbol Combining */ R(0x01d242, 0x01d244, 0), /* Combining Greek Musical ..Combining Greek Musical */ R(0x01da00, 0x01da36, 0), /* Signwriting Head Rim ..Signwriting Air Sucking */ R(0x01da3b, 0x01da6c, 0), /* Signwriting Mouth Closed..Signwriting Excitement */ R(0x01da75, 0x01da75, 0), /* Signwriting Upper Body Tilting From Hip Joints */ R(0x01da84, 0x01da84, 0), /* Signwriting Location Head Neck */ R(0x01da9b, 0x01da9f, 0), /* Signwriting Fill Modifie..Signwriting Fill Modifie */ R(0x01daa1, 0x01daaf, 0), /* Signwriting Rotation Mod..Signwriting Rotation Mod */ R(0x01e000, 0x01e006, 0), /* Combining Glagolitic Let..Combining Glagolitic Let */ R(0x01e008, 0x01e018, 0), /* Combining Glagolitic Let..Combining Glagolitic Let */ R(0x01e01b, 0x01e021, 0), /* Combining Glagolitic Let..Combining Glagolitic Let */ R(0x01e023, 0x01e024, 0), /* Combining Glagolitic Let..Combining Glagolitic Let */ R(0x01e026, 0x01e02a, 0), /* Combining Glagolitic Let..Combining Glagolitic Let */ R(0x01e08f, 0x01e08f, 0), /* Combining Cyrillic Small Letter Byelorussian-ukr */ R(0x01e130, 0x01e136, 0), /* Nyiakeng Puachue Hmong T..Nyiakeng Puachue Hmong T */ R(0x01e2ae, 0x01e2ae, 0), /* Toto Sign Rising Tone */ R(0x01e2ec, 0x01e2ef, 0), /* Wancho Tone Tup ..Wancho Tone Koini */ R(0x01e4ec, 0x01e4ef, 0), /* Nag Mundari Sign Muhor ..Nag Mundari Sign Sutuh */ R(0x01e8d0, 0x01e8d6, 0), /* Mende Kikakui Combining ..Mende Kikakui Combining */ R(0x01e944, 0x01e94a, 0), /* Adlam Alif Lengthener ..Adlam Nukta */ R(0x01f004, 0x01f004, 2), /* Mahjong Tile Red Dragon */ R(0x01f0cf, 0x01f0cf, 2), /* Playing Card Black Joker */ R(0x01f18e, 0x01f18e, 2), /* Negative Squared Ab */ R(0x01f191, 0x01f19a, 2), /* Squared Cl ..Squared Vs */ R(0x01f200, 0x01f202, 2), /* Square Hiragana Hoka ..Squared Katakana Sa */ R(0x01f210, 0x01f23b, 2), /* Squared Cjk Unified Ideo..Squared Cjk Unified Ideo */ R(0x01f240, 0x01f248, 2), /* Tortoise Shell Bracketed..Tortoise Shell Bracketed */ R(0x01f250, 0x01f251, 2), /* Circled Ideograph Advant..Circled Ideograph Accept */ R(0x01f260, 0x01f265, 2), /* Rounded Symbol For Fu ..Rounded Symbol For Cai */ R(0x01f300, 0x01f320, 2), /* Cyclone ..Shooting Star */ R(0x01f32d, 0x01f335, 2), /* Hot Dog ..Cactus */ R(0x01f337, 0x01f37c, 2), /* Tulip ..Baby Bottle */ R(0x01f37e, 0x01f393, 2), /* Bottle With Popping Cork..Graduation Cap */ R(0x01f3a0, 0x01f3ca, 2), /* Carousel Horse ..Swimmer */ R(0x01f3cf, 0x01f3d3, 2), /* Cricket Bat And Ball ..Table Tennis Paddle And */ R(0x01f3e0, 0x01f3f0, 2), /* House Building ..European Castle */ R(0x01f3f4, 0x01f3f4, 2), /* Waving Black Flag */ R(0x01f3f8, 0x01f3fa, 2), /* Badminton Racquet And Sh..Amphora */ R(0x01f3fb, 0x01f3ff, 0), /* Emoji Modifier Fitzpatri..Emoji Modifier Fitzpatri */ R(0x01f400, 0x01f43e, 2), /* Rat ..Paw Prints */ R(0x01f440, 0x01f440, 2), /* Eyes */ R(0x01f442, 0x01f4fc, 2), /* Ear ..Videocassette */ R(0x01f4ff, 0x01f53d, 2), /* Prayer Beads ..Down-pointing Small Red */ R(0x01f54b, 0x01f54e, 2), /* Kaaba ..Menorah With Nine Branch */ R(0x01f550, 0x01f567, 2), /* Clock Face One Oclock ..Clock Face Twelve-thirty */ R(0x01f57a, 0x01f57a, 2), /* Man Dancing */ R(0x01f595, 0x01f596, 2), /* Reversed Hand With Middl..Raised Hand With Part Be */ R(0x01f5a4, 0x01f5a4, 2), /* Black Heart */ R(0x01f5fb, 0x01f64f, 2), /* Mount Fuji ..Person With Folded Hands */ R(0x01f680, 0x01f6c5, 2), /* Rocket ..Left Luggage */ R(0x01f6cc, 0x01f6cc, 2), /* Sleeping Accommodation */ R(0x01f6d0, 0x01f6d2, 2), /* Place Of Worship ..Shopping Trolley */ R(0x01f6d5, 0x01f6d7, 2), /* Hindu Temple ..Elevator */ R(0x01f6dc, 0x01f6df, 2), /* Wireless ..Ring Buoy */ R(0x01f6eb, 0x01f6ec, 2), /* Airplane Departure ..Airplane Arriving */ R(0x01f6f4, 0x01f6fc, 2), /* Scooter ..Roller Skate */ R(0x01f7e0, 0x01f7eb, 2), /* Large Orange Circle ..Large Brown Square */ R(0x01f7f0, 0x01f7f0, 2), /* Heavy Equals Sign */ R(0x01f90c, 0x01f93a, 2), /* Pinched Fingers ..Fencer */ R(0x01f93c, 0x01f945, 2), /* Wrestlers ..Goal Net */ R(0x01f947, 0x01f9ff, 2), /* First Place Medal ..Nazar Amulet */ R(0x01fa70, 0x01fa7c, 2), /* Ballet Shoes ..Crutch */ R(0x01fa80, 0x01fa88, 2), /* Yo-yo ..Flute */ R(0x01fa90, 0x01fabd, 2), /* Ringed Planet ..Wing */ R(0x01fabf, 0x01fac5, 2), /* Goose ..Person With Crown */ R(0x01face, 0x01fadb, 2), /* Moose ..Pea Pod */ R(0x01fae0, 0x01fae8, 2), /* Melting Face ..Shaking Face */ R(0x01faf0, 0x01faf8, 2), /* Hand With Index Finger A..Rightwards Pushing Hand */ R(0x020000, 0x027fff, 2), /* Cjk Unified Ideograph-20.. nil */ R(0x028000, 0x02fffd, 2), /* (continued...) */ R(0x030000, 0x037fff, 2), /* Cjk Unified Ideograph-30.. nil */ R(0x038000, 0x03fffd, 2), /* (continued...) */ R(0x0e0001, 0x0e0001, 0), /* Language Tag */ R(0x0e0020, 0x0e007f, 0), /* Tag Space ..Cancel Tag */ R(0x0e0100, 0x0e01ef, 0), /* Variation Selector-17 ..Variation Selector-256 */ #undef R }; /* planes[p], planes[p+1] are [from, to) at "ranges" for plane p */ static const uint16_t planes[/* 18 */] = { 0, 261, 443, 445, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 450, 450, 450, }; /******* END OF STATIC DATA *******/ uint32_t p, bot, top; /* 0:0, 1..31:-1 (C0), 32..126:1 (isprint), 127..159:-1 (DEL, C1) */ if (ucs < 160) return ((ucs + 1) & 127) > 32 ? 1 : ucs ? -1 : 0; /* out of range for "planes" (and non-unicode), non-characters. */ /* (some also test surrogate halves, but not required by POSIX) */ if (ucs > 0x10ffff || (ucs & 0xfffe) == 0xfffe) return -1; p = ucs >> 16; ucs &= 0xffff; for (bot = planes[p], top = planes[p+1]; bot < top; ) { uint32_t mid = (bot + top) / 2; if (ucs < ranges[mid].first) top = mid; else if (ucs > ranges[mid].first + ranges[mid].difflast) bot = mid + 1; else return 2 * ranges[mid].iswide; } return 1; } /* wcwidth - Unicode 15.1.0 */