tailfeather 0.2.0

Allocation-free, transport-agnostic building blocks for a Tailscale-compatible mesh node
Documentation
// Generated by scripts/generate-case-folding.py; do not edit.
// Unicode 17.0.0, default full case folding (C + F; excludes Turkic T).
// Source: https://www.unicode.org/Public/17.0.0/ucd/CaseFolding.txt
// SHA-256: ff8d8fefbf123574205085d6714c36149eb946d717a0c585c27f0f4ef58c4183
// Copyright 2025 Unicode, Inc. SPDX-License-Identifier: Unicode-3.0
// License: crates/tailfeather/src/unicode_normalization/LICENSE-UNICODE.txt

pub(super) const SIMPLE: &[(u32, u32, u8, i32)] = &[
    (0x0041, 0x005a, 1, 32),
    (0x00b5, 0x00b5, 1, 775),
    (0x00c0, 0x00d6, 1, 32),
    (0x00d8, 0x00de, 1, 32),
    (0x0100, 0x012e, 2, 1),
    (0x0132, 0x0136, 2, 1),
    (0x0139, 0x0147, 2, 1),
    (0x014a, 0x0176, 2, 1),
    (0x0178, 0x0178, 1, -121),
    (0x0179, 0x017d, 2, 1),
    (0x017f, 0x017f, 1, -268),
    (0x0181, 0x0181, 1, 210),
    (0x0182, 0x0184, 2, 1),
    (0x0186, 0x0186, 1, 206),
    (0x0187, 0x0187, 1, 1),
    (0x0189, 0x018a, 1, 205),
    (0x018b, 0x018b, 1, 1),
    (0x018e, 0x018e, 1, 79),
    (0x018f, 0x018f, 1, 202),
    (0x0190, 0x0190, 1, 203),
    (0x0191, 0x0191, 1, 1),
    (0x0193, 0x0193, 1, 205),
    (0x0194, 0x0194, 1, 207),
    (0x0196, 0x0196, 1, 211),
    (0x0197, 0x0197, 1, 209),
    (0x0198, 0x0198, 1, 1),
    (0x019c, 0x019c, 1, 211),
    (0x019d, 0x019d, 1, 213),
    (0x019f, 0x019f, 1, 214),
    (0x01a0, 0x01a4, 2, 1),
    (0x01a6, 0x01a6, 1, 218),
    (0x01a7, 0x01a7, 1, 1),
    (0x01a9, 0x01a9, 1, 218),
    (0x01ac, 0x01ac, 1, 1),
    (0x01ae, 0x01ae, 1, 218),
    (0x01af, 0x01af, 1, 1),
    (0x01b1, 0x01b2, 1, 217),
    (0x01b3, 0x01b5, 2, 1),
    (0x01b7, 0x01b7, 1, 219),
    (0x01b8, 0x01b8, 1, 1),
    (0x01bc, 0x01bc, 1, 1),
    (0x01c4, 0x01c4, 1, 2),
    (0x01c5, 0x01c5, 1, 1),
    (0x01c7, 0x01c7, 1, 2),
    (0x01c8, 0x01c8, 1, 1),
    (0x01ca, 0x01ca, 1, 2),
    (0x01cb, 0x01db, 2, 1),
    (0x01de, 0x01ee, 2, 1),
    (0x01f1, 0x01f1, 1, 2),
    (0x01f2, 0x01f4, 2, 1),
    (0x01f6, 0x01f6, 1, -97),
    (0x01f7, 0x01f7, 1, -56),
    (0x01f8, 0x021e, 2, 1),
    (0x0220, 0x0220, 1, -130),
    (0x0222, 0x0232, 2, 1),
    (0x023a, 0x023a, 1, 10795),
    (0x023b, 0x023b, 1, 1),
    (0x023d, 0x023d, 1, -163),
    (0x023e, 0x023e, 1, 10792),
    (0x0241, 0x0241, 1, 1),
    (0x0243, 0x0243, 1, -195),
    (0x0244, 0x0244, 1, 69),
    (0x0245, 0x0245, 1, 71),
    (0x0246, 0x024e, 2, 1),
    (0x0345, 0x0345, 1, 116),
    (0x0370, 0x0372, 2, 1),
    (0x0376, 0x0376, 1, 1),
    (0x037f, 0x037f, 1, 116),
    (0x0386, 0x0386, 1, 38),
    (0x0388, 0x038a, 1, 37),
    (0x038c, 0x038c, 1, 64),
    (0x038e, 0x038f, 1, 63),
    (0x0391, 0x03a1, 1, 32),
    (0x03a3, 0x03ab, 1, 32),
    (0x03c2, 0x03c2, 1, 1),
    (0x03cf, 0x03cf, 1, 8),
    (0x03d0, 0x03d0, 1, -30),
    (0x03d1, 0x03d1, 1, -25),
    (0x03d5, 0x03d5, 1, -15),
    (0x03d6, 0x03d6, 1, -22),
    (0x03d8, 0x03ee, 2, 1),
    (0x03f0, 0x03f0, 1, -54),
    (0x03f1, 0x03f1, 1, -48),
    (0x03f4, 0x03f4, 1, -60),
    (0x03f5, 0x03f5, 1, -64),
    (0x03f7, 0x03f7, 1, 1),
    (0x03f9, 0x03f9, 1, -7),
    (0x03fa, 0x03fa, 1, 1),
    (0x03fd, 0x03ff, 1, -130),
    (0x0400, 0x040f, 1, 80),
    (0x0410, 0x042f, 1, 32),
    (0x0460, 0x0480, 2, 1),
    (0x048a, 0x04be, 2, 1),
    (0x04c0, 0x04c0, 1, 15),
    (0x04c1, 0x04cd, 2, 1),
    (0x04d0, 0x052e, 2, 1),
    (0x0531, 0x0556, 1, 48),
    (0x10a0, 0x10c5, 1, 7264),
    (0x10c7, 0x10c7, 1, 7264),
    (0x10cd, 0x10cd, 1, 7264),
    (0x13f8, 0x13fd, 1, -8),
    (0x1c80, 0x1c80, 1, -6222),
    (0x1c81, 0x1c81, 1, -6221),
    (0x1c82, 0x1c82, 1, -6212),
    (0x1c83, 0x1c84, 1, -6210),
    (0x1c85, 0x1c85, 1, -6211),
    (0x1c86, 0x1c86, 1, -6204),
    (0x1c87, 0x1c87, 1, -6180),
    (0x1c88, 0x1c88, 1, 35267),
    (0x1c89, 0x1c89, 1, 1),
    (0x1c90, 0x1cba, 1, -3008),
    (0x1cbd, 0x1cbf, 1, -3008),
    (0x1e00, 0x1e94, 2, 1),
    (0x1e9b, 0x1e9b, 1, -58),
    (0x1ea0, 0x1efe, 2, 1),
    (0x1f08, 0x1f0f, 1, -8),
    (0x1f18, 0x1f1d, 1, -8),
    (0x1f28, 0x1f2f, 1, -8),
    (0x1f38, 0x1f3f, 1, -8),
    (0x1f48, 0x1f4d, 1, -8),
    (0x1f59, 0x1f5f, 2, -8),
    (0x1f68, 0x1f6f, 1, -8),
    (0x1fb8, 0x1fb9, 1, -8),
    (0x1fba, 0x1fbb, 1, -74),
    (0x1fbe, 0x1fbe, 1, -7173),
    (0x1fc8, 0x1fcb, 1, -86),
    (0x1fd8, 0x1fd9, 1, -8),
    (0x1fda, 0x1fdb, 1, -100),
    (0x1fe8, 0x1fe9, 1, -8),
    (0x1fea, 0x1feb, 1, -112),
    (0x1fec, 0x1fec, 1, -7),
    (0x1ff8, 0x1ff9, 1, -128),
    (0x1ffa, 0x1ffb, 1, -126),
    (0x2126, 0x2126, 1, -7517),
    (0x212a, 0x212a, 1, -8383),
    (0x212b, 0x212b, 1, -8262),
    (0x2132, 0x2132, 1, 28),
    (0x2160, 0x216f, 1, 16),
    (0x2183, 0x2183, 1, 1),
    (0x24b6, 0x24cf, 1, 26),
    (0x2c00, 0x2c2f, 1, 48),
    (0x2c60, 0x2c60, 1, 1),
    (0x2c62, 0x2c62, 1, -10743),
    (0x2c63, 0x2c63, 1, -3814),
    (0x2c64, 0x2c64, 1, -10727),
    (0x2c67, 0x2c6b, 2, 1),
    (0x2c6d, 0x2c6d, 1, -10780),
    (0x2c6e, 0x2c6e, 1, -10749),
    (0x2c6f, 0x2c6f, 1, -10783),
    (0x2c70, 0x2c70, 1, -10782),
    (0x2c72, 0x2c72, 1, 1),
    (0x2c75, 0x2c75, 1, 1),
    (0x2c7e, 0x2c7f, 1, -10815),
    (0x2c80, 0x2ce2, 2, 1),
    (0x2ceb, 0x2ced, 2, 1),
    (0x2cf2, 0x2cf2, 1, 1),
    (0xa640, 0xa66c, 2, 1),
    (0xa680, 0xa69a, 2, 1),
    (0xa722, 0xa72e, 2, 1),
    (0xa732, 0xa76e, 2, 1),
    (0xa779, 0xa77b, 2, 1),
    (0xa77d, 0xa77d, 1, -35332),
    (0xa77e, 0xa786, 2, 1),
    (0xa78b, 0xa78b, 1, 1),
    (0xa78d, 0xa78d, 1, -42280),
    (0xa790, 0xa792, 2, 1),
    (0xa796, 0xa7a8, 2, 1),
    (0xa7aa, 0xa7aa, 1, -42308),
    (0xa7ab, 0xa7ab, 1, -42319),
    (0xa7ac, 0xa7ac, 1, -42315),
    (0xa7ad, 0xa7ad, 1, -42305),
    (0xa7ae, 0xa7ae, 1, -42308),
    (0xa7b0, 0xa7b0, 1, -42258),
    (0xa7b1, 0xa7b1, 1, -42282),
    (0xa7b2, 0xa7b2, 1, -42261),
    (0xa7b3, 0xa7b3, 1, 928),
    (0xa7b4, 0xa7c2, 2, 1),
    (0xa7c4, 0xa7c4, 1, -48),
    (0xa7c5, 0xa7c5, 1, -42307),
    (0xa7c6, 0xa7c6, 1, -35384),
    (0xa7c7, 0xa7c9, 2, 1),
    (0xa7cb, 0xa7cb, 1, -42343),
    (0xa7cc, 0xa7da, 2, 1),
    (0xa7dc, 0xa7dc, 1, -42561),
    (0xa7f5, 0xa7f5, 1, 1),
    (0xab70, 0xabbf, 1, -38864),
    (0xff21, 0xff3a, 1, 32),
    (0x10400, 0x10427, 1, 40),
    (0x104b0, 0x104d3, 1, 40),
    (0x10570, 0x1057a, 1, 39),
    (0x1057c, 0x1058a, 1, 39),
    (0x1058c, 0x10592, 1, 39),
    (0x10594, 0x10595, 1, 39),
    (0x10c80, 0x10cb2, 1, 64),
    (0x10d50, 0x10d65, 1, 32),
    (0x118a0, 0x118bf, 1, 32),
    (0x16e40, 0x16e5f, 1, 32),
    (0x16ea0, 0x16eb8, 1, 27),
    (0x1e900, 0x1e921, 1, 34),
];

pub(super) const FULL: &[(char, &str)] = &[
    ('\u{df}', "\u{73}\u{73}"),
    ('\u{130}', "\u{69}\u{307}"),
    ('\u{149}', "\u{2bc}\u{6e}"),
    ('\u{1f0}', "\u{6a}\u{30c}"),
    ('\u{390}', "\u{3b9}\u{308}\u{301}"),
    ('\u{3b0}', "\u{3c5}\u{308}\u{301}"),
    ('\u{587}', "\u{565}\u{582}"),
    ('\u{1e96}', "\u{68}\u{331}"),
    ('\u{1e97}', "\u{74}\u{308}"),
    ('\u{1e98}', "\u{77}\u{30a}"),
    ('\u{1e99}', "\u{79}\u{30a}"),
    ('\u{1e9a}', "\u{61}\u{2be}"),
    ('\u{1e9e}', "\u{73}\u{73}"),
    ('\u{1f50}', "\u{3c5}\u{313}"),
    ('\u{1f52}', "\u{3c5}\u{313}\u{300}"),
    ('\u{1f54}', "\u{3c5}\u{313}\u{301}"),
    ('\u{1f56}', "\u{3c5}\u{313}\u{342}"),
    ('\u{1f80}', "\u{1f00}\u{3b9}"),
    ('\u{1f81}', "\u{1f01}\u{3b9}"),
    ('\u{1f82}', "\u{1f02}\u{3b9}"),
    ('\u{1f83}', "\u{1f03}\u{3b9}"),
    ('\u{1f84}', "\u{1f04}\u{3b9}"),
    ('\u{1f85}', "\u{1f05}\u{3b9}"),
    ('\u{1f86}', "\u{1f06}\u{3b9}"),
    ('\u{1f87}', "\u{1f07}\u{3b9}"),
    ('\u{1f88}', "\u{1f00}\u{3b9}"),
    ('\u{1f89}', "\u{1f01}\u{3b9}"),
    ('\u{1f8a}', "\u{1f02}\u{3b9}"),
    ('\u{1f8b}', "\u{1f03}\u{3b9}"),
    ('\u{1f8c}', "\u{1f04}\u{3b9}"),
    ('\u{1f8d}', "\u{1f05}\u{3b9}"),
    ('\u{1f8e}', "\u{1f06}\u{3b9}"),
    ('\u{1f8f}', "\u{1f07}\u{3b9}"),
    ('\u{1f90}', "\u{1f20}\u{3b9}"),
    ('\u{1f91}', "\u{1f21}\u{3b9}"),
    ('\u{1f92}', "\u{1f22}\u{3b9}"),
    ('\u{1f93}', "\u{1f23}\u{3b9}"),
    ('\u{1f94}', "\u{1f24}\u{3b9}"),
    ('\u{1f95}', "\u{1f25}\u{3b9}"),
    ('\u{1f96}', "\u{1f26}\u{3b9}"),
    ('\u{1f97}', "\u{1f27}\u{3b9}"),
    ('\u{1f98}', "\u{1f20}\u{3b9}"),
    ('\u{1f99}', "\u{1f21}\u{3b9}"),
    ('\u{1f9a}', "\u{1f22}\u{3b9}"),
    ('\u{1f9b}', "\u{1f23}\u{3b9}"),
    ('\u{1f9c}', "\u{1f24}\u{3b9}"),
    ('\u{1f9d}', "\u{1f25}\u{3b9}"),
    ('\u{1f9e}', "\u{1f26}\u{3b9}"),
    ('\u{1f9f}', "\u{1f27}\u{3b9}"),
    ('\u{1fa0}', "\u{1f60}\u{3b9}"),
    ('\u{1fa1}', "\u{1f61}\u{3b9}"),
    ('\u{1fa2}', "\u{1f62}\u{3b9}"),
    ('\u{1fa3}', "\u{1f63}\u{3b9}"),
    ('\u{1fa4}', "\u{1f64}\u{3b9}"),
    ('\u{1fa5}', "\u{1f65}\u{3b9}"),
    ('\u{1fa6}', "\u{1f66}\u{3b9}"),
    ('\u{1fa7}', "\u{1f67}\u{3b9}"),
    ('\u{1fa8}', "\u{1f60}\u{3b9}"),
    ('\u{1fa9}', "\u{1f61}\u{3b9}"),
    ('\u{1faa}', "\u{1f62}\u{3b9}"),
    ('\u{1fab}', "\u{1f63}\u{3b9}"),
    ('\u{1fac}', "\u{1f64}\u{3b9}"),
    ('\u{1fad}', "\u{1f65}\u{3b9}"),
    ('\u{1fae}', "\u{1f66}\u{3b9}"),
    ('\u{1faf}', "\u{1f67}\u{3b9}"),
    ('\u{1fb2}', "\u{1f70}\u{3b9}"),
    ('\u{1fb3}', "\u{3b1}\u{3b9}"),
    ('\u{1fb4}', "\u{3ac}\u{3b9}"),
    ('\u{1fb6}', "\u{3b1}\u{342}"),
    ('\u{1fb7}', "\u{3b1}\u{342}\u{3b9}"),
    ('\u{1fbc}', "\u{3b1}\u{3b9}"),
    ('\u{1fc2}', "\u{1f74}\u{3b9}"),
    ('\u{1fc3}', "\u{3b7}\u{3b9}"),
    ('\u{1fc4}', "\u{3ae}\u{3b9}"),
    ('\u{1fc6}', "\u{3b7}\u{342}"),
    ('\u{1fc7}', "\u{3b7}\u{342}\u{3b9}"),
    ('\u{1fcc}', "\u{3b7}\u{3b9}"),
    ('\u{1fd2}', "\u{3b9}\u{308}\u{300}"),
    ('\u{1fd3}', "\u{3b9}\u{308}\u{301}"),
    ('\u{1fd6}', "\u{3b9}\u{342}"),
    ('\u{1fd7}', "\u{3b9}\u{308}\u{342}"),
    ('\u{1fe2}', "\u{3c5}\u{308}\u{300}"),
    ('\u{1fe3}', "\u{3c5}\u{308}\u{301}"),
    ('\u{1fe4}', "\u{3c1}\u{313}"),
    ('\u{1fe6}', "\u{3c5}\u{342}"),
    ('\u{1fe7}', "\u{3c5}\u{308}\u{342}"),
    ('\u{1ff2}', "\u{1f7c}\u{3b9}"),
    ('\u{1ff3}', "\u{3c9}\u{3b9}"),
    ('\u{1ff4}', "\u{3ce}\u{3b9}"),
    ('\u{1ff6}', "\u{3c9}\u{342}"),
    ('\u{1ff7}', "\u{3c9}\u{342}\u{3b9}"),
    ('\u{1ffc}', "\u{3c9}\u{3b9}"),
    ('\u{fb00}', "\u{66}\u{66}"),
    ('\u{fb01}', "\u{66}\u{69}"),
    ('\u{fb02}', "\u{66}\u{6c}"),
    ('\u{fb03}', "\u{66}\u{66}\u{69}"),
    ('\u{fb04}', "\u{66}\u{66}\u{6c}"),
    ('\u{fb05}', "\u{73}\u{74}"),
    ('\u{fb06}', "\u{73}\u{74}"),
    ('\u{fb13}', "\u{574}\u{576}"),
    ('\u{fb14}', "\u{574}\u{565}"),
    ('\u{fb15}', "\u{574}\u{56b}"),
    ('\u{fb16}', "\u{57e}\u{576}"),
    ('\u{fb17}', "\u{574}\u{56d}"),
];