core/unicode
unicode
Types
1Range
Range :: struct {
single_16: []u16,
ranges_16: []u16,
single_32: []i32,
ranges_32: []i32,
}Source------ GENERATED ------ DO NOT EDIT ------ GENERATED ------ DO NOT EDIT ------ GENERATED ------ This file is generated from UnicodeData.txt and PropList.txt. These files
are part of the Unicode Database (UCD) and are covered by the license
listed further down. They may be downloaded from the following locations;
https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt
https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt
https://www.unicode.org/license.txt
------------------------------------------------------------------------------
UNICODE LICENSE V3
COPYRIGHT AND PERMISSION NOTICE
Copyright © 1991-2026 Unicode, Inc.
NOTICE TO USER: Carefully read the following legal agreement. BY
DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT
DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
Permission is hereby granted, free of charge, to any person obtaining a
copy of data files and any associated documentation (the "Data Files") or
software and any associated documentation (the "Software") to deal in the
Data Files or Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, and/or sell
copies of the Data Files or Software, and to permit persons to whom the
Data Files or Software are furnished to do so, provided that either (a)
this copyright and permission notice appear with all copies of the Data
Files or Software, or (b) this copyright and permission notice appear in
associated Documentation.
THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
THIRD PARTY RIGHTS.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE
BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA
FILES OR SOFTWARE.
Except as contained in this notice, the name of a copyright holder shall
not be used in advertising or otherwise to promote the sale, use or other
dealings in these Data Files or Software without prior written
authorization of the copyright holder.Constants
8MAX_ASCII
MAX_ASCII :: '\u007f'SourceMaximum ASCII value
MAX_LATIN1
MAX_LATIN1 :: '\u00ff'SourceMaximum Latin-1 value
MAX_RUNE
MAX_RUNE :: '\U0010ffff'SourceMaximum valid unicode code point
REPLACEMENT_CHAR
REPLACEMENT_CHAR :: '\ufffd'SourceRepresented an invalid code point
WORD_JOINER
WORD_JOINER :: '\u2060'SourceZERO_WIDTH_JOINER
ZERO_WIDTH_JOINER :: '\u200D'SourceZERO_WIDTH_NON_JOINER
ZERO_WIDTH_NON_JOINER :: '\u200C'SourceZERO_WIDTH_SPACE
ZERO_WIDTH_SPACE :: '\u200B'SourceVariables
123alpha_ranges
alpha_ranges :: [?]i32 = [?]i32{
0x00d8, 0x00f6,
0x00f8, 0x01f5,
0x0250, 0x02a8,
0x038e, 0x03a1,
0x03a3, 0x03ce,
0x03d0, 0x03d6,
0x03e2, 0x03f3,
0x0490, 0x04c4,
0x0561, 0x0587,
0x05d0, 0x05ea,
0x05f0, 0x05f2,
0x0621, 0x063a,
0x0640, 0x064a,
0x0671, 0x06Sourcealpha_singlets
alpha_singlets :: [?]i32 = [?]i32{
0x00aa,
0x00b5,
0x00ba,
0x03da,
0x03dc,
0x03de,
0x03e0,
0x06d5,
0x09b2,
0x0a5e,
0x0a8d,
0x0ae0,
0x0b9c,
0x0cde,
0x0e4f,
0x0e84,
0x0e8a,
0x0e8d,
0x0ea5,
0x0ea7,
0x0eb0,
0x0ebd,
0x1fbe,
0x207f,
0x20a8,
0x2102,
0x2107,
0x21Sourcechar_properties
char_properties :: [MAX_LATIN1+1]u8 = [MAX_LATIN1+1]u8{
0x00 = pC, // '\x00'
0x01 = pC, // '\x01'
0x02 = pC, // '\x02'
0x03 = pC, // '\x03'
0x04 = pC, // '\x04'
0x05 = pC, // '\x05'
0x06 = pC, // '\x06'
0x07 = pC, // '\a'
0x08 = pC, Sourceemoji_extended_pictographic_ranges
emoji_extended_pictographic_ranges :: [?]i32 = [?]i32 {
0x00A9, 0x00A9,
0x00AE, 0x00AE,
0x203C, 0x203C,
0x2049, 0x2049,
0x2122, 0x2122,
0x2139, 0x2139,
0x2194, 0x2199,
0x21A9, 0x21AA,
0x231A, 0x231B,
0x2328, 0x2328,
0x2388, 0x2388,
0x23CF, 0x23CF,
0x23E9, 0x23EC,
0x23ED, 0x23EE,
0x23EF, Sourceextra_digits_ranges
extra_digits_ranges :: Range = Range{
single_16 = extra_digits_singles16[:],
ranges_16 = extra_digits_ranges16[:],
ranges_32 = extra_digits_ranges32[:],
}Sourceextra_digits_ranges16
extra_digits_ranges16 :: [?]u16 = [?]u16{
0x00B2, 0x00B3,
0x1369, 0x1371,
0x2074, 0x2079,
0x2080, 0x2089,
0x2460, 0x2468,
0x2474, 0x247C,
0x2488, 0x2490,
0x24F5, 0x24FD,
0x2776, 0x277E,
0x2780, 0x2788,
0x278A, 0x2792,
}Sourceextra_digits_ranges32
extra_digits_ranges32 :: [?]i32 = [?]i32{
0x10A40, 0x10A43,
0x10E60, 0x10E68,
0x11052, 0x1105A,
0x1F100, 0x1F10A,
}Sourceextra_digits_singles16
extra_digits_singles16 :: [?]u16 = [?]u16{
0x00B9, 0x19DA, 0x2070, 0x24EA, 0x24FF,
}Sourcegrapheme_extend_ranges
grapheme_extend_ranges :: [?]i32 = [?]i32 {
0x0300, 0x036F,
0x0483, 0x0487,
0x0488, 0x0489,
0x0591, 0x05BD,
0x05BF, 0x05BF,
0x05C1, 0x05C2,
0x05C4, 0x05C5,
0x05C7, 0x05C7,
0x0610, 0x061A,
0x064B, 0x065F,
0x0670, 0x0670,
0x06D6, 0x06DC,
0x06DF, 0x06E4,
0x06E7, 0x06E8,
0x06EA, Sourcehangul_syllable_lv_singlets
hangul_syllable_lv_singlets :: [?]i32 = [?]i32 {
0xAC00,
0xAC1C,
0xAC38,
0xAC54,
0xAC70,
0xAC8C,
0xACA8,
0xACC4,
0xACE0,
0xACFC,
0xAD18,
0xAD34,
0xAD50,
0xAD6C,
0xAD88,
0xADA4,
0xADC0,
0xADDC,
0xADF8,
0xAE14,
0xAE30,
0xAE4C,
0xAE68,
0xAE84,
0xAEA0,
0xAEBC,
0xAED8,
0xASourcehangul_syllable_lvt_ranges
hangul_syllable_lvt_ranges :: [?]i32 = [?]i32 {
0xAC01, 0xAC1B,
0xAC1D, 0xAC37,
0xAC39, 0xAC53,
0xAC55, 0xAC6F,
0xAC71, 0xAC8B,
0xAC8D, 0xACA7,
0xACA9, 0xACC3,
0xACC5, 0xACDF,
0xACE1, 0xACFB,
0xACFD, 0xAD17,
0xAD19, 0xAD33,
0xAD35, 0xAD4F,
0xAD51, 0xAD6B,
0xAD6D, 0xAD87,
0xAD89, Sourceindic_conjunct_break_consonant_ranges
indic_conjunct_break_consonant_ranges :: [?]i32 = [?]i32 {
0x0915, 0x0939,
0x0958, 0x095F,
0x0978, 0x097F,
0x0995, 0x09A8,
0x09AA, 0x09B0,
0x09B2, 0x09B2,
0x09B6, 0x09B9,
0x09DC, 0x09DD,
0x09DF, 0x09DF,
0x09F0, 0x09F1,
0x0A95, 0x0AA8,
0x0AAA, 0x0AB0,
0x0AB2, 0x0AB3,
0x0AB5, 0x0AB9,
0x0AF9, Sourceindic_conjunct_break_extend_ranges
indic_conjunct_break_extend_ranges :: [?]i32 = [?]i32 {
0x0300, 0x034E,
0x0350, 0x036F,
0x0483, 0x0487,
0x0591, 0x05BD,
0x05BF, 0x05BF,
0x05C1, 0x05C2,
0x05C4, 0x05C5,
0x05C7, 0x05C7,
0x0610, 0x061A,
0x064B, 0x065F,
0x0670, 0x0670,
0x06D6, 0x06DC,
0x06DF, 0x06E4,
0x06E7, 0x06E8,
0x06EA, Sourcell_ranges
ll_ranges :: Range = Range{
single_16 = ll_singles16[:],
ranges_16 = ll_ranges16[:],
single_32 = ll_singles32[:],
ranges_32 = ll_ranges32[:],
}Sourcell_ranges16
ll_ranges16 :: [?]u16 = [?]u16{
0x0061, 0x007A,
0x00DF, 0x00F6,
0x00F8, 0x00FF,
0x0137, 0x0138,
0x0148, 0x0149,
0x017E, 0x0180,
0x018C, 0x018D,
0x0199, 0x019B,
0x01AA, 0x01AB,
0x01B9, 0x01BA,
0x01BD, 0x01BF,
0x01DC, 0x01DD,
0x01EF, 0x01F0,
0x0233, 0x0239,
0x023F, 0Sourcell_ranges32
ll_ranges32 :: [?]i32 = [?]i32{
0x10428, 0x1044F,
0x104D8, 0x104FB,
0x10597, 0x105A1,
0x105A3, 0x105B1,
0x105B3, 0x105B9,
0x105BB, 0x105BC,
0x10CC0, 0x10CF2,
0x10D70, 0x10D85,
0x118C0, 0x118DF,
0x16E60, 0x16E7F,
0x16EBB, 0x16ED3,
0x1D41A, 0x1D433,
0x1D44E, 0x1D454,
Sourcell_singles16
ll_singles16 :: [?]u16 = [?]u16{
0x00B5, 0x0101, 0x0103, 0x0105, 0x0107, 0x0109, 0x010B, 0x010D,
0x010F, 0x0111, 0x0113, 0x0115, 0x0117, 0x0119, 0x011B, 0x011D,
0x011F, 0x0121, 0x0123, 0x0125, 0x0127, 0x0129, 0x012B, 0x012D,
0x012F, 0x0131, 0x0133, 0x0135, 0x013A, 0x013C, 0x01Sourcell_singles32
ll_singles32 :: [?]i32 = [?]i32{
0x1D4BB, 0x1D7CB,
}Sourcelm_ranges
lm_ranges :: Range = Range{
single_16 = lm_singles16[:],
ranges_16 = lm_ranges16[:],
single_32 = lm_singles32[:],
ranges_32 = lm_ranges32[:],
}Sourcelm_ranges16
lm_ranges16 :: [?]u16 = [?]u16{
0x02B0, 0x02C1,
0x02C6, 0x02D1,
0x02E0, 0x02E4,
0x06E5, 0x06E6,
0x07F4, 0x07F5,
0x1C78, 0x1C7D,
0x1D2C, 0x1D6A,
0x1D9B, 0x1DBF,
0x2090, 0x209C,
0x2C7C, 0x2C7D,
0x3031, 0x3035,
0x309D, 0x309E,
0x30FC, 0x30FE,
0xA4F8, 0xA4FD,
0xA69C, 0Sourcelm_ranges32
lm_ranges32 :: [?]i32 = [?]i32{
0x10780, 0x10785,
0x10787, 0x107B0,
0x107B2, 0x107BA,
0x16B40, 0x16B43,
0x16D40, 0x16D42,
0x16D6B, 0x16D6C,
0x16F93, 0x16F9F,
0x16FE0, 0x16FE1,
0x16FF2, 0x16FF3,
0x1AFF0, 0x1AFF3,
0x1AFF5, 0x1AFFB,
0x1AFFD, 0x1AFFE,
0x1E030, 0x1E06D,
Sourcelm_singles16
lm_singles16 :: [?]u16 = [?]u16{
0x02EC, 0x02EE, 0x0374, 0x037A, 0x0559, 0x0640, 0x07FA, 0x081A,
0x0824, 0x0828, 0x08C9, 0x0971, 0x0E46, 0x0EC6, 0x10FC, 0x17D7,
0x1843, 0x1AA7, 0x1D78, 0x2071, 0x207F, 0x2D6F, 0x2E2F, 0x3005,
0x303B, 0xA015, 0xA60C, 0xA67F, 0xA770, 0xA788, 0xA9Sourcelm_singles32
lm_singles32 :: [?]i32 = [?]i32{
0x10D4E, 0x10D6F, 0x10EC5, 0x11DD9, 0x16FE3, 0x1E4EB, 0x1E6FF, 0x1E94B,
}Sourcelo_ranges
lo_ranges :: Range = Range{
single_16 = lo_singles16[:],
ranges_16 = lo_ranges16[:],
single_32 = lo_singles32[:],
ranges_32 = lo_ranges32[:],
}Sourcelo_ranges16
lo_ranges16 :: [?]u16 = [?]u16{
0x01C0, 0x01C3,
0x0294, 0x0295,
0x05D0, 0x05EA,
0x05EF, 0x05F2,
0x0620, 0x063F,
0x0641, 0x064A,
0x066E, 0x066F,
0x0671, 0x06D3,
0x06EE, 0x06EF,
0x06FA, 0x06FC,
0x0712, 0x072F,
0x074D, 0x07A5,
0x07CA, 0x07EA,
0x0800, 0x0815,
0x0840, 0Sourcelo_ranges32
lo_ranges32 :: [?]i32 = [?]i32{
0x10000, 0x1000B,
0x1000D, 0x10026,
0x10028, 0x1003A,
0x1003C, 0x1003D,
0x1003F, 0x1004D,
0x10050, 0x1005D,
0x10080, 0x100FA,
0x10280, 0x1029C,
0x102A0, 0x102D0,
0x10300, 0x1031F,
0x1032D, 0x10340,
0x10342, 0x10349,
0x10350, 0x10375,
Sourcelo_singles16
lo_singles16 :: [?]u16 = [?]u16{
0x00AA, 0x00BA, 0x01BB, 0x06D5, 0x06FF, 0x0710, 0x07B1, 0x093D,
0x0950, 0x09B2, 0x09BD, 0x09CE, 0x09FC, 0x0A5E, 0x0ABD, 0x0AD0,
0x0AF9, 0x0B3D, 0x0B71, 0x0B83, 0x0B9C, 0x0BD0, 0x0C3D, 0x0C80,
0x0CBD, 0x0D3D, 0x0D4E, 0x0DBD, 0x0E84, 0x0EA5, 0x0ESourcelo_singles32
lo_singles32 :: [?]i32 = [?]i32{
0x10808, 0x1083C, 0x10A00, 0x10D4F, 0x10F27, 0x11075, 0x11144, 0x11147,
0x11176, 0x111DA, 0x111DC, 0x11288, 0x1133D, 0x11350, 0x1138B, 0x1138E,
0x113B7, 0x113D1, 0x113D3, 0x114C7, 0x11644, 0x116B8, 0x11909, 0x1193F,
0x11941, 0x119E1, 0x119E3, 0Sourcelt_ranges
lt_ranges :: Range = Range{
single_16 = lt_singles16[:],
ranges_16 = lt_ranges16[:],
}Sourcelt_ranges16
lt_ranges16 :: [?]u16 = [?]u16{
0x1F88, 0x1F8F,
0x1F98, 0x1F9F,
0x1FA8, 0x1FAF,
}Sourcelt_singles16
lt_singles16 :: [?]u16 = [?]u16{
0x01C5, 0x01C8, 0x01CB, 0x01F2, 0x1FBC, 0x1FCC, 0x1FFC,
}Sourcelu_ranges
lu_ranges :: Range = Range{
single_16 = lu_singles16[:],
ranges_16 = lu_ranges16[:],
single_32 = lu_singles32[:],
ranges_32 = lu_ranges32[:],
}Sourcelu_ranges16
lu_ranges16 :: [?]u16 = [?]u16{
0x0041, 0x005A,
0x00C0, 0x00D6,
0x00D8, 0x00DE,
0x0178, 0x0179,
0x0181, 0x0182,
0x0186, 0x0187,
0x0189, 0x018B,
0x018E, 0x0191,
0x0193, 0x0194,
0x0196, 0x0198,
0x019C, 0x019D,
0x019F, 0x01A0,
0x01A6, 0x01A7,
0x01AE, 0x01AF,
0x01B1, 0Sourcelu_ranges32
lu_ranges32 :: [?]i32 = [?]i32{
0x10400, 0x10427,
0x104B0, 0x104D3,
0x10570, 0x1057A,
0x1057C, 0x1058A,
0x1058C, 0x10592,
0x10594, 0x10595,
0x10C80, 0x10CB2,
0x10D50, 0x10D65,
0x118A0, 0x118BF,
0x16E40, 0x16E5F,
0x16EA0, 0x16EB8,
0x1D400, 0x1D419,
0x1D434, 0x1D44D,
Sourcelu_singles16
lu_singles16 :: [?]u16 = [?]u16{
0x0100, 0x0102, 0x0104, 0x0106, 0x0108, 0x010A, 0x010C, 0x010E,
0x0110, 0x0112, 0x0114, 0x0116, 0x0118, 0x011A, 0x011C, 0x011E,
0x0120, 0x0122, 0x0124, 0x0126, 0x0128, 0x012A, 0x012C, 0x012E,
0x0130, 0x0132, 0x0134, 0x0136, 0x0139, 0x013B, 0x01Sourcelu_singles32
lu_singles32 :: [?]i32 = [?]i32{
0x1D49C, 0x1D4A2, 0x1D546, 0x1D7CA,
}Sourcemc_ranges
mc_ranges :: Range = Range{
single_16 = mc_singles16[:],
ranges_16 = mc_ranges16[:],
single_32 = mc_singles32[:],
ranges_32 = mc_ranges32[:],
}Sourcemc_ranges16
mc_ranges16 :: [?]u16 = [?]u16{
0x093E, 0x0940,
0x0949, 0x094C,
0x094E, 0x094F,
0x0982, 0x0983,
0x09BE, 0x09C0,
0x09C7, 0x09C8,
0x09CB, 0x09CC,
0x0A3E, 0x0A40,
0x0ABE, 0x0AC0,
0x0ACB, 0x0ACC,
0x0B02, 0x0B03,
0x0B47, 0x0B48,
0x0B4B, 0x0B4C,
0x0BBE, 0x0BBF,
0x0BC1, 0Sourcemc_ranges32
mc_ranges32 :: [?]i32 = [?]i32{
0x110B0, 0x110B2,
0x110B7, 0x110B8,
0x11145, 0x11146,
0x111B3, 0x111B5,
0x111BF, 0x111C0,
0x1122C, 0x1122E,
0x11232, 0x11233,
0x112E0, 0x112E2,
0x11302, 0x11303,
0x1133E, 0x1133F,
0x11341, 0x11344,
0x11347, 0x11348,
0x1134B, 0x1134D,
Sourcemc_singles16
mc_singles16 :: [?]u16 = [?]u16{
0x0903, 0x093B, 0x09D7, 0x0A03, 0x0A83, 0x0AC9, 0x0B3E, 0x0B40,
0x0B57, 0x0BD7, 0x0CBE, 0x0CF3, 0x0D57, 0x0F7F, 0x1031, 0x1038,
0x108F, 0x1715, 0x1734, 0x17B6, 0x1A55, 0x1A57, 0x1A61, 0x1B04,
0x1B35, 0x1B3B, 0x1B82, 0x1BA1, 0x1BAA, 0x1BE7, 0x1BSourcemc_singles32
mc_singles32 :: [?]i32 = [?]i32{
0x11000, 0x11002, 0x11082, 0x1112C, 0x11182, 0x111CE, 0x11235, 0x11357,
0x113C2, 0x113C5, 0x113CF, 0x11445, 0x114B9, 0x114C1, 0x115BE, 0x1163E,
0x116AC, 0x116B6, 0x1171E, 0x11726, 0x11838, 0x1193D, 0x11940, 0x11942,
0x119E4, 0x11A39, 0x11A97, 0Sourceme_ranges
me_ranges :: Range = Range{
single_16 = me_singles16[:],
ranges_16 = me_ranges16[:],
}Sourceme_ranges16
me_ranges16 :: [?]u16 = [?]u16{
0x0488, 0x0489,
0x20DD, 0x20E0,
0x20E2, 0x20E4,
0xA670, 0xA672,
}Sourceme_singles16
me_singles16 :: [?]u16 = [?]u16{
0x1ABE,
}Sourcemn_ranges
mn_ranges :: Range = Range{
single_16 = mn_singles16[:],
ranges_16 = mn_ranges16[:],
single_32 = mn_singles32[:],
ranges_32 = mn_ranges32[:],
}Sourcemn_ranges16
mn_ranges16 :: [?]u16 = [?]u16{
0x0300, 0x036F,
0x0483, 0x0487,
0x0591, 0x05BD,
0x05C1, 0x05C2,
0x05C4, 0x05C5,
0x0610, 0x061A,
0x064B, 0x065F,
0x06D6, 0x06DC,
0x06DF, 0x06E4,
0x06E7, 0x06E8,
0x06EA, 0x06ED,
0x0730, 0x074A,
0x07A6, 0x07B0,
0x07EB, 0x07F3,
0x0816, 0Sourcemn_ranges32
mn_ranges32 :: [?]i32 = [?]i32{
0x10376, 0x1037A,
0x10A01, 0x10A03,
0x10A05, 0x10A06,
0x10A0C, 0x10A0F,
0x10A38, 0x10A3A,
0x10AE5, 0x10AE6,
0x10D24, 0x10D27,
0x10D69, 0x10D6D,
0x10EAB, 0x10EAC,
0x10EFA, 0x10EFF,
0x10F46, 0x10F50,
0x10F82, 0x10F85,
0x11038, 0x11046,
Sourcemn_singles16
mn_singles16 :: [?]u16 = [?]u16{
0x05BF, 0x05C7, 0x0670, 0x0711, 0x07FD, 0x093A, 0x093C, 0x094D,
0x0981, 0x09BC, 0x09CD, 0x09FE, 0x0A3C, 0x0A51, 0x0A75, 0x0ABC,
0x0ACD, 0x0B01, 0x0B3C, 0x0B3F, 0x0B4D, 0x0B82, 0x0BC0, 0x0BCD,
0x0C00, 0x0C04, 0x0C3C, 0x0C81, 0x0CBC, 0x0CBF, 0x0CSourcemn_singles32
mn_singles32 :: [?]i32 = [?]i32{
0x101FD, 0x102E0, 0x10A3F, 0x11001, 0x11070, 0x110C2, 0x11173, 0x111CF,
0x11234, 0x1123E, 0x11241, 0x112DF, 0x11340, 0x113CE, 0x113D0, 0x113D2,
0x11446, 0x1145E, 0x114BA, 0x1163D, 0x116AB, 0x116AD, 0x116B7, 0x1171D,
0x1171F, 0x1193E, 0x11943, 0Sourcend_ranges
nd_ranges :: Range = Range{
ranges_16 = nd_ranges16[:],
ranges_32 = nd_ranges32[:],
}Sourcend_ranges16
nd_ranges16 :: [?]u16 = [?]u16{
0x0030, 0x0039,
0x0660, 0x0669,
0x06F0, 0x06F9,
0x07C0, 0x07C9,
0x0966, 0x096F,
0x09E6, 0x09EF,
0x0A66, 0x0A6F,
0x0AE6, 0x0AEF,
0x0B66, 0x0B6F,
0x0BE6, 0x0BEF,
0x0C66, 0x0C6F,
0x0CE6, 0x0CEF,
0x0D66, 0x0D6F,
0x0DE6, 0x0DEF,
0x0E50, 0Sourcend_ranges32
nd_ranges32 :: [?]i32 = [?]i32{
0x104A0, 0x104A9,
0x10D30, 0x10D39,
0x10D40, 0x10D49,
0x11066, 0x1106F,
0x110F0, 0x110F9,
0x11136, 0x1113F,
0x111D0, 0x111D9,
0x112F0, 0x112F9,
0x11450, 0x11459,
0x114D0, 0x114D9,
0x11650, 0x11659,
0x116C0, 0x116C9,
0x116D0, 0x116E3,
Sourcenl_ranges
nl_ranges :: Range = Range{
single_16 = nl_singles16[:],
ranges_16 = nl_ranges16[:],
single_32 = nl_singles32[:],
ranges_32 = nl_ranges32[:],
}Sourcenl_ranges16
nl_ranges16 :: [?]u16 = [?]u16{
0x16EE, 0x16F0,
0x2160, 0x2182,
0x2185, 0x2188,
0x3021, 0x3029,
0x3038, 0x303A,
0xA6E6, 0xA6EF,
}Sourcenl_ranges32
nl_ranges32 :: [?]i32 = [?]i32{
0x10140, 0x10174,
0x103D1, 0x103D5,
0x12400, 0x1246E,
0x16FF4, 0x16FF6,
}Sourcenl_singles16
nl_singles16 :: [?]u16 = [?]u16{
0x3007,
}Sourcenl_singles32
nl_singles32 :: [?]i32 = [?]i32{
0x10341, 0x1034A,
}Sourceno_ranges
no_ranges :: Range = Range{
single_16 = no_singles16[:],
ranges_16 = no_ranges16[:],
ranges_32 = no_ranges32[:],
}Sourceno_ranges16
no_ranges16 :: [?]u16 = [?]u16{
0x00B2, 0x00B3,
0x00BC, 0x00BE,
0x09F4, 0x09F9,
0x0B72, 0x0B77,
0x0BF0, 0x0BF2,
0x0C78, 0x0C7E,
0x0D58, 0x0D5E,
0x0D70, 0x0D78,
0x0F2A, 0x0F33,
0x1369, 0x137C,
0x17F0, 0x17F9,
0x2074, 0x2079,
0x2080, 0x2089,
0x2150, 0x215F,
0x2460, 0Sourceno_ranges32
no_ranges32 :: [?]i32 = [?]i32{
0x10107, 0x10133,
0x10175, 0x10178,
0x1018A, 0x1018B,
0x102E1, 0x102FB,
0x10320, 0x10323,
0x10858, 0x1085F,
0x10879, 0x1087F,
0x108A7, 0x108AF,
0x108FB, 0x108FF,
0x10916, 0x1091B,
0x109BC, 0x109BD,
0x109C0, 0x109CF,
0x109D2, 0x109FF,
Sourceno_singles16
no_singles16 :: [?]u16 = [?]u16{
0x00B9, 0x19DA, 0x2070, 0x2189, 0x2CFD,
}Sourcenonspacing_mark_ranges
nonspacing_mark_ranges :: [?]i32 = [?]i32 {
0x0300, 0x036F,
0x0483, 0x0487,
0x0591, 0x05BD,
0x05BF, 0x05BF,
0x05C1, 0x05C2,
0x05C4, 0x05C5,
0x05C7, 0x05C7,
0x0610, 0x061A,
0x064B, 0x065F,
0x0670, 0x0670,
0x06D6, 0x06DC,
0x06DF, 0x06E4,
0x06E7, 0x06E8,
0x06EA, 0x06ED,
0x0711, Sourcenormalized_east_asian_width_ranges
normalized_east_asian_width_ranges :: [?]i32 = [?]i32 {
0x0000, 0x10FF, 1,
0x1100, 0x115F, 2,
0x1160, 0x2319, 1,
0x231A, 0x231B, 2,
0x231C, 0x2328, 1,
0x2329, 0x232A, 2,
0x232B, 0x23E8, 1,
0x23E9, 0x23EC, 2,
0x23ED, 0x23EF, 1,
0x23F0, 0x23F0, 2,
0x23F1, 0x23F2, 1,
0x23F3, 0x23F3, 2,
0x23F4SourceFullwidth (F) and Wide (W) are counted as 2. Everything else is 1.
Derived from: https://unicode.org/Public/15.1.0/ucd/EastAsianWidth.txt
other_lowercase_ranges
other_lowercase_ranges :: Range = Range{
single_16 = other_lowercase_singles16[:],
ranges_16 = other_lowercase_ranges16[:],
single_32 = other_lowercase_singles32[:],
ranges_32 = other_lowercase_ranges32[:],
}Sourceother_lowercase_ranges16
other_lowercase_ranges16 :: [?]u16 = [?]u16{
0x02B0, 0x02B8,
0x02C0, 0x02C1,
0x02E0, 0x02E4,
0x1D2C, 0x1D6A,
0x1D9B, 0x1DBF,
0x2090, 0x209C,
0x2170, 0x217F,
0x24D0, 0x24E9,
0x2C7C, 0x2C7D,
0xA69C, 0xA69D,
0xA7F1, 0xA7F4,
0xA7F8, 0xA7F9,
0xAB5C, 0xAB5F,
}Sourceother_lowercase_ranges32
other_lowercase_ranges32 :: [?]i32 = [?]i32{
0x10783, 0x10785,
0x10787, 0x107B0,
0x107B2, 0x107BA,
0x1E030, 0x1E06D,
}Sourceother_lowercase_singles16
other_lowercase_singles16 :: [?]u16 = [?]u16{
0x00AA, 0x00BA, 0x0345, 0x037A, 0x10FC, 0x1D78, 0x2071, 0x207F,
0xA770, 0xAB69,
}Sourceother_lowercase_singles32
other_lowercase_singles32 :: [?]i32 = [?]i32{
0x10780,
}Sourceother_uppercase_ranges
other_uppercase_ranges :: Range = Range{
ranges_16 = other_uppercase_ranges16[:],
ranges_32 = other_uppercase_ranges32[:],
}Sourceother_uppercase_ranges16
other_uppercase_ranges16 :: [?]u16 = [?]u16{
0x2160, 0x216F,
0x24B6, 0x24CF,
}Sourceother_uppercase_ranges32
other_uppercase_ranges32 :: [?]i32 = [?]i32{
0x1F130, 0x1F149,
0x1F150, 0x1F169,
0x1F170, 0x1F189,
}Sourcepc_ranges
pc_ranges :: Range = Range{
single_16 = pc_singles16[:],
ranges_16 = pc_ranges16[:],
}Sourcepc_ranges16
pc_ranges16 :: [?]u16 = [?]u16{
0x203F, 0x2040,
0xFE33, 0xFE34,
0xFE4D, 0xFE4F,
}Sourcepc_singles16
pc_singles16 :: [?]u16 = [?]u16{
0x005F, 0x2054, 0xFF3F,
}Sourcepd_ranges
pd_ranges :: Range = Range{
single_16 = pd_singles16[:],
ranges_16 = pd_ranges16[:],
single_32 = pd_singles32[:],
}Sourcepd_ranges16
pd_ranges16 :: [?]u16 = [?]u16{
0x2010, 0x2015,
0x2E3A, 0x2E3B,
0xFE31, 0xFE32,
}Sourcepd_singles16
pd_singles16 :: [?]u16 = [?]u16{
0x002D, 0x058A, 0x05BE, 0x1400, 0x1806, 0x2E17, 0x2E1A, 0x2E40,
0x2E5D, 0x301C, 0x3030, 0x30A0, 0xFE58, 0xFE63, 0xFF0D,
}Sourcepd_singles32
pd_singles32 :: [?]i32 = [?]i32{
0x10D6E, 0x10EAD,
}Sourcepe_ranges
pe_ranges :: Range = Range{
single_16 = pe_singles16[:],
ranges_16 = pe_ranges16[:],
}Sourcepe_ranges16
pe_ranges16 :: [?]u16 = [?]u16{
0x301E, 0x301F,
}Sourcepe_singles16
pe_singles16 :: [?]u16 = [?]u16{
0x0029, 0x005D, 0x007D, 0x0F3B, 0x0F3D, 0x169C, 0x2046, 0x207E,
0x208E, 0x2309, 0x230B, 0x232A, 0x2769, 0x276B, 0x276D, 0x276F,
0x2771, 0x2773, 0x2775, 0x27C6, 0x27E7, 0x27E9, 0x27EB, 0x27ED,
0x27EF, 0x2984, 0x2986, 0x2988, 0x298A, 0x298C, 0x29Sourcepf_ranges
pf_ranges :: Range = Range{
single_16 = pf_singles16[:],
}Sourcepf_singles16
pf_singles16 :: [?]u16 = [?]u16{
0x00BB, 0x2019, 0x201D, 0x203A, 0x2E03, 0x2E05, 0x2E0A, 0x2E0D,
0x2E1D, 0x2E21,
}Sourcepi_ranges
pi_ranges :: Range = Range{
single_16 = pi_singles16[:],
ranges_16 = pi_ranges16[:],
}Sourcepi_ranges16
pi_ranges16 :: [?]u16 = [?]u16{
0x201B, 0x201C,
}Sourcepi_singles16
pi_singles16 :: [?]u16 = [?]u16{
0x00AB, 0x2018, 0x201F, 0x2039, 0x2E02, 0x2E04, 0x2E09, 0x2E0C,
0x2E1C, 0x2E20,
}Sourcepo_ranges
po_ranges :: Range = Range{
single_16 = po_singles16[:],
ranges_16 = po_ranges16[:],
single_32 = po_singles32[:],
ranges_32 = po_ranges32[:],
}Sourcepo_ranges16
po_ranges16 :: [?]u16 = [?]u16{
0x0021, 0x0023,
0x0025, 0x0027,
0x002E, 0x002F,
0x003A, 0x003B,
0x003F, 0x0040,
0x00B6, 0x00B7,
0x055A, 0x055F,
0x05F3, 0x05F4,
0x0609, 0x060A,
0x060C, 0x060D,
0x061D, 0x061F,
0x066A, 0x066D,
0x0700, 0x070D,
0x07F7, 0x07F9,
0x0830, 0Sourcepo_ranges32
po_ranges32 :: [?]i32 = [?]i32{
0x10100, 0x10102,
0x10A50, 0x10A58,
0x10AF0, 0x10AF6,
0x10B39, 0x10B3F,
0x10B99, 0x10B9C,
0x10F55, 0x10F59,
0x10F86, 0x10F89,
0x11047, 0x1104D,
0x110BB, 0x110BC,
0x110BE, 0x110C1,
0x11140, 0x11143,
0x11174, 0x11175,
0x111C5, 0x111C8,
Sourcepo_singles16
po_singles16 :: [?]u16 = [?]u16{
0x002A, 0x002C, 0x005C, 0x00A1, 0x00A7, 0x00BF, 0x037E, 0x0387,
0x0589, 0x05C0, 0x05C3, 0x05C6, 0x061B, 0x06D4, 0x085E, 0x0970,
0x09FD, 0x0A76, 0x0AF0, 0x0C77, 0x0C84, 0x0DF4, 0x0E4F, 0x0F14,
0x0F85, 0x10FB, 0x166E, 0x1CD3, 0x2053, 0x2D70, 0x2ESourcepo_singles32
po_singles32 :: [?]i32 = [?]i32{
0x1039F, 0x103D0, 0x1056F, 0x10857, 0x1091F, 0x1093F, 0x10A7F, 0x10ED0,
0x111CD, 0x111DB, 0x112A9, 0x1145D, 0x114C6, 0x116B9, 0x1183B, 0x119E2,
0x11BE1, 0x11FFF, 0x16AF5, 0x16B44, 0x16FE2, 0x1BC9F, 0x1E5FF,
}Sourceps_ranges
ps_ranges :: Range = Range{
single_16 = ps_singles16[:],
}Sourceps_singles16
ps_singles16 :: [?]u16 = [?]u16{
0x0028, 0x005B, 0x007B, 0x0F3A, 0x0F3C, 0x169B, 0x201A, 0x201E,
0x2045, 0x207D, 0x208D, 0x2308, 0x230A, 0x2329, 0x2768, 0x276A,
0x276C, 0x276E, 0x2770, 0x2772, 0x2774, 0x27C5, 0x27E6, 0x27E8,
0x27EA, 0x27EC, 0x27EE, 0x2983, 0x2985, 0x2987, 0x29Sourcesc_ranges
sc_ranges :: Range = Range{
single_16 = sc_singles16[:],
ranges_16 = sc_ranges16[:],
single_32 = sc_singles32[:],
ranges_32 = sc_ranges32[:],
}Sourcesc_ranges16
sc_ranges16 :: [?]u16 = [?]u16{
0x00A2, 0x00A5,
0x07FE, 0x07FF,
0x09F2, 0x09F3,
0x20A0, 0x20C1,
0xFFE0, 0xFFE1,
0xFFE5, 0xFFE6,
}Sourcesc_ranges32
sc_ranges32 :: [?]i32 = [?]i32{
0x11FDD, 0x11FE0,
}Sourcesc_singles16
sc_singles16 :: [?]u16 = [?]u16{
0x0024, 0x058F, 0x060B, 0x09FB, 0x0AF1, 0x0BF9, 0x0E3F, 0x17DB,
0xA838, 0xFDFC, 0xFE69, 0xFF04,
}Sourcesc_singles32
sc_singles32 :: [?]i32 = [?]i32{
0x1E2FF, 0x1ECB0,
}Sourcesk_ranges
sk_ranges :: Range = Range{
single_16 = sk_singles16[:],
ranges_16 = sk_ranges16[:],
ranges_32 = sk_ranges32[:],
}Sourcesk_ranges16
sk_ranges16 :: [?]u16 = [?]u16{
0x02C2, 0x02C5,
0x02D2, 0x02DF,
0x02E5, 0x02EB,
0x02EF, 0x02FF,
0x0384, 0x0385,
0x1FBF, 0x1FC1,
0x1FCD, 0x1FCF,
0x1FDD, 0x1FDF,
0x1FED, 0x1FEF,
0x1FFD, 0x1FFE,
0x309B, 0x309C,
0xA700, 0xA716,
0xA720, 0xA721,
0xA789, 0xA78A,
0xAB6A, 0Sourcesk_ranges32
sk_ranges32 :: [?]i32 = [?]i32{
0x1F3FB, 0x1F3FF,
}Sourcesk_singles16
sk_singles16 :: [?]u16 = [?]u16{
0x005E, 0x0060, 0x00A8, 0x00AF, 0x00B4, 0x00B8, 0x02ED, 0x0375,
0x0888, 0x1FBD, 0xAB5B, 0xFF3E, 0xFF40, 0xFFE3,
}Sourcesm_ranges
sm_ranges :: Range = Range{
single_16 = sm_singles16[:],
ranges_16 = sm_ranges16[:],
single_32 = sm_singles32[:],
ranges_32 = sm_ranges32[:],
}Sourcesm_ranges16
sm_ranges16 :: [?]u16 = [?]u16{
0x003C, 0x003E,
0x0606, 0x0608,
0x207A, 0x207C,
0x208A, 0x208C,
0x2140, 0x2144,
0x2190, 0x2194,
0x219A, 0x219B,
0x21CE, 0x21CF,
0x21F4, 0x22FF,
0x2320, 0x2321,
0x239B, 0x23B3,
0x23DC, 0x23E1,
0x25F8, 0x25FF,
0x27C0, 0x27C4,
0x27C7, 0Sourcesm_ranges32
sm_ranges32 :: [?]i32 = [?]i32{
0x10D8E, 0x10D8F,
0x1EEF0, 0x1EEF1,
0x1F8D0, 0x1F8D8,
}Sourcesm_singles16
sm_singles16 :: [?]u16 = [?]u16{
0x002B, 0x007C, 0x007E, 0x00AC, 0x00B1, 0x00D7, 0x00F7, 0x03F6,
0x2044, 0x2052, 0x2118, 0x214B, 0x21A0, 0x21A3, 0x21A6, 0x21AE,
0x21D2, 0x21D4, 0x237C, 0x25B7, 0x25C1, 0x266F, 0xFB29, 0xFE62,
0xFF0B, 0xFF5C, 0xFF5E, 0xFFE2,
}Sourcesm_singles32
sm_singles32 :: [?]i32 = [?]i32{
0x1CEF0, 0x1D6C1, 0x1D6DB, 0x1D6FB, 0x1D715, 0x1D735, 0x1D74F, 0x1D76F,
0x1D789, 0x1D7A9, 0x1D7C3,
}Sourceso_ranges
so_ranges :: Range = Range{
single_16 = so_singles16[:],
ranges_16 = so_ranges16[:],
single_32 = so_singles32[:],
ranges_32 = so_ranges32[:],
}Sourceso_ranges16
so_ranges16 :: [?]u16 = [?]u16{
0x058D, 0x058E,
0x060E, 0x060F,
0x06FD, 0x06FE,
0x0BF3, 0x0BF8,
0x0F01, 0x0F03,
0x0F15, 0x0F17,
0x0F1A, 0x0F1F,
0x0FBE, 0x0FC5,
0x0FC7, 0x0FCC,
0x0FCE, 0x0FCF,
0x0FD5, 0x0FD8,
0x109E, 0x109F,
0x1390, 0x1399,
0x19DE, 0x19FF,
0x1B61, 0Sourceso_ranges32
so_ranges32 :: [?]i32 = [?]i32{
0x10137, 0x1013F,
0x10179, 0x10189,
0x1018C, 0x1018E,
0x10190, 0x1019C,
0x101D0, 0x101FC,
0x10877, 0x10878,
0x10ED1, 0x10ED8,
0x11FD5, 0x11FDC,
0x11FE1, 0x11FF1,
0x16B3C, 0x16B3F,
0x1CC00, 0x1CCEF,
0x1CCFA, 0x1CCFC,
0x1CD00, 0x1CEB3,
Sourceso_singles16
so_singles16 :: [?]u16 = [?]u16{
0x00A6, 0x00A9, 0x00AE, 0x00B0, 0x0482, 0x06DE, 0x06E9, 0x07F6,
0x09FA, 0x0B70, 0x0BFA, 0x0C7F, 0x0D4F, 0x0D79, 0x0F13, 0x0F34,
0x0F36, 0x0F38, 0x166D, 0x1940, 0x2114, 0x2125, 0x2127, 0x2129,
0x212E, 0x214A, 0x214F, 0x21D3, 0x3004, 0x3020, 0x31Sourceso_singles32
so_singles32 :: [?]i32 = [?]i32{
0x101A0, 0x10AC8, 0x1173F, 0x16B45, 0x1BC9C, 0x1D245, 0x1E14F, 0x1ECAC,
0x1ED2E, 0x1F7F0, 0x1FAC8, 0x1FBFA,
}Sourcespace_ranges
space_ranges :: [?]i32 = [?]i32{
0x0009, 0x000d, // tab and newline
0x0020, 0x0020, // space
0x0085, 0x0085, // next line
0x00a0, 0x00a0,
0x1680, 0x1680, // Ogham space mark
0x2000, 0x200b, // en dash .. zero-width space
0x200e, 0x200f, // LTR mark .. RTL mark (patteSourcespacing_mark_ranges
spacing_mark_ranges :: [?]i32 = [?]i32 {
0x0903, 0x0903,
0x093B, 0x093B,
0x093E, 0x0940,
0x0949, 0x094C,
0x094E, 0x094F,
0x0982, 0x0983,
0x09BE, 0x09C0,
0x09C7, 0x09C8,
0x09CB, 0x09CC,
0x09D7, 0x09D7,
0x0A03, 0x0A03,
0x0A3E, 0x0A40,
0x0A83, 0x0A83,
0x0ABE, 0x0AC0,
0x0AC9, SourceThe tables below are accurate as of Unicode 15.1.0.
to_lower_ranges
to_lower_ranges :: [?]i32 = [?]i32{
0x0041, 0x005a, 532, // A-Z a-z
0x00c0, 0x00d6, 532, // - -
0x00d8, 0x00de, 532, // - -
0x0189, 0x018a, 705, // - -
0x018e, 0x018f, 702, // - -
0x01b1, 0x01b2, 717, // - -
0x0388, 0x038a, 537, // - -
0x038e, 0x038f, 563, // - -
0x0Sourceto_lower_singlets
to_lower_singlets :: [?]i32 = [?]i32{
0x0100, 501,
0x0102, 501,
0x0104, 501,
0x0106, 501,
0x0108, 501,
0x010a, 501,
0x010c, 501,
0x010e, 501,
0x0110, 501,
0x0112, 501,
0x0114, 501,
0x0116, 501,
0x0118, 501,
0x011a, 501,
0x011c, 501,
0x011e, 501,
0x0120, 501,
0x0122, 5Sourceto_title_singlets
to_title_singlets :: [?]i32 = [?]i32{
0x01c4, 501,
0x01c6, 499,
0x01c7, 501,
0x01c9, 499,
0x01ca, 501,
0x01cc, 499,
0x01f1, 501,
0x01f3, 499,
}Sourceto_upper_ranges
to_upper_ranges :: [?]i32 = [?]i32{
0x0061, 0x007a, 468, // a-z A-Z
0x00e0, 0x00f6, 468,
0x00f8, 0x00fe, 468,
0x0256, 0x0257, 295,
0x0258, 0x0259, 298,
0x028a, 0x028b, 283,
0x03ad, 0x03af, 463,
0x03b1, 0x03c1, 468,
0x03c3, 0x03cb, 468,
0x03cd, 0x03ce, 437,
0x0430Sourceto_upper_singlets
to_upper_singlets :: [?]i32 = [?]i32{
0x00df, 8115,
0x00ff, 621,
0x0101, 499,
0x0103, 499,
0x0105, 499,
0x0107, 499,
0x0109, 499,
0x010b, 499,
0x010d, 499,
0x010f, 499,
0x0111, 499,
0x0113, 499,
0x0115, 499,
0x0117, 499,
0x0119, 499,
0x011b, 499,
0x011d, 499,
0x011f, Sourceunicode_spaces
unicode_spaces :: [?]i32 = [?]i32{
0x0009, // tab
0x000a, // LF
0x000d, // CR
0x0020, // space
0x0085, // next line
0x00a0, // unknown
0x1680, // Ogham space mark
0x2000, // en dash .. zero-width space
0x200e, 0x200f, // LTR mark .. RTL mark (pattern whitespace)
0x2028, 0xSourcezs_ranges
zs_ranges :: Range = Range{
single_16 = zs_singles16[:],
ranges_16 = zs_ranges16[:],
}Sourcezs_ranges16
zs_ranges16 :: [?]u16 = [?]u16{
0x2000, 0x200A,
}Sourcezs_singles16
zs_singles16 :: [?]u16 = [?]u16{
0x0020, 0x00A0, 0x1680, 0x202F, 0x205F, 0x3000,
}SourceProcedures
43binary_search
binary_search :: proc(c: T, table: []T, length: int, stride: int, loc = #caller_location) -> (int)Sourcein_range
in_range :: proc(r: rune, range: Range) -> (bool)SourceCheck to see if the rune r is in range
is_alpha
is_alpha :: proc(r: rune) -> (bool)Sourceis_combining
is_combining :: proc(r: rune) -> (bool)Sourceis_control
is_control :: proc(r: rune) -> (bool)Sourceis_decimal
is_decimal :: proc(r: rune) -> (bool)SourceReturns true if the rune r is in the General Category Nd
Inputs:
- r: The run to check if it is in the general category Nd.
Returns: true if the rune is in the general category Nd and false otherwise
is_digit
is_digit :: proc(r: rune) -> (bool)SourceThis function determincs if a rune is a digit. To be a digit the charage either has a Numeric_Type of Digit or Decimal.
Inputs:
- r: The rune to check if it is a digit.
Returns: true if the rune r is a digit, false in all other cases
is_emoji_extended_pictographic
is_emoji_extended_pictographic :: proc(r: rune) -> (bool)SourceExtended_Pictographic
is_emoji_modifier
is_emoji_modifier :: proc(r: rune) -> (bool)SourceThe procedures below are accurate as of Unicode 15.1.0.
Emoji_Modifier
is_enclosing_mark
is_enclosing_mark :: proc(r: rune) -> (bool)SourceGeneral_Category=Enclosing_Mark
is_gcb_extend_class
is_gcb_extend_class :: proc(r: rune) -> (bool)SourceFor grapheme text segmentation, from Unicode TR 29 Rev 43:
Grapheme_Extend = Yes, or
Emoji_Modifier = Yes
This includes:
General_Category = Nonspacing_Mark
General_Category = Enclosing_Mark
U+200C ZERO WIDTH NON-JOINER
plus a few General_Category = Spacing_Mark needed for canonical equivalence.is_gcb_prepend_class
is_gcb_prepend_class :: proc(r: rune) -> (bool)SourceFor grapheme text segmentation, from Unicode TR 29 Rev 43:
Indic_Syllabic_Category = Consonant_Preceding_Repha, or
Indic_Syllabic_Category = Consonant_Prefixed, or
Prepended_Concatenation_Mark = Yesis_grapheme_extend
is_grapheme_extend :: proc(r: rune) -> (bool)SourceGrapheme_Extend
is_graphic
is_graphic :: proc(r: rune) -> (bool)Sourceis_hangul_syllable_leading
is_hangul_syllable_leading :: proc(r: rune) -> (bool)SourceHangul_Syllable_Type=Leading_Jamo
is_hangul_syllable_lv
is_hangul_syllable_lv :: proc(r: rune) -> (bool)SourceHangul_Syllable_Type=LV_Syllable
is_hangul_syllable_lvt
is_hangul_syllable_lvt :: proc(r: rune) -> (bool)SourceHangul_Syllable_Type=LVT_Syllable
is_hangul_syllable_trailing
is_hangul_syllable_trailing :: proc(r: rune) -> (bool)SourceHangul_Syllable_Type=Trailing_Jamo
is_hangul_syllable_vowel
is_hangul_syllable_vowel :: proc(r: rune) -> (bool)SourceHangul_Syllable_Type=Vowel_Jamo
is_indic_conjunct_break_consonant
is_indic_conjunct_break_consonant :: proc(r: rune) -> (bool)SourceIndic_Conjunct_Break=Consonant
is_indic_conjunct_break_extend
is_indic_conjunct_break_extend :: proc(r: rune) -> (bool)SourceIndic_Conjunct_Break=Extend
is_indic_conjunct_break_linker
is_indic_conjunct_break_linker :: proc(r: rune) -> (bool)SourceIndic_Conjunct_Break=Linker
is_indic_consonant_preceding_repha
is_indic_consonant_preceding_repha :: proc(r: rune) -> (bool)SourceIndic_Syllabic_Category=Consonant_Preceding_Repha
is_indic_consonant_prefixed
is_indic_consonant_prefixed :: proc(r: rune) -> (bool)SourceIndic_Syllabic_Category=Consonant_Prefixed
is_letter
is_letter :: proc(r: rune) -> (bool)SourceReturn true if the rune r is a letter. Being a letter means that the rune has the Unicode general category property of L. In practice, the character will have a general category property of Ll, Lm, Lo, Lt, or Lu.
Inputs:
- r: The rune which will be check for having the property of being a letter.
Returns: true when the rune r is a letter. false will be returned in all other cases.
is_lower
is_lower :: proc(r: rune) -> (bool)Sourceis_nonspacing_mark
is_nonspacing_mark :: proc(r: rune) -> (bool)SourceGeneral_Category=Nonspacing_Mark
is_number
is_number :: proc(r: rune) -> (bool)SourceChecks to see if the rune r is a number. This means the rune is a member of the general category Nd, Nl, or No.
Inputs: r: The rune to check if it is number.
Returns: true if the ruen belongs to the general category Nd, Nl, or No. false is return in all other cases.
is_prepended_concatenation_mark
is_prepended_concatenation_mark :: proc(r: rune) -> (bool)SourcePrepended_Concatenation_Mark
is_print
is_print :: proc(r: rune) -> (bool)Sourceis_punct
is_punct :: proc(r: rune) -> (bool)Sourceis_regional_indicator
is_regional_indicator :: proc(r: rune) -> (bool)SourceRegional_Indicator
is_space
is_space :: proc(r: rune) -> (bool)Sourceis_spacing_mark
is_spacing_mark :: proc(r: rune) -> (bool)SourceGeneral_Category=Spacing_Mark
is_symbol
is_symbol :: proc(r: rune) -> (bool)Sourceis_title
is_title :: proc(r: rune) -> (bool)Sourceis_upper
is_upper :: proc(r: rune) -> (bool)Sourceis_white_space
is_white_space :: proc(r: rune) -> (bool)Sourcenormalized_east_asian_width
normalized_east_asian_width :: proc(r: rune) -> (int)SourceReturn values:
- 2 if East_Asian_Width=F or W, or
- 0 if non-printable / zero-width, or
- 1 in all other cases.
simple_fold
simple_fold :: proc(r: rune) -> (rune)Sourcesimple_fold iterates over the Unicode code points equivalent under the Unicode defined simple case folding. simple_fold returns the smallest rune > r if one exists, or the smallest rune >= 0. If no valid Unicode code point exists, r is returned.
Example:
simple_fold('A') == 'a'
simple_fold('a') == 'A'
simple_fold('Z') == 'z'
simple_fold('z') == 'Z'
simple_fold('7') == '7'
simple_fold('k') == '\u212a' (Kelvin symbol, K)
simple_fold('\u212a') == 'k'
simple_fold(-3) == -3to_lower
to_lower :: proc(r: rune) -> (rune)Sourceto_title
to_title :: proc(r: rune) -> (rune)Sourceto_upper
to_upper :: proc(r: rune) -> (rune)Source