[Pcre-svn] [792] code/trunk: pcre2test can now handle lists …

Top Page
Delete this message
Author: Subversion repository
Date:  
To: pcre-svn
Subject: [Pcre-svn] [792] code/trunk: pcre2test can now handle lists of conversion options.
Revision: 792
          http://www.exim.org/viewvc/pcre2?view=rev&revision=792
Author:   ph10
Date:     2017-05-20 12:40:12 +0100 (Sat, 20 May 2017)
Log Message:
-----------
pcre2test can now handle lists of conversion options.


Modified Paths:
--------------
    code/trunk/src/pcre2test.c
    code/trunk/testdata/testinput24
    code/trunk/testdata/testoutput24


Modified: code/trunk/src/pcre2test.c
===================================================================
--- code/trunk/src/pcre2test.c    2017-05-19 16:41:10 UTC (rev 791)
+++ code/trunk/src/pcre2test.c    2017-05-20 11:40:12 UTC (rev 792)
@@ -423,7 +423,7 @@
        MOD_PND,    /* As MOD_PD, but not for a default pattern */
        MOD_PNDP,   /* As MOD_PND, OK for Perl test */
        MOD_CHR,    /* Is a single character */
-       MOD_CON,    /* Is a "convert" type */
+       MOD_CON,    /* Is a "convert" type/options list */
        MOD_CTL,    /* Is a control bit */
        MOD_BSR,    /* Is a BSR value */
        MOD_IN2,    /* Is one or two unsigned integers */
@@ -3679,20 +3679,26 @@
     *((uint32_t *)field) = *pp++;
     break;


-    case MOD_CON:  /* A convert type */
-    for (i = 0; i < convertlistcount; i++)
-      {
-      if (strncmpic(pp, (const uint8_t *)convertlist[i].name, len) == 0)
+    case MOD_CON:  /* A convert type/options list */
+    for (;; pp++)
+      { 
+      uint8_t *colon = (uint8_t *)strchr((const char *)pp, ':');
+      len = ((colon != NULL && colon < ep)? colon:ep) - pp;
+      for (i = 0; i < convertlistcount; i++)
         {
-        if (*((uint32_t *)field) == CONVERT_UNSET)
-          *((uint32_t *)field) = convertlist[i].option;
-        else
-          *((uint32_t *)field) |= convertlist[i].option;
-        break;
+        if (strncmpic(pp, (const uint8_t *)convertlist[i].name, len) == 0)
+          {
+          if (*((uint32_t *)field) == CONVERT_UNSET)
+            *((uint32_t *)field) = convertlist[i].option;
+          else
+            *((uint32_t *)field) |= convertlist[i].option;
+          break;
+          }
         }
+      if (i >= convertlistcount) goto INVALID_VALUE;
+      pp += len;
+      if (*pp != ':') break;
       }
-    if (i >= convertlistcount) goto INVALID_VALUE;
-    pp = ep;
     break;


     case MOD_IN2:    /* One or two unsigned integers */


Modified: code/trunk/testdata/testinput24
===================================================================
--- code/trunk/testdata/testinput24    2017-05-19 16:41:10 UTC (rev 791)
+++ code/trunk/testdata/testinput24    2017-05-20 11:40:12 UTC (rev 792)
@@ -245,8 +245,7 @@


/abc\/**\/abc/

-#pattern convert=unset
-#pattern convert=posix_extended
+#pattern convert=unset:posix_extended

/a[[:>:]z/

@@ -284,8 +283,7 @@

/a***b/

-#pattern convert=unset
-#pattern convert=posix_basic
+#pattern convert=unset:posix_basic

/a*b+c\+[def](ab)\(cd\)/


Modified: code/trunk/testdata/testoutput24
===================================================================
--- code/trunk/testdata/testoutput24    2017-05-19 16:41:10 UTC (rev 791)
+++ code/trunk/testdata/testoutput24    2017-05-20 11:40:12 UTC (rev 792)
@@ -375,8 +375,7 @@
 /abc\/**\/abc/
 (?s)\Aabc/(*COMMIT)(?:.*?/)??abc\z


-#pattern convert=unset
-#pattern convert=posix_extended
+#pattern convert=unset:posix_extended

/a[[:>:]z/
a[[:>:]z
@@ -441,8 +440,7 @@
/a***b/
a*b

-#pattern convert=unset
-#pattern convert=posix_basic
+#pattern convert=unset:posix_basic

/a*b+c\+[def](ab)\(cd\)/
a*b\+c+[def]\(ab\)(cd)