@@ -616,7 +616,24 @@ pub mod conversions {
616
616
}
617
617
}
618
618
619
- static LOWERCASE_TABLE : & [ ( char , u32 ) ] = & [
619
+ pub fn to_title ( c : char ) -> [ char ; 3 ] {
620
+ if c. is_ascii ( ) {
621
+ [ ( c as u8 ) . to_ascii_uppercase ( ) as char , '\0' , '\0' ]
622
+ } else {
623
+ TITLECASE_TABLE
624
+ . binary_search_by ( |& ( key, _) | key. cmp ( & c) )
625
+ . map ( |i| {
626
+ let u = TITLECASE_TABLE [ i] . 1 ;
627
+ char:: from_u32 ( u) . map ( |c| [ c, '\0' , '\0' ] ) . unwrap_or_else ( || {
628
+ // SAFETY: Index comes from statically generated table
629
+ unsafe { * TITLECASE_TABLE_MULTI . get_unchecked ( ( u & ( INDEX_MASK - 1 ) ) as usize ) }
630
+ } )
631
+ } )
632
+ . unwrap_or ( to_upper ( c) )
633
+ }
634
+ }
635
+
636
+ static LOWERCASE_TABLE : [ ( char , u32 ) ; 1407 ] = [
620
637
( '\u{c0}' , 224 ) , ( '\u{c1}' , 225 ) , ( '\u{c2}' , 226 ) , ( '\u{c3}' , 227 ) , ( '\u{c4}' , 228 ) ,
621
638
( '\u{c5}' , 229 ) , ( '\u{c6}' , 230 ) , ( '\u{c7}' , 231 ) , ( '\u{c8}' , 232 ) , ( '\u{c9}' , 233 ) ,
622
639
( '\u{ca}' , 234 ) , ( '\u{cb}' , 235 ) , ( '\u{cc}' , 236 ) , ( '\u{cd}' , 237 ) , ( '\u{ce}' , 238 ) ,
@@ -959,11 +976,11 @@ pub mod conversions {
959
976
( '\u{1e920}' , 125250 ) , ( '\u{1e921}' , 125251 ) ,
960
977
] ;
961
978
962
- static LOWERCASE_TABLE_MULTI : & [ [ char ; 3 ] ] = & [
979
+ static LOWERCASE_TABLE_MULTI : [ [ char ; 3 ] ; 1 ] = [
963
980
[ 'i' , '\u{307}' , '\u{0}' ] ,
964
981
] ;
965
982
966
- static UPPERCASE_TABLE : & [ ( char , u32 ) ] = & [
983
+ static UPPERCASE_TABLE : [ ( char , u32 ) ; 1499 ] = [
967
984
( '\u{b5}' , 924 ) , ( '\u{df}' , 4194304 ) , ( '\u{e0}' , 192 ) , ( '\u{e1}' , 193 ) , ( '\u{e2}' , 194 ) ,
968
985
( '\u{e3}' , 195 ) , ( '\u{e4}' , 196 ) , ( '\u{e5}' , 197 ) , ( '\u{e6}' , 198 ) , ( '\u{e7}' , 199 ) ,
969
986
( '\u{e8}' , 200 ) , ( '\u{e9}' , 201 ) , ( '\u{ea}' , 202 ) , ( '\u{eb}' , 203 ) , ( '\u{ec}' , 204 ) ,
@@ -1330,7 +1347,7 @@ pub mod conversions {
1330
1347
( '\u{1e942}' , 125216 ) , ( '\u{1e943}' , 125217 ) ,
1331
1348
] ;
1332
1349
1333
- static UPPERCASE_TABLE_MULTI : & [ [ char ; 3 ] ] = & [
1350
+ static UPPERCASE_TABLE_MULTI : [ [ char ; 3 ] ; 102 ] = [
1334
1351
[ 'S' , 'S' , '\u{0}' ] , [ '\u{2bc}' , 'N' , '\u{0}' ] , [ 'J' , '\u{30c}' , '\u{0}' ] ,
1335
1352
[ '\u{399}' , '\u{308}' , '\u{301}' ] , [ '\u{3a5}' , '\u{308}' , '\u{301}' ] ,
1336
1353
[ '\u{535}' , '\u{552}' , '\u{0}' ] , [ 'H' , '\u{331}' , '\u{0}' ] , [ 'T' , '\u{308}' , '\u{0}' ] ,
@@ -1380,4 +1397,53 @@ pub mod conversions {
1380
1397
[ '\u{544}' , '\u{53b}' , '\u{0}' ] , [ '\u{54e}' , '\u{546}' , '\u{0}' ] ,
1381
1398
[ '\u{544}' , '\u{53d}' , '\u{0}' ] ,
1382
1399
] ;
1400
+
1401
+ static TITLECASE_TABLE : [ ( char , u32 ) ; 135 ] = [
1402
+ ( '\u{df}' , 4194304 ) , ( '\u{1c4}' , 453 ) , ( '\u{1c5}' , 453 ) , ( '\u{1c6}' , 453 ) ,
1403
+ ( '\u{1c7}' , 456 ) , ( '\u{1c8}' , 456 ) , ( '\u{1c9}' , 456 ) , ( '\u{1ca}' , 459 ) , ( '\u{1cb}' , 459 ) ,
1404
+ ( '\u{1cc}' , 459 ) , ( '\u{1f1}' , 498 ) , ( '\u{1f2}' , 498 ) , ( '\u{1f3}' , 498 ) ,
1405
+ ( '\u{587}' , 4194305 ) , ( '\u{10d0}' , 4304 ) , ( '\u{10d1}' , 4305 ) , ( '\u{10d2}' , 4306 ) ,
1406
+ ( '\u{10d3}' , 4307 ) , ( '\u{10d4}' , 4308 ) , ( '\u{10d5}' , 4309 ) , ( '\u{10d6}' , 4310 ) ,
1407
+ ( '\u{10d7}' , 4311 ) , ( '\u{10d8}' , 4312 ) , ( '\u{10d9}' , 4313 ) , ( '\u{10da}' , 4314 ) ,
1408
+ ( '\u{10db}' , 4315 ) , ( '\u{10dc}' , 4316 ) , ( '\u{10dd}' , 4317 ) , ( '\u{10de}' , 4318 ) ,
1409
+ ( '\u{10df}' , 4319 ) , ( '\u{10e0}' , 4320 ) , ( '\u{10e1}' , 4321 ) , ( '\u{10e2}' , 4322 ) ,
1410
+ ( '\u{10e3}' , 4323 ) , ( '\u{10e4}' , 4324 ) , ( '\u{10e5}' , 4325 ) , ( '\u{10e6}' , 4326 ) ,
1411
+ ( '\u{10e7}' , 4327 ) , ( '\u{10e8}' , 4328 ) , ( '\u{10e9}' , 4329 ) , ( '\u{10ea}' , 4330 ) ,
1412
+ ( '\u{10eb}' , 4331 ) , ( '\u{10ec}' , 4332 ) , ( '\u{10ed}' , 4333 ) , ( '\u{10ee}' , 4334 ) ,
1413
+ ( '\u{10ef}' , 4335 ) , ( '\u{10f0}' , 4336 ) , ( '\u{10f1}' , 4337 ) , ( '\u{10f2}' , 4338 ) ,
1414
+ ( '\u{10f3}' , 4339 ) , ( '\u{10f4}' , 4340 ) , ( '\u{10f5}' , 4341 ) , ( '\u{10f6}' , 4342 ) ,
1415
+ ( '\u{10f7}' , 4343 ) , ( '\u{10f8}' , 4344 ) , ( '\u{10f9}' , 4345 ) , ( '\u{10fa}' , 4346 ) ,
1416
+ ( '\u{10fd}' , 4349 ) , ( '\u{10fe}' , 4350 ) , ( '\u{10ff}' , 4351 ) , ( '\u{1f80}' , 8072 ) ,
1417
+ ( '\u{1f81}' , 8073 ) , ( '\u{1f82}' , 8074 ) , ( '\u{1f83}' , 8075 ) , ( '\u{1f84}' , 8076 ) ,
1418
+ ( '\u{1f85}' , 8077 ) , ( '\u{1f86}' , 8078 ) , ( '\u{1f87}' , 8079 ) , ( '\u{1f88}' , 8072 ) ,
1419
+ ( '\u{1f89}' , 8073 ) , ( '\u{1f8a}' , 8074 ) , ( '\u{1f8b}' , 8075 ) , ( '\u{1f8c}' , 8076 ) ,
1420
+ ( '\u{1f8d}' , 8077 ) , ( '\u{1f8e}' , 8078 ) , ( '\u{1f8f}' , 8079 ) , ( '\u{1f90}' , 8088 ) ,
1421
+ ( '\u{1f91}' , 8089 ) , ( '\u{1f92}' , 8090 ) , ( '\u{1f93}' , 8091 ) , ( '\u{1f94}' , 8092 ) ,
1422
+ ( '\u{1f95}' , 8093 ) , ( '\u{1f96}' , 8094 ) , ( '\u{1f97}' , 8095 ) , ( '\u{1f98}' , 8088 ) ,
1423
+ ( '\u{1f99}' , 8089 ) , ( '\u{1f9a}' , 8090 ) , ( '\u{1f9b}' , 8091 ) , ( '\u{1f9c}' , 8092 ) ,
1424
+ ( '\u{1f9d}' , 8093 ) , ( '\u{1f9e}' , 8094 ) , ( '\u{1f9f}' , 8095 ) , ( '\u{1fa0}' , 8104 ) ,
1425
+ ( '\u{1fa1}' , 8105 ) , ( '\u{1fa2}' , 8106 ) , ( '\u{1fa3}' , 8107 ) , ( '\u{1fa4}' , 8108 ) ,
1426
+ ( '\u{1fa5}' , 8109 ) , ( '\u{1fa6}' , 8110 ) , ( '\u{1fa7}' , 8111 ) , ( '\u{1fa8}' , 8104 ) ,
1427
+ ( '\u{1fa9}' , 8105 ) , ( '\u{1faa}' , 8106 ) , ( '\u{1fab}' , 8107 ) , ( '\u{1fac}' , 8108 ) ,
1428
+ ( '\u{1fad}' , 8109 ) , ( '\u{1fae}' , 8110 ) , ( '\u{1faf}' , 8111 ) , ( '\u{1fb2}' , 4194306 ) ,
1429
+ ( '\u{1fb3}' , 8124 ) , ( '\u{1fb4}' , 4194307 ) , ( '\u{1fb7}' , 4194308 ) , ( '\u{1fbc}' , 8124 ) ,
1430
+ ( '\u{1fc2}' , 4194309 ) , ( '\u{1fc3}' , 8140 ) , ( '\u{1fc4}' , 4194310 ) , ( '\u{1fc7}' , 4194311 ) ,
1431
+ ( '\u{1fcc}' , 8140 ) , ( '\u{1ff2}' , 4194312 ) , ( '\u{1ff3}' , 8188 ) , ( '\u{1ff4}' , 4194313 ) ,
1432
+ ( '\u{1ff7}' , 4194314 ) , ( '\u{1ffc}' , 8188 ) , ( '\u{fb00}' , 4194315 ) , ( '\u{fb01}' , 4194316 ) ,
1433
+ ( '\u{fb02}' , 4194317 ) , ( '\u{fb03}' , 4194318 ) , ( '\u{fb04}' , 4194319 ) , ( '\u{fb05}' , 4194320 ) ,
1434
+ ( '\u{fb06}' , 4194321 ) , ( '\u{fb13}' , 4194322 ) , ( '\u{fb14}' , 4194323 ) , ( '\u{fb15}' , 4194324 ) ,
1435
+ ( '\u{fb16}' , 4194325 ) , ( '\u{fb17}' , 4194326 ) ,
1436
+ ] ;
1437
+
1438
+ static TITLECASE_TABLE_MULTI : [ [ char ; 3 ] ; 23 ] = [
1439
+ [ 'S' , 's' , '\u{0}' ] , [ '\u{535}' , '\u{582}' , '\u{0}' ] , [ '\u{1fba}' , '\u{345}' , '\u{0}' ] ,
1440
+ [ '\u{386}' , '\u{345}' , '\u{0}' ] , [ '\u{391}' , '\u{342}' , '\u{345}' ] ,
1441
+ [ '\u{1fca}' , '\u{345}' , '\u{0}' ] , [ '\u{389}' , '\u{345}' , '\u{0}' ] ,
1442
+ [ '\u{397}' , '\u{342}' , '\u{345}' ] , [ '\u{1ffa}' , '\u{345}' , '\u{0}' ] ,
1443
+ [ '\u{38f}' , '\u{345}' , '\u{0}' ] , [ '\u{3a9}' , '\u{342}' , '\u{345}' ] , [ 'F' , 'f' , '\u{0}' ] ,
1444
+ [ 'F' , 'i' , '\u{0}' ] , [ 'F' , 'l' , '\u{0}' ] , [ 'F' , 'f' , 'i' ] , [ 'F' , 'f' , 'l' ] ,
1445
+ [ 'S' , 't' , '\u{0}' ] , [ 'S' , 't' , '\u{0}' ] , [ '\u{544}' , '\u{576}' , '\u{0}' ] ,
1446
+ [ '\u{544}' , '\u{565}' , '\u{0}' ] , [ '\u{544}' , '\u{56b}' , '\u{0}' ] ,
1447
+ [ '\u{54e}' , '\u{576}' , '\u{0}' ] , [ '\u{544}' , '\u{56d}' , '\u{0}' ] ,
1448
+ ] ;
1383
1449
}
0 commit comments