improve conditional folding logic in regen/regcharclass.pl
authorYves Orton <demerphq@gmail.com>
Sat, 29 Sep 2012 21:57:10 +0000 (23:57 +0200)
committerYves Orton <demerphq@gmail.com>
Sat, 29 Sep 2012 21:57:10 +0000 (23:57 +0200)
regcharclass.h
regen/regcharclass.pl

index c492d33..d0aedf3 100644 (file)
@@ -30,9 +30,7 @@
 : ( is_utf8 ) ?                                                             \
     ( ( 0xC2 == ((U8*)s)[0] ) ?                                             \
        ( ( 0x85 == ((U8*)s)[1] ) ? 2 : 0 )                                 \
-    : ( 0xE2 == ((U8*)s)[0] ) ?                                             \
-       ( ( ( 0x80 == ((U8*)s)[1] ) && ( ( ((U8*)s)[2] & 0xFE ) == 0xA8 ) ) ? 3 : 0 )\
-    : 0 )                                                                   \
+    : ( ( ( 0xE2 == ((U8*)s)[0] ) && ( 0x80 == ((U8*)s)[1] ) ) && ( ( ((U8*)s)[2] & 0xFE ) == 0xA8 ) ) ? 3 : 0 )\
 : ( 0x85 == ((U8*)s)[0] ) )
 
 /*** GENERATED CODE ***/
@@ -44,9 +42,7 @@
     : ( is_utf8 ) ?                                                         \
        ( ( 0xC2 == ((U8*)s)[0] ) ?                                         \
            ( ( 0x85 == ((U8*)s)[1] ) ? 2 : 0 )                             \
-       : ( 0xE2 == ((U8*)s)[0] ) ?                                         \
-           ( ( ( 0x80 == ((U8*)s)[1] ) && ( ( ((U8*)s)[2] & 0xFE ) == 0xA8 ) ) ? 3 : 0 )\
-       : 0 )                                                               \
+       : ( ( ( 0xE2 == ((U8*)s)[0] ) && ( 0x80 == ((U8*)s)[1] ) ) && ( ( ((U8*)s)[2] & 0xFE ) == 0xA8 ) ) ? 3 : 0 )\
     : ( 0x85 == ((U8*)s)[0] ) )                                             \
 : ((e)-(s) > 1) ?                                                           \
     ( ( 0x0A <= ((U8*)s)[0] && ((U8*)s)[0] <= 0x0C ) ? 1                    \
@@ -69,9 +65,7 @@
     ( ( 0x0A == ((U8*)s)[1] ) ? 2 : 1 )                                     \
 : ( 0xC2 == ((U8*)s)[0] ) ?                                                 \
     ( ( 0x85 == ((U8*)s)[1] ) ? 2 : 0 )                                     \
-: ( 0xE2 == ((U8*)s)[0] ) ?                                                 \
-    ( ( ( 0x80 == ((U8*)s)[1] ) && ( ( ((U8*)s)[2] & 0xFE ) == 0xA8 ) ) ? 3 : 0 )\
-: 0 )
+: ( ( ( 0xE2 == ((U8*)s)[0] ) && ( 0x80 == ((U8*)s)[1] ) ) && ( ( ((U8*)s)[2] & 0xFE ) == 0xA8 ) ) ? 3 : 0 )
 
 /*** GENERATED CODE ***/
 #define is_LNBREAK_utf8_safe(s,e)                                           \
        ( ( 0x0A == ((U8*)s)[1] ) ? 2 : 1 )                                 \
     : ( 0xC2 == ((U8*)s)[0] ) ?                                             \
        ( ( 0x85 == ((U8*)s)[1] ) ? 2 : 0 )                                 \
-    : ( 0xE2 == ((U8*)s)[0] ) ?                                             \
-       ( ( ( 0x80 == ((U8*)s)[1] ) && ( ( ((U8*)s)[2] & 0xFE ) == 0xA8 ) ) ? 3 : 0 )\
-    : 0 )                                                                   \
+    : ( ( ( 0xE2 == ((U8*)s)[0] ) && ( 0x80 == ((U8*)s)[1] ) ) && ( ( ((U8*)s)[2] & 0xFE ) == 0xA8 ) ) ? 3 : 0 )\
 : ((e)-(s) > 1) ?                                                           \
     ( ( 0x0A <= ((U8*)s)[0] && ((U8*)s)[0] <= 0x0C ) ? 1                    \
     : ( 0x0D == ((U8*)s)[0] ) ?                                             \
        ( ( 0x0A == ((U8*)s)[1] ) ? 2 : 1 )                                 \
-    : ( 0xC2 == ((U8*)s)[0] ) ?                                             \
-       ( ( 0x85 == ((U8*)s)[1] ) ? 2 : 0 )                                 \
-    : 0 )                                                                   \
+    : ( ( 0xC2 == ((U8*)s)[0] ) && ( 0x85 == ((U8*)s)[1] ) ) ? 2 : 0 )      \
 : ((e)-(s) > 0) ?                                                           \
     ( 0x0A <= ((U8*)s)[0] && ((U8*)s)[0] <= 0x0D )                          \
 : 0 )
     : ( 0xE1 == ((U8*)s)[0] ) ?                                             \
        ( ( 0x9A == ((U8*)s)[1] ) ?                                         \
            ( ( 0x80 == ((U8*)s)[2] ) ? 3 : 0 )                             \
-       : ( 0xA0 == ((U8*)s)[1] ) ?                                         \
-           ( ( 0x8E == ((U8*)s)[2] ) ? 3 : 0 )                             \
-       : 0 )                                                               \
+       : ( ( 0xA0 == ((U8*)s)[1] ) && ( 0x8E == ((U8*)s)[2] ) ) ? 3 : 0 )  \
     : ( 0xE2 == ((U8*)s)[0] ) ?                                             \
        ( ( 0x80 == ((U8*)s)[1] ) ?                                         \
            ( ( ( 0x80 <= ((U8*)s)[2] && ((U8*)s)[2] <= 0x8A ) || 0xAF == ((U8*)s)[2] ) ? 3 : 0 )\
-       : ( 0x81 == ((U8*)s)[1] ) ?                                         \
-           ( ( 0x9F == ((U8*)s)[2] ) ? 3 : 0 )                             \
-       : 0 )                                                               \
-    : ( 0xE3 == ((U8*)s)[0] ) ?                                             \
-       ( ( ( 0x80 == ((U8*)s)[1] ) && ( 0x80 == ((U8*)s)[2] ) ) ? 3 : 0 )  \
-    : 0 )                                                                   \
+       : ( ( 0x81 == ((U8*)s)[1] ) && ( 0x9F == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( ( ( 0xE3 == ((U8*)s)[0] ) && ( 0x80 == ((U8*)s)[1] ) ) && ( 0x80 == ((U8*)s)[2] ) ) ? 3 : 0 )\
 : ( 0xA0 == ((U8*)s)[0] ) )
 
 /*** GENERATED CODE ***/
        : ( 0xE1 == ((U8*)s)[0] ) ?                                         \
            ( ( 0x9A == ((U8*)s)[1] ) ?                                     \
                ( ( 0x80 == ((U8*)s)[2] ) ? 3 : 0 )                         \
-           : ( 0xA0 == ((U8*)s)[1] ) ?                                     \
-               ( ( 0x8E == ((U8*)s)[2] ) ? 3 : 0 )                         \
-           : 0 )                                                           \
+           : ( ( 0xA0 == ((U8*)s)[1] ) && ( 0x8E == ((U8*)s)[2] ) ) ? 3 : 0 )\
        : ( 0xE2 == ((U8*)s)[0] ) ?                                         \
            ( ( 0x80 == ((U8*)s)[1] ) ?                                     \
                ( ( ( 0x80 <= ((U8*)s)[2] && ((U8*)s)[2] <= 0x8A ) || 0xAF == ((U8*)s)[2] ) ? 3 : 0 )\
-           : ( 0x81 == ((U8*)s)[1] ) ?                                     \
-               ( ( 0x9F == ((U8*)s)[2] ) ? 3 : 0 )                         \
-           : 0 )                                                           \
-       : ( 0xE3 == ((U8*)s)[0] ) ?                                         \
-           ( ( ( 0x80 == ((U8*)s)[1] ) && ( 0x80 == ((U8*)s)[2] ) ) ? 3 : 0 )\
-       : 0 )                                                               \
+           : ( ( 0x81 == ((U8*)s)[1] ) && ( 0x9F == ((U8*)s)[2] ) ) ? 3 : 0 )\
+       : ( ( ( 0xE3 == ((U8*)s)[0] ) && ( 0x80 == ((U8*)s)[1] ) ) && ( 0x80 == ((U8*)s)[2] ) ) ? 3 : 0 )\
     : ( 0xA0 == ((U8*)s)[0] ) )                                             \
 : ((e)-(s) > 1) ?                                                           \
     ( ( 0x09 == ((U8*)s)[0] || 0x20 == ((U8*)s)[0] ) ? 1                    \
 : ( 0xE1 == ((U8*)s)[0] ) ?                                                 \
     ( ( 0x9A == ((U8*)s)[1] ) ?                                             \
        ( ( 0x80 == ((U8*)s)[2] ) ? 3 : 0 )                                 \
-    : ( 0xA0 == ((U8*)s)[1] ) ?                                             \
-       ( ( 0x8E == ((U8*)s)[2] ) ? 3 : 0 )                                 \
-    : 0 )                                                                   \
+    : ( ( 0xA0 == ((U8*)s)[1] ) && ( 0x8E == ((U8*)s)[2] ) ) ? 3 : 0 )      \
 : ( 0xE2 == ((U8*)s)[0] ) ?                                                 \
     ( ( 0x80 == ((U8*)s)[1] ) ?                                             \
        ( ( ( ((U8*)s)[2] <= 0x8A ) || 0xAF == ((U8*)s)[2] ) ? 3 : 0 )      \
-    : ( 0x81 == ((U8*)s)[1] ) ?                                             \
-       ( ( 0x9F == ((U8*)s)[2] ) ? 3 : 0 )                                 \
-    : 0 )                                                                   \
-: ( 0xE3 == ((U8*)s)[0] ) ?                                                 \
-    ( ( ( 0x80 == ((U8*)s)[1] ) && ( 0x80 == ((U8*)s)[2] ) ) ? 3 : 0 )      \
-: 0 )
+    : ( ( 0x81 == ((U8*)s)[1] ) && ( 0x9F == ((U8*)s)[2] ) ) ? 3 : 0 )      \
+: ( ( ( 0xE3 == ((U8*)s)[0] ) && ( 0x80 == ((U8*)s)[1] ) ) && ( 0x80 == ((U8*)s)[2] ) ) ? 3 : 0 )
 
 /*** GENERATED CODE ***/
 #define is_HORIZWS_utf8_safe(s,e)                                           \
     : ( 0xE1 == ((U8*)s)[0] ) ?                                             \
        ( ( 0x9A == ((U8*)s)[1] ) ?                                         \
            ( ( 0x80 == ((U8*)s)[2] ) ? 3 : 0 )                             \
-       : ( 0xA0 == ((U8*)s)[1] ) ?                                         \
-           ( ( 0x8E == ((U8*)s)[2] ) ? 3 : 0 )                             \
-       : 0 )                                                               \
+       : ( ( 0xA0 == ((U8*)s)[1] ) && ( 0x8E == ((U8*)s)[2] ) ) ? 3 : 0 )  \
     : ( 0xE2 == ((U8*)s)[0] ) ?                                             \
        ( ( 0x80 == ((U8*)s)[1] ) ?                                         \
            ( ( ( 0x80 <= ((U8*)s)[2] && ((U8*)s)[2] <= 0x8A ) || 0xAF == ((U8*)s)[2] ) ? 3 : 0 )\
-       : ( 0x81 == ((U8*)s)[1] ) ?                                         \
-           ( ( 0x9F == ((U8*)s)[2] ) ? 3 : 0 )                             \
-       : 0 )                                                               \
-    : ( 0xE3 == ((U8*)s)[0] ) ?                                             \
-       ( ( ( 0x80 == ((U8*)s)[1] ) && ( 0x80 == ((U8*)s)[2] ) ) ? 3 : 0 )  \
-    : 0 )                                                                   \
+       : ( ( 0x81 == ((U8*)s)[1] ) && ( 0x9F == ((U8*)s)[2] ) ) ? 3 : 0 )  \
+    : ( ( ( 0xE3 == ((U8*)s)[0] ) && ( 0x80 == ((U8*)s)[1] ) ) && ( 0x80 == ((U8*)s)[2] ) ) ? 3 : 0 )\
 : ((e)-(s) > 1) ?                                                           \
     ( ( 0x09 == ((U8*)s)[0] || 0x20 == ((U8*)s)[0] ) ? 1                    \
-    : ( 0xC2 == ((U8*)s)[0] ) ?                                             \
-       ( ( 0xA0 == ((U8*)s)[1] ) ? 2 : 0 )                                 \
-    : 0 )                                                                   \
+    : ( ( 0xC2 == ((U8*)s)[0] ) && ( 0xA0 == ((U8*)s)[1] ) ) ? 2 : 0 )      \
 : ((e)-(s) > 0) ?                                                           \
     ( 0x09 == ((U8*)s)[0] || 0x20 == ((U8*)s)[0] )                          \
 : 0 )
 : ( is_utf8 ) ?                                                             \
     ( ( 0xC2 == ((U8*)s)[0] ) ?                                             \
        ( ( 0x85 == ((U8*)s)[1] ) ? 2 : 0 )                                 \
-    : ( 0xE2 == ((U8*)s)[0] ) ?                                             \
-       ( ( ( 0x80 == ((U8*)s)[1] ) && ( ( ((U8*)s)[2] & 0xFE ) == 0xA8 ) ) ? 3 : 0 )\
-    : 0 )                                                                   \
+    : ( ( ( 0xE2 == ((U8*)s)[0] ) && ( 0x80 == ((U8*)s)[1] ) ) && ( ( ((U8*)s)[2] & 0xFE ) == 0xA8 ) ) ? 3 : 0 )\
 : ( 0x85 == ((U8*)s)[0] ) )
 
 /*** GENERATED CODE ***/
     : ( is_utf8 ) ?                                                         \
        ( ( 0xC2 == ((U8*)s)[0] ) ?                                         \
            ( ( 0x85 == ((U8*)s)[1] ) ? 2 : 0 )                             \
-       : ( 0xE2 == ((U8*)s)[0] ) ?                                         \
-           ( ( ( 0x80 == ((U8*)s)[1] ) && ( ( ((U8*)s)[2] & 0xFE ) == 0xA8 ) ) ? 3 : 0 )\
-       : 0 )                                                               \
+       : ( ( ( 0xE2 == ((U8*)s)[0] ) && ( 0x80 == ((U8*)s)[1] ) ) && ( ( ((U8*)s)[2] & 0xFE ) == 0xA8 ) ) ? 3 : 0 )\
     : ( 0x85 == ((U8*)s)[0] ) )                                             \
 : ((e)-(s) > 1) ?                                                           \
     ( ( 0x0A <= ((U8*)s)[0] && ((U8*)s)[0] <= 0x0D ) ? 1                    \
 ( ( 0x0A <= ((U8*)s)[0] && ((U8*)s)[0] <= 0x0D ) ? 1                        \
 : ( 0xC2 == ((U8*)s)[0] ) ?                                                 \
     ( ( 0x85 == ((U8*)s)[1] ) ? 2 : 0 )                                     \
-: ( 0xE2 == ((U8*)s)[0] ) ?                                                 \
-    ( ( ( 0x80 == ((U8*)s)[1] ) && ( ( ((U8*)s)[2] & 0xFE ) == 0xA8 ) ) ? 3 : 0 )\
-: 0 )
+: ( ( ( 0xE2 == ((U8*)s)[0] ) && ( 0x80 == ((U8*)s)[1] ) ) && ( ( ((U8*)s)[2] & 0xFE ) == 0xA8 ) ) ? 3 : 0 )
 
 /*** GENERATED CODE ***/
 #define is_VERTWS_utf8_safe(s,e)                                            \
     ( ( 0x0A <= ((U8*)s)[0] && ((U8*)s)[0] <= 0x0D ) ? 1                    \
     : ( 0xC2 == ((U8*)s)[0] ) ?                                             \
        ( ( 0x85 == ((U8*)s)[1] ) ? 2 : 0 )                                 \
-    : ( 0xE2 == ((U8*)s)[0] ) ?                                             \
-       ( ( ( 0x80 == ((U8*)s)[1] ) && ( ( ((U8*)s)[2] & 0xFE ) == 0xA8 ) ) ? 3 : 0 )\
-    : 0 )                                                                   \
+    : ( ( ( 0xE2 == ((U8*)s)[0] ) && ( 0x80 == ((U8*)s)[1] ) ) && ( ( ((U8*)s)[2] & 0xFE ) == 0xA8 ) ) ? 3 : 0 )\
 : ((e)-(s) > 1) ?                                                           \
     ( ( 0x0A <= ((U8*)s)[0] && ((U8*)s)[0] <= 0x0D ) ? 1                    \
-    : ( 0xC2 == ((U8*)s)[0] ) ?                                             \
-       ( ( 0x85 == ((U8*)s)[1] ) ? 2 : 0 )                                 \
-    : 0 )                                                                   \
+    : ( ( 0xC2 == ((U8*)s)[0] ) && ( 0x85 == ((U8*)s)[1] ) ) ? 2 : 0 )      \
 : ((e)-(s) > 0) ?                                                           \
     ( 0x0A <= ((U8*)s)[0] && ((U8*)s)[0] <= 0x0D )                          \
 : 0 )
 ( ( 0xEF == ((U8*)s)[0] ) ?                                                 \
     ( ( 0xB7 == ((U8*)s)[1] ) ?                                             \
        ( ( 0x90 <= ((U8*)s)[2] && ((U8*)s)[2] <= 0xAF ) ? 3 : 0 )          \
-    : ( 0xBF == ((U8*)s)[1] ) ?                                             \
-       ( ( ((U8*)s)[2] >= 0xBE ) ? 3 : 0 )                                 \
-    : 0 )                                                                   \
+    : ( ( 0xBF == ((U8*)s)[1] ) && ( ((U8*)s)[2] >= 0xBE ) ) ? 3 : 0 )      \
 : ( 0xF0 == ((U8*)s)[0] ) ?                                                 \
     ( ( ( ( 0x9F == ((U8*)s)[1] || 0xAF == ((U8*)s)[1] || 0xBF == ((U8*)s)[1] ) && ( 0xBF == ((U8*)s)[2] ) ) && ( ((U8*)s)[3] >= 0xBE ) ) ? 4 : 0 )\
 : ( 0xF1 <= ((U8*)s)[0] && ((U8*)s)[0] <= 0xF3 ) ?                          \
     ( ( ( ( ( ((U8*)s)[1] & 0xCF ) == 0x8F ) && ( 0xBF == ((U8*)s)[2] ) ) && ( ((U8*)s)[3] >= 0xBE ) ) ? 4 : 0 )\
-: ( 0xF4 == ((U8*)s)[0] ) ?                                                 \
-    ( ( ( ( 0x8F == ((U8*)s)[1] ) && ( 0xBF == ((U8*)s)[2] ) ) && ( ((U8*)s)[3] >= 0xBE ) ) ? 4 : 0 )\
-: 0 )
+: ( ( ( ( 0xF4 == ((U8*)s)[0] ) && ( 0x8F == ((U8*)s)[1] ) ) && ( 0xBF == ((U8*)s)[2] ) ) && ( ((U8*)s)[3] >= 0xBE ) ) ? 4 : 0 )
 
 /*
        SURROGATE: Surrogate characters
 ( ( 0xE1 == ((U8*)s)[0] ) ?                                                 \
     ( ( 0x84 == ((U8*)s)[1] ) ?                                             \
        3                                                                   \
-    : ( 0x85 == ((U8*)s)[1] ) ?                                             \
-       ( ( ((U8*)s)[2] <= 0x9F ) ? 3 : 0 )                                 \
-    : 0 )                                                                   \
-: ( 0xEA == ((U8*)s)[0] ) ?                                                 \
-    ( ( ( 0xA5 == ((U8*)s)[1] ) && ( 0xA0 <= ((U8*)s)[2] && ((U8*)s)[2] <= 0xBC ) ) ? 3 : 0 )\
-: 0 )
+    : ( ( 0x85 == ((U8*)s)[1] ) && ( ((U8*)s)[2] <= 0x9F ) ) ? 3 : 0 )      \
+: ( ( ( 0xEA == ((U8*)s)[0] ) && ( 0xA5 == ((U8*)s)[1] ) ) && ( 0xA0 <= ((U8*)s)[2] && ((U8*)s)[2] <= 0xBC ) ) ? 3 : 0 )
 
 /*
        GCB_LV_LVT_V: Grapheme_Cluster_Break=(LV or LVT or V)
 ( ( 0xE1 == ((U8*)s)[0] ) ?                                                 \
     ( ( 0x85 == ((U8*)s)[1] ) ?                                             \
        ( ( ((U8*)s)[2] >= 0xA0 ) ? 3 : 0 )                                 \
-    : ( 0x86 == ((U8*)s)[1] ) ?                                             \
-       ( ( ((U8*)s)[2] <= 0xA7 ) ? 3 : 0 )                                 \
-    : 0 )                                                                   \
+    : ( ( 0x86 == ((U8*)s)[1] ) && ( ((U8*)s)[2] <= 0xA7 ) ) ? 3 : 0 )      \
 : ( 0xEA == ((U8*)s)[0] ) ?                                                 \
     ( ( ((U8*)s)[1] >= 0xB0 ) ?                                             \
        3                                                                   \
        3                                                                   \
     : ( 0x9E == ((U8*)s)[1] ) ?                                             \
        ( ( ( ((U8*)s)[2] <= 0xA3 ) || ( ((U8*)s)[2] >= 0xB0 ) ) ? 3 : 0 )  \
-    : ( 0x9F == ((U8*)s)[1] ) ?                                             \
-       ( ( ((U8*)s)[2] <= 0x86 ) ? 3 : 0 )                                 \
-    : 0 )                                                                   \
+    : ( ( 0x9F == ((U8*)s)[1] ) && ( ((U8*)s)[2] <= 0x86 ) ) ? 3 : 0 )      \
 : 0 )
 
 /*
        3                                                                   \
     : ( 0x9E == ((U8*)s)[1] ) ?                                             \
        ( ( ( ((U8*)s)[2] <= 0xA3 ) || ( ((U8*)s)[2] >= 0xB0 ) ) ? 3 : 0 )  \
-    : ( 0x9F == ((U8*)s)[1] ) ?                                             \
-       ( ( ( ((U8*)s)[2] <= 0x86 ) || ( 0x8B <= ((U8*)s)[2] && ((U8*)s)[2] <= 0xBB ) ) ? 3 : 0 )\
-    : 0 )                                                                   \
-: ( 0xF0 == ((U8*)s)[0] ) ?                                                 \
-    ( ( ( ( 0x9F == ((U8*)s)[1] ) && ( 0x87 == ((U8*)s)[2] ) ) && ( ((U8*)s)[3] >= 0xA6 ) ) ? 4 : 0 )\
-: 0 )
+    : ( ( 0x9F == ((U8*)s)[1] ) && ( ( ((U8*)s)[2] <= 0x86 ) || ( 0x8B <= ((U8*)s)[2] && ((U8*)s)[2] <= 0xBB ) ) ) ? 3 : 0 )\
+: ( ( ( ( 0xF0 == ((U8*)s)[0] ) && ( 0x9F == ((U8*)s)[1] ) ) && ( 0x87 == ((U8*)s)[2] ) ) && ( ((U8*)s)[3] >= 0xA6 ) ) ? 4 : 0 )
 
 /*
        GCB_T: Grapheme_Cluster_Break=T
     : ( 0x87 == ((U8*)s)[1] ) ?                                             \
        3                                                                   \
     : 0 )                                                                   \
-: ( 0xED == ((U8*)s)[0] ) ?                                                 \
-    ( ( ( 0x9F == ((U8*)s)[1] ) && ( 0x8B <= ((U8*)s)[2] && ((U8*)s)[2] <= 0xBB ) ) ? 3 : 0 )\
-: 0 )
+: ( ( ( 0xED == ((U8*)s)[0] ) && ( 0x9F == ((U8*)s)[1] ) ) && ( 0x8B <= ((U8*)s)[2] && ((U8*)s)[2] <= 0xBB ) ) ? 3 : 0 )
 
 /*
        GCB_V: Grapheme_Cluster_Break=V
 ( ( 0xE1 == ((U8*)s)[0] ) ?                                                 \
     ( ( 0x85 == ((U8*)s)[1] ) ?                                             \
        ( ( ((U8*)s)[2] >= 0xA0 ) ? 3 : 0 )                                 \
-    : ( 0x86 == ((U8*)s)[1] ) ?                                             \
-       ( ( ((U8*)s)[2] <= 0xA7 ) ? 3 : 0 )                                 \
-    : 0 )                                                                   \
+    : ( ( 0x86 == ((U8*)s)[1] ) && ( ((U8*)s)[2] <= 0xA7 ) ) ? 3 : 0 )      \
 : ( 0xED == ((U8*)s)[0] ) ?                                                 \
     ( ( 0x9E == ((U8*)s)[1] ) ?                                             \
        ( ( ((U8*)s)[2] >= 0xB0 ) ? 3 : 0 )                                 \
-    : ( 0x9F == ((U8*)s)[1] ) ?                                             \
-       ( ( ((U8*)s)[2] <= 0x86 ) ? 3 : 0 )                                 \
-    : 0 )                                                                   \
+    : ( ( 0x9F == ((U8*)s)[1] ) && ( ((U8*)s)[2] <= 0x86 ) ) ? 3 : 0 )      \
 : 0 )
 
 /*
        ( ( 0x80 == ((U8*)s)[2] ) ? 3 : 0 )                                 \
     : ( 0x9E == ((U8*)s)[1] ) ?                                             \
        ( ( ( ((U8*)s)[2] & 0xFE ) == 0xB4 ) ? 3 : 0 )                      \
-    : ( 0xA0 == ((U8*)s)[1] ) ?                                             \
-       ( ( 0x8B <= ((U8*)s)[2] && ((U8*)s)[2] <= 0x8E ) ? 3 : 0 )          \
-    : 0 )                                                                   \
+    : ( ( 0xA0 == ((U8*)s)[1] ) && ( 0x8B <= ((U8*)s)[2] && ((U8*)s)[2] <= 0x8E ) ) ? 3 : 0 )\
 : ( 0xE2 == ((U8*)s)[0] ) ?                                                 \
     ( ( 0x80 == ((U8*)s)[1] ) ?                                             \
        ( ( ((U8*)s)[2] <= 0xBE ) ? 3 : 0 )                                 \
 : ( 0xE3 == ((U8*)s)[0] ) ?                                                 \
     ( ( 0x80 == ((U8*)s)[1] ) ?                                             \
        ( ( ( ((U8*)s)[2] <= 0x83 ) || ( 0x88 <= ((U8*)s)[2] && ((U8*)s)[2] <= 0xA0 ) || 0xB0 == ((U8*)s)[2] ) ? 3 : 0 )\
-    : ( 0x85 == ((U8*)s)[1] ) ?                                             \
-       ( ( 0xA4 == ((U8*)s)[2] ) ? 3 : 0 )                                 \
-    : 0 )                                                                   \
+    : ( ( 0x85 == ((U8*)s)[1] ) && ( 0xA4 == ((U8*)s)[2] ) ) ? 3 : 0 )      \
 : ( 0xEF == ((U8*)s)[0] ) ?                                                 \
     ( ( 0xB4 == ((U8*)s)[1] ) ?                                             \
        ( ( ((U8*)s)[2] >= 0xBE ) ? 3 : 0 )                                 \
        ( ( 0xBF == ((U8*)s)[2] ) ? 3 : 0 )                                 \
     : ( 0xBE == ((U8*)s)[1] ) ?                                             \
        ( ( 0xA0 == ((U8*)s)[2] ) ? 3 : 0 )                                 \
-    : ( 0xBF == ((U8*)s)[1] ) ?                                             \
-       ( ( 0xB0 <= ((U8*)s)[2] && ((U8*)s)[2] <= 0xB8 ) ? 3 : 0 )          \
-    : 0 )                                                                   \
+    : ( ( 0xBF == ((U8*)s)[1] ) && ( 0xB0 <= ((U8*)s)[2] && ((U8*)s)[2] <= 0xB8 ) ) ? 3 : 0 )\
 : ( 0xF0 == ((U8*)s)[0] ) ?                                                 \
     ( ( ( ( 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 )                                                                   \
-: 0 )
+: ( ( 0xF3 == ((U8*)s)[0] ) && ( 0xA0 == ((U8*)s)[1] ) ) ? 4 : 0 )
 
 /*
        FOR_TESTING_DEMO: This is used to test if we generate incorrect code (currently it is ok)
     ( ( 0xCE == ((U8*)s)[0] ) ?                                             \
        ( ( 0xB7 == ((U8*)s)[1] ) ?                                         \
            ( ( ( 0xCD == ((U8*)s)[2] ) && ( 0x82 == ((U8*)s)[3] ) ) ? 4 : 0 )\
-       : ( 0xB9 == ((U8*)s)[1] ) ?                                         \
-           ( ( ( ( ( 0xCC == ((U8*)s)[2] ) && ( 0x88 == ((U8*)s)[3] ) ) && ( 0xCC == ((U8*)s)[4] ) ) && ( 0x81 == ((U8*)s)[5] ) ) ? 6 : 0 )\
-       : 0 )                                                               \
+       : ( ( ( ( ( 0xB9 == ((U8*)s)[1] ) && ( 0xCC == ((U8*)s)[2] ) ) && ( 0x88 == ((U8*)s)[3] ) ) && ( 0xCC == ((U8*)s)[4] ) ) && ( 0x81 == ((U8*)s)[5] ) ) ? 6 : 0 )\
     : 0 )                                                                   \
-: ((e)-(s) > 3) ?                                                           \
-    ( ( ( ( ( 0xCE == ((U8*)s)[0] ) && ( 0xB7 == ((U8*)s)[1] ) ) && ( 0xCD == ((U8*)s)[2] ) ) && ( 0x82 == ((U8*)s)[3] ) ) ? 4 : 0 )\
-: 0 )
+: ( ( ( ( ((e)-(s) > 3) && ( 0xCE == ((U8*)s)[0] ) ) && ( 0xB7 == ((U8*)s)[1] ) ) && ( 0xCD == ((U8*)s)[2] ) ) && ( 0x82 == ((U8*)s)[3] ) ) ? 4 : 0 )
 
 
 #endif /* H_REGCHARCLASS */
index f9d2da4..282f700 100755 (executable)
@@ -213,18 +213,23 @@ sub __clean {
     #       ( (cond1) ? ( (cond2) ? X : Y ) : Y )
     # into
     #       ( ( (cond1) && (cond2) ) ? X : Y )
-    #
+    # Also similarly handles expressions like:
+    #       : (cond1) ? ( (cond2) ? X : Y ) : Y )
+    # Note the inclusion of the close paren in ([:()]) and the open paren in ([()]) is
+    # purely to ensure we have a balanced set of parens in the expression which makes
+    # it easier to understand the pattern in an editor that understands paren's, we do
+    # not expect either of these cases to actually fire. - Yves
     1 while $expr =~ s/
-        \(  \s*
+        ([:()])  \s*
             ($parens) \s*
             \? \s*
                 \( \s* ($parens) \s*
-                    \? \s* ($parens|[^()?:]+?) \s*
-                    :  \s* ($parens|[^()?:]+?) \s*
+                    \? \s* ($parens|[^()?:\s]+?) \s*
+                    :  \s* ($parens|[^()?:\s]+?) \s*
                 \) \s*
-            : \s* \4 \s*
-        \)
-    /( ( $1 && $2 ) ? $3 : $4 )/gx;
+            : \s* \5 \s*
+        ([()])
+    /$1 ( $2 && $3 ) ? $4 : $5 $6/gx;
 
     return $expr;
 }