/[pcre]/code/trunk/pcretest.c
ViewVC logotype

Diff of /code/trunk/pcretest.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 432 by ph10, Wed Sep 2 16:02:56 2009 UTC revision 498 by ph10, Wed Mar 3 19:29:38 2010 UTC
# Line 118  external symbols to prevent clashes. */ Line 118  external symbols to prevent clashes. */
118    
119  /* We also need the pcre_printint() function for printing out compiled  /* We also need the pcre_printint() function for printing out compiled
120  patterns. This function is in a separate file so that it can be included in  patterns. This function is in a separate file so that it can be included in
121  pcre_compile.c when that module is compiled with debugging enabled.  pcre_compile.c when that module is compiled with debugging enabled. It needs to
122    know which case is being compiled. */
 The definition of the macro PRINTABLE, which determines whether to print an  
 output character as-is or as a hex value when showing compiled patterns, is  
 contained in this file. We uses it here also, in cases when the locale has not  
 been explicitly changed, so as to get consistent output from systems that  
 differ in their output from isprint() even in the "C" locale. */  
123    
124    #define COMPILING_PCRETEST
125  #include "pcre_printint.src"  #include "pcre_printint.src"
126    
127  #define PRINTHEX(c) (locale_set? isprint(c) : PRINTABLE(c))  /* The definition of the macro PRINTABLE, which determines whether to print an
128    output character as-is or as a hex value when showing compiled patterns, is
129    contained in the printint.src file. We uses it here also, in cases when the
130    locale has not been explicitly changed, so as to get consistent output from
131    systems that differ in their output from isprint() even in the "C" locale. */
132    
133    #define PRINTHEX(c) (locale_set? isprint(c) : PRINTABLE(c))
134    
135  /* It is possible to compile this test program without including support for  /* It is possible to compile this test program without including support for
136  testing the POSIX interface, though this is not available via the standard  testing the POSIX interface, though this is not available via the standard
# Line 1305  while (!done) Line 1306  while (!done)
1306      if ((options & PCRE_DOTALL) != 0) cflags |= REG_DOTALL;      if ((options & PCRE_DOTALL) != 0) cflags |= REG_DOTALL;
1307      if ((options & PCRE_NO_AUTO_CAPTURE) != 0) cflags |= REG_NOSUB;      if ((options & PCRE_NO_AUTO_CAPTURE) != 0) cflags |= REG_NOSUB;
1308      if ((options & PCRE_UTF8) != 0) cflags |= REG_UTF8;      if ((options & PCRE_UTF8) != 0) cflags |= REG_UTF8;
1309      if ((options & PCRE_UNGREEDY) != 0) cflags |= REG_UNGREEDY;      if ((options & PCRE_UNGREEDY) != 0) cflags |= REG_UNGREEDY;
1310    
1311      rc = regcomp(&preg, (char *)p, cflags);      rc = regcomp(&preg, (char *)p, cflags);
1312    
# Line 1451  while (!done) Line 1452  while (!done)
1452          {          {
1453          pcre_study_data *rsd = (pcre_study_data *)(extra->study_data);          pcre_study_data *rsd = (pcre_study_data *)(extra->study_data);
1454          rsd->size = byteflip(rsd->size, sizeof(rsd->size));          rsd->size = byteflip(rsd->size, sizeof(rsd->size));
1455          rsd->options = byteflip(rsd->options, sizeof(rsd->options));          rsd->flags = byteflip(rsd->flags, sizeof(rsd->flags));
1456            rsd->minlength = byteflip(rsd->minlength, sizeof(rsd->minlength));
1457          }          }
1458        }        }
1459    
# Line 1628  while (!done) Line 1630  while (!done)
1630          else          else
1631            {            {
1632            uschar *start_bits = NULL;            uschar *start_bits = NULL;
1633            new_info(re, extra, PCRE_INFO_FIRSTTABLE, &start_bits);            int minlength;
1634    
1635              new_info(re, extra, PCRE_INFO_MINLENGTH, &minlength);
1636              fprintf(outfile, "Subject length lower bound = %d\n", minlength);
1637    
1638              new_info(re, extra, PCRE_INFO_FIRSTTABLE, &start_bits);
1639            if (start_bits == NULL)            if (start_bits == NULL)
1640              fprintf(outfile, "No starting byte set\n");              fprintf(outfile, "No set of starting bytes\n");
1641            else            else
1642              {              {
1643              int i;              int i;
# Line 1970  while (!done) Line 1976  while (!done)
1976          continue;          continue;
1977    
1978          case 'N':          case 'N':
1979          options |= PCRE_NOTEMPTY;          if ((options & PCRE_NOTEMPTY) != 0)
1980              options = (options & ~PCRE_NOTEMPTY) | PCRE_NOTEMPTY_ATSTART;
1981            else
1982              options |= PCRE_NOTEMPTY;
1983          continue;          continue;
1984    
1985          case 'O':          case 'O':
# Line 1993  while (!done) Line 2002  while (!done)
2002          continue;          continue;
2003    
2004          case 'P':          case 'P':
2005          options |= ((options & PCRE_PARTIAL_SOFT) == 0)?          options |= ((options & PCRE_PARTIAL_SOFT) == 0)?
2006            PCRE_PARTIAL_SOFT : PCRE_PARTIAL_HARD;            PCRE_PARTIAL_SOFT : PCRE_PARTIAL_HARD;
2007          continue;          continue;
2008    
# Line 2147  while (!done) Line 2156  while (!done)
2156            {            {
2157            int workspace[1000];            int workspace[1000];
2158            for (i = 0; i < timeitm; i++)            for (i = 0; i < timeitm; i++)
2159              count = pcre_dfa_exec(re, NULL, (char *)bptr, len, start_offset,              count = pcre_dfa_exec(re, extra, (char *)bptr, len, start_offset,
2160                options | g_notempty, use_offsets, use_size_offsets, workspace,                options | g_notempty, use_offsets, use_size_offsets, workspace,
2161                sizeof(workspace)/sizeof(int));                sizeof(workspace)/sizeof(int));
2162            }            }
# Line 2210  while (!done) Line 2219  while (!done)
2219        else if (all_use_dfa || use_dfa)        else if (all_use_dfa || use_dfa)
2220          {          {
2221          int workspace[1000];          int workspace[1000];
2222          count = pcre_dfa_exec(re, NULL, (char *)bptr, len, start_offset,          count = pcre_dfa_exec(re, extra, (char *)bptr, len, start_offset,
2223            options | g_notempty, use_offsets, use_size_offsets, workspace,            options | g_notempty, use_offsets, use_size_offsets, workspace,
2224            sizeof(workspace)/sizeof(int));            sizeof(workspace)/sizeof(int));
2225          if (count == 0)          if (count == 0)
# Line 2369  while (!done) Line 2378  while (!done)
2378            {            {
2379            fprintf(outfile, ": ");            fprintf(outfile, ": ");
2380            pchars(bptr + use_offsets[0], use_offsets[1] - use_offsets[0],            pchars(bptr + use_offsets[0], use_offsets[1] - use_offsets[0],
2381              outfile);              outfile);
2382            }            }
2383          fprintf(outfile, "\n");          fprintf(outfile, "\n");
2384          break;  /* Out of the /g loop */          break;  /* Out of the /g loop */
2385          }          }
# Line 2443  while (!done) Line 2452  while (!done)
2452        if (!do_g && !do_G) break;        if (!do_g && !do_G) break;
2453    
2454        /* If we have matched an empty string, first check to see if we are at        /* If we have matched an empty string, first check to see if we are at
2455        the end of the subject. If so, the /g loop is over. Otherwise, mimic        the end of the subject. If so, the /g loop is over. Otherwise, mimic what
2456        what Perl's /g options does. This turns out to be rather cunning. First        Perl's /g options does. This turns out to be rather cunning. First we set
2457        we set PCRE_NOTEMPTY and PCRE_ANCHORED and try the match again at the        PCRE_NOTEMPTY_ATSTART and PCRE_ANCHORED and try the match again at the
2458        same point. If this fails (picked up above) we advance to the next        same point. If this fails (picked up above) we advance to the next
2459        character. */        character. */
2460    
# Line 2454  while (!done) Line 2463  while (!done)
2463        if (use_offsets[0] == use_offsets[1])        if (use_offsets[0] == use_offsets[1])
2464          {          {
2465          if (use_offsets[0] == len) break;          if (use_offsets[0] == len) break;
2466          g_notempty = PCRE_NOTEMPTY | PCRE_ANCHORED;          g_notempty = PCRE_NOTEMPTY_ATSTART | PCRE_ANCHORED;
2467          }          }
2468    
2469        /* For /g, update the start offset, leaving the rest alone */        /* For /g, update the start offset, leaving the rest alone */

Legend:
Removed from v.432  
changed lines
  Added in v.498

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12