@@ -287,7 +287,6 @@ def _compute_stream_safe_tables(self):
287287hexify = lambda c : '{:04X}' .format (c )
288288
289289def gen_combining_class (combining_classes , out ):
290- out .write ("#[inline]\n " )
291290 (salt , keys ) = minimal_perfect_hash (combining_classes )
292291 out .write ("pub fn canonical_combining_class(c: char) -> u8 {\n " )
293292 out .write (" mph_lookup(c.into(), &[\n " )
@@ -299,7 +298,7 @@ def gen_combining_class(combining_classes, out):
299298 kv = int (combining_classes [k ]) | (k << 8 )
300299 out .write (" 0x{:x},\n " .format (kv ))
301300 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 " )
303302 out .write ("}\n " )
304303
305304def gen_composition_table (canon_comp , out ):
@@ -376,16 +375,20 @@ def gen_nfkd_qc(prop_tables, out):
376375
377376def gen_combining_mark (general_category_mark , out ):
378377 out .write ("#[inline]\n " )
378+ (salt , keys ) = minimal_perfect_hash (general_category_mark )
379379 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 " )
387389 out .write ("}\n " )
388390
391+
389392def gen_stream_safe (leading , trailing , out ):
390393 out .write ("#[inline]\n " )
391394 out .write ("pub fn stream_safe_leading_nonstarters(c: char) -> usize {\n " )
@@ -399,15 +402,18 @@ def gen_stream_safe(leading, trailing, out):
399402 out .write ("}\n " )
400403 out .write ("\n " )
401404
402- out . write ( "#[inline] \n " )
405+ ( salt , keys ) = minimal_perfect_hash ( trailing )
403406 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 " )
411417 out .write ("}\n " )
412418
413419def gen_tests (tests , out ):
0 commit comments