This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regcharclass.pl: Get code point folding to a seq
authorKarl Williamson <khw@cpan.org>
Sun, 18 Oct 2020 16:20:38 +0000 (10:20 -0600)
committerKarl Williamson <khw@cpan.org>
Sun, 20 Dec 2020 03:45:42 +0000 (20:45 -0700)
Previously regcharclass.pl could tell if an input string was a
multi-character fold of some Unicode code point.  This commit adds the
ability to return what that code point is.  This capability will be used
in a later commit.

regcharclass.h
regen/regcharclass.pl
regen/regcharclass_multi_char_folds.pl

index dbcf50a..9aa98ed 100644 (file)
 /*
        MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
 
-       &regcharclass_multi_char_folds::multi_char_folds('u', 'a')
+       %regcharclass_multi_char_folds::multi_char_folds('u', 'a')
 */
 /*** GENERATED CODE ***/
 #define is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e)                             \
     : 0 )                                                                   \
 : ((e)-(s) > 3) ? is_MULTI_CHAR_FOLD_utf8_safe_part2(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part3(s,e) )
 
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part0(s,e)                           \
+( ( 0x81 == ((const U8*)s)[1] ) ?                                           \
+           ( ( ( 0xCC == ((const U8*)s)[2] ) && ( 0x93 == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+       : ( 0x85 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xCC == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x88 == ((const U8*)s)[3] ) ?                           \
+                   ( ( 0xCC == ((const U8*)s)[4] ) ?                       \
+                       ( ( 0x80 == ((const U8*)s)[5] ) ? 0x1FE2            \
+                       : ( 0x81 == ((const U8*)s)[5] ) ? 0x3B0 : 0 )       \
+                   : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 0x1FE7 : 0 )\
+               : ( 0x93 == ((const U8*)s)[3] ) ?                           \
+                   ( ( 0xCC == ((const U8*)s)[4] ) ?                       \
+                       ( ( 0x80 == ((const U8*)s)[5] ) ? 0x1F52            \
+                       : ( 0x81 == ((const U8*)s)[5] ) ? 0x1F54 : 0x1F50 ) \
+                   : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 0x1F56 : 0x1F50 )\
+               : 0 )                                                       \
+           : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+       : ( 0x89 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x82 == ((const U8*)s)[3] ) ?                           \
+                   ( ( ( 0xCE == ((const U8*)s)[4] ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 0x1FF7 : 0x1FF6 )\
+               : 0 )                                                       \
+           : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+       : ( ( ( 0x8E == ((const U8*)s)[1] ) && ( 0xCE == ((const U8*)s)[2] ) ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part1(s,e)                           \
+( ( 0xD5 == ((const U8*)s)[0] ) ?                                           \
+       ( ( 0xA5 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xD6 == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x587 : 0 )\
+       : ( 0xB4 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xD5 == ((const U8*)s)[2] ) ?                               \
+               ( ( 0xA5 == ((const U8*)s)[3] ) ? 0xFB14                    \
+               : ( 0xAB == ((const U8*)s)[3] ) ? 0xFB15                    \
+               : ( 0xAD == ((const U8*)s)[3] ) ? 0xFB17                    \
+               : ( 0xB6 == ((const U8*)s)[3] ) ? 0xFB13 : 0 )              \
+           : 0 )                                                           \
+       : ( ( ( 0xBE == ((const U8*)s)[1] ) && ( 0xD5 == ((const U8*)s)[2] ) ) && ( 0xB6 == ((const U8*)s)[3] ) ) ? 0xFB16 : 0 )\
+    : ( 0xE1 == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0xBC == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x80 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F80 : 0 )\
+           : ( 0x81 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F81 : 0 )\
+           : ( 0x82 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F82 : 0 )\
+           : ( 0x83 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F83 : 0 )\
+           : ( 0x84 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F84 : 0 )\
+           : ( 0x85 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F85 : 0 )\
+           : ( 0x86 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F86 : 0 )\
+           : ( 0x87 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F87 : 0 )\
+           : ( 0xA0 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F90 : 0 )\
+           : ( 0xA1 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F91 : 0 )\
+           : ( 0xA2 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F92 : 0 )\
+           : ( 0xA3 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F93 : 0 )\
+           : ( 0xA4 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F94 : 0 )\
+           : ( 0xA5 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F95 : 0 )\
+           : ( 0xA6 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F96 : 0 )\
+           : ( ( ( 0xA7 == ((const U8*)s)[2] ) && ( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F97 : 0 )\
+       : ( 0xBD == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xA0 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA0 : 0 )\
+           : ( 0xA1 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA1 : 0 )\
+           : ( 0xA2 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA2 : 0 )\
+           : ( 0xA3 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA3 : 0 )\
+           : ( 0xA4 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA4 : 0 )\
+           : ( 0xA5 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA5 : 0 )\
+           : ( 0xA6 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA6 : 0 )\
+           : ( 0xA7 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA7 : 0 )\
+           : ( 0xB0 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FB2 : 0 )\
+           : ( 0xB4 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FC2 : 0 )\
+           : ( ( ( 0xBC == ((const U8*)s)[2] ) && ( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FF2 : 0 )\
+       : 0 )                                                               \
+    : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part2(s,e)                           \
+( ( 0x81 == ((const U8*)s)[1] ) ?                                           \
+           ( ( ( 0xCC == ((const U8*)s)[2] ) && ( 0x93 == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+       : ( 0x85 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xCC == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x93 == ((const U8*)s)[3] ) ? 0x1F50 : 0 )              \
+           : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+       : ( 0x89 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x82 == ((const U8*)s)[3] ) ? 0x1FF6 : 0 )              \
+           : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+       : ( ( ( 0x8E == ((const U8*)s)[1] ) && ( 0xCE == ((const U8*)s)[2] ) ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part3(s,e)                           \
+( ( 0xD5 == ((const U8*)s)[0] ) ?                                           \
+       ( ( 0xA5 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xD6 == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x587 : 0 )\
+       : ( 0xB4 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xD5 == ((const U8*)s)[2] ) ?                               \
+               ( ( 0xA5 == ((const U8*)s)[3] ) ? 0xFB14                    \
+               : ( 0xAB == ((const U8*)s)[3] ) ? 0xFB15                    \
+               : ( 0xAD == ((const U8*)s)[3] ) ? 0xFB17                    \
+               : ( 0xB6 == ((const U8*)s)[3] ) ? 0xFB13 : 0 )              \
+           : 0 )                                                           \
+       : ( ( ( 0xBE == ((const U8*)s)[1] ) && ( 0xD5 == ((const U8*)s)[2] ) ) && ( 0xB6 == ((const U8*)s)[3] ) ) ? 0xFB16 : 0 )\
+    : ( 0xE1 == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0xBC == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x80 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F80 : 0 )\
+           : ( 0x81 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F81 : 0 )\
+           : ( 0x82 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F82 : 0 )\
+           : ( 0x83 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F83 : 0 )\
+           : ( 0x84 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F84 : 0 )\
+           : ( 0x85 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F85 : 0 )\
+           : ( 0x86 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F86 : 0 )\
+           : ( 0x87 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F87 : 0 )\
+           : ( 0xA0 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F90 : 0 )\
+           : ( 0xA1 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F91 : 0 )\
+           : ( 0xA2 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F92 : 0 )\
+           : ( 0xA3 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F93 : 0 )\
+           : ( 0xA4 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F94 : 0 )\
+           : ( 0xA5 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F95 : 0 )\
+           : ( 0xA6 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F96 : 0 )\
+           : ( ( ( 0xA7 == ((const U8*)s)[2] ) && ( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1F97 : 0 )\
+       : ( 0xBD == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xA0 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA0 : 0 )\
+           : ( 0xA1 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA1 : 0 )\
+           : ( 0xA2 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA2 : 0 )\
+           : ( 0xA3 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA3 : 0 )\
+           : ( 0xA4 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA4 : 0 )\
+           : ( 0xA5 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA5 : 0 )\
+           : ( 0xA6 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA6 : 0 )\
+           : ( 0xA7 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FA7 : 0 )\
+           : ( 0xB0 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FB2 : 0 )\
+           : ( 0xB4 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xCE == ((const U8*)s)[3] ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FC2 : 0 )\
+           : ( ( ( 0xBC == ((const U8*)s)[2] ) && ( 0xCE == ((const U8*)s)[3] ) ) && ( 0xB9 == ((const U8*)s)[4] ) ) ? 0x1FF2 : 0 )\
+       : 0 )                                                               \
+    : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part4(s,e)                           \
+( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ?                                 \
+       ( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ?                         \
+           ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) ? 0xFB03              \
+           : ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ? 0xFB04 : 0xFB00 )   \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF                    \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05                  \
+       : ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 0xDF : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xC5 == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0xBF == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( ((const U8*)s)[2] & 0xDF ) == 'S' ) ? 0xDF                \
+           : ( ( ((const U8*)s)[2] & 0xDF ) == 'T' ) ? 0xFB05              \
+           : ( ( 0xC5 == ((const U8*)s)[2] ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 0xDF : 0 )\
+       : 0 )                                                               \
+    : ( 0xCA == ((const U8*)s)[0] ) ?                                       \
+       ( ( ( 0xBC == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 0x149 : 0 )\
+    : ( 0xCE == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0xAC == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+       : ( 0xAE == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+       : ( 0xB1 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x82 == ((const U8*)s)[3] ) ? 0x1FB6 : 0 )              \
+           : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+       : ( 0xB7 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x82 == ((const U8*)s)[3] ) ? 0x1FC6 : 0 )              \
+           : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+       : ( ( ( 0xB9 == ((const U8*)s)[1] ) && ( 0xCD == ((const U8*)s)[2] ) ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+    : ( 0xCF == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0x81 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xCC == ((const U8*)s)[2] ) && ( 0x93 == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+       : ( 0x85 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xCC == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x93 == ((const U8*)s)[3] ) ? 0x1F50 : 0 )              \
+           : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+       : ( 0x89 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x82 == ((const U8*)s)[3] ) ? 0x1FF6 : 0 )              \
+           : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+       : ( ( ( 0x8E == ((const U8*)s)[1] ) && ( 0xCE == ((const U8*)s)[2] ) ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )\
+    : ( 0xD5 == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0xA5 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xD6 == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x587 : 0 )\
+       : ( 0xB4 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xD5 == ((const U8*)s)[2] ) ?                               \
+               ( ( 0xA5 == ((const U8*)s)[3] ) ? 0xFB14                    \
+               : ( 0xAB == ((const U8*)s)[3] ) ? 0xFB15                    \
+               : ( 0xAD == ((const U8*)s)[3] ) ? 0xFB17                    \
+               : ( 0xB6 == ((const U8*)s)[3] ) ? 0xFB13 : 0 )              \
+           : 0 )                                                           \
+       : ( ( ( 0xBE == ((const U8*)s)[1] ) && ( 0xD5 == ((const U8*)s)[2] ) ) && ( 0xB6 == ((const U8*)s)[3] ) ) ? 0xFB16 : 0 )\
+    : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part5(s,e)                           \
+( ((e)-(s) > 2) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ?                             \
+       ( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ?                         \
+           ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) ? 0xFB03              \
+           : ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ? 0xFB04 : 0xFB00 )   \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF                    \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05                  \
+       : ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 0xDF : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xC5 == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0xBF == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( ((const U8*)s)[2] & 0xDF ) == 'S' ) ? 0xDF                \
+           : ( ( ((const U8*)s)[2] & 0xDF ) == 'T' ) ? 0xFB05 : 0 )        \
+       : 0 )                                                               \
+    : ( ( ( 0xCA == ((const U8*)s)[0] ) && ( 0xBC == ((const U8*)s)[1] ) ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 0x149 : 0 )\
+: ((e)-(s) > 1) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? 0xFB00                  \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF                    \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05 : 0 )            \
+    : 0 )                                                                   \
+: 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part6(s,e)                           \
+( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ?                                 \
+       ( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ?                         \
+           ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) ? 0xFB03              \
+           : ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ? 0xFB04 : 0xFB00 )   \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF                    \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05                  \
+       : ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 0xDF : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xC5 == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0xBF == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( ((const U8*)s)[2] & 0xDF ) == 'S' ) ? 0xDF                \
+           : ( ( ((const U8*)s)[2] & 0xDF ) == 'T' ) ? 0xFB05              \
+           : ( ( 0xC5 == ((const U8*)s)[2] ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 0xDF : 0 )\
+       : 0 )                                                               \
+    : ( 0xCA == ((const U8*)s)[0] ) ?                                       \
+       ( ( ( 0xBC == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 0x149 : 0 )\
+    : ( 0xCE == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0xAC == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+       : ( 0xAE == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+       : ( 0xB1 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x82 == ((const U8*)s)[3] ) ?                           \
+                   ( ( ( 0xCE == ((const U8*)s)[4] ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 0x1FB7 : 0x1FB6 )\
+               : 0 )                                                       \
+           : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+       : ( 0xB7 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x82 == ((const U8*)s)[3] ) ?                           \
+                   ( ( ( 0xCE == ((const U8*)s)[4] ) && ( 0xB9 == ((const U8*)s)[5] ) ) ? 0x1FC7 : 0x1FC6 )\
+               : 0 )                                                       \
+           : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+       : ( 0xB9 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xCC == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x88 == ((const U8*)s)[3] ) ?                           \
+                   ( ( 0xCC == ((const U8*)s)[4] ) ?                       \
+                       ( ( 0x80 == ((const U8*)s)[5] ) ? 0x1FD2            \
+                       : ( 0x81 == ((const U8*)s)[5] ) ? 0x390 : 0 )       \
+                   : ( ( 0xCD == ((const U8*)s)[4] ) && ( 0x82 == ((const U8*)s)[5] ) ) ? 0x1FD7 : 0 )\
+               : 0 )                                                       \
+           : ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+       : 0 )                                                               \
+    : ( 0xCF == ((const U8*)s)[0] ) ? what_MULTI_CHAR_FOLD_utf8_safe_part0(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part1(s,e) )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part7(s,e)                           \
+( ((e)-(s) > 4) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xDF ) == 'A' ) ?                             \
+       ( ( ( 0xCA == ((const U8*)s)[1] ) && ( 0xBE == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ?                         \
+           ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) ? 0xFB03              \
+           : ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ? 0xFB04 : 0xFB00 )   \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'H' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'I' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x87 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'J' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8C == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF                    \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05                  \
+       : ( ( 0xC5 == ((const U8*)s)[1] ) && ( 0xBF == ((const U8*)s)[2] ) ) ? 0xDF : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'T' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x88 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'W' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'Y' ) ?                             \
+       ( ( ( 0xCC == ((const U8*)s)[1] ) && ( 0x8A == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xC5 == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0xBF == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( ((const U8*)s)[2] & 0xDF ) == 'S' ) ? 0xDF                \
+           : ( ( ((const U8*)s)[2] & 0xDF ) == 'T' ) ? 0xFB05              \
+           : ( ( 0xC5 == ((const U8*)s)[2] ) && ( 0xBF == ((const U8*)s)[3] ) ) ? 0xDF : 0 )\
+       : 0 )                                                               \
+    : ( 0xCA == ((const U8*)s)[0] ) ?                                       \
+       ( ( ( 0xBC == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xDF ) == 'N' ) ) ? 0x149 : 0 )\
+    : ( 0xCE == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0xAC == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+       : ( 0xAE == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+       : ( 0xB1 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x82 == ((const U8*)s)[3] ) ? 0x1FB6 : 0 )              \
+           : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+       : ( 0xB7 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xCD == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x82 == ((const U8*)s)[3] ) ? 0x1FC6 : 0 )              \
+           : ( ( 0xCE == ((const U8*)s)[2] ) && ( 0xB9 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+       : ( ( ( 0xB9 == ((const U8*)s)[1] ) && ( 0xCD == ((const U8*)s)[2] ) ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+    : ( 0xCF == ((const U8*)s)[0] ) ? what_MULTI_CHAR_FOLD_utf8_safe_part2(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part3(s,e) )\
+: ((e)-(s) > 3) ? what_MULTI_CHAR_FOLD_utf8_safe_part4(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part5(s,e) )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe(s,e)                                 \
+( ((e)-(s) > 5) ? what_MULTI_CHAR_FOLD_utf8_safe_part6(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part7(s,e) )
+
 /*
        MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
 
-       &regcharclass_multi_char_folds::multi_char_folds('l', 'a')
+       %regcharclass_multi_char_folds::multi_char_folds('l', 'a')
 */
 /*** GENERATED CODE ***/
 #define is_MULTI_CHAR_FOLD_latin1_safe(s,e)                                 \
     : ( ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) && ( inRANGE_helper_(U8, ((const U8*)s)[1], 'S', 'T') || inRANGE_helper_(U8, ((const U8*)s)[1], 's', 't') ) ) ? 2 : 0 )\
 : 0 )
 
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_latin1_safe(s,e)                               \
+( ((e)-(s) > 2) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ?                         \
+           ( ( ( ((const U8*)s)[2] & 0xDF ) == 'I' ) ? 0xFB03              \
+           : ( ( ((const U8*)s)[2] & 0xDF ) == 'L' ) ? 0xFB04 : 0xFB00 )   \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF                    \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05 : 0 )            \
+    : 0 )                                                                   \
+: ((e)-(s) > 1) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xDF ) == 'F' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xDF ) == 'F' ) ? 0xFB00                  \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'I' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'L' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xDF ) == 'S' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xDF ) == 'S' ) ? 0xDF                    \
+       : ( ( ((const U8*)s)[1] & 0xDF ) == 'T' ) ? 0xFB05 : 0 )            \
+    : 0 )                                                                   \
+: 0 )
+
 /*
        THREE_CHAR_FOLD: A three-character multi-char fold
 
-       &regcharclass_multi_char_folds::multi_char_folds('u', '3')
+       %regcharclass_multi_char_folds::multi_char_folds('u', '3')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_utf8_safe(s,e)                                   \
 /*
        THREE_CHAR_FOLD: A three-character multi-char fold
 
-       &regcharclass_multi_char_folds::multi_char_folds('l', '3')
+       %regcharclass_multi_char_folds::multi_char_folds('l', '3')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_latin1_safe(s,e)                                 \
 /*
        THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
 
-       &regcharclass_multi_char_folds::multi_char_folds('u', 'h')
+       %regcharclass_multi_char_folds::multi_char_folds('u', 'h')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_HEAD_utf8_safe(s,e)                              \
 /*
        THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
 
-       &regcharclass_multi_char_folds::multi_char_folds('l', 'h')
+       %regcharclass_multi_char_folds::multi_char_folds('l', 'h')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_HEAD_latin1_safe(s,e)                            \
 /*
        MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
 
-       &regcharclass_multi_char_folds::multi_char_folds('u', 'a')
+       %regcharclass_multi_char_folds::multi_char_folds('u', 'a')
 */
 /*** GENERATED CODE ***/
 #define is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e)                             \
     : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part1(s,e) )\
 : ((e)-(s) > 4) ? is_MULTI_CHAR_FOLD_utf8_safe_part2(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part3(s,e) )
 
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part0(s,e)                           \
+( ( 0x52 == ((const U8*)s)[1] ) ?                                           \
+           ( ( 0x46 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( ( 0xB8 == ((const U8*)s)[3] ) && ( 0x53 == ((const U8*)s)[4] ) ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x587 : 0 )\
+           : ( 0x63 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB8 == ((const U8*)s)[3] ) && ( 0x52 == ((const U8*)s)[4] ) ) ? ( ( 0x46 == ((const U8*)s)[5] ) ? 0xFB14\
+                       : ( 0x52 == ((const U8*)s)[5] ) ? 0xFB15            \
+                       : ( 0x54 == ((const U8*)s)[5] ) ? 0xFB17            \
+                       : ( 0x65 == ((const U8*)s)[5] ) ? 0xFB13 : 0 ) : 0 )\
+           : ( ( ( ( 0x72 == ((const U8*)s)[2] ) && ( 0xB8 == ((const U8*)s)[3] ) ) && ( 0x52 == ((const U8*)s)[4] ) ) && ( 0x65 == ((const U8*)s)[5] ) ) ? 0xFB16 : 0 )\
+       : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part1(s,e)                           \
+( ( 0xBF == ((const U8*)s)[0] ) ?                                           \
+       ( ( 0x67 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F80 : 0 )\
+           : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F81 : 0 )\
+           : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F82 : 0 )\
+           : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F83 : 0 )\
+           : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F84 : 0 )\
+           : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F85 : 0 )\
+           : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F86 : 0 )\
+           : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F87 : 0 )\
+       : ( 0x68 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F90 : 0 )\
+           : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F91 : 0 )\
+           : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F92 : 0 )\
+           : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F93 : 0 )\
+           : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F94 : 0 )\
+           : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F95 : 0 )\
+           : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F96 : 0 )\
+           : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F97 : 0 )\
+       : ( 0x6A == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA0 : 0 )\
+           : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA1 : 0 )\
+           : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA2 : 0 )\
+           : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA3 : 0 )\
+           : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA4 : 0 )\
+           : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA5 : 0 )\
+           : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA6 : 0 )\
+           : ( 0x48 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA7 : 0 )\
+           : ( 0x57 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FB2 : 0 )\
+           : ( 0x63 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FC2 : 0 )\
+           : ( ( ( 0x70 == ((const U8*)s)[2] ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FF2 : 0 )\
+       : 0 )                                                               \
+    : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part2(s,e)                           \
+( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                                 \
+           ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part3(s,e)                           \
+( ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                                 \
+       ( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( 0x8F == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0x73 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x8F == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x73 == ((const U8*)s)[3] ) ? 0x59 : 0 )                \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59                \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 )        \
+       : 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+       ( ( 0x8F == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x73 == ((const U8*)s)[2] ) ? 0x59 : 0 )                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xAB == ((const U8*)s)[0] ) ?                                       \
+       ( ( ( 0x70 == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+    : ( 0xB4 == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0x53 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+       : ( 0x55 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+       : ( 0x58 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xB1 == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x43 == ((const U8*)s)[3] ) ?                           \
+                   ( ( ( 0xB4 == ((const U8*)s)[4] ) && ( 0x68 == ((const U8*)s)[5] ) ) ? 0x1FB7 : 0x1FB6 )\
+               : 0 )                                                       \
+           : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+       : ( 0x66 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xB1 == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x43 == ((const U8*)s)[3] ) ?                           \
+                   ( ( ( 0xB4 == ((const U8*)s)[4] ) && ( 0x68 == ((const U8*)s)[5] ) ) ? 0x1FC7 : 0x1FC6 )\
+               : 0 )                                                       \
+           : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+       : ( 0x68 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x49 == ((const U8*)s)[3] ) ?                           \
+                   ( ( 0xAF == ((const U8*)s)[4] ) ?                       \
+                       ( ( 0x41 == ((const U8*)s)[5] ) ? 0x1FD2            \
+                       : ( 0x42 == ((const U8*)s)[5] ) ? 0x390 : 0 )       \
+                   : ( ( 0xB1 == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x1FD7 : 0 )\
+               : 0 )                                                       \
+           : ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+       : 0 )                                                               \
+    : ( 0xB5 == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0x42 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x62 == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+       : ( 0x46 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x49 == ((const U8*)s)[3] ) ?                           \
+                   ( ( 0xAF == ((const U8*)s)[4] ) ?                       \
+                       ( ( 0x41 == ((const U8*)s)[5] ) ? 0x1FE2            \
+                       : ( 0x42 == ((const U8*)s)[5] ) ? 0x3B0 : 0 )       \
+                   : ( ( 0xB1 == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x1FE7 : 0 )\
+               : ( 0x62 == ((const U8*)s)[3] ) ?                           \
+                   ( ( 0xAF == ((const U8*)s)[4] ) ?                       \
+                       ( ( 0x41 == ((const U8*)s)[5] ) ? 0x1F52            \
+                       : ( 0x42 == ((const U8*)s)[5] ) ? 0x1F54 : 0x1F50 ) \
+                   : ( ( 0xB1 == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x1F56 : 0x1F50 )\
+               : 0 )                                                       \
+           : ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+       : ( 0x4A == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xB1 == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x43 == ((const U8*)s)[3] ) ?                           \
+                   ( ( ( 0xB4 == ((const U8*)s)[4] ) && ( 0x68 == ((const U8*)s)[5] ) ) ? 0x1FF7 : 0x1FF6 )\
+               : 0 )                                                       \
+           : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+       : ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB4 == ((const U8*)s)[2] ) ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )\
+    : ( 0xB8 == ((const U8*)s)[0] ) ? what_MULTI_CHAR_FOLD_utf8_safe_part0(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part1(s,e) )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part4(s,e)                           \
+( ( 0x42 == ((const U8*)s)[1] ) ?                                           \
+           ( ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x62 == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+       : ( 0x46 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x62 == ((const U8*)s)[3] ) ? 0x1F50 : 0 )              \
+           : ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+       : ( 0x4A == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xB1 == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FF6 : 0 )              \
+           : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+       : ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB4 == ((const U8*)s)[2] ) ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part5(s,e)                           \
+( ( 0xBF == ((const U8*)s)[0] ) ?                                           \
+       ( ( 0x67 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F80 : 0 )\
+           : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F81 : 0 )\
+           : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F82 : 0 )\
+           : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F83 : 0 )\
+           : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F84 : 0 )\
+           : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F85 : 0 )\
+           : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F86 : 0 )\
+           : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F87 : 0 )\
+       : ( 0x68 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F90 : 0 )\
+           : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F91 : 0 )\
+           : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F92 : 0 )\
+           : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F93 : 0 )\
+           : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F94 : 0 )\
+           : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F95 : 0 )\
+           : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F96 : 0 )\
+           : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1F97 : 0 )\
+       : ( 0x6A == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA0 : 0 )\
+           : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA1 : 0 )\
+           : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA2 : 0 )\
+           : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA3 : 0 )\
+           : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA4 : 0 )\
+           : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA5 : 0 )\
+           : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA6 : 0 )\
+           : ( 0x48 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FA7 : 0 )\
+           : ( 0x57 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FB2 : 0 )\
+           : ( 0x63 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB4 == ((const U8*)s)[3] ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FC2 : 0 )\
+           : ( ( ( 0x70 == ((const U8*)s)[2] ) && ( 0xB4 == ((const U8*)s)[3] ) ) && ( 0x68 == ((const U8*)s)[4] ) ) ? 0x1FF2 : 0 )\
+       : 0 )                                                               \
+    : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part6(s,e)                           \
+( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                                 \
+       ( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+           ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
+       ( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( 0x8F == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0x73 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x8F == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x73 == ((const U8*)s)[3] ) ? 0x59 : 0 )                \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59                \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 )        \
+       : 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+       ( ( 0x8F == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x73 == ((const U8*)s)[2] ) ? 0x59 : 0 )                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xAB == ((const U8*)s)[0] ) ?                                       \
+       ( ( ( 0x70 == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+    : ( 0xB4 == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0x53 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+       : ( 0x55 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+       : ( 0x58 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xB1 == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FB6 : 0 )              \
+           : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+       : ( 0x66 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xB1 == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FC6 : 0 )              \
+           : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+       : ( ( ( 0x68 == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+    : ( 0xB5 == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0x42 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x62 == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+       : ( 0x46 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x62 == ((const U8*)s)[3] ) ? 0x1F50 : 0 )              \
+           : ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+       : ( 0x4A == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xB1 == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FF6 : 0 )              \
+           : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+       : ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB4 == ((const U8*)s)[2] ) ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )\
+    : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part7(s,e)                           \
+( ((e)-(s) > 2) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                             \
+       ( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+           ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
+       ( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( 0x8F == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0x73 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59                \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 )        \
+       : 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+       ( ( 0x8F == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x73 == ((const U8*)s)[2] ) ? 0x59 : 0 )                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( ( ( 0xAB == ((const U8*)s)[0] ) && ( 0x70 == ((const U8*)s)[1] ) ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+: ((e)-(s) > 1) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 0xFB00                  \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : 0 )                                                                   \
+: 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe(s,e)                                 \
+( ((e)-(s) > 5) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                             \
+       ( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? what_MULTI_CHAR_FOLD_utf8_safe_part2(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part3(s,e) )\
+: ((e)-(s) > 4) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                             \
+       ( ( ( 0xAB == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+           ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
+       ( ( ( 0xB0 == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( 0x8F == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0x73 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x8F == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x73 == ((const U8*)s)[3] ) ? 0x59 : 0 )                \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59                \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 )        \
+       : 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+       ( ( 0x8F == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x73 == ((const U8*)s)[2] ) ? 0x59 : 0 )                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ?                             \
+       ( ( ( 0xAF == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xAB == ((const U8*)s)[0] ) ?                                       \
+       ( ( ( 0x70 == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+    : ( 0xB4 == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0x53 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+       : ( 0x55 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+       : ( 0x58 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xB1 == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FB6 : 0 )              \
+           : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+       : ( 0x66 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xB1 == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FC6 : 0 )              \
+           : ( ( 0xB4 == ((const U8*)s)[2] ) && ( 0x68 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+       : ( ( ( 0x68 == ((const U8*)s)[1] ) && ( 0xB1 == ((const U8*)s)[2] ) ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+    : ( 0xB5 == ((const U8*)s)[0] ) ? what_MULTI_CHAR_FOLD_utf8_safe_part4(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part5(s,e) )\
+: ((e)-(s) > 3) ? what_MULTI_CHAR_FOLD_utf8_safe_part6(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part7(s,e) )
+
 /*
        MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
 
-       &regcharclass_multi_char_folds::multi_char_folds('l', 'a')
+       %regcharclass_multi_char_folds::multi_char_folds('l', 'a')
 */
 /*** GENERATED CODE ***/
 #define is_MULTI_CHAR_FOLD_latin1_safe(s,e)                                 \
     : ( ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) && ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ) ? 2 : 0 )\
 : 0 )
 
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_latin1_safe(s,e)                               \
+( ((e)-(s) > 2) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+           ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : 0 )                                                                   \
+: ((e)-(s) > 1) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 0xFB00                  \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : 0 )                                                                   \
+: 0 )
+
 /*
        THREE_CHAR_FOLD: A three-character multi-char fold
 
-       &regcharclass_multi_char_folds::multi_char_folds('u', '3')
+       %regcharclass_multi_char_folds::multi_char_folds('u', '3')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_utf8_safe(s,e)                                   \
 /*
        THREE_CHAR_FOLD: A three-character multi-char fold
 
-       &regcharclass_multi_char_folds::multi_char_folds('l', '3')
+       %regcharclass_multi_char_folds::multi_char_folds('l', '3')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_latin1_safe(s,e)                                 \
 /*
        THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
 
-       &regcharclass_multi_char_folds::multi_char_folds('u', 'h')
+       %regcharclass_multi_char_folds::multi_char_folds('u', 'h')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_HEAD_utf8_safe(s,e)                              \
 /*
        THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
 
-       &regcharclass_multi_char_folds::multi_char_folds('l', 'h')
+       %regcharclass_multi_char_folds::multi_char_folds('l', 'h')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_HEAD_latin1_safe(s,e)                            \
 /*
        MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
 
-       &regcharclass_multi_char_folds::multi_char_folds('u', 'a')
+       %regcharclass_multi_char_folds::multi_char_folds('u', 'a')
 */
 /*** GENERATED CODE ***/
 #define is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e)                             \
     : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ? is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part1(s,e) )\
 : ((e)-(s) > 4) ? is_MULTI_CHAR_FOLD_utf8_safe_part2(s,e) : is_MULTI_CHAR_FOLD_utf8_safe_part3(s,e) )
 
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part0(s,e)                           \
+( ( 0x52 == ((const U8*)s)[1] ) ?                                           \
+           ( ( 0x46 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( ( 0xB7 == ((const U8*)s)[3] ) && ( 0x53 == ((const U8*)s)[4] ) ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x587 : 0 )\
+           : ( 0x62 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB7 == ((const U8*)s)[3] ) && ( 0x52 == ((const U8*)s)[4] ) ) ? ( ( 0x46 == ((const U8*)s)[5] ) ? 0xFB14\
+                       : ( 0x52 == ((const U8*)s)[5] ) ? 0xFB15            \
+                       : ( 0x54 == ((const U8*)s)[5] ) ? 0xFB17            \
+                       : ( 0x64 == ((const U8*)s)[5] ) ? 0xFB13 : 0 ) : 0 )\
+           : ( ( ( ( 0x71 == ((const U8*)s)[2] ) && ( 0xB7 == ((const U8*)s)[3] ) ) && ( 0x52 == ((const U8*)s)[4] ) ) && ( 0x64 == ((const U8*)s)[5] ) ) ? 0xFB16 : 0 )\
+       : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part1(s,e)                           \
+( ( 0xBF == ((const U8*)s)[0] ) ?                                           \
+       ( ( 0x66 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F80 : 0 )\
+           : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F81 : 0 )\
+           : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F82 : 0 )\
+           : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F83 : 0 )\
+           : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F84 : 0 )\
+           : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F85 : 0 )\
+           : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F86 : 0 )\
+           : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F87 : 0 )\
+       : ( 0x67 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F90 : 0 )\
+           : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F91 : 0 )\
+           : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F92 : 0 )\
+           : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F93 : 0 )\
+           : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F94 : 0 )\
+           : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F95 : 0 )\
+           : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F96 : 0 )\
+           : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F97 : 0 )\
+       : ( 0x69 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA0 : 0 )\
+           : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA1 : 0 )\
+           : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA2 : 0 )\
+           : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA3 : 0 )\
+           : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA4 : 0 )\
+           : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA5 : 0 )\
+           : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA6 : 0 )\
+           : ( 0x48 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA7 : 0 )\
+           : ( 0x57 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FB2 : 0 )\
+           : ( 0x62 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FC2 : 0 )\
+           : ( ( ( 0x6A == ((const U8*)s)[2] ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FF2 : 0 )\
+       : 0 )                                                               \
+    : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part2(s,e)                           \
+( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                                 \
+           ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part3(s,e)                           \
+( ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                                 \
+       ( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( 0x8E == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0x72 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x8E == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x72 == ((const U8*)s)[3] ) ? 0x59 : 0 )                \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59                \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 )        \
+       : 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+       ( ( 0x8E == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x72 == ((const U8*)s)[2] ) ? 0x59 : 0 )                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xAA == ((const U8*)s)[0] ) ?                                       \
+       ( ( ( 0x6A == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+    : ( 0xB3 == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0x53 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+       : ( 0x55 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+       : ( 0x58 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x43 == ((const U8*)s)[3] ) ?                           \
+                   ( ( ( 0xB3 == ((const U8*)s)[4] ) && ( 0x67 == ((const U8*)s)[5] ) ) ? 0x1FB7 : 0x1FB6 )\
+               : 0 )                                                       \
+           : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+       : ( 0x65 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x43 == ((const U8*)s)[3] ) ?                           \
+                   ( ( ( 0xB3 == ((const U8*)s)[4] ) && ( 0x67 == ((const U8*)s)[5] ) ) ? 0x1FC7 : 0x1FC6 )\
+               : 0 )                                                       \
+           : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+       : ( 0x67 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xAD == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x49 == ((const U8*)s)[3] ) ?                           \
+                   ( ( 0xAD == ((const U8*)s)[4] ) ?                       \
+                       ( ( 0x41 == ((const U8*)s)[5] ) ? 0x1FD2            \
+                       : ( 0x42 == ((const U8*)s)[5] ) ? 0x390 : 0 )       \
+                   : ( ( 0xAF == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x1FD7 : 0 )\
+               : 0 )                                                       \
+           : ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+       : 0 )                                                               \
+    : ( 0xB4 == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0x42 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xAD == ((const U8*)s)[2] ) && ( 0x5F == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+       : ( 0x46 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xAD == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x49 == ((const U8*)s)[3] ) ?                           \
+                   ( ( 0xAD == ((const U8*)s)[4] ) ?                       \
+                       ( ( 0x41 == ((const U8*)s)[5] ) ? 0x1FE2            \
+                       : ( 0x42 == ((const U8*)s)[5] ) ? 0x3B0 : 0 )       \
+                   : ( ( 0xAF == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x1FE7 : 0 )\
+               : ( 0x5F == ((const U8*)s)[3] ) ?                           \
+                   ( ( 0xAD == ((const U8*)s)[4] ) ?                       \
+                       ( ( 0x41 == ((const U8*)s)[5] ) ? 0x1F52            \
+                       : ( 0x42 == ((const U8*)s)[5] ) ? 0x1F54 : 0x1F50 ) \
+                   : ( ( 0xAF == ((const U8*)s)[4] ) && ( 0x43 == ((const U8*)s)[5] ) ) ? 0x1F56 : 0x1F50 )\
+               : 0 )                                                       \
+           : ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+       : ( 0x4A == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x43 == ((const U8*)s)[3] ) ?                           \
+                   ( ( ( 0xB3 == ((const U8*)s)[4] ) && ( 0x67 == ((const U8*)s)[5] ) ) ? 0x1FF7 : 0x1FF6 )\
+               : 0 )                                                       \
+           : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+       : ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB3 == ((const U8*)s)[2] ) ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )\
+    : ( 0xB7 == ((const U8*)s)[0] ) ? what_MULTI_CHAR_FOLD_utf8_safe_part0(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part1(s,e) )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part4(s,e)                           \
+( ( 0x42 == ((const U8*)s)[1] ) ?                                           \
+           ( ( ( 0xAD == ((const U8*)s)[2] ) && ( 0x5F == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+       : ( 0x46 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xAD == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x5F == ((const U8*)s)[3] ) ? 0x1F50 : 0 )              \
+           : ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+       : ( 0x4A == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FF6 : 0 )              \
+           : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+       : ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB3 == ((const U8*)s)[2] ) ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part5(s,e)                           \
+( ( 0xBF == ((const U8*)s)[0] ) ?                                           \
+       ( ( 0x66 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F80 : 0 )\
+           : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F81 : 0 )\
+           : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F82 : 0 )\
+           : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F83 : 0 )\
+           : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F84 : 0 )\
+           : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F85 : 0 )\
+           : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F86 : 0 )\
+           : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F87 : 0 )\
+       : ( 0x67 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F90 : 0 )\
+           : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F91 : 0 )\
+           : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F92 : 0 )\
+           : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F93 : 0 )\
+           : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F94 : 0 )\
+           : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F95 : 0 )\
+           : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F96 : 0 )\
+           : ( ( ( 0x48 == ((const U8*)s)[2] ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1F97 : 0 )\
+       : ( 0x69 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x41 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA0 : 0 )\
+           : ( 0x42 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA1 : 0 )\
+           : ( 0x43 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA2 : 0 )\
+           : ( 0x44 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA3 : 0 )\
+           : ( 0x45 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA4 : 0 )\
+           : ( 0x46 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA5 : 0 )\
+           : ( 0x47 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA6 : 0 )\
+           : ( 0x48 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FA7 : 0 )\
+           : ( 0x57 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FB2 : 0 )\
+           : ( 0x62 == ((const U8*)s)[2] ) ?                               \
+               ( ( ( 0xB3 == ((const U8*)s)[3] ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FC2 : 0 )\
+           : ( ( ( 0x6A == ((const U8*)s)[2] ) && ( 0xB3 == ((const U8*)s)[3] ) ) && ( 0x67 == ((const U8*)s)[4] ) ) ? 0x1FF2 : 0 )\
+       : 0 )                                                               \
+    : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part6(s,e)                           \
+( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                                 \
+       ( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+           ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
+       ( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( 0x8E == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0x72 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x8E == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x72 == ((const U8*)s)[3] ) ? 0x59 : 0 )                \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59                \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 )        \
+       : 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+       ( ( 0x8E == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x72 == ((const U8*)s)[2] ) ? 0x59 : 0 )                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xAA == ((const U8*)s)[0] ) ?                                       \
+       ( ( ( 0x6A == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+    : ( 0xB3 == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0x53 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+       : ( 0x55 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+       : ( 0x58 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FB6 : 0 )              \
+           : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+       : ( 0x65 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FC6 : 0 )              \
+           : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+       : ( ( ( 0x67 == ((const U8*)s)[1] ) && ( 0xAF == ((const U8*)s)[2] ) ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+    : ( 0xB4 == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0x42 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xAD == ((const U8*)s)[2] ) && ( 0x5F == ((const U8*)s)[3] ) ) ? 0x1FE4 : 0 )\
+       : ( 0x46 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xAD == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x5F == ((const U8*)s)[3] ) ? 0x1F50 : 0 )              \
+           : ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FE6 : 0 )\
+       : ( 0x4A == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FF6 : 0 )              \
+           : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FF3 : 0 )\
+       : ( ( ( 0x55 == ((const U8*)s)[1] ) && ( 0xB3 == ((const U8*)s)[2] ) ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FF4 : 0 )\
+    : 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe_part7(s,e)                           \
+( ((e)-(s) > 2) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                             \
+       ( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+           ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
+       ( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( 0x8E == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0x72 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59                \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 )        \
+       : 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+       ( ( 0x8E == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x72 == ((const U8*)s)[2] ) ? 0x59 : 0 )                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( ( ( 0xAA == ((const U8*)s)[0] ) && ( 0x6A == ((const U8*)s)[1] ) ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+: ((e)-(s) > 1) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 0xFB00                  \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : 0 )                                                                   \
+: 0 )
+
+
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_utf8_safe(s,e)                                 \
+( ((e)-(s) > 5) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                             \
+       ( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ? what_MULTI_CHAR_FOLD_utf8_safe_part2(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part3(s,e) )\
+: ((e)-(s) > 4) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'a' ) ?                             \
+       ( ( ( 0xAA == ((const U8*)s)[1] ) && ( 0x71 == ((const U8*)s)[2] ) ) ? 0x1E9A : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+           ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'h' ) ?                             \
+       ( ( ( 0xAE == ((const U8*)s)[1] ) && ( 0x58 == ((const U8*)s)[2] ) ) ? 0x1E96 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'i' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x48 == ((const U8*)s)[2] ) ) ? 0x130 : 0 )\
+    : ( 0x8E == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0x72 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x8E == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x72 == ((const U8*)s)[3] ) ? 0x59 : 0 )                \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 's' ) ? 0x59                \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 't' ) ? 0xFB05 : 0 )        \
+       : 0 )                                                               \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'j' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x53 == ((const U8*)s)[2] ) ) ? 0x1F0 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+       ( ( 0x8E == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0x72 == ((const U8*)s)[2] ) ? 0x59 : 0 )                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 't' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x49 == ((const U8*)s)[2] ) ) ? 0x1E97 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'w' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E98 : 0 )\
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 'y' ) ?                             \
+       ( ( ( 0xAD == ((const U8*)s)[1] ) && ( 0x51 == ((const U8*)s)[2] ) ) ? 0x1E99 : 0 )\
+    : ( 0xAA == ((const U8*)s)[0] ) ?                                       \
+       ( ( ( 0x6A == ((const U8*)s)[1] ) && ( ( ((const U8*)s)[2] & 0xBF ) == 'n' ) ) ? 0x149 : 0 )\
+    : ( 0xB3 == ((const U8*)s)[0] ) ?                                       \
+       ( ( 0x53 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FB4 : 0 )\
+       : ( 0x55 == ((const U8*)s)[1] ) ?                                   \
+           ( ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FC4 : 0 )\
+       : ( 0x58 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FB6 : 0 )              \
+           : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FB3 : 0 )\
+       : ( 0x65 == ((const U8*)s)[1] ) ?                                   \
+           ( ( 0xAF == ((const U8*)s)[2] ) ?                               \
+               ( ( 0x43 == ((const U8*)s)[3] ) ? 0x1FC6 : 0 )              \
+           : ( ( 0xB3 == ((const U8*)s)[2] ) && ( 0x67 == ((const U8*)s)[3] ) ) ? 0x1FC3 : 0 )\
+       : ( ( ( 0x67 == ((const U8*)s)[1] ) && ( 0xAF == ((const U8*)s)[2] ) ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 0x1FD6 : 0 )\
+    : ( 0xB4 == ((const U8*)s)[0] ) ? what_MULTI_CHAR_FOLD_utf8_safe_part4(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part5(s,e) )\
+: ((e)-(s) > 3) ? what_MULTI_CHAR_FOLD_utf8_safe_part6(s,e) : what_MULTI_CHAR_FOLD_utf8_safe_part7(s,e) )
+
 /*
        MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
 
-       &regcharclass_multi_char_folds::multi_char_folds('l', 'a')
+       %regcharclass_multi_char_folds::multi_char_folds('l', 'a')
 */
 /*** GENERATED CODE ***/
 #define is_MULTI_CHAR_FOLD_latin1_safe(s,e)                                 \
     : ( ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) && ( ( ((const U8*)s)[1] & 0xBE ) == 's' ) ) ? 2 : 0 )\
 : 0 )
 
+/*** GENERATED CODE ***/
+#define what_MULTI_CHAR_FOLD_latin1_safe(s,e)                               \
+( ((e)-(s) > 2) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ?                         \
+           ( ( ( ((const U8*)s)[2] & 0xBF ) == 'i' ) ? 0xFB03              \
+           : ( ( ((const U8*)s)[2] & 0xBF ) == 'l' ) ? 0xFB04 : 0xFB00 )   \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : 0 )                                                                   \
+: ((e)-(s) > 1) ?                                                           \
+    ( ( ( ((const U8*)s)[0] & 0xBF ) == 'f' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xBF ) == 'f' ) ? 0xFB00                  \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'i' ) ? 0xFB01                  \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 'l' ) ? 0xFB02 : 0 )            \
+    : ( ( ((const U8*)s)[0] & 0xBF ) == 's' ) ?                             \
+       ( ( ( ((const U8*)s)[1] & 0xBF ) == 's' ) ? 0x59                    \
+       : ( ( ((const U8*)s)[1] & 0xBF ) == 't' ) ? 0xFB05 : 0 )            \
+    : 0 )                                                                   \
+: 0 )
+
 /*
        THREE_CHAR_FOLD: A three-character multi-char fold
 
-       &regcharclass_multi_char_folds::multi_char_folds('u', '3')
+       %regcharclass_multi_char_folds::multi_char_folds('u', '3')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_utf8_safe(s,e)                                   \
 /*
        THREE_CHAR_FOLD: A three-character multi-char fold
 
-       &regcharclass_multi_char_folds::multi_char_folds('l', '3')
+       %regcharclass_multi_char_folds::multi_char_folds('l', '3')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_latin1_safe(s,e)                                 \
 /*
        THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
 
-       &regcharclass_multi_char_folds::multi_char_folds('u', 'h')
+       %regcharclass_multi_char_folds::multi_char_folds('u', 'h')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_HEAD_utf8_safe(s,e)                              \
 /*
        THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
 
-       &regcharclass_multi_char_folds::multi_char_folds('l', 'h')
+       %regcharclass_multi_char_folds::multi_char_folds('l', 'h')
 */
 /*** GENERATED CODE ***/
 #define is_THREE_CHAR_FOLD_HEAD_latin1_safe(s,e)                            \
  * ee0dd174fd5b158d82dfea95d7d822ca0bfcd490182669353dca3ab39a8ee807 lib/unicore/mktables
  * 50b85a67451145545a65cea370dab8d3444fbfe07e9c34cef560c5b7da9d3eef lib/unicore/version
  * 2680b9254eb236c5c090f11b149605043e8c8433661b96efc4a42fb4709342a5 regen/charset_translations.pl
- * e3e72d7df46550e894d860fec08cc81ca9e1d2205a81fb48733e74b8853281be regen/regcharclass.pl
- * c0a5e4cb2b9ffad78691938e122c1310bbc98aca2364af243e5c6b2ec0f59dc3 regen/regcharclass_multi_char_folds.pl
+ * f0ac417314b8da8e05d386ca3d0d8074e38ecd9dc77a7d966aa48ec4ec247e2a regen/regcharclass.pl
+ * b2f896452d2b30da3e04800f478c60c1fd0b03d6b668689b020f1e3cf1f1cdd9 regen/regcharclass_multi_char_folds.pl
  * ex: set ro: */
index 8d97a79..5fd8e25 100755 (executable)
@@ -366,6 +366,7 @@ my %n2a;    # Inversion of a2n, for each character set
 sub new {
     my $class= shift;
     my %opt= @_;
+    my %hash_return;
     for ( qw(op txt) ) {
         die "in " . __PACKAGE__ . " constructor '$_;' is a mandatory field"
           if !exists $opt{$_};
@@ -437,19 +438,31 @@ sub new {
             die "eval '$1' failed: $@" if $@;
             push @{$opt{txt}}, @results;
             next;
+        } elsif ($str =~ / ^ % \s* ( .* ) /x) { # user-furnished sub() call
+            %hash_return = eval "$1";
+            die "eval '$1' failed: $@" if $@;
+            push @{$opt{txt}}, keys %hash_return;
+            die "Only one multi character expansion currently allowed per rule"
+                                                        if  $self->{multi_maps};
+            next;
         } else {
             die "Unparsable line: $txt\n";
         }
         my ( $cp, $cp_high, $low, $latin1, $utf8 )
                                         = __uni_latin1($charset, $a2n, $str );
+        my $from;
+        if (defined $hash_return{"\"$str\""}) {
+            $from = $hash_return{"\"$str\""};
+            $from = $a2n->[$from] if $from < 256;
+        }
         my $UTF8= $low   || $utf8;
         my $LATIN1= $low || $latin1;
         my $high = (scalar grep { $_ < 256 } @$cp) ? 0 : $utf8;
         #die Dumper($txt,$cp,$low,$latin1,$utf8)
         #    if $txt=~/NEL/ or $utf8 and @$utf8>3;
 
-        @{ $self->{strs}{$str} }{qw( str txt low utf8 latin1 high cp cp_high UTF8 LATIN1 )}=
-          ( $str, $txt, $low, $utf8, $latin1, $high, $cp, $cp_high, $UTF8, $LATIN1 );
+        @{ $self->{strs}{$str} }{qw( str txt low utf8 latin1 high cp cp_high UTF8 LATIN1 from )}=
+          ( $str, $txt, $low, $utf8, $latin1, $high, $cp, $cp_high, $UTF8, $LATIN1, $from );
         my $rec= $self->{strs}{$str};
         foreach my $key ( qw(low utf8 latin1 high cp cp_high UTF8 LATIN1) ) {
             $self->{size}{$key}{ 0 + @{ $self->{strs}{$str}{$key} } }++
@@ -522,9 +535,6 @@ sub pop_count ($) {
 sub _optree {
     my ( $self, $trie, $test_type, $ret_type, $else, $depth )= @_;
     return unless defined $trie;
-    if ( $self->{has_multi} and $ret_type =~ /cp|both/ ) {
-        die "Can't do 'cp' optree from multi-codepoint strings";
-    }
     $ret_type ||= 'len';
     $else= 0  unless defined $else;
     $depth= 0 unless defined $depth;
@@ -535,13 +545,16 @@ sub _optree {
     if (exists $trie->{''} ) {
         # we can now update the "else" value, anything failing to match
         # after this point should return the value from this.
+        my $prefix = $self->{strs}{ $trie->{''} };
         if ( $ret_type eq 'cp' ) {
-            $else= $self->{strs}{ $trie->{''} }{cp}[0];
+            $else= $prefix->{from};
+            $else= $self->{strs}{ $trie->{''} }{cp}[0] unless defined $else;
             $else= $self->val_fmt($else) if $else > 9;
         } elsif ( $ret_type eq 'len' ) {
             $else= $depth;
         } elsif ( $ret_type eq 'both') {
-            $else= $self->{strs}{ $trie->{''} }{cp}[0];
+            $else= $prefix->{from};
+            $else= $self->{strs}{ $trie->{''} }{cp}[0] unless defined $else;
             $else= $self->val_fmt($else) if $else > 9;
             $else= "len=$depth, $else";
         }
@@ -1648,36 +1661,36 @@ QUOTEMETA: Meta-characters that \Q should quote
 \p{_Perl_Quotemeta}
 
 MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
-=> UTF8 :safe
-&regcharclass_multi_char_folds::multi_char_folds('u', 'a')
+=> UTF8 UTF8-cp :safe
+%regcharclass_multi_char_folds::multi_char_folds('u', 'a')
 
 MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
-=> LATIN1 : safe
-&regcharclass_multi_char_folds::multi_char_folds('l', 'a')
+=> LATIN1 LATIN1-cp : safe
+%regcharclass_multi_char_folds::multi_char_folds('l', 'a')
 
 THREE_CHAR_FOLD: A three-character multi-char fold
 => UTF8 :safe
-&regcharclass_multi_char_folds::multi_char_folds('u', '3')
+%regcharclass_multi_char_folds::multi_char_folds('u', '3')
 
 THREE_CHAR_FOLD: A three-character multi-char fold
 => LATIN1 :safe
-&regcharclass_multi_char_folds::multi_char_folds('l', '3')
+%regcharclass_multi_char_folds::multi_char_folds('l', '3')
 
 THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
 => UTF8 :safe
-&regcharclass_multi_char_folds::multi_char_folds('u', 'h')
+%regcharclass_multi_char_folds::multi_char_folds('u', 'h')
 
 THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
 => LATIN1 :safe
-&regcharclass_multi_char_folds::multi_char_folds('l', 'h')
+%regcharclass_multi_char_folds::multi_char_folds('l', 'h')
 #
 #THREE_CHAR_FOLD_NON_FINAL: The first or middle character of multi-char folds
 #=> UTF8 :safe
-#&regcharclass_multi_char_folds::multi_char_folds('u', 'fm')
+#%regcharclass_multi_char_folds::multi_char_folds('u', 'fm')
 #
 #THREE_CHAR_FOLD_NON_FINAL: The first or middle character of multi-char folds
 #=> LATIN1 :safe
-#&regcharclass_multi_char_folds::multi_char_folds('l', 'fm')
+#%regcharclass_multi_char_folds::multi_char_folds('l', 'fm')
 
 FOLDS_TO_MULTI: characters that fold to multi-char strings
 => UTF8 :fast
index a72e149..e7c6fb9 100644 (file)
@@ -42,6 +42,7 @@ sub gen_combinations ($;) {
     my @ret;
 
     # Look at each element in this level's array.
+    if (ref $fold_ref->[$i]) {
     foreach my $j (0 .. @{$fold_ref->[$i]} - 1) {
 
         # Append its representation to what we have currently
@@ -56,6 +57,7 @@ sub gen_combinations ($;) {
             push @ret, &gen_combinations($fold_ref, $new_string, $i + 1);
         }
     }
+    }
 
     return @ret;
 }
@@ -87,7 +89,7 @@ sub multi_char_folds ($$) {
     }
 
     my @folds;
-    my @output_folds;
+    my %output_folds;
 
     for my $i (0 .. @$folds_ref - 1) {
         next unless ref $folds_ref->[$i];   # Skip single-char folds
@@ -122,10 +124,8 @@ sub multi_char_folds ($$) {
         $fold = "\"$fold\"";
 
         # Skip if something else already has this fold
-        next if grep { $_ eq $fold } @output_folds;
+        next if grep { $_ eq $fold } keys %output_folds;
 
-        # If the fold is to a cased letter, replace the entry with an
-        # array which also includes its upper case.
         my $this_fold_ref = \@folds;
         for my $j (0 .. @$this_fold_ref - 1) {
             my $this_ord = $this_fold_ref->[$j];
@@ -143,8 +143,7 @@ sub multi_char_folds ($$) {
         }
 
         # Then generate all combinations of upper/lower case of the fold.
-        push @output_folds, gen_combinations($this_fold_ref);
-
+        $output_folds{$_} = $cp_ref->[$i] for gen_combinations($this_fold_ref);
     }
 
     # \x17F is the small LONG S, which folds to 's'.  Both Capital and small
@@ -167,9 +166,9 @@ sub multi_char_folds ($$) {
     #
     # No combinations of this with 's' need be added, as any of these
     # containing 's' are prohibited under /iaa.
-    push @output_folds, '"\x{17F}\x{17F}"' if $type eq 'u' && $range eq 'a';
+    $output_folds{"\"\x{17F}\x{17F}\""} = 0xDF if $type eq 'u' && $range eq 'a';
 
-    return @output_folds;
+    return %output_folds;
 }
 
 1