regen/regcharclass.pl: Generate macros for multi-char fold sequences
authorKarl Williamson <public@khwilliamson.com>
Wed, 3 Oct 2012 20:42:51 +0000 (14:42 -0600)
committerKarl Williamson <public@khwilliamson.com>
Tue, 9 Oct 2012 17:16:04 +0000 (11:16 -0600)
These will be used in future commits

regcharclass.h
regen/regcharclass.pl

index a34b339..37f57ba 100644 (file)
     ( ( ( ( 0x9D == ((U8*)s)[1] ) && ( 0x85 == ((U8*)s)[2] ) ) && ( 0xB3 <= ((U8*)s)[3] && ((U8*)s)[3] <= 0xBA ) ) ? 4 : 0 )\
 : ( ( 0xF3 == ((U8*)s)[0] ) && ( 0xA0 == ((U8*)s)[1] ) ) ? 4 : 0 )
 
+/*
+       MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
+
+       do regen/regcharclass_multi_char_folds.pl
+       &regcharclass_multi_char_folds::multi_char_folds(1)
+*/
+/*** GENERATED CODE ***/
+#define is_MULTI_CHAR_FOLD_utf8_safe(s,e)                                   \
+( ((e)-(s) > 5) ?                                                           \
+    ( ( 0x61 == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCA == ((U8*)s)[1] ) && ( 0xBE == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x66 == ((U8*)s)[0] ) ?                                             \
+       ( ( 0x66 == ((U8*)s)[1] ) ?                                         \
+           ( ( 0x69 == ((U8*)s)[2] || 0x6C == ((U8*)s)[2] ) ? 3 : 2 )      \
+       : ( 0x69 == ((U8*)s)[1] || 0x6C == ((U8*)s)[1] ) ? 2 : 0 )          \
+    : ( 0x68 == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0xB1 == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x69 == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0x87 == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x6A == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0x8C == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x73 == ((U8*)s)[0] ) ?                                             \
+       ( ( 0x73 == ((U8*)s)[1] || 0x74 == ((U8*)s)[1] ) ? 2 : 0 )          \
+    : ( 0x74 == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0x88 == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x77 == ((U8*)s)[0] || 0x79 == ((U8*)s)[0] ) ?                      \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0x8A == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0xCA == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xBC == ((U8*)s)[1] ) && ( 0x6E == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0xCE == ((U8*)s)[0] ) ?                                             \
+       ( ( ( ((U8*)s)[1] & 0xFD ) == 0xAC ) ?                              \
+           ( ( ( 0xCE == ((U8*)s)[2] ) && ( 0xB9 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( 0xB1 == ((U8*)s)[1] || 0xB7 == ((U8*)s)[1] ) ?                  \
+           ( ( 0xCD == ((U8*)s)[2] ) ?                                     \
+               ( ( 0x82 == ((U8*)s)[3] ) ?                                 \
+                   ( ( ( 0xCE == ((U8*)s)[4] ) && ( 0xB9 == ((U8*)s)[5] ) ) ? 6 : 4 )\
+               : 0 )                                                       \
+           : ( ( 0xCE == ((U8*)s)[2] ) && ( 0xB9 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( 0xB9 == ((U8*)s)[1] ) ?                                         \
+           ( ( 0xCC == ((U8*)s)[2] ) ?                                     \
+               ( ( 0x88 == ((U8*)s)[3] ) ?                                 \
+                   ( ( 0xCC == ((U8*)s)[4] ) ?                             \
+                       ( ( ( ((U8*)s)[5] & 0xFE ) == 0x80 ) ? 6 : 0 )      \
+                   : ( ( 0xCD == ((U8*)s)[4] ) && ( 0x82 == ((U8*)s)[5] ) ) ? 6 : 0 )\
+               : 0 )                                                       \
+           : ( ( 0xCD == ((U8*)s)[2] ) && ( 0x82 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : 0 )                                                               \
+    : ( 0xCF == ((U8*)s)[0] ) ?                                             \
+       ( ( 0x81 == ((U8*)s)[1] ) ?                                         \
+           ( ( ( 0xCC == ((U8*)s)[2] ) && ( 0x93 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( 0x85 == ((U8*)s)[1] ) ?                                         \
+           ( ( 0xCC == ((U8*)s)[2] ) ?                                     \
+               ( ( 0x88 == ((U8*)s)[3] ) ?                                 \
+                   ( ( 0xCC == ((U8*)s)[4] ) ?                             \
+                       ( ( ( ((U8*)s)[5] & 0xFE ) == 0x80 ) ? 6 : 0 )      \
+                   : ( ( 0xCD == ((U8*)s)[4] ) && ( 0x82 == ((U8*)s)[5] ) ) ? 6 : 0 )\
+               : ( 0x93 == ((U8*)s)[3] ) ?                                 \
+                   ( ( 0xCC == ((U8*)s)[4] ) ?                             \
+                       ( ( ( ((U8*)s)[5] & 0xFE ) == 0x80 ) ? 6 : 4 )      \
+                   : ( ( 0xCD == ((U8*)s)[4] ) && ( 0x82 == ((U8*)s)[5] ) ) ? 6 : 4 )\
+               : 0 )                                                       \
+           : ( ( 0xCD == ((U8*)s)[2] ) && ( 0x82 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( 0x89 == ((U8*)s)[1] ) ?                                         \
+           ( ( 0xCD == ((U8*)s)[2] ) ?                                     \
+               ( ( 0x82 == ((U8*)s)[3] ) ?                                 \
+                   ( ( ( 0xCE == ((U8*)s)[4] ) && ( 0xB9 == ((U8*)s)[5] ) ) ? 6 : 4 )\
+               : 0 )                                                       \
+           : ( ( 0xCE == ((U8*)s)[2] ) && ( 0xB9 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( ( ( 0x8E == ((U8*)s)[1] ) && ( 0xCE == ((U8*)s)[2] ) ) && ( 0xB9 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+    : ( 0xD5 == ((U8*)s)[0] ) ?                                             \
+       ( ( 0xA5 == ((U8*)s)[1] ) ?                                         \
+           ( ( ( 0xD6 == ((U8*)s)[2] ) && ( 0x82 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( 0xB4 == ((U8*)s)[1] ) ?                                         \
+           ( ( ( 0xD5 == ((U8*)s)[2] ) && ( 0xA5 == ((U8*)s)[3] || 0xAB == ((U8*)s)[3] || 0xAD == ((U8*)s)[3] || 0xB6 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( ( ( 0xBE == ((U8*)s)[1] ) && ( 0xD5 == ((U8*)s)[2] ) ) && ( 0xB6 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+    : ( 0xE1 == ((U8*)s)[0] ) ?                                             \
+       ( ( 0xBC == ((U8*)s)[1] ) ?                                         \
+           ( ( ( ( ( ((U8*)s)[2] & 0xD8 ) == 0x80 ) && ( 0xCE == ((U8*)s)[3] ) ) && ( 0xB9 == ((U8*)s)[4] ) ) ? 5 : 0 )\
+       : ( ( ( ( 0xBD == ((U8*)s)[1] ) && ( ( ((U8*)s)[2] & 0xF8 ) == 0xA0 || 0xB0 == ((U8*)s)[2] || 0xB4 == ((U8*)s)[2] || 0xBC == ((U8*)s)[2] ) ) && ( 0xCE == ((U8*)s)[3] ) ) && ( 0xB9 == ((U8*)s)[4] ) ) ? 5 : 0 )\
+    : 0 )                                                                   \
+: ((e)-(s) > 4) ?                                                           \
+    ( ( 0x61 == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCA == ((U8*)s)[1] ) && ( 0xBE == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x66 == ((U8*)s)[0] ) ?                                             \
+       ( ( 0x66 == ((U8*)s)[1] ) ?                                         \
+           ( ( 0x69 == ((U8*)s)[2] || 0x6C == ((U8*)s)[2] ) ? 3 : 2 )      \
+       : ( 0x69 == ((U8*)s)[1] || 0x6C == ((U8*)s)[1] ) ? 2 : 0 )          \
+    : ( 0x68 == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0xB1 == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x69 == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0x87 == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x6A == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0x8C == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x73 == ((U8*)s)[0] ) ?                                             \
+       ( ( 0x73 == ((U8*)s)[1] || 0x74 == ((U8*)s)[1] ) ? 2 : 0 )          \
+    : ( 0x74 == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0x88 == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x77 == ((U8*)s)[0] || 0x79 == ((U8*)s)[0] ) ?                      \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0x8A == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0xCA == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xBC == ((U8*)s)[1] ) && ( 0x6E == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0xCE == ((U8*)s)[0] ) ?                                             \
+       ( ( ( ((U8*)s)[1] & 0xFD ) == 0xAC ) ?                              \
+           ( ( ( 0xCE == ((U8*)s)[2] ) && ( 0xB9 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( 0xB1 == ((U8*)s)[1] || 0xB7 == ((U8*)s)[1] ) ?                  \
+           ( ( 0xCD == ((U8*)s)[2] ) ?                                     \
+               ( ( 0x82 == ((U8*)s)[3] ) ? 4 : 0 )                         \
+           : ( ( 0xCE == ((U8*)s)[2] ) && ( 0xB9 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( ( ( 0xB9 == ((U8*)s)[1] ) && ( 0xCD == ((U8*)s)[2] ) ) && ( 0x82 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+    : ( 0xCF == ((U8*)s)[0] ) ?                                             \
+       ( ( 0x81 == ((U8*)s)[1] ) ?                                         \
+           ( ( ( 0xCC == ((U8*)s)[2] ) && ( 0x93 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( 0x85 == ((U8*)s)[1] ) ?                                         \
+           ( ( 0xCC == ((U8*)s)[2] ) ?                                     \
+               ( ( 0x93 == ((U8*)s)[3] ) ? 4 : 0 )                         \
+           : ( ( 0xCD == ((U8*)s)[2] ) && ( 0x82 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( 0x89 == ((U8*)s)[1] ) ?                                         \
+           ( ( 0xCD == ((U8*)s)[2] ) ?                                     \
+               ( ( 0x82 == ((U8*)s)[3] ) ? 4 : 0 )                         \
+           : ( ( 0xCE == ((U8*)s)[2] ) && ( 0xB9 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( ( ( 0x8E == ((U8*)s)[1] ) && ( 0xCE == ((U8*)s)[2] ) ) && ( 0xB9 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+    : ( 0xD5 == ((U8*)s)[0] ) ?                                             \
+       ( ( 0xA5 == ((U8*)s)[1] ) ?                                         \
+           ( ( ( 0xD6 == ((U8*)s)[2] ) && ( 0x82 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( 0xB4 == ((U8*)s)[1] ) ?                                         \
+           ( ( ( 0xD5 == ((U8*)s)[2] ) && ( 0xA5 == ((U8*)s)[3] || 0xAB == ((U8*)s)[3] || 0xAD == ((U8*)s)[3] || 0xB6 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( ( ( 0xBE == ((U8*)s)[1] ) && ( 0xD5 == ((U8*)s)[2] ) ) && ( 0xB6 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+    : ( 0xE1 == ((U8*)s)[0] ) ?                                             \
+       ( ( 0xBC == ((U8*)s)[1] ) ?                                         \
+           ( ( ( ( ( ((U8*)s)[2] & 0xD8 ) == 0x80 ) && ( 0xCE == ((U8*)s)[3] ) ) && ( 0xB9 == ((U8*)s)[4] ) ) ? 5 : 0 )\
+       : ( ( ( ( 0xBD == ((U8*)s)[1] ) && ( ( ((U8*)s)[2] & 0xF8 ) == 0xA0 || 0xB0 == ((U8*)s)[2] || 0xB4 == ((U8*)s)[2] || 0xBC == ((U8*)s)[2] ) ) && ( 0xCE == ((U8*)s)[3] ) ) && ( 0xB9 == ((U8*)s)[4] ) ) ? 5 : 0 )\
+    : 0 )                                                                   \
+: ((e)-(s) > 3) ?                                                           \
+    ( ( 0x61 == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCA == ((U8*)s)[1] ) && ( 0xBE == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x66 == ((U8*)s)[0] ) ?                                             \
+       ( ( 0x66 == ((U8*)s)[1] ) ?                                         \
+           ( ( 0x69 == ((U8*)s)[2] || 0x6C == ((U8*)s)[2] ) ? 3 : 2 )      \
+       : ( 0x69 == ((U8*)s)[1] || 0x6C == ((U8*)s)[1] ) ? 2 : 0 )          \
+    : ( 0x68 == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0xB1 == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x69 == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0x87 == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x6A == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0x8C == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x73 == ((U8*)s)[0] ) ?                                             \
+       ( ( 0x73 == ((U8*)s)[1] || 0x74 == ((U8*)s)[1] ) ? 2 : 0 )          \
+    : ( 0x74 == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0x88 == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x77 == ((U8*)s)[0] || 0x79 == ((U8*)s)[0] ) ?                      \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0x8A == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0xCA == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xBC == ((U8*)s)[1] ) && ( 0x6E == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0xCE == ((U8*)s)[0] ) ?                                             \
+       ( ( ( ((U8*)s)[1] & 0xFD ) == 0xAC ) ?                              \
+           ( ( ( 0xCE == ((U8*)s)[2] ) && ( 0xB9 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( 0xB1 == ((U8*)s)[1] || 0xB7 == ((U8*)s)[1] ) ?                  \
+           ( ( 0xCD == ((U8*)s)[2] ) ?                                     \
+               ( ( 0x82 == ((U8*)s)[3] ) ? 4 : 0 )                         \
+           : ( ( 0xCE == ((U8*)s)[2] ) && ( 0xB9 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( ( ( 0xB9 == ((U8*)s)[1] ) && ( 0xCD == ((U8*)s)[2] ) ) && ( 0x82 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+    : ( 0xCF == ((U8*)s)[0] ) ?                                             \
+       ( ( 0x81 == ((U8*)s)[1] ) ?                                         \
+           ( ( ( 0xCC == ((U8*)s)[2] ) && ( 0x93 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( 0x85 == ((U8*)s)[1] ) ?                                         \
+           ( ( 0xCC == ((U8*)s)[2] ) ?                                     \
+               ( ( 0x93 == ((U8*)s)[3] ) ? 4 : 0 )                         \
+           : ( ( 0xCD == ((U8*)s)[2] ) && ( 0x82 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( 0x89 == ((U8*)s)[1] ) ?                                         \
+           ( ( 0xCD == ((U8*)s)[2] ) ?                                     \
+               ( ( 0x82 == ((U8*)s)[3] ) ? 4 : 0 )                         \
+           : ( ( 0xCE == ((U8*)s)[2] ) && ( 0xB9 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( ( ( 0x8E == ((U8*)s)[1] ) && ( 0xCE == ((U8*)s)[2] ) ) && ( 0xB9 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+    : ( 0xD5 == ((U8*)s)[0] ) ?                                             \
+       ( ( 0xA5 == ((U8*)s)[1] ) ?                                         \
+           ( ( ( 0xD6 == ((U8*)s)[2] ) && ( 0x82 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( 0xB4 == ((U8*)s)[1] ) ?                                         \
+           ( ( ( 0xD5 == ((U8*)s)[2] ) && ( 0xA5 == ((U8*)s)[3] || 0xAB == ((U8*)s)[3] || 0xAD == ((U8*)s)[3] || 0xB6 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+       : ( ( ( 0xBE == ((U8*)s)[1] ) && ( 0xD5 == ((U8*)s)[2] ) ) && ( 0xB6 == ((U8*)s)[3] ) ) ? 4 : 0 )\
+    : 0 )                                                                   \
+: ((e)-(s) > 2) ?                                                           \
+    ( ( 0x61 == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCA == ((U8*)s)[1] ) && ( 0xBE == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x66 == ((U8*)s)[0] ) ?                                             \
+       ( ( 0x66 == ((U8*)s)[1] ) ?                                         \
+           ( ( 0x69 == ((U8*)s)[2] || 0x6C == ((U8*)s)[2] ) ? 3 : 2 )      \
+       : ( 0x69 == ((U8*)s)[1] || 0x6C == ((U8*)s)[1] ) ? 2 : 0 )          \
+    : ( 0x68 == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0xB1 == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x69 == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0x87 == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x6A == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0x8C == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x73 == ((U8*)s)[0] ) ?                                             \
+       ( ( 0x73 == ((U8*)s)[1] || 0x74 == ((U8*)s)[1] ) ? 2 : 0 )          \
+    : ( 0x74 == ((U8*)s)[0] ) ?                                             \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0x88 == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( 0x77 == ((U8*)s)[0] || 0x79 == ((U8*)s)[0] ) ?                      \
+       ( ( ( 0xCC == ((U8*)s)[1] ) && ( 0x8A == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( ( ( 0xCA == ((U8*)s)[0] ) && ( 0xBC == ((U8*)s)[1] ) ) && ( 0x6E == ((U8*)s)[2] ) ) ? 3 : 0 )\
+: ((e)-(s) > 1) ?                                                           \
+    ( ( 0x66 == ((U8*)s)[0] ) ?                                             \
+       ( ( 0x66 == ((U8*)s)[1] || 0x69 == ((U8*)s)[1] || 0x6C == ((U8*)s)[1] ) ? 2 : 0 )\
+    : ( ( 0x73 == ((U8*)s)[0] ) && ( 0x73 == ((U8*)s)[1] || 0x74 == ((U8*)s)[1] ) ) ? 2 : 0 )\
+: 0 )
+
+/*
+       MULTI_CHAR_FOLD: multi-char ascii strings that are folded to by a single character
+
+       &regcharclass_multi_char_folds::multi_char_folds(0)
+*/
+/*** GENERATED CODE ***/
+#define is_MULTI_CHAR_FOLD_low_safe(s,e)                                    \
+( ((e)-(s) > 2) ?                                                           \
+    ( ( ( ((U8*)s)[0] & 0xDF ) == 0x46 ) ?                                  \
+       ( ( ( ((U8*)s)[1] & 0xDF ) == 0x46 ) ?                              \
+           ( ( 0x49 == ((U8*)s)[2] || 0x4C == ((U8*)s)[2] || 0x69 == ((U8*)s)[2] || 0x6C == ((U8*)s)[2] ) ? 3 : 2 )\
+       : ( 0x49 == ((U8*)s)[1] || 0x4C == ((U8*)s)[1] || 0x69 == ((U8*)s)[1] || 0x6C == ((U8*)s)[1] ) ? 2 : 0 )\
+    : ( ( ( ((U8*)s)[0] & 0xDF ) == 0x53 ) && ( ( 0x53 == ((U8*)s)[1] || 0x54 == ((U8*)s)[1] ) || ( 0x73 == ((U8*)s)[1] || 0x74 == ((U8*)s)[1] ) ) ) ? 2 : 0 )\
+: ((e)-(s) > 1) ?                                                           \
+    ( ( ( ((U8*)s)[0] & 0xDF ) == 0x46 ) ?                                  \
+       ( ( 0x46 == ((U8*)s)[1] || 0x49 == ((U8*)s)[1] || 0x4C == ((U8*)s)[1] || 0x66 == ((U8*)s)[1] || 0x69 == ((U8*)s)[1] || 0x6C == ((U8*)s)[1] ) ? 2 : 0 )\
+    : ( ( ( ((U8*)s)[0] & 0xDF ) == 0x53 ) && ( ( 0x53 == ((U8*)s)[1] || 0x54 == ((U8*)s)[1] ) || ( 0x73 == ((U8*)s)[1] || 0x74 == ((U8*)s)[1] ) ) ) ? 2 : 0 )\
+: 0 )
+
 
 #endif /* H_REGCHARCLASS */
 
index 5d17c44..37a8682 100755 (executable)
@@ -1245,3 +1245,16 @@ UTF8_CHAR: Matches utf8 from 1 to 5 bytes
 QUOTEMETA: Meta-characters that \Q should quote
 => high :fast
 \p{_Perl_Quotemeta}
+
+MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
+=> UTF8 :safe
+do regen/regcharclass_multi_char_folds.pl
+
+# 1 => All folds
+&regcharclass_multi_char_folds::multi_char_folds(1)
+
+MULTI_CHAR_FOLD: multi-char ascii strings that are folded to by a single character
+=> low : safe
+
+# 0 => ASCII-only
+&regcharclass_multi_char_folds::multi_char_folds(0)