@@ -287,7 +287,6 @@ def _compute_stream_safe_tables(self):
287
287
hexify = lambda c : '{:04X}' .format (c )
288
288
289
289
def gen_combining_class (combining_classes , out ):
290
- out .write ("#[inline]\n " )
291
290
(salt , keys ) = minimal_perfect_hash (combining_classes )
292
291
out .write ("pub fn canonical_combining_class(c: char) -> u8 {\n " )
293
292
out .write (" mph_lookup(c.into(), &[\n " )
@@ -299,7 +298,7 @@ def gen_combining_class(combining_classes, out):
299
298
kv = int (combining_classes [k ]) | (k << 8 )
300
299
out .write (" 0x{:x},\n " .format (kv ))
301
300
out .write (" ],\n " )
302
- out .write (" u8_lookup_fk, u8_lookup_fv, 0) as u8 \n " )
301
+ out .write (" u8_lookup_fk, u8_lookup_fv, 0)\n " )
303
302
out .write ("}\n " )
304
303
305
304
def gen_composition_table (canon_comp , out ):
@@ -376,16 +375,20 @@ def gen_nfkd_qc(prop_tables, out):
376
375
377
376
def gen_combining_mark (general_category_mark , out ):
378
377
out .write ("#[inline]\n " )
378
+ (salt , keys ) = minimal_perfect_hash (general_category_mark )
379
379
out .write ("pub fn is_combining_mark(c: char) -> bool {\n " )
380
- out .write (" match c {\n " )
381
-
382
- for char in sorted (general_category_mark ):
383
- out .write (" '\\ u{%s}' => true,\n " % hexify (char ))
384
-
385
- out .write (" _ => false,\n " )
386
- out .write (" }\n " )
380
+ out .write (" mph_lookup(c.into(), &[\n " )
381
+ for s in salt :
382
+ out .write (" 0x{:x},\n " .format (s ))
383
+ out .write (" ],\n " )
384
+ out .write (" &[\n " )
385
+ for k in keys :
386
+ out .write (" 0x{:x},\n " .format (k ))
387
+ out .write (" ],\n " )
388
+ out .write (" bool_lookup_fk, bool_lookup_fv, false)\n " )
387
389
out .write ("}\n " )
388
390
391
+
389
392
def gen_stream_safe (leading , trailing , out ):
390
393
out .write ("#[inline]\n " )
391
394
out .write ("pub fn stream_safe_leading_nonstarters(c: char) -> usize {\n " )
@@ -399,15 +402,18 @@ def gen_stream_safe(leading, trailing, out):
399
402
out .write ("}\n " )
400
403
out .write ("\n " )
401
404
402
- out . write ( "#[inline] \n " )
405
+ ( salt , keys ) = minimal_perfect_hash ( trailing )
403
406
out .write ("pub fn stream_safe_trailing_nonstarters(c: char) -> usize {\n " )
404
- out .write (" match c {\n " )
405
-
406
- for char , num_trailing in sorted (trailing .items ()):
407
- out .write (" '\\ u{%s}' => %d,\n " % (hexify (char ), num_trailing ))
408
-
409
- out .write (" _ => 0,\n " )
410
- out .write (" }\n " )
407
+ out .write (" mph_lookup(c.into(), &[\n " )
408
+ for s in salt :
409
+ out .write (" 0x{:x},\n " .format (s ))
410
+ out .write (" ],\n " )
411
+ out .write (" &[\n " )
412
+ for k in keys :
413
+ kv = int (trailing [k ]) | (k << 8 )
414
+ out .write (" 0x{:x},\n " .format (kv ))
415
+ out .write (" ],\n " )
416
+ out .write (" u8_lookup_fk, u8_lookup_fv, 0) as usize\n " )
411
417
out .write ("}\n " )
412
418
413
419
def gen_tests (tests , out ):
0 commit comments