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

Diff of /code/trunk/pcre_xclass.c

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

revision 85 by nigel, Sat Feb 24 21:41:13 2007 UTC revision 384 by ph10, Sun Mar 8 16:27:43 2009 UTC
# Line 6  Line 6 
6  and semantics are as close as possible to those of the Perl 5 language.  and semantics are as close as possible to those of the Perl 5 language.
7    
8                         Written by Philip Hazel                         Written by Philip Hazel
9             Copyright (c) 1997-2005 University of Cambridge             Copyright (c) 1997-2009 University of Cambridge
10    
11  -----------------------------------------------------------------------------  -----------------------------------------------------------------------------
12  Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
# Line 39  POSSIBILITY OF SUCH DAMAGE. Line 39  POSSIBILITY OF SUCH DAMAGE.
39    
40    
41  /* This module contains an internal function that is used to match an extended  /* This module contains an internal function that is used to match an extended
42  class (one that contains characters whose values are > 255). It is used by both  class. It is used by both pcre_exec() and pcre_def_exec(). */
 pcre_exec() and pcre_def_exec(). */  
43    
44    
45    #ifdef HAVE_CONFIG_H
46    #include "config.h"
47    #endif
48    
49  #include "pcre_internal.h"  #include "pcre_internal.h"
50    
51    
# Line 51  pcre_exec() and pcre_def_exec(). */ Line 54  pcre_exec() and pcre_def_exec(). */
54  *************************************************/  *************************************************/
55    
56  /* This function is called to match a character against an extended class that  /* This function is called to match a character against an extended class that
57  might contain values > 255.  might contain values > 255 and/or Unicode properties.
58    
59  Arguments:  Arguments:
60    c           the character    c           the character
# Line 60  Arguments: Line 63  Arguments:
63  Returns:      TRUE if character matches, else FALSE  Returns:      TRUE if character matches, else FALSE
64  */  */
65    
66  PCRE_EXPORT BOOL  BOOL
67  _pcre_xclass(int c, const uschar *data)  _pcre_xclass(int c, const uschar *data)
68  {  {
69  int t;  int t;
# Line 100  while ((t = *data++) != XCL_END) Line 103  while ((t = *data++) != XCL_END)
103  #ifdef SUPPORT_UCP  #ifdef SUPPORT_UCP
104    else  /* XCL_PROP & XCL_NOTPROP */    else  /* XCL_PROP & XCL_NOTPROP */
105      {      {
106      int chartype, othercase;      const ucd_record *prop = GET_UCD(c);
107      int rqdtype = *data++;  
108      int category = _pcre_ucp_findchar(c, &chartype, &othercase);      switch(*data)
     if (rqdtype >= 128)  
       {  
       if ((rqdtype - 128 == category) == (t == XCL_PROP)) return !negated;  
       }  
     else  
109        {        {
110        if ((rqdtype == chartype) == (t == XCL_PROP)) return !negated;        case PT_ANY:
111          if (t == XCL_PROP) return !negated;
112          break;
113    
114          case PT_LAMP:
115          if ((prop->chartype == ucp_Lu || prop->chartype == ucp_Ll || prop->chartype == ucp_Lt) ==
116              (t == XCL_PROP)) return !negated;
117          break;
118    
119          case PT_GC:
120          if ((data[1] == _pcre_ucp_gentype[prop->chartype]) == (t == XCL_PROP)) return !negated;
121          break;
122    
123          case PT_PC:
124          if ((data[1] == prop->chartype) == (t == XCL_PROP)) return !negated;
125          break;
126    
127          case PT_SC:
128          if ((data[1] == prop->script) == (t == XCL_PROP)) return !negated;
129          break;
130    
131          /* This should never occur, but compilers may mutter if there is no
132          default. */
133    
134          default:
135          return FALSE;
136        }        }
137    
138        data += 2;
139      }      }
140  #endif  /* SUPPORT_UCP */  #endif  /* SUPPORT_UCP */
141    }    }

Legend:
Removed from v.85  
changed lines
  Added in v.384

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12