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

Diff of /code/trunk/pcre_compile.c

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

revision 994 by ph10, Tue Jul 10 14:29:26 2012 UTC revision 1041 by ph10, Sun Sep 16 10:16:27 2012 UTC
# Line 789  else if ((i = escapes[c - CHAR_0]) != 0) Line 789  else if ((i = escapes[c - CHAR_0]) != 0)
789    
790  #else           /* EBCDIC coding */  #else           /* EBCDIC coding */
791  /* Not alphanumeric */  /* Not alphanumeric */
792  else if (c < 'a' || (!MAX_255(c) || (ebcdic_chartab[c] & 0x0E) == 0)) {}  else if (c < CHAR_a || (!MAX_255(c) || (ebcdic_chartab[c] & 0x0E) == 0)) {}
793  else if ((i = escapes[c - 0x48]) != 0)  c = i;  else if ((i = escapes[c - 0x48]) != 0)  c = i;
794  #endif  #endif
795    
# Line 3168  if (next >= 0) switch(op_code) Line 3168  if (next >= 0) switch(op_code)
3168    case OP_NOT_HSPACE:    case OP_NOT_HSPACE:
3169    switch(next)    switch(next)
3170      {      {
3171      case 0x09:      HSPACE_CASES:
     case 0x20:  
     case 0xa0:  
     case 0x1680:  
     case 0x180e:  
     case 0x2000:  
     case 0x2001:  
     case 0x2002:  
     case 0x2003:  
     case 0x2004:  
     case 0x2005:  
     case 0x2006:  
     case 0x2007:  
     case 0x2008:  
     case 0x2009:  
     case 0x200A:  
     case 0x202f:  
     case 0x205f:  
     case 0x3000:  
3172      return op_code == OP_NOT_HSPACE;      return op_code == OP_NOT_HSPACE;
3173    
3174      default:      default:
3175      return op_code != OP_NOT_HSPACE;      return op_code != OP_NOT_HSPACE;
3176      }      }
# Line 3197  if (next >= 0) switch(op_code) Line 3180  if (next >= 0) switch(op_code)
3180    case OP_NOT_VSPACE:    case OP_NOT_VSPACE:
3181    switch(next)    switch(next)
3182      {      {
3183      case 0x0a:      VSPACE_CASES:
     case 0x0b:  
     case 0x0c:  
     case 0x0d:  
     case 0x85:  
     case 0x2028:  
     case 0x2029:  
3184      return op_code == OP_NOT_VSPACE;      return op_code == OP_NOT_VSPACE;
3185    
3186      default:      default:
3187      return op_code != OP_NOT_VSPACE;      return op_code != OP_NOT_VSPACE;
3188      }      }
# Line 3261  switch(op_code) Line 3239  switch(op_code)
3239      case ESC_H:      case ESC_H:
3240      switch(c)      switch(c)
3241        {        {
3242        case 0x09:        HSPACE_CASES:
       case 0x20:  
       case 0xa0:  
       case 0x1680:  
       case 0x180e:  
       case 0x2000:  
       case 0x2001:  
       case 0x2002:  
       case 0x2003:  
       case 0x2004:  
       case 0x2005:  
       case 0x2006:  
       case 0x2007:  
       case 0x2008:  
       case 0x2009:  
       case 0x200A:  
       case 0x202f:  
       case 0x205f:  
       case 0x3000:  
3243        return -next != ESC_h;        return -next != ESC_h;
3244    
3245        default:        default:
3246        return -next == ESC_h;        return -next == ESC_h;
3247        }        }
# Line 3289  switch(op_code) Line 3250  switch(op_code)
3250      case ESC_V:      case ESC_V:
3251      switch(c)      switch(c)
3252        {        {
3253        case 0x0a:        VSPACE_CASES:
       case 0x0b:  
       case 0x0c:  
       case 0x0d:  
       case 0x85:  
       case 0x2028:  
       case 0x2029:  
3254        return -next != ESC_v;        return -next != ESC_v;
3255    
3256        default:        default:
3257        return -next == ESC_v;        return -next == ESC_v;
3258        }        }
# Line 4057  for (;; ptr++) Line 4013  for (;; ptr++)
4013    
4014              /* Perl 5.004 onwards omits VT from \s, but we must preserve it              /* Perl 5.004 onwards omits VT from \s, but we must preserve it
4015              if it was previously set by something earlier in the character              if it was previously set by something earlier in the character
4016              class. */              class. Luckily, the value of CHAR_VT is 0x0b in both ASCII and
4017                EBCDIC, so we lazily just adjust the appropriate bit. */
4018    
4019              case ESC_s:              case ESC_s:
4020              classbits[0] |= cbits[cbit_space];              classbits[0] |= cbits[cbit_space];
# Line 4072  for (;; ptr++) Line 4029  for (;; ptr++)
4029              continue;              continue;
4030    
4031              case ESC_h:              case ESC_h:
4032              SETBIT(classbits, 0x09); /* VT */              SETBIT(classbits, CHAR_HT);
4033              SETBIT(classbits, 0x20); /* SPACE */              SETBIT(classbits, CHAR_SPACE);
4034    #ifndef EBCDIC
4035              SETBIT(classbits, 0xa0); /* NSBP */              SETBIT(classbits, 0xa0); /* NSBP */
4036  #ifndef COMPILE_PCRE8  #ifndef COMPILE_PCRE8
4037              xclass = TRUE;              xclass = TRUE;
# Line 4109  for (;; ptr++) Line 4067  for (;; ptr++)
4067                class_uchardata += PRIV(ord2utf)(0x3000, class_uchardata);                class_uchardata += PRIV(ord2utf)(0x3000, class_uchardata);
4068                }                }
4069  #endif  #endif
4070    #endif  /* Not EBCDIC */
4071              continue;              continue;
4072    
4073              case ESC_H:              case ESC_H:
# Line 4117  for (;; ptr++) Line 4076  for (;; ptr++)
4076                int x = 0xff;                int x = 0xff;
4077                switch (c)                switch (c)
4078                  {                  {
4079                  case 0x09/8: x ^= 1 << (0x09%8); break;                  case CHAR_HT/8:    x ^= 1 << (CHAR_HT%8); break;
4080                  case 0x20/8: x ^= 1 << (0x20%8); break;                  case CHAR_SPACE/8: x ^= 1 << (CHAR_SPACE%8); break;
4081                  case 0xa0/8: x ^= 1 << (0xa0%8); break;  #ifndef EBCDIC
4082                    case 0xa0/8: x ^= 1 << (0xa0%8); break;  /* NSBSP */
4083    #endif
4084                  default: break;                  default: break;
4085                  }                  }
4086                classbits[c] |= x;                classbits[c] |= x;
4087                }                }
4088    #ifndef EBCDIC
4089  #ifndef COMPILE_PCRE8  #ifndef COMPILE_PCRE8
4090              xclass = TRUE;              xclass = TRUE;
4091              *class_uchardata++ = XCL_RANGE;              *class_uchardata++ = XCL_RANGE;
# Line 4150  for (;; ptr++) Line 4112  for (;; ptr++)
4112              if (utf)              if (utf)
4113                class_uchardata += PRIV(ord2utf)(0x10ffff, class_uchardata);                class_uchardata += PRIV(ord2utf)(0x10ffff, class_uchardata);
4114              else              else
4115  #endif  #endif   /* SUPPORT_UTF */
4116                *class_uchardata++ = 0xffff;                *class_uchardata++ = 0xffff;
4117  #elif defined SUPPORT_UTF  #elif defined SUPPORT_UTF
4118              if (utf)              if (utf)
# Line 4179  for (;; ptr++) Line 4141  for (;; ptr++)
4141                class_uchardata += PRIV(ord2utf)(0x10ffff, class_uchardata);                class_uchardata += PRIV(ord2utf)(0x10ffff, class_uchardata);
4142                }                }
4143  #endif  #endif
4144    #endif  /* Not EBCDIC */
4145              continue;              continue;
4146    
4147              case ESC_v:              case ESC_v:
4148              SETBIT(classbits, 0x0a); /* LF */              SETBIT(classbits, CHAR_LF);
4149              SETBIT(classbits, 0x0b); /* VT */              SETBIT(classbits, CHAR_VT);
4150              SETBIT(classbits, 0x0c); /* FF */              SETBIT(classbits, CHAR_FF);
4151              SETBIT(classbits, 0x0d); /* CR */              SETBIT(classbits, CHAR_CR);
4152              SETBIT(classbits, 0x85); /* NEL */              SETBIT(classbits, CHAR_NEL);
4153    #ifndef EBCDIC
4154  #ifndef COMPILE_PCRE8  #ifndef COMPILE_PCRE8
4155              xclass = TRUE;              xclass = TRUE;
4156              *class_uchardata++ = XCL_RANGE;              *class_uchardata++ = XCL_RANGE;
# Line 4201  for (;; ptr++) Line 4165  for (;; ptr++)
4165                class_uchardata += PRIV(ord2utf)(0x2029, class_uchardata);                class_uchardata += PRIV(ord2utf)(0x2029, class_uchardata);
4166                }                }
4167  #endif  #endif
4168    #endif  /* Not EBCDIC */
4169              continue;              continue;
4170    
4171              case ESC_V:              case ESC_V:
# Line 4209  for (;; ptr++) Line 4174  for (;; ptr++)
4174                int x = 0xff;                int x = 0xff;
4175                switch (c)                switch (c)
4176                  {                  {
4177                  case 0x0a/8: x ^= 1 << (0x0a%8);                  case CHAR_LF/8: x ^= 1 << (CHAR_LF%8);
4178                               x ^= 1 << (0x0b%8);                                  x ^= 1 << (CHAR_VT%8);
4179                               x ^= 1 << (0x0c%8);                                  x ^= 1 << (CHAR_FF%8);
4180                               x ^= 1 << (0x0d%8);                                  x ^= 1 << (CHAR_CR%8);
4181                               break;                                  break;
4182                  case 0x85/8: x ^= 1 << (0x85%8); break;                  case CHAR_NEL/8: x ^= 1 << (CHAR_NEL%8); break;
4183                  default: break;                  default: break;
4184                  }                  }
4185                classbits[c] |= x;                classbits[c] |= x;
4186                }                }
4187    
4188    #ifndef EBCDIC
4189  #ifndef COMPILE_PCRE8  #ifndef COMPILE_PCRE8
4190              xclass = TRUE;              xclass = TRUE;
4191              *class_uchardata++ = XCL_RANGE;              *class_uchardata++ = XCL_RANGE;
# Line 4245  for (;; ptr++) Line 4211  for (;; ptr++)
4211                class_uchardata += PRIV(ord2utf)(0x10ffff, class_uchardata);                class_uchardata += PRIV(ord2utf)(0x10ffff, class_uchardata);
4212                }                }
4213  #endif  #endif
4214    #endif  /* Not EBCDIC */
4215              continue;              continue;
4216    
4217  #ifdef SUPPORT_UCP  #ifdef SUPPORT_UCP

Legend:
Removed from v.994  
changed lines
  Added in v.1041

  ViewVC Help
Powered by ViewVC 1.1.5