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

Diff of /code/trunk/pcre.c

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

revision 18 by nigel, Sat Feb 24 21:38:29 2007 UTC revision 19 by nigel, Sat Feb 24 21:38:33 2007 UTC
# Line 623  compile_branch(int options, int *bracket Line 623  compile_branch(int options, int *bracket
623  int repeat_type, op_type;  int repeat_type, op_type;
624  int repeat_min, repeat_max;  int repeat_min, repeat_max;
625  int bravalue, length;  int bravalue, length;
626    int greedy_default, greedy_non_default;
627  register int c;  register int c;
628  register uschar *code = *codeptr;  register uschar *code = *codeptr;
629  const uschar *ptr = *ptrptr;  const uschar *ptr = *ptrptr;
# Line 630  const uschar *oldptr; Line 631  const uschar *oldptr;
631  uschar *previous = NULL;  uschar *previous = NULL;
632  uschar class[32];  uschar class[32];
633    
634    /* Set up the default and non-default settings for greediness */
635    
636    greedy_default = ((options & PCRE_UNGREEDY) != 0);
637    greedy_non_default = greedy_default ^ 1;
638    
639  /* Switch on next character until the end of the branch */  /* Switch on next character until the end of the branch */
640    
641  for (;; ptr++)  for (;; ptr++)
# Line 907  for (;; ptr++) Line 913  for (;; ptr++)
913        goto FAILED;        goto FAILED;
914        }        }
915    
916      /* If the next character is '?' this is a minimizing repeat. Advance to the      /* If the next character is '?' this is a minimizing repeat, by default,
917        but if PCRE_UNGREEDY is set, it works the other way round. Advance to the
918      next character. */      next character. */
919    
920      if (ptr[1] == '?') { repeat_type = 1; ptr++; } else repeat_type = 0;      if (ptr[1] == '?')
921          { repeat_type = greedy_non_default; ptr++; }
922        else repeat_type = greedy_default;
923    
924      /* If the maximum is zero then the minimum must also be zero; Perl allows      /* If the maximum is zero then the minimum must also be zero; Perl allows
925      this case, so we do too - by simply omitting the item altogether. */      this case, so we do too - by simply omitting the item altogether. */
# Line 1149  for (;; ptr++) Line 1158  for (;; ptr++)
1158          case 'm':          case 'm':
1159          case 's':          case 's':
1160          case 'x':          case 'x':
1161            case 'U':
1162            case 'X':
1163          ptr++;          ptr++;
1164          while (*ptr != ')') ptr++;          while (*ptr != ')') ptr++;
1165          previous = NULL;          previous = NULL;
# Line 1752  while ((c = *(++ptr)) != 0) Line 1763  while ((c = *(++ptr)) != 0)
1763          ptr += 2;          ptr += 2;
1764          break;          break;
1765          }          }
1766        /* Else fall thourh */        /* Else fall through */
1767    
1768        /* Else loop setting valid options until ) is met. Anything else is an        /* Else loop setting valid options until ) is met. Anything else is an
1769        error. */        error. */
# Line 1782  while ((c = *(++ptr)) != 0) Line 1793  while ((c = *(++ptr)) != 0)
1793            length -= spaces;          /* Already counted spaces */            length -= spaces;          /* Already counted spaces */
1794            continue;            continue;
1795            }            }
1796            else if (c == 'X')
1797              {
1798              options |= PCRE_EXTRA;
1799              continue;
1800              }
1801            else if (c == 'U')
1802              {
1803              options |= PCRE_UNGREEDY;
1804              continue;
1805              }
1806          else if (c == ')') break;          else if (c == ')') break;
1807    
1808          *errorptr = ERR12;          *errorptr = ERR12;
# Line 1987  printf("Length = %d top_bracket = %d top Line 2008  printf("Length = %d top_bracket = %d top
2008    
2009  if (re->options != 0)  if (re->options != 0)
2010    {    {
2011    printf("%s%s%s%s%s%s%s\n",    printf("%s%s%s%s%s%s%s%s\n",
2012      ((re->options & PCRE_ANCHORED) != 0)? "anchored " : "",      ((re->options & PCRE_ANCHORED) != 0)? "anchored " : "",
2013      ((re->options & PCRE_CASELESS) != 0)? "caseless " : "",      ((re->options & PCRE_CASELESS) != 0)? "caseless " : "",
2014      ((re->options & PCRE_EXTENDED) != 0)? "extended " : "",      ((re->options & PCRE_EXTENDED) != 0)? "extended " : "",
2015      ((re->options & PCRE_MULTILINE) != 0)? "multiline " : "",      ((re->options & PCRE_MULTILINE) != 0)? "multiline " : "",
2016      ((re->options & PCRE_DOTALL) != 0)? "dotall " : "",      ((re->options & PCRE_DOTALL) != 0)? "dotall " : "",
2017      ((re->options & PCRE_DOLLAR_ENDONLY) != 0)? "endonly " : "",      ((re->options & PCRE_DOLLAR_ENDONLY) != 0)? "endonly " : "",
2018      ((re->options & PCRE_EXTRA) != 0)? "extra " : "");      ((re->options & PCRE_EXTRA) != 0)? "extra " : "",
2019        ((re->options & PCRE_UNGREEDY) != 0)? "ungreedy " : "");
2020    }    }
2021    
2022  if ((re->options & PCRE_FIRSTSET) != 0)  if ((re->options & PCRE_FIRSTSET) != 0)

Legend:
Removed from v.18  
changed lines
  Added in v.19

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12