regexes: Add \v to table of latin1 char classes
authorKarl Williamson <public@khwilliamson.com>
Thu, 16 Aug 2012 03:45:05 +0000 (21:45 -0600)
committerKarl Williamson <public@khwilliamson.com>
Tue, 20 Nov 2012 00:13:01 +0000 (17:13 -0700)
This will be used in future commits to allow \v and \V to be treated
consistently with other character classes.  (Doing the same for \h isn't
necessary, as it matches identically to [:blank:] in the entire Unicode
range.)

handy.h
l1_char_class_tab.h
regcomp.h
regen/mk_PL_charclass.pl

index 3add89c..cc8b679 100644 (file)
--- a/handy.h
+++ b/handy.h
@@ -622,15 +622,16 @@ patched there.  The file as of this writing is cpan/Devel-PPPort/parts/inc/misc
 #  define _CC_XDIGIT            12
 #  define _CC_PSXSPC            13
 #  define _CC_BLANK             14
-#  define _HIGHEST_REGCOMP_DOT_H_SYNC _CC_BLANK
-
-#  define _CC_IDFIRST           15
-#  define _CC_CHARNAME_CONT     16
-#  define _CC_NONLATIN1_FOLD    17
-#  define _CC_QUOTEMETA         18
-#  define _CC_NON_FINAL_FOLD    19
-#  define _CC_IS_IN_SOME_FOLD   20
-/* Unused: 21-31
+#  define _CC_VERTSPACE         15
+#  define _HIGHEST_REGCOMP_DOT_H_SYNC _CC_VERTSPACE
+
+#  define _CC_IDFIRST           16
+#  define _CC_CHARNAME_CONT     17
+#  define _CC_NONLATIN1_FOLD    18
+#  define _CC_QUOTEMETA         19
+#  define _CC_NON_FINAL_FOLD    20
+#  define _CC_IS_IN_SOME_FOLD   21
+/* Unused: 22-31
  * If more bits are needed, one could add a second word for non-64bit
  * QUAD_IS_INT systems, using some #ifdefs to distinguish between having a 2nd
  * word or not.  The IS_IN_SOME_FOLD bit is the most easily expendable, as it
index d346993..ba6df16 100644 (file)
 /* U+07 BEL */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
 /* U+08 BS */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
 /* U+09 HT */ (1U<<_CC_ASCII)|(1U<<_CC_BLANK)|(1U<<_CC_CNTRL)|(1U<<_CC_PSXSPC)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE),
-/* U+0A LF */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_PSXSPC)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE),
-/* U+0B VT */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_PSXSPC)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE),
-/* U+0C FF */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_PSXSPC)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE),
-/* U+0D CR */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_PSXSPC)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE),
+/* U+0A LF */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_PSXSPC)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
+/* U+0B VT */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_PSXSPC)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
+/* U+0C FF */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_PSXSPC)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
+/* U+0D CR */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_PSXSPC)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
 /* U+0E SO */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
 /* U+0F SI */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
 /* U+10 DLE */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
 /* U+82 BPH */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
 /* U+83 NBH */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
 /* U+84 IND */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
-/* U+85 NEL */ (1U<<_CC_CNTRL)|(1U<<_CC_PSXSPC)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE),
+/* U+85 NEL */ (1U<<_CC_CNTRL)|(1U<<_CC_PSXSPC)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
 /* U+86 SSA */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
 /* U+87 ESA */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
 /* U+88 HTS */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
index e9c9c4c..1c7f454 100644 (file)
--- a/regcomp.h
+++ b/regcomp.h
@@ -427,6 +427,11 @@ struct regnode_charclass_class {
 #define ANYOF_VERTWS    ((ANYOF_MAX)+0)
 #define ANYOF_NVERTWS   ((ANYOF_MAX)+1)
 
+#if (ANYOF_VERTWS != (_CC_VERTSPACE) * 2) \
+     || (_CC_VERTSPACE != _HIGHEST_REGCOMP_DOT_H_SYNC)
+#   error Problem with handy.h _CC_VERTSPACE #define
+#endif
+
 #define ANYOF_HORIZWS  ((ANYOF_MAX)+2)
 #define ANYOF_NHORIZWS ((ANYOF_MAX)+3)
 
index 0aac59e..33b7c87 100644 (file)
@@ -42,6 +42,7 @@ my @properties = qw(
     UPPER
     WORDCHAR
     XDIGIT
+    VERTSPACE
     IS_IN_SOME_FOLD
 );
 
@@ -170,8 +171,8 @@ for my $ord (0..255) {
         if (! ($name =~ s/_L1$//)) {
 
             # Here, isn't an _L1.  If its _A, it's automatically false for
-            # non-ascii.  The only one current one (besides ASCII) without a
-            # suffix is valid over the whole range.
+            # non-ascii.  The only current ones (besides ASCII) without a
+            # suffix are valid over the whole range.
             next if $name =~ s/_A$// && $ord >= 128;
 
         }