diff --git a/scripts/unicode.py b/scripts/unicode.py index 9f757eb..5b6fbb1 100755 --- a/scripts/unicode.py +++ b/scripts/unicode.py @@ -43,7 +43,7 @@ from itertools import batched from typing import Callable, Iterable, IO -UNICODE_VERSION = "17.0.0" +UNICODE_VERSION = "18.0.0" """The version of the Unicode data files to download.""" NUM_CODEPOINTS = 0x110000 @@ -138,7 +138,7 @@ def fetch_open(filename: str, local_prefix: str = "", emoji: bool = False): def load_unicode_version() -> tuple[int, int, int]: """Returns the current Unicode version by fetching and processing `ReadMe.txt`.""" with fetch_open("ReadMe.txt") as readme: - pattern = r"for Version (\d+)\.(\d+)\.(\d+) of the Unicode" + pattern = r"for version (\d+)\.(\d+)\.(\d+) of the\nUnicode" return tuple(map(int, re.search(pattern, readme.read()).groups())) # type: ignore diff --git a/src/gen/tables.rs b/src/gen/tables.rs index b46ba39..38d9ed0 100644 --- a/src/gen/tables.rs +++ b/src/gen/tables.rs @@ -12,7 +12,7 @@ /// The version of [Unicode](http://www.unicode.org/) /// that this version of unicode-width is based on. -pub const UNICODE_VERSION: (u8, u8, u8) = (17, 0, 0); +pub const UNICODE_VERSION: (u8, u8, u8) = (18, 0, 0); #[repr(align(32))] pub(crate) struct Align32(pub(crate) T); @@ -140,30 +140,30 @@ pub(crate) static WIDTH_MIDDLE: Align64<[[u8; 64]; WIDTH_MIDDLE_LEN]> = Align64( ], [ 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x7B, 0x7C, 0x7D, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x7B, 0x7C, 0x7D, 0x39, 0x39, + 0x39, 0x39, 0x39, 0x39, 0x39, 0x7E, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, ], [ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x7E, 0x39, 0x39, 0x7F, 0x39, 0x39, 0x80, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x81, 0x02, 0x02, + 0x02, 0x7F, 0x39, 0x39, 0x80, 0x39, 0x39, 0x81, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x82, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, ], [ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x82, 0x02, 0x02, 0x02, 0x83, 0x84, 0x85, 0x02, 0x86, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x87, 0x88, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x83, 0x02, 0x02, 0x02, 0x84, 0x85, 0x86, 0x87, 0x88, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x89, 0x8A, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, ], [ - 0x89, 0x8A, 0x77, 0x02, 0x02, 0x8B, 0x02, 0x02, 0x02, 0x8C, 0x02, 0x8D, 0x02, 0x8E, 0x02, - 0x02, 0x02, 0x8F, 0x90, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x91, 0x92, 0x02, 0x93, 0x94, 0x02, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, - 0x9C, 0x02, 0x9D, 0x02, 0x02, 0x9E, 0x9F, 0xA0, 0xA1, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x8B, 0x8C, 0x77, 0x02, 0x02, 0x8D, 0x02, 0x02, 0x02, 0x8E, 0x02, 0x8F, 0x02, 0x90, 0x02, + 0x02, 0x02, 0x91, 0x92, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x93, 0x94, 0x02, 0x95, 0x96, 0x02, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, + 0x9E, 0x02, 0x9F, 0x02, 0x02, 0xA0, 0xA1, 0xA2, 0xA3, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, ], [ @@ -171,7 +171,7 @@ pub(crate) static WIDTH_MIDDLE: Align64<[[u8; 64]; WIDTH_MIDDLE_LEN]> = Align64( 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0xA2, + 0x39, 0x39, 0x39, 0xA4, ], [ 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, @@ -182,7 +182,7 @@ pub(crate) static WIDTH_MIDDLE: Align64<[[u8; 64]; WIDTH_MIDDLE_LEN]> = Align64( ], #[cfg(feature = "cjk")] [ - 0x00, 0xA3, 0x02, 0x02, 0x02, 0x02, 0xA4, 0xA5, 0x02, 0x04, 0x02, 0x05, 0x06, 0x07, 0x08, + 0x00, 0xA5, 0x02, 0x02, 0x02, 0x02, 0xA6, 0xA7, 0x02, 0x04, 0x02, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x02, 0x02, 0x1E, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x02, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x02, 0x2A, @@ -190,9 +190,9 @@ pub(crate) static WIDTH_MIDDLE: Align64<[[u8; 64]; WIDTH_MIDDLE_LEN]> = Align64( ], #[cfg(feature = "cjk")] [ - 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0x2E, 0xAD, 0x39, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, - 0xB3, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0xB4, 0x02, 0x02, 0x35, 0x36, 0x37, 0x02, 0x38, - 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0xB5, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, + 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0x2E, 0xAF, 0x39, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, + 0xB5, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0xB6, 0x02, 0x02, 0x35, 0x36, 0x37, 0x02, 0x38, + 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0xB7, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, ], @@ -202,23 +202,23 @@ pub(crate) static WIDTH_MIDDLE: Align64<[[u8; 64]; WIDTH_MIDDLE_LEN]> = Align64( 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x4B, 0x02, 0x02, 0x02, 0x02, 0x02, - 0xB6, 0x4D, 0x4E, 0xB7, + 0xB8, 0x4D, 0x4E, 0xB9, ], #[cfg(feature = "cjk")] [ - 0x89, 0x8A, 0x77, 0x02, 0x02, 0x8B, 0x02, 0x02, 0x02, 0x8C, 0x02, 0x8D, 0x02, 0x8E, 0x02, - 0x02, 0x02, 0x8F, 0x90, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x91, 0x92, 0xB8, 0xB9, 0x94, 0x02, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, - 0x9C, 0x02, 0x9D, 0x02, 0x02, 0x9E, 0x9F, 0xA0, 0xA1, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x8B, 0x8C, 0x77, 0x02, 0x02, 0x8D, 0x02, 0x02, 0x02, 0x8E, 0x02, 0x8F, 0x02, 0x90, 0x02, + 0x02, 0x02, 0x91, 0x92, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x93, 0x94, 0xBA, 0xBB, 0x96, 0x02, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, + 0x9E, 0x02, 0x9F, 0x02, 0x02, 0xA0, 0xA1, 0xA2, 0xA3, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, ], ]); #[cfg(feature = "cjk")] -pub(crate) const WIDTH_LEAVES_LEN: usize = 186; +pub(crate) const WIDTH_LEAVES_LEN: usize = 188; #[cfg(not(feature = "cjk"))] -pub(crate) const WIDTH_LEAVES_LEN: usize = 163; -/// Autogenerated. 186 sub-table(s). Consult [`lookup_width`] for layout info. +pub(crate) const WIDTH_LEAVES_LEN: usize = 165; +/// Autogenerated. 188 sub-table(s). Consult [`lookup_width`] for layout info. pub(crate) static WIDTH_LEAVES: Align32<[[u8; 32]; WIDTH_LEAVES_LEN]> = Align32([ [ 0x55, 0x55, 0x75, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, @@ -247,7 +247,7 @@ pub(crate) static WIDTH_LEAVES: Align32<[[u8; 32]; WIDTH_LEAVES_LEN]> = Align32( ], [ 0x55, 0x55, 0x55, 0x55, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x41, 0x10, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x10, 0x41, 0x10, 0x50, 0x55, 0x55, 0x55, 0x55, 0x57, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, ], [ @@ -302,7 +302,7 @@ pub(crate) static WIDTH_LEAVES: Align32<[[u8; 32]; WIDTH_LEAVES_LEN]> = Align32( ], [ 0x51, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x04, 0x01, 0x54, 0x55, 0x51, 0x55, 0x01, 0x55, 0x55, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x04, 0x01, 0x54, 0x55, 0x51, 0x15, 0x00, 0x55, 0x55, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, ], [ @@ -407,7 +407,7 @@ pub(crate) static WIDTH_LEAVES: Align32<[[u8; 32]; WIDTH_LEAVES_LEN]> = Align32( ], [ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x55, 0x55, 0x55, ], [ @@ -657,8 +657,8 @@ pub(crate) static WIDTH_LEAVES: Align32<[[u8; 32]; WIDTH_LEAVES_LEN]> = Align32( ], [ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x54, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x05, 0x00, + 0x55, 0x55, 0x55, 0x15, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, + 0x00, 0x00, ], [ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, @@ -787,7 +787,7 @@ pub(crate) static WIDTH_LEAVES: Align32<[[u8; 32]; WIDTH_LEAVES_LEN]> = Align32( ], [ 0x55, 0x55, 0x55, 0x55, 0x50, 0x11, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x55, 0x55, 0x55, ], [ @@ -837,11 +837,11 @@ pub(crate) static WIDTH_LEAVES: Align32<[[u8; 32]; WIDTH_LEAVES_LEN]> = Align32( ], [ 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, - 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x5A, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x6A, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x95, ], [ - 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x6A, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x56, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, ], @@ -850,14 +850,19 @@ pub(crate) static WIDTH_LEAVES: Align32<[[u8; 32]; WIDTH_LEAVES_LEN]> = Align32( 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x6A, 0x55, 0x55, 0x55, ], + [ + 0xAA, 0xAA, 0xAA, 0xAA, 0x5A, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x6A, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, + ], [ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xA9, 0xAA, 0x69, ], [ - 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x6A, 0x55, 0x55, 0x55, 0x65, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x6A, 0x59, 0x55, 0x55, 0x55, 0xAA, 0x55, 0x55, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x56, 0x55, 0x65, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x6A, 0x59, 0x55, 0x55, 0x55, 0xAA, 0x56, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, ], [ @@ -876,7 +881,7 @@ pub(crate) static WIDTH_LEAVES: Align32<[[u8; 32]; WIDTH_LEAVES_LEN]> = Align32( 0x55, 0x55, ], [ - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x01, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, ], @@ -887,7 +892,12 @@ pub(crate) static WIDTH_LEAVES: Align32<[[u8; 32]; WIDTH_LEAVES_LEN]> = Align32( ], [ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x05, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x05, 0x54, 0x55, 0x55, 0x40, 0x55, 0x15, 0x14, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, + ], + [ + 0x50, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, ], [ @@ -956,7 +966,7 @@ pub(crate) static WIDTH_LEAVES: Align32<[[u8; 32]; WIDTH_LEAVES_LEN]> = Align32( 0x55, 0x55, ], [ - 0x55, 0x55, 0x55, 0x75, 0xFD, 0xFF, 0x7F, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x75, 0xFD, 0xFF, 0x7F, 0x55, 0x55, 0x55, 0x55, 0x65, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, ], @@ -1002,12 +1012,12 @@ pub(crate) static WIDTH_LEAVES: Align32<[[u8; 32]; WIDTH_LEAVES_LEN]> = Align32( ], [ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x5F, 0x55, 0x57, 0x7F, 0xFD, 0x57, 0xFF, 0x55, 0x55, 0xD5, 0x57, 0x55, 0xFF, + 0xFF, 0xFF, 0x5F, 0x55, 0x57, 0x7F, 0xFD, 0x5F, 0xFF, 0x55, 0x55, 0xD5, 0x57, 0x55, 0xFF, 0xFF, 0x57, ], [ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xFF, 0xFF, 0xFF, 0x55, 0x57, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x65, 0x55, 0xFF, 0xFF, 0xFF, 0x55, 0x57, 0x55, 0x55, 0x55, ], [ @@ -1026,9 +1036,9 @@ pub(crate) static WIDTH_LEAVES: Align32<[[u8; 32]; WIDTH_LEAVES_LEN]> = Align32( 0xFF, 0x57, ], [ - 0xFF, 0xFF, 0x7F, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x7F, 0x57, 0xFD, 0xFF, 0xFF, 0xFF, 0xD7, 0xFF, 0xFF, 0x7F, 0xD5, 0xFF, 0xFF, - 0x57, 0x55, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x7F, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xD5, 0xFF, 0xFF, + 0x7F, 0x55, ], [ 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, @@ -1169,7 +1179,7 @@ pub(crate) static WIDTH_LEAVES: Align32<[[u8; 32]; WIDTH_LEAVES_LEN]> = Align32( ], #[cfg(feature = "cjk")] [ - 0xAA, 0xAA, 0xAA, 0xBA, 0xFE, 0xFF, 0xBF, 0xAA, 0xAA, 0xAA, 0xAA, 0x56, 0x55, 0x55, 0x55, + 0xAA, 0xAA, 0xAA, 0xBA, 0xFE, 0xFF, 0xBF, 0xAA, 0xAA, 0xAA, 0xAA, 0x66, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, ], @@ -1178,7 +1188,7 @@ pub(crate) static WIDTH_LEAVES: Align32<[[u8; 32]; WIDTH_LEAVES_LEN]> = Align32( /// Sorted list of codepoint ranges (inclusive) /// that are zero-width but not `Joining_Type=Transparent` /// FIXME: can we get better compression? -pub(crate) static NON_TRANSPARENT_ZERO_WIDTHS: [([u8; 3], [u8; 3]); 71] = [ +pub(crate) static NON_TRANSPARENT_ZERO_WIDTHS: [([u8; 3], [u8; 3]); 74] = [ ([0x05, 0x06, 0x00], [0x05, 0x06, 0x00]), ([0x90, 0x08, 0x00], [0x91, 0x08, 0x00]), ([0xE2, 0x08, 0x00], [0xE2, 0x08, 0x00]), @@ -1246,6 +1256,9 @@ pub(crate) static NON_TRANSPARENT_ZERO_WIDTHS: [([u8; 3], [u8; 3]); 71] = [ ([0xF0, 0x6F, 0x01], [0xF1, 0x6F, 0x01]), ([0x65, 0xD1, 0x01], [0x66, 0xD1, 0x01]), ([0x6D, 0xD1, 0x01], [0x72, 0xD1, 0x01]), + ([0x50, 0xD2, 0x01], [0x52, 0xD2, 0x01]), + ([0x5F, 0xD2, 0x01], [0x5F, 0xD2, 0x01]), + ([0x80, 0xD2, 0x01], [0x81, 0xD2, 0x01]), ([0x00, 0x00, 0x0E], [0x00, 0x00, 0x0E]), ([0x02, 0x00, 0x0E], [0x1F, 0x00, 0x0E]), ([0x80, 0x00, 0x0E], [0xFF, 0x00, 0x0E]), @@ -1257,7 +1270,7 @@ pub(crate) static NON_TRANSPARENT_ZERO_WIDTHS: [([u8; 3], [u8; 3]); 71] = [ /// (mostly ccc > 1). /// FIXME: can we get better compression? #[cfg(feature = "cjk")] -pub(crate) static SOLIDUS_TRANSPARENT: [([u8; 3], [u8; 3]); 208] = [ +pub(crate) static SOLIDUS_TRANSPARENT: [([u8; 3], [u8; 3]); 212] = [ ([0x00, 0x03, 0x00], [0x33, 0x03, 0x00]), ([0x39, 0x03, 0x00], [0x6F, 0x03, 0x00]), ([0x83, 0x04, 0x00], [0x87, 0x04, 0x00]), @@ -1265,7 +1278,7 @@ pub(crate) static SOLIDUS_TRANSPARENT: [([u8; 3], [u8; 3]); 208] = [ ([0xBF, 0x05, 0x00], [0xBF, 0x05, 0x00]), ([0xC1, 0x05, 0x00], [0xC2, 0x05, 0x00]), ([0xC4, 0x05, 0x00], [0xC5, 0x05, 0x00]), - ([0xC7, 0x05, 0x00], [0xC7, 0x05, 0x00]), + ([0xC7, 0x05, 0x00], [0xC9, 0x05, 0x00]), ([0x10, 0x06, 0x00], [0x1A, 0x06, 0x00]), ([0x4B, 0x06, 0x00], [0x5F, 0x06, 0x00]), ([0x70, 0x06, 0x00], [0x70, 0x06, 0x00]), @@ -1334,8 +1347,7 @@ pub(crate) static SOLIDUS_TRANSPARENT: [([u8; 3], [u8; 3]); 208] = [ ([0x75, 0x1A, 0x00], [0x7C, 0x1A, 0x00]), ([0x7F, 0x1A, 0x00], [0x7F, 0x1A, 0x00]), ([0xB0, 0x1A, 0x00], [0xBD, 0x1A, 0x00]), - ([0xBF, 0x1A, 0x00], [0xDD, 0x1A, 0x00]), - ([0xE0, 0x1A, 0x00], [0xEB, 0x1A, 0x00]), + ([0xBF, 0x1A, 0x00], [0xF0, 0x1A, 0x00]), ([0x34, 0x1B, 0x00], [0x34, 0x1B, 0x00]), ([0x44, 0x1B, 0x00], [0x44, 0x1B, 0x00]), ([0x6B, 0x1B, 0x00], [0x73, 0x1B, 0x00]), @@ -1398,7 +1410,8 @@ pub(crate) static SOLIDUS_TRANSPARENT: [([u8; 3], [u8; 3]); 208] = [ ([0x69, 0x0D, 0x01], [0x6D, 0x0D, 0x01]), ([0x74, 0x0E, 0x01], [0x74, 0x0E, 0x01]), ([0xAB, 0x0E, 0x01], [0xAC, 0x0E, 0x01]), - ([0xFA, 0x0E, 0x01], [0xFB, 0x0E, 0x01]), + ([0xCB, 0x0E, 0x01], [0xCF, 0x0E, 0x01]), + ([0xF0, 0x0E, 0x01], [0xFB, 0x0E, 0x01]), ([0xFD, 0x0E, 0x01], [0xFF, 0x0E, 0x01]), ([0x46, 0x0F, 0x01], [0x50, 0x0F, 0x01]), ([0x82, 0x0F, 0x01], [0x85, 0x0F, 0x01]), @@ -1441,12 +1454,16 @@ pub(crate) static SOLIDUS_TRANSPARENT: [([u8; 3], [u8; 3]); 208] = [ ([0x2F, 0x61, 0x01], [0x2F, 0x61, 0x01]), ([0x30, 0x6B, 0x01], [0x36, 0x6B, 0x01]), ([0xF0, 0x6F, 0x01], [0xF1, 0x6F, 0x01]), + ([0x27, 0xD1, 0x01], [0x28, 0xD1, 0x01]), ([0x65, 0xD1, 0x01], [0x66, 0xD1, 0x01]), ([0x6D, 0xD1, 0x01], [0x72, 0xD1, 0x01]), ([0x7B, 0xD1, 0x01], [0x82, 0xD1, 0x01]), ([0x85, 0xD1, 0x01], [0x8B, 0xD1, 0x01]), ([0xAA, 0xD1, 0x01], [0xAD, 0xD1, 0x01]), ([0x42, 0xD2, 0x01], [0x44, 0xD2, 0x01]), + ([0x50, 0xD2, 0x01], [0x52, 0xD2, 0x01]), + ([0x5F, 0xD2, 0x01], [0x5F, 0xD2, 0x01]), + ([0x80, 0xD2, 0x01], [0x81, 0xD2, 0x01]), ([0x00, 0xE0, 0x01], [0x06, 0xE0, 0x01]), ([0x08, 0xE0, 0x01], [0x18, 0xE0, 0x01]), ([0x1B, 0xE0, 0x01], [0x21, 0xE0, 0x01]), @@ -1742,5 +1759,5 @@ pub(crate) static EMOJI_MODIFIER_LEAF_6: [(u8, u8); 12] = [ #[rustfmt::skip] pub(crate) static EMOJI_MODIFIER_LEAF_7: [(u8, u8); 2] = [ (0xC3, 0xC5), - (0xF0, 0xF8), + (0xF0, 0xFA), ]; diff --git a/src/gen/tables_test.rs b/src/gen/tables_test.rs index dd65803..1cf58f3 100644 --- a/src/gen/tables_test.rs +++ b/src/gen/tables_test.rs @@ -102,7 +102,7 @@ pub(crate) static NORMALIZATION_TEST_WIDTHS_CJK: [WidthInfo; 42] = [ ]; #[rustfmt::skip] -pub(crate) static NORMALIZATION_TEST: [(&str, &str, &str, &str, &str); 20034] = [ +pub(crate) static NORMALIZATION_TEST: [(&str, &str, &str, &str, &str); 20171] = [ (r#"Ḋ"#, r#"Ḋ"#, r#"Ḋ"#, r#"Ḋ"#, r#"Ḋ"#), (r#"Ḍ"#, r#"Ḍ"#, r#"Ḍ"#, r#"Ḍ"#, r#"Ḍ"#), (r#"Ḍ̇"#, r#"Ḍ̇"#, r#"Ḍ̇"#, r#"Ḍ̇"#, r#"Ḍ̇"#), @@ -128,6 +128,7 @@ pub(crate) static NORMALIZATION_TEST: [(&str, &str, &str, &str, &str); 20034] = (r#"ְַּ֥֒׀֭ׄ"#, r#"ְַּ֥֒׀֭ׄ"#, r#"ְַּ֥֒׀֭ׄ"#, r#"ְַּ֥֒׀֭ׄ"#, r#"ְַּ֥֒׀֭ׄ"#), (r#"ᄀ각"#, r#"ᄀ각"#, r#"ᄀ각"#, r#"ᄀ각"#, r#"ᄀ각"#), (r#"ᄀ각ᆨ"#, r#"ᄀ각ᆨ"#, r#"ᄀ각ᆨ"#, r#"ᄀ각ᆨ"#, r#"ᄀ각ᆨ"#), + (r#"가ᆧ"#, r#"가ᆧ"#, r#"가ᆧ"#, r#"가ᆧ"#, r#"가ᆧ"#), (r#"DẒ̌"#, r#"DẒ̌"#, r#"DẒ̌"#, r#"DẒ̌"#, r#"DẒ̌"#), (r#"Dẓ̌"#, r#"Dẓ̌"#, r#"Dẓ̌"#, r#"Dẓ̌"#, r#"Dẓ̌"#), (r#"dẓ̌"#, r#"dẓ̌"#, r#"dẓ̌"#, r#"dẓ̌"#, r#"dẓ̌"#), @@ -547,7 +548,10 @@ pub(crate) static NORMALIZATION_TEST: [(&str, &str, &str, &str, &str); 20034] = (r#"ӵ"#, r#"ӵ"#, r#"ӵ"#, r#"ӵ"#, r#"ӵ"#), (r#"Ӹ"#, r#"Ӹ"#, r#"Ӹ"#, r#"Ӹ"#, r#"Ӹ"#), (r#"ӹ"#, r#"ӹ"#, r#"ӹ"#, r#"ӹ"#, r#"ӹ"#), + (r#"՘"#, r#"՘"#, r#"՘"#, r#"է"#, r#"է"#), (r#"և"#, r#"և"#, r#"և"#, r#"եւ"#, r#"եւ"#), + (r#"֋"#, r#"֋"#, r#"֋"#, r#"ի"#, r#"ի"#), + (r#"֌"#, r#"֌"#, r#"֌"#, r#"յ"#, r#"յ"#), (r#"آ"#, r#"آ"#, r#"آ"#, r#"آ"#, r#"آ"#), (r#"أ"#, r#"أ"#, r#"أ"#, r#"أ"#, r#"أ"#), (r#"ؤ"#, r#"ؤ"#, r#"ؤ"#, r#"ؤ"#, r#"ؤ"#), @@ -1288,6 +1292,9 @@ pub(crate) static NORMALIZATION_TEST: [(&str, &str, &str, &str, &str); 20034] = (r#"ₚ"#, r#"ₚ"#, r#"ₚ"#, r#"p"#, r#"p"#), (r#"ₛ"#, r#"ₛ"#, r#"ₛ"#, r#"s"#, r#"s"#), (r#"ₜ"#, r#"ₜ"#, r#"ₜ"#, r#"t"#, r#"t"#), + (r#"₝"#, r#"₝"#, r#"₝"#, r#"w"#, r#"w"#), + (r#"₞"#, r#"₞"#, r#"₞"#, r#"y"#, r#"y"#), + (r#"₟"#, r#"₟"#, r#"₟"#, r#"z"#, r#"z"#), (r#"₨"#, r#"₨"#, r#"₨"#, r#"Rs"#, r#"Rs"#), (r#"℀"#, r#"℀"#, r#"℀"#, r#"a/c"#, r#"a/c"#), (r#"℁"#, r#"℁"#, r#"℁"#, r#"a/s"#, r#"a/s"#), @@ -15267,6 +15274,11 @@ pub(crate) static NORMALIZATION_TEST: [(&str, &str, &str, &str, &str); 20034] = (r#"𐞸"#, r#"𐞸"#, r#"𐞸"#, r#"ǂ"#, r#"ǂ"#), (r#"𐞹"#, r#"𐞹"#, r#"𐞹"#, r#"𝼊"#, r#"𝼊"#), (r#"𐞺"#, r#"𐞺"#, r#"𐞺"#, r#"𝼞"#, r#"𝼞"#), + (r#"𐞻"#, r#"𐞻"#, r#"𐞻"#, r#"ʇ"#, r#"ʇ"#), + (r#"𐞼"#, r#"𐞼"#, r#"𐞼"#, r#"ʖ"#, r#"ʖ"#), + (r#"𐞽"#, r#"𐞽"#, r#"𐞽"#, r#"ʗ"#, r#"ʗ"#), + (r#"𐞾"#, r#"𐞾"#, r#"𐞾"#, r#"ʞ"#, r#"ʞ"#), + (r#"𐞿"#, r#"𐞿"#, r#"𐞿"#, r#"𝼋"#, r#"𝼋"#), (r#"𑂚"#, r#"𑂚"#, r#"𑂚"#, r#"𑂚"#, r#"𑂚"#), (r#"𑂜"#, r#"𑂜"#, r#"𑂜"#, r#"𑂜"#, r#"𑂜"#), (r#"𑂫"#, r#"𑂫"#, r#"𑂫"#, r#"𑂫"#, r#"𑂫"#), @@ -15298,6 +15310,10 @@ pub(crate) static NORMALIZATION_TEST: [(&str, &str, &str, &str, &str); 20034] = (r#"𖵨"#, r#"𖵨"#, r#"𖵨"#, r#"𖵨"#, r#"𖵨"#), (r#"𖵩"#, r#"𖵩"#, r#"𖵩"#, r#"𖵩"#, r#"𖵩"#), (r#"𖵪"#, r#"𖵪"#, r#"𖵪"#, r#"𖵪"#, r#"𖵪"#), + (r#"𛄣"#, r#"𛄣"#, r#"𛄣"#, r#"こと"#, r#"こと"#), + (r#"𛄤"#, r#"𛄤"#, r#"𛄤"#, r#"トキ"#, r#"トキ"#), + (r#"𛄥"#, r#"𛄥"#, r#"𛄥"#, r#"トテ"#, r#"トテ"#), + (r#"𛄦"#, r#"𛄦"#, r#"𛄦"#, r#"ヨリ"#, r#"ヨリ"#), (r#"𜳖"#, r#"𜳖"#, r#"𜳖"#, r#"A"#, r#"A"#), (r#"𜳗"#, r#"𜳗"#, r#"𜳗"#, r#"B"#, r#"B"#), (r#"𜳘"#, r#"𜳘"#, r#"𜳘"#, r#"C"#, r#"C"#), @@ -16001,6 +16017,7 @@ pub(crate) static NORMALIZATION_TEST: [(&str, &str, &str, &str, &str); 20034] = (r#"𝚣"#, r#"𝚣"#, r#"𝚣"#, r#"z"#, r#"z"#), (r#"𝚤"#, r#"𝚤"#, r#"𝚤"#, r#"ı"#, r#"ı"#), (r#"𝚥"#, r#"𝚥"#, r#"𝚥"#, r#"ȷ"#, r#"ȷ"#), + (r#"𝚦"#, r#"𝚦"#, r#"𝚦"#, r#"ß"#, r#"ß"#), (r#"𝚨"#, r#"𝚨"#, r#"𝚨"#, r#"Α"#, r#"Α"#), (r#"𝚩"#, r#"𝚩"#, r#"𝚩"#, r#"Β"#, r#"Β"#), (r#"𝚪"#, r#"𝚪"#, r#"𝚪"#, r#"Γ"#, r#"Γ"#), @@ -16343,6 +16360,58 @@ pub(crate) static NORMALIZATION_TEST: [(&str, &str, &str, &str, &str); 20034] = (r#"𝟽"#, r#"𝟽"#, r#"𝟽"#, r#"7"#, r#"7"#), (r#"𝟾"#, r#"𝟾"#, r#"𝟾"#, r#"8"#, r#"8"#), (r#"𝟿"#, r#"𝟿"#, r#"𝟿"#, r#"9"#, r#"9"#), + (r#"𝾕"#, r#"𝾕"#, r#"𝾕"#, r#"ß"#, r#"ß"#), + (r#"𝿍"#, r#"𝿍"#, r#"𝿍"#, r#"𝽗"#, r#"𝽗"#), + (r#"𝿎"#, r#"𝿎"#, r#"𝿎"#, r#"𝽘"#, r#"𝽘"#), + (r#"𝿏"#, r#"𝿏"#, r#"𝿏"#, r#"𝽙"#, r#"𝽙"#), + (r#"𝿐"#, r#"𝿐"#, r#"𝿐"#, r#"ɣ"#, r#"ɣ"#), + (r#"𝿑"#, r#"𝿑"#, r#"𝿑"#, r#"ᴘ"#, r#"ᴘ"#), + (r#"𝿒"#, r#"𝿒"#, r#"𝿒"#, r#"ƀ"#, r#"ƀ"#), + (r#"𝿓"#, r#"𝿓"#, r#"𝿓"#, r#"đ"#, r#"đ"#), + (r#"𝿔"#, r#"𝿔"#, r#"𝿔"#, r#"ǥ"#, r#"ǥ"#), + (r#"𝿕"#, r#"𝿕"#, r#"𝿕"#, r#"ł"#, r#"ł"#), + (r#"𝿖"#, r#"𝿖"#, r#"𝿖"#, r#"ƚ"#, r#"ƚ"#), + (r#"𝿗"#, r#"𝿗"#, r#"𝿗"#, r#"𝽐"#, r#"𝽐"#), + (r#"𝿘"#, r#"𝿘"#, r#"𝿘"#, r#"𝼾"#, r#"𝼾"#), + (r#"𝿙"#, r#"𝿙"#, r#"𝿙"#, r#"ɉ"#, r#"ɉ"#), + (r#"𝿚"#, r#"𝿚"#, r#"𝿚"#, r#"ᵿ"#, r#"ᵿ"#), + (r#"𝿛"#, r#"𝿛"#, r#"𝿛"#, r#"𝼿"#, r#"𝼿"#), + (r#"𝿜"#, r#"𝿜"#, r#"𝿜"#, r#"ƞ"#, r#"ƞ"#), + (r#"𝿝"#, r#"𝿝"#, r#"𝿝"#, r#"ɼ"#, r#"ɼ"#), + (r#"𝿞"#, r#"𝿞"#, r#"𝿞"#, r#"ȸ"#, r#"ȸ"#), + (r#"𝿟"#, r#"𝿟"#, r#"𝿟"#, r#"ȹ"#, r#"ȹ"#), + (r#"𝿠"#, r#"𝿠"#, r#"𝿠"#, r#"𝼫"#, r#"𝼫"#), + (r#"𝿡"#, r#"𝿡"#, r#"𝿡"#, r#"𝼙"#, r#"𝼙"#), + (r#"𝿢"#, r#"𝿢"#, r#"𝿢"#, r#"ʆ"#, r#"ʆ"#), + (r#"𝿣"#, r#"𝿣"#, r#"𝿣"#, r#"ᶘ"#, r#"ᶘ"#), + (r#"𝿤"#, r#"𝿤"#, r#"𝿤"#, r#"𝼬"#, r#"𝼬"#), + (r#"𝿥"#, r#"𝿥"#, r#"𝿥"#, r#"𝼜"#, r#"𝼜"#), + (r#"𝿦"#, r#"𝿦"#, r#"𝿦"#, r#"ʓ"#, r#"ʓ"#), + (r#"𝿧"#, r#"𝿧"#, r#"𝿧"#, r#"ᶚ"#, r#"ᶚ"#), + (r#"𝿨"#, r#"𝿨"#, r#"𝿨"#, r#"ᴅ"#, r#"ᴅ"#), + (r#"𝿩"#, r#"𝿩"#, r#"𝿩"#, r#"ᴀ"#, r#"ᴀ"#), + (r#"𝿪"#, r#"𝿪"#, r#"𝿪"#, r#"ᴇ"#, r#"ᴇ"#), + (r#"𝿫"#, r#"𝿫"#, r#"𝿫"#, r#"ɿ"#, r#"ɿ"#), + (r#"𝿬"#, r#"𝿬"#, r#"𝿬"#, r#"ʅ"#, r#"ʅ"#), + (r#"𝿭"#, r#"𝿭"#, r#"𝿭"#, r#"ʮ"#, r#"ʮ"#), + (r#"𝿮"#, r#"𝿮"#, r#"𝿮"#, r#"ʯ"#, r#"ʯ"#), + (r#"𝿯"#, r#"𝿯"#, r#"𝿯"#, r#"ȡ"#, r#"ȡ"#), + (r#"𝿰"#, r#"𝿰"#, r#"𝿰"#, r#"ȴ"#, r#"ȴ"#), + (r#"𝿱"#, r#"𝿱"#, r#"𝿱"#, r#"ȵ"#, r#"ȵ"#), + (r#"𝿲"#, r#"𝿲"#, r#"𝿲"#, r#"ȶ"#, r#"ȶ"#), + (r#"𝿳"#, r#"𝿳"#, r#"𝿳"#, r#"ψ"#, r#"ψ"#), + (r#"𝿴"#, r#"𝿴"#, r#"𝿴"#, r#"ω"#, r#"ω"#), + (r#"𝿵"#, r#"𝿵"#, r#"𝿵"#, r#"ᶁ"#, r#"ᶁ"#), + (r#"𝿶"#, r#"𝿶"#, r#"𝿶"#, r#"ꞕ"#, r#"ꞕ"#), + (r#"𝿷"#, r#"𝿷"#, r#"𝿷"#, r#"ᶇ"#, r#"ᶇ"#), + (r#"𝿸"#, r#"𝿸"#, r#"𝿸"#, r#"ᶊ"#, r#"ᶊ"#), + (r#"𝿹"#, r#"𝿹"#, r#"𝿹"#, r#"ᶎ"#, r#"ᶎ"#), + (r#"𝿺"#, r#"𝿺"#, r#"𝿺"#, r#"ƈ"#, r#"ƈ"#), + (r#"𝿻"#, r#"𝿻"#, r#"𝿻"#, r#"ƙ"#, r#"ƙ"#), + (r#"𝿼"#, r#"𝿼"#, r#"𝿼"#, r#"ƥ"#, r#"ƥ"#), + (r#"𝿽"#, r#"𝿽"#, r#"𝿽"#, r#"ʠ"#, r#"ʠ"#), + (r#"𝿾"#, r#"𝿾"#, r#"𝿾"#, r#"ƭ"#, r#"ƭ"#), + (r#"𝿿"#, r#"𝿿"#, r#"𝿿"#, r#"𝼉"#, r#"𝼉"#), (r#"𞀰"#, r#"𞀰"#, r#"𞀰"#, r#"а"#, r#"а"#), (r#"𞀱"#, r#"𞀱"#, r#"𞀱"#, r#"б"#, r#"б"#), (r#"𞀲"#, r#"𞀲"#, r#"𞀲"#, r#"в"#, r#"в"#), @@ -17568,6 +17637,10 @@ pub(crate) static NORMALIZATION_TEST: [(&str, &str, &str, &str, &str); 20034] = (r#"a᷺ׅ̖֚b"#, r#"a᷺ׅ̖֚b"#, r#"a᷺ׅ̖֚b"#, r#"a᷺ׅ̖֚b"#, r#"a᷺ׅ̖֚b"#), (r#"aַָׇֹb"#, r#"aַָׇֹb"#, r#"aַָׇֹb"#, r#"aַָׇֹb"#, r#"aַָׇֹb"#), (r#"aַׇָֹb"#, r#"aַׇָֹb"#, r#"aַׇָֹb"#, r#"aַׇָֹb"#, r#"aַׇָֹb"#), + (r#"a्ְֱ׈b"#, r#"a्ְ׈ֱb"#, r#"a्ְ׈ֱb"#, r#"a्ְ׈ֱb"#, r#"a्ְ׈ֱb"#), + (r#"a׈्ְֱb"#, r#"a्׈ְֱb"#, r#"a्׈ְֱb"#, r#"a्׈ְֱb"#, r#"a्׈ְֱb"#), + (r#"aֻּֽ׉b"#, r#"aֻּ׉ֽb"#, r#"aֻּ׉ֽb"#, r#"aֻּ׉ֽb"#, r#"aֻּ׉ֽb"#), + (r#"a׉ֻּֽb"#, r#"aֻ׉ּֽb"#, r#"aֻ׉ּֽb"#, r#"aֻ׉ּֽb"#, r#"aֻ׉ּֽb"#), (r#"à֮ؐ̕b"#, r#"à֮ؐ̕b"#, r#"à֮ؐ̕b"#, r#"à֮ؐ̕b"#, r#"à֮ؐ̕b"#), (r#"a֮ؐ̀̕b"#, r#"a֮ؐ̀̕b"#, r#"a֮ؐ̀̕b"#, r#"a֮ؐ̀̕b"#, r#"a֮ؐ̀̕b"#), (r#"à֮ؑ̕b"#, r#"à֮ؑ̕b"#, r#"à֮ؑ̕b"#, r#"à֮ؑ̕b"#, r#"à֮ؑ̕b"#), @@ -18184,6 +18257,10 @@ pub(crate) static NORMALIZATION_TEST: [(&str, &str, &str, &str, &str); 20034] = (r#"a᫜֮̀̕b"#, r#"a֮᫜̀̕b"#, r#"a֮᫜̀̕b"#, r#"a֮᫜̀̕b"#, r#"a֮᫜̀̕b"#), (r#"a᷺̖֚᫝b"#, r#"a᷺̖᫝֚b"#, r#"a᷺̖᫝֚b"#, r#"a᷺̖᫝֚b"#, r#"a᷺̖᫝֚b"#), (r#"a᫝᷺̖֚b"#, r#"a᷺᫝̖֚b"#, r#"a᷺᫝̖֚b"#, r#"a᷺᫝̖֚b"#, r#"a᷺᫝̖֚b"#), + (r#"à֮̕᫞b"#, r#"à֮᫞̕b"#, r#"à֮᫞̕b"#, r#"à֮᫞̕b"#, r#"à֮᫞̕b"#), + (r#"a᫞֮̀̕b"#, r#"a֮᫞̀̕b"#, r#"a֮᫞̀̕b"#, r#"a֮᫞̀̕b"#, r#"a֮᫞̀̕b"#), + (r#"à֮̕᫟b"#, r#"à֮᫟̕b"#, r#"à֮᫟̕b"#, r#"à֮᫟̕b"#, r#"à֮᫟̕b"#), + (r#"a᫟֮̀̕b"#, r#"a֮᫟̀̕b"#, r#"a֮᫟̀̕b"#, r#"a֮᫟̀̕b"#, r#"a֮᫟̀̕b"#), (r#"à֮̕᫠b"#, r#"à֮᫠̕b"#, r#"à֮᫠̕b"#, r#"à֮᫠̕b"#, r#"à֮᫠̕b"#), (r#"a᫠֮̀̕b"#, r#"a֮᫠̀̕b"#, r#"a֮᫠̀̕b"#, r#"a֮᫠̀̕b"#, r#"a֮᫠̀̕b"#), (r#"à֮̕᫡b"#, r#"à֮᫡̕b"#, r#"à֮᫡̕b"#, r#"à֮᫡̕b"#, r#"à֮᫡̕b"#), @@ -18208,6 +18285,16 @@ pub(crate) static NORMALIZATION_TEST: [(&str, &str, &str, &str, &str); 20034] = (r#"a᫪֮̀̕b"#, r#"a֮᫪̀̕b"#, r#"a֮᫪̀̕b"#, r#"a֮᫪̀̕b"#, r#"a֮᫪̀̕b"#), (r#"a͜͝ͅ᫫b"#, r#"a͜͝᫫ͅb"#, r#"a͜͝᫫ͅb"#, r#"a͜͝᫫ͅb"#, r#"a͜͝᫫ͅb"#), (r#"a᫫͜͝ͅb"#, r#"a͜᫫͝ͅb"#, r#"a͜᫫͝ͅb"#, r#"a͜᫫͝ͅb"#, r#"a͜᫫͝ͅb"#), + (r#"à֮̕᫬b"#, r#"à֮᫬̕b"#, r#"à֮᫬̕b"#, r#"à֮᫬̕b"#, r#"à֮᫬̕b"#), + (r#"a᫬֮̀̕b"#, r#"a֮᫬̀̕b"#, r#"a֮᫬̀̕b"#, r#"a֮᫬̀̕b"#, r#"a֮᫬̀̕b"#), + (r#"à֮̕᫭b"#, r#"à֮᫭̕b"#, r#"à֮᫭̕b"#, r#"à֮᫭̕b"#, r#"à֮᫭̕b"#), + (r#"a᫭֮̀̕b"#, r#"a֮᫭̀̕b"#, r#"a֮᫭̀̕b"#, r#"a֮᫭̀̕b"#, r#"a֮᫭̀̕b"#), + (r#"a᷺̖֚᫮b"#, r#"a᷺̖᫮֚b"#, r#"a᷺̖᫮֚b"#, r#"a᷺̖᫮֚b"#, r#"a᷺̖᫮֚b"#), + (r#"a᫮᷺̖֚b"#, r#"a᷺᫮̖֚b"#, r#"a᷺᫮̖֚b"#, r#"a᷺᫮̖֚b"#, r#"a᷺᫮̖֚b"#), + (r#"a᷺̖֚᫯b"#, r#"a᷺̖᫯֚b"#, r#"a᷺̖᫯֚b"#, r#"a᷺̖᫯֚b"#, r#"a᷺̖᫯֚b"#), + (r#"a᫯᷺̖֚b"#, r#"a᷺᫯̖֚b"#, r#"a᷺᫯̖֚b"#, r#"a᷺᫯̖֚b"#, r#"a᷺᫯̖֚b"#), + (r#"à֮̕᫰b"#, r#"à֮᫰̕b"#, r#"à֮᫰̕b"#, r#"à֮᫰̕b"#, r#"à֮᫰̕b"#), + (r#"a᫰֮̀̕b"#, r#"a֮᫰̀̕b"#, r#"a֮᫰̀̕b"#, r#"a֮᫰̀̕b"#, r#"a֮᫰̀̕b"#), (r#"a𖿰़᬴゙b"#, r#"a𖿰़᬴゙b"#, r#"a𖿰़᬴゙b"#, r#"a𖿰़᬴゙b"#, r#"a𖿰़᬴゙b"#), (r#"a𖿰᬴़゙b"#, r#"a𖿰᬴़゙b"#, r#"a𖿰᬴़゙b"#, r#"a𖿰᬴़゙b"#, r#"a𖿰᬴़゙b"#), (r#"a゙्᭄ְb"#, r#"a゙्᭄ְb"#, r#"a゙्᭄ְb"#, r#"a゙्᭄ְb"#, r#"a゙्᭄ְb"#), @@ -18756,6 +18843,36 @@ pub(crate) static NORMALIZATION_TEST: [(&str, &str, &str, &str, &str); 20034] = (r#"a֮𐺫̀̕b"#, r#"a֮𐺫̀̕b"#, r#"a֮𐺫̀̕b"#, r#"a֮𐺫̀̕b"#, r#"a֮𐺫̀̕b"#), (r#"à֮𐺬̕b"#, r#"à֮𐺬̕b"#, r#"à֮𐺬̕b"#, r#"à֮𐺬̕b"#, r#"à֮𐺬̕b"#), (r#"a֮𐺬̀̕b"#, r#"a֮𐺬̀̕b"#, r#"a֮𐺬̀̕b"#, r#"a֮𐺬̀̕b"#, r#"a֮𐺬̀̕b"#), + (r#"à֮̕𐻋b"#, r#"à֮𐻋̕b"#, r#"à֮𐻋̕b"#, r#"à֮𐻋̕b"#, r#"à֮𐻋̕b"#), + (r#"a𐻋֮̀̕b"#, r#"a֮𐻋̀̕b"#, r#"a֮𐻋̀̕b"#, r#"a֮𐻋̀̕b"#, r#"a֮𐻋̀̕b"#), + (r#"a᷺̖֚𐻌b"#, r#"a᷺̖𐻌֚b"#, r#"a᷺̖𐻌֚b"#, r#"a᷺̖𐻌֚b"#, r#"a᷺̖𐻌֚b"#), + (r#"a𐻌᷺̖֚b"#, r#"a᷺𐻌̖֚b"#, r#"a᷺𐻌̖֚b"#, r#"a᷺𐻌̖֚b"#, r#"a᷺𐻌̖֚b"#), + (r#"a᷺̖֚𐻍b"#, r#"a᷺̖𐻍֚b"#, r#"a᷺̖𐻍֚b"#, r#"a᷺̖𐻍֚b"#, r#"a᷺̖𐻍֚b"#), + (r#"a𐻍᷺̖֚b"#, r#"a᷺𐻍̖֚b"#, r#"a᷺𐻍̖֚b"#, r#"a᷺𐻍̖֚b"#, r#"a᷺𐻍̖֚b"#), + (r#"à֮̕𐻎b"#, r#"à֮𐻎̕b"#, r#"à֮𐻎̕b"#, r#"à֮𐻎̕b"#, r#"à֮𐻎̕b"#), + (r#"a𐻎֮̀̕b"#, r#"a֮𐻎̀̕b"#, r#"a֮𐻎̀̕b"#, r#"a֮𐻎̀̕b"#, r#"a֮𐻎̀̕b"#), + (r#"à֮̕𐻏b"#, r#"à֮𐻏̕b"#, r#"à֮𐻏̕b"#, r#"à֮𐻏̕b"#, r#"à֮𐻏̕b"#), + (r#"a𐻏֮̀̕b"#, r#"a֮𐻏̀̕b"#, r#"a֮𐻏̀̕b"#, r#"a֮𐻏̀̕b"#, r#"a֮𐻏̀̕b"#), + (r#"a᷺̖֚𐻰b"#, r#"a᷺̖𐻰֚b"#, r#"a᷺̖𐻰֚b"#, r#"a᷺̖𐻰֚b"#, r#"a᷺̖𐻰֚b"#), + (r#"a𐻰᷺̖֚b"#, r#"a᷺𐻰̖֚b"#, r#"a᷺𐻰̖֚b"#, r#"a᷺𐻰̖֚b"#, r#"a᷺𐻰̖֚b"#), + (r#"a᷺̖֚𐻱b"#, r#"a᷺̖𐻱֚b"#, r#"a᷺̖𐻱֚b"#, r#"a᷺̖𐻱֚b"#, r#"a᷺̖𐻱֚b"#), + (r#"a𐻱᷺̖֚b"#, r#"a᷺𐻱̖֚b"#, r#"a᷺𐻱̖֚b"#, r#"a᷺𐻱̖֚b"#, r#"a᷺𐻱̖֚b"#), + (r#"a᷺̖֚𐻲b"#, r#"a᷺̖𐻲֚b"#, r#"a᷺̖𐻲֚b"#, r#"a᷺̖𐻲֚b"#, r#"a᷺̖𐻲֚b"#), + (r#"a𐻲᷺̖֚b"#, r#"a᷺𐻲̖֚b"#, r#"a᷺𐻲̖֚b"#, r#"a᷺𐻲̖֚b"#, r#"a᷺𐻲̖֚b"#), + (r#"à֮̕𐻳b"#, r#"à֮𐻳̕b"#, r#"à֮𐻳̕b"#, r#"à֮𐻳̕b"#, r#"à֮𐻳̕b"#), + (r#"a𐻳֮̀̕b"#, r#"a֮𐻳̀̕b"#, r#"a֮𐻳̀̕b"#, r#"a֮𐻳̀̕b"#, r#"a֮𐻳̀̕b"#), + (r#"a᷺̖֚𐻴b"#, r#"a᷺̖𐻴֚b"#, r#"a᷺̖𐻴֚b"#, r#"a᷺̖𐻴֚b"#, r#"a᷺̖𐻴֚b"#), + (r#"a𐻴᷺̖֚b"#, r#"a᷺𐻴̖֚b"#, r#"a᷺𐻴̖֚b"#, r#"a᷺𐻴̖֚b"#, r#"a᷺𐻴̖֚b"#), + (r#"à֮̕𐻵b"#, r#"à֮𐻵̕b"#, r#"à֮𐻵̕b"#, r#"à֮𐻵̕b"#, r#"à֮𐻵̕b"#), + (r#"a𐻵֮̀̕b"#, r#"a֮𐻵̀̕b"#, r#"a֮𐻵̀̕b"#, r#"a֮𐻵̀̕b"#, r#"a֮𐻵̀̕b"#), + (r#"a᷺̖֚𐻶b"#, r#"a᷺̖𐻶֚b"#, r#"a᷺̖𐻶֚b"#, r#"a᷺̖𐻶֚b"#, r#"a᷺̖𐻶֚b"#), + (r#"a𐻶᷺̖֚b"#, r#"a᷺𐻶̖֚b"#, r#"a᷺𐻶̖֚b"#, r#"a᷺𐻶̖֚b"#, r#"a᷺𐻶̖֚b"#), + (r#"à֮̕𐻷b"#, r#"à֮𐻷̕b"#, r#"à֮𐻷̕b"#, r#"à֮𐻷̕b"#, r#"à֮𐻷̕b"#), + (r#"a𐻷֮̀̕b"#, r#"a֮𐻷̀̕b"#, r#"a֮𐻷̀̕b"#, r#"a֮𐻷̀̕b"#, r#"a֮𐻷̀̕b"#), + (r#"à֮̕𐻸b"#, r#"à֮𐻸̕b"#, r#"à֮𐻸̕b"#, r#"à֮𐻸̕b"#, r#"à֮𐻸̕b"#), + (r#"a𐻸֮̀̕b"#, r#"a֮𐻸̀̕b"#, r#"a֮𐻸̀̕b"#, r#"a֮𐻸̀̕b"#, r#"a֮𐻸̀̕b"#), + (r#"à֮̕𐻹b"#, r#"à֮𐻹̕b"#, r#"à֮𐻹̕b"#, r#"à֮𐻹̕b"#, r#"à֮𐻹̕b"#), + (r#"a𐻹֮̀̕b"#, r#"a֮𐻹̀̕b"#, r#"a֮𐻹̀̕b"#, r#"a֮𐻹̀̕b"#, r#"a֮𐻹̀̕b"#), (r#"a᷺̖֚𐻺b"#, r#"a᷺̖𐻺֚b"#, r#"a᷺̖𐻺֚b"#, r#"a᷺̖𐻺֚b"#, r#"a᷺̖𐻺֚b"#), (r#"a𐻺᷺̖֚b"#, r#"a᷺𐻺̖֚b"#, r#"a᷺𐻺̖֚b"#, r#"a᷺𐻺̖֚b"#, r#"a᷺𐻺̖֚b"#), (r#"a᷺̖֚𐻻b"#, r#"a᷺̖𐻻֚b"#, r#"a᷺̖𐻻֚b"#, r#"a᷺̖𐻻֚b"#, r#"a᷺̖𐻻֚b"#), @@ -18952,6 +19069,10 @@ pub(crate) static NORMALIZATION_TEST: [(&str, &str, &str, &str, &str); 20034] = (r#"a̴𖿱𖿰़b"#, r#"a̴𖿱𖿰़b"#, r#"a̴𖿱𖿰़b"#, r#"a̴𖿱𖿰़b"#, r#"a̴𖿱𖿰़b"#), (r#"a̴𛲞𖿰b"#, r#"a̴𛲞𖿰b"#, r#"a̴𛲞𖿰b"#, r#"a̴𛲞𖿰b"#, r#"a̴𛲞𖿰b"#), (r#"a𛲞̴𖿰b"#, r#"a𛲞̴𖿰b"#, r#"a𛲞̴𖿰b"#, r#"a𛲞̴𖿰b"#, r#"a𛲞̴𖿰b"#), + (r#"a᷺̖֚𝄧b"#, r#"a᷺̖𝄧֚b"#, r#"a᷺̖𝄧֚b"#, r#"a᷺̖𝄧֚b"#, r#"a᷺̖𝄧֚b"#), + (r#"a𝄧᷺̖֚b"#, r#"a᷺𝄧̖֚b"#, r#"a᷺𝄧̖֚b"#, r#"a᷺𝄧̖֚b"#, r#"a᷺𝄧̖֚b"#), + (r#"a᷺̖֚𝄨b"#, r#"a᷺̖𝄨֚b"#, r#"a᷺̖𝄨֚b"#, r#"a᷺̖𝄨֚b"#, r#"a᷺̖𝄨֚b"#), + (r#"a𝄨᷺̖֚b"#, r#"a᷺𝄨̖֚b"#, r#"a᷺𝄨̖֚b"#, r#"a᷺𝄨̖֚b"#, r#"a᷺𝄨̖֚b"#), (r#"a᷎̛𝅥᷺b"#, r#"a᷎̛𝅥᷺b"#, r#"a᷎̛𝅥᷺b"#, r#"a᷎̛𝅥᷺b"#, r#"a᷎̛𝅥᷺b"#), (r#"a᷎𝅥̛᷺b"#, r#"a᷎𝅥̛᷺b"#, r#"a᷎𝅥̛᷺b"#, r#"a᷎𝅥̛᷺b"#, r#"a᷎𝅥̛᷺b"#), (r#"a᷎̛𝅦᷺b"#, r#"a᷎̛𝅦᷺b"#, r#"a᷎̛𝅦᷺b"#, r#"a᷎̛𝅦᷺b"#, r#"a᷎̛𝅦᷺b"#), @@ -19018,6 +19139,22 @@ pub(crate) static NORMALIZATION_TEST: [(&str, &str, &str, &str, &str); 20034] = (r#"a֮𝉃̀̕b"#, r#"a֮𝉃̀̕b"#, r#"a֮𝉃̀̕b"#, r#"a֮𝉃̀̕b"#, r#"a֮𝉃̀̕b"#), (r#"à֮𝉄̕b"#, r#"à֮𝉄̕b"#, r#"à֮𝉄̕b"#, r#"à֮𝉄̕b"#, r#"à֮𝉄̕b"#), (r#"a֮𝉄̀̕b"#, r#"a֮𝉄̀̕b"#, r#"a֮𝉄̀̕b"#, r#"a֮𝉄̀̕b"#, r#"a֮𝉄̀̕b"#), + (r#"a᷎̛᷺𝉐b"#, r#"a᷎̛𝉐᷺b"#, r#"a᷎̛𝉐᷺b"#, r#"a᷎̛𝉐᷺b"#, r#"a᷎̛𝉐᷺b"#), + (r#"a𝉐᷎̛᷺b"#, r#"a᷎𝉐̛᷺b"#, r#"a᷎𝉐̛᷺b"#, r#"a᷎𝉐̛᷺b"#, r#"a᷎𝉐̛᷺b"#), + (r#"a᷎̛᷺𝉑b"#, r#"a᷎̛𝉑᷺b"#, r#"a᷎̛𝉑᷺b"#, r#"a᷎̛𝉑᷺b"#, r#"a᷎̛𝉑᷺b"#), + (r#"a𝉑᷎̛᷺b"#, r#"a᷎𝉑̛᷺b"#, r#"a᷎𝉑̛᷺b"#, r#"a᷎𝉑̛᷺b"#, r#"a᷎𝉑̛᷺b"#), + (r#"a᷎̛᷺𝉒b"#, r#"a᷎̛𝉒᷺b"#, r#"a᷎̛𝉒᷺b"#, r#"a᷎̛𝉒᷺b"#, r#"a᷎̛𝉒᷺b"#), + (r#"a𝉒᷎̛᷺b"#, r#"a᷎𝉒̛᷺b"#, r#"a᷎𝉒̛᷺b"#, r#"a᷎𝉒̛᷺b"#, r#"a᷎𝉒̛᷺b"#), + (r#"a̴𖿰𝉛b"#, r#"a̴𝉛𖿰b"#, r#"a̴𝉛𖿰b"#, r#"a̴𝉛𖿰b"#, r#"a̴𝉛𖿰b"#), + (r#"a𝉛̴𖿰b"#, r#"a𝉛̴𖿰b"#, r#"a𝉛̴𖿰b"#, r#"a𝉛̴𖿰b"#, r#"a𝉛̴𖿰b"#), + (r#"a̴𖿰𝉜b"#, r#"a̴𝉜𖿰b"#, r#"a̴𝉜𖿰b"#, r#"a̴𝉜𖿰b"#, r#"a̴𝉜𖿰b"#), + (r#"a𝉜̴𖿰b"#, r#"a𝉜̴𖿰b"#, r#"a𝉜̴𖿰b"#, r#"a𝉜̴𖿰b"#, r#"a𝉜̴𖿰b"#), + (r#"a᷎̛᷺𝉟b"#, r#"a᷎̛𝉟᷺b"#, r#"a᷎̛𝉟᷺b"#, r#"a᷎̛𝉟᷺b"#, r#"a᷎̛𝉟᷺b"#), + (r#"a𝉟᷎̛᷺b"#, r#"a᷎𝉟̛᷺b"#, r#"a᷎𝉟̛᷺b"#, r#"a᷎𝉟̛᷺b"#, r#"a᷎𝉟̛᷺b"#), + (r#"a᷎̛᷺𝊀b"#, r#"a᷎̛𝊀᷺b"#, r#"a᷎̛𝊀᷺b"#, r#"a᷎̛𝊀᷺b"#, r#"a᷎̛𝊀᷺b"#), + (r#"a𝊀᷎̛᷺b"#, r#"a᷎𝊀̛᷺b"#, r#"a᷎𝊀̛᷺b"#, r#"a᷎𝊀̛᷺b"#, r#"a᷎𝊀̛᷺b"#), + (r#"a᷎̛᷺𝊁b"#, r#"a᷎̛𝊁᷺b"#, r#"a᷎̛𝊁᷺b"#, r#"a᷎̛𝊁᷺b"#, r#"a᷎̛𝊁᷺b"#), + (r#"a𝊁᷎̛᷺b"#, r#"a᷎𝊁̛᷺b"#, r#"a᷎𝊁̛᷺b"#, r#"a᷎𝊁̛᷺b"#, r#"a᷎𝊁̛᷺b"#), (r#"à֮𞀀̕b"#, r#"à֮𞀀̕b"#, r#"à֮𞀀̕b"#, r#"à֮𞀀̕b"#, r#"à֮𞀀̕b"#), (r#"a֮𞀀̀̕b"#, r#"a֮𞀀̀̕b"#, r#"a֮𞀀̀̕b"#, r#"a֮𞀀̀̕b"#, r#"a֮𞀀̀̕b"#), (r#"à֮𞀁̕b"#, r#"à֮𞀁̕b"#, r#"à֮𞀁̕b"#, r#"à֮𞀁̕b"#, r#"à֮𞀁̕b"#), diff --git a/tests/emoji-test.txt b/tests/emoji-test.txt index e42fdef..1ab3cf0 100644 --- a/tests/emoji-test.txt +++ b/tests/emoji-test.txt @@ -1,11 +1,11 @@ # emoji-test.txt -# Date: 2025-08-04, 20:55:31 GMT -# © 2025 Unicode®, Inc. +# Date: 2026-04-30, 22:40:18 GMT +# © 2026 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # # Emoji Keyboard/Display Test Data for UTS #51 -# Version: 17.0 +# Version: 18.0 # # For documentation and usage, see https://www.unicode.org/reports/tr51 # @@ -48,6 +48,7 @@ 1F642 ; fully-qualified # 🙂 E1.0 slightly smiling face 1F643 ; fully-qualified # 🙃 E1.0 upside-down face 1FAE0 ; fully-qualified # 🫠 E14.0 melting face +1FAEB ; fully-qualified # 🫫 E18.0 cracking face 1F609 ; fully-qualified # 😉 E0.6 winking face 1F60A ; fully-qualified # 😊 E0.6 smiling face with smiling eyes 1F607 ; fully-qualified # 😇 E1.0 smiling face with halo @@ -255,8 +256,8 @@ 1F4AD ; fully-qualified # 💭 E1.0 thought balloon 1F4A4 ; fully-qualified # 💤 E0.6 ZZZ -# Smileys & Emotion subtotal: 187 -# Smileys & Emotion subtotal: 187 w/o modifiers +# Smileys & Emotion subtotal: 188 +# Smileys & Emotion subtotal: 188 w/o modifiers # group: People & Body @@ -444,6 +445,18 @@ 1F44E 1F3FD ; fully-qualified # 👎🏽 E1.0 thumbs down: medium skin tone 1F44E 1F3FE ; fully-qualified # 👎🏾 E1.0 thumbs down: medium-dark skin tone 1F44E 1F3FF ; fully-qualified # 👎🏿 E1.0 thumbs down: dark skin tone +1FAF9 ; fully-qualified # 🫹 E18.0 leftwards thumb sign +1FAF9 1F3FB ; fully-qualified # 🫹🏻 E18.0 leftwards thumb sign: light skin tone +1FAF9 1F3FC ; fully-qualified # 🫹🏼 E18.0 leftwards thumb sign: medium-light skin tone +1FAF9 1F3FD ; fully-qualified # 🫹🏽 E18.0 leftwards thumb sign: medium skin tone +1FAF9 1F3FE ; fully-qualified # 🫹🏾 E18.0 leftwards thumb sign: medium-dark skin tone +1FAF9 1F3FF ; fully-qualified # 🫹🏿 E18.0 leftwards thumb sign: dark skin tone +1FAFA ; fully-qualified # 🫺 E18.0 rightwards thumb sign +1FAFA 1F3FB ; fully-qualified # 🫺🏻 E18.0 rightwards thumb sign: light skin tone +1FAFA 1F3FC ; fully-qualified # 🫺🏼 E18.0 rightwards thumb sign: medium-light skin tone +1FAFA 1F3FD ; fully-qualified # 🫺🏽 E18.0 rightwards thumb sign: medium skin tone +1FAFA 1F3FE ; fully-qualified # 🫺🏾 E18.0 rightwards thumb sign: medium-dark skin tone +1FAFA 1F3FF ; fully-qualified # 🫺🏿 E18.0 rightwards thumb sign: dark skin tone 270A ; fully-qualified # ✊ E0.6 raised fist 270A 1F3FB ; fully-qualified # ✊🏻 E1.0 raised fist: light skin tone 270A 1F3FC ; fully-qualified # ✊🏼 E1.0 raised fist: medium-light skin tone @@ -3760,8 +3773,8 @@ 1F463 ; fully-qualified # 👣 E0.6 footprints 1FAC6 ; fully-qualified # 🫆 E16.0 fingerprint -# People & Body subtotal: 3468 -# People & Body subtotal: 563 w/o modifiers +# People & Body subtotal: 3480 +# People & Body subtotal: 565 w/o modifiers # group: Component @@ -3914,6 +3927,7 @@ # subgroup: animal-bug 1F40C ; fully-qualified # 🐌 E0.6 snail 1F98B ; fully-qualified # 🦋 E3.0 butterfly +1FACC ; fully-qualified # 🫌 E18.0 monarch butterfly 1F41B ; fully-qualified # 🐛 E0.6 bug 1F41C ; fully-qualified # 🐜 E0.6 ant 1F41D ; fully-qualified # 🐝 E0.6 honeybee @@ -3966,8 +3980,8 @@ 1F344 ; fully-qualified # 🍄 E0.6 mushroom 1FABE ; fully-qualified # 🪾 E16.0 leafless tree -# Animals & Nature subtotal: 167 -# Animals & Nature subtotal: 167 w/o modifiers +# Animals & Nature subtotal: 168 +# Animals & Nature subtotal: 168 w/o modifiers # group: Food & Drink @@ -4003,6 +4017,7 @@ 1F336 ; unqualified # 🌶 E0.7 hot pepper 1FAD1 ; fully-qualified # 🫑 E13.0 bell pepper 1F952 ; fully-qualified # 🥒 E3.0 cucumber +1FADD ; fully-qualified # 🫝 E18.0 pickle 1F96C ; fully-qualified # 🥬 E11.0 leafy green 1F966 ; fully-qualified # 🥦 E5.0 broccoli 1F9C4 ; fully-qualified # 🧄 E12.0 garlic @@ -4118,8 +4133,8 @@ 1FAD9 ; fully-qualified # 🫙 E14.0 jar 1F3FA ; fully-qualified # 🏺 E1.0 amphora -# Food & Drink subtotal: 133 -# Food & Drink subtotal: 133 w/o modifiers +# Food & Drink subtotal: 134 +# Food & Drink subtotal: 134 w/o modifiers # group: Travel & Places @@ -4274,6 +4289,7 @@ 1F6A7 ; fully-qualified # 🚧 E0.6 construction # subgroup: transport-water +1F6D9 ; fully-qualified # 🛙 E18.0 lighthouse 2693 ; fully-qualified # ⚓ E0.6 anchor 1F6DF ; fully-qualified # 🛟 E14.0 ring buoy 26F5 ; fully-qualified # ⛵ E0.6 sailboat @@ -4409,12 +4425,13 @@ 26C4 ; fully-qualified # ⛄ E0.6 snowman without snow 2604 FE0F ; fully-qualified # ☄️ E1.0 comet 2604 ; unqualified # ☄ E1.0 comet +1FA8B ; fully-qualified # 🪋 E18.0 meteor 1F525 ; fully-qualified # 🔥 E0.6 fire 1F4A7 ; fully-qualified # 💧 E0.6 droplet 1F30A ; fully-qualified # 🌊 E0.6 water wave -# Travel & Places subtotal: 268 -# Travel & Places subtotal: 268 w/o modifiers +# Travel & Places subtotal: 270 +# Travel & Places subtotal: 270 w/o modifiers # group: Activities @@ -4737,6 +4754,7 @@ 1F58D FE0F ; fully-qualified # 🖍️ E0.7 crayon 1F58D ; unqualified # 🖍 E0.7 crayon 1F4DD ; fully-qualified # 📝 E0.6 memo +1FA8C ; fully-qualified # 🪌 E18.0 eraser # subgroup: office 1F4BC ; fully-qualified # 💼 E0.6 briefcase @@ -4781,6 +4799,7 @@ 1F5DD ; unqualified # 🗝 E0.7 old key # subgroup: tool +1FA8D ; fully-qualified # 🪍 E18.0 net with handle 1F528 ; fully-qualified # 🔨 E0.6 hammer 1FA93 ; fully-qualified # 🪓 E12.0 axe 26CF FE0F ; fully-qualified # ⛏️ E0.7 pick @@ -4881,8 +4900,8 @@ 1FAA7 ; fully-qualified # 🪧 E13.0 placard 1FAAA ; fully-qualified # 🪪 E14.0 identification card -# Objects subtotal: 316 -# Objects subtotal: 316 w/o modifiers +# Objects subtotal: 318 +# Objects subtotal: 318 w/o modifiers # group: Symbols @@ -5342,7 +5361,7 @@ 1F1EC 1F1FC ; fully-qualified # 🇬🇼 E2.0 flag: Guinea-Bissau 1F1EC 1F1FE ; fully-qualified # 🇬🇾 E2.0 flag: Guyana 1F1ED 1F1F0 ; fully-qualified # 🇭🇰 E2.0 flag: Hong Kong SAR China -1F1ED 1F1F2 ; fully-qualified # 🇭🇲 E2.0 flag: Heard & McDonald Islands +1F1ED 1F1F2 ; fully-qualified # 🇭🇲 E2.0 flag: Heard Island & McDonald Islands 1F1ED 1F1F3 ; fully-qualified # 🇭🇳 E2.0 flag: Honduras 1F1ED 1F1F7 ; fully-qualified # 🇭🇷 E2.0 flag: Croatia 1F1ED 1F1F9 ; fully-qualified # 🇭🇹 E2.0 flag: Haiti @@ -5446,7 +5465,7 @@ 1F1F8 1F1E9 ; fully-qualified # 🇸🇩 E2.0 flag: Sudan 1F1F8 1F1EA ; fully-qualified # 🇸🇪 E2.0 flag: Sweden 1F1F8 1F1EC ; fully-qualified # 🇸🇬 E2.0 flag: Singapore -1F1F8 1F1ED ; fully-qualified # 🇸🇭 E2.0 flag: St. Helena +1F1F8 1F1ED ; fully-qualified # 🇸🇭 E2.0 flag: St. Helena, Ascension & Tristan da Cunha 1F1F8 1F1EE ; fully-qualified # 🇸🇮 E2.0 flag: Slovenia 1F1F8 1F1EF ; fully-qualified # 🇸🇯 E2.0 flag: Svalbard & Jan Mayen 1F1F8 1F1F0 ; fully-qualified # 🇸🇰 E2.0 flag: Slovakia @@ -5464,7 +5483,7 @@ 1F1F9 1F1E6 ; fully-qualified # 🇹🇦 E2.0 flag: Tristan da Cunha 1F1F9 1F1E8 ; fully-qualified # 🇹🇨 E2.0 flag: Turks & Caicos Islands 1F1F9 1F1E9 ; fully-qualified # 🇹🇩 E2.0 flag: Chad -1F1F9 1F1EB ; fully-qualified # 🇹🇫 E2.0 flag: French Southern Territories +1F1F9 1F1EB ; fully-qualified # 🇹🇫 E2.0 flag: French Southern and Antarctic Lands 1F1F9 1F1EC ; fully-qualified # 🇹🇬 E2.0 flag: Togo 1F1F9 1F1ED ; fully-qualified # 🇹🇭 E2.0 flag: Thailand 1F1F9 1F1EF ; fully-qualified # 🇹🇯 E2.0 flag: Tajikistan @@ -5510,7 +5529,7 @@ # Flags subtotal: 276 w/o modifiers # Status Counts -# fully-qualified : 3944 +# fully-qualified : 3963 # minimally-qualified : 1029 # unqualified : 243 # component : 9