/[pcre]/code/trunk/pcre_internal.h
ViewVC logotype

Diff of /code/trunk/pcre_internal.h

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

revision 166 by ph10, Wed May 9 14:48:28 2007 UTC revision 168 by ph10, Tue May 29 15:18:18 2007 UTC
# Line 605  ESC_Z to detect the types that may be re Line 605  ESC_Z to detect the types that may be re
605  consume characters. If any new escapes are put in between that don't consume a  consume characters. If any new escapes are put in between that don't consume a
606  character, that code will have to change. */  character, that code will have to change. */
607    
608  enum { ESC_A = 1, ESC_G, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W,  enum { ESC_A = 1, ESC_G, ESC_K, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s,
609         ESC_w, ESC_dum1, ESC_C, ESC_P, ESC_p, ESC_R, ESC_X, ESC_Z, ESC_z,         ESC_W, ESC_w, ESC_dum1, ESC_C, ESC_P, ESC_p, ESC_R, ESC_X, ESC_Z, ESC_z,
610         ESC_E, ESC_Q, ESC_k, ESC_REF };         ESC_E, ESC_Q, ESC_k, ESC_REF };
611    
612    
# Line 629  enum { Line 629  enum {
629    
630    OP_SOD,            /* 1 Start of data: \A */    OP_SOD,            /* 1 Start of data: \A */
631    OP_SOM,            /* 2 Start of match (subject + offset): \G */    OP_SOM,            /* 2 Start of match (subject + offset): \G */
632    OP_NOT_WORD_BOUNDARY,  /*  3 \B */    OP_SET_SOM,        /* 3 Set start of match (\K) */
633    OP_WORD_BOUNDARY,      /*  4 \b */    OP_NOT_WORD_BOUNDARY,  /*  4 \B */
634    OP_NOT_DIGIT,          /*  5 \D */    OP_WORD_BOUNDARY,      /*  5 \b */
635    OP_DIGIT,              /*  6 \d */    OP_NOT_DIGIT,          /*  6 \D */
636    OP_NOT_WHITESPACE,     /*  7 \S */    OP_DIGIT,              /*  7 \d */
637    OP_WHITESPACE,         /*  8 \s */    OP_NOT_WHITESPACE,     /*  8 \S */
638    OP_NOT_WORDCHAR,       /*  9 \W */    OP_WHITESPACE,         /*  9 \s */
639    OP_WORDCHAR,           /* 10 \w */    OP_NOT_WORDCHAR,       /* 10 \W */
640    OP_ANY,            /* 11 Match any character */    OP_WORDCHAR,           /* 11 \w */
641    OP_ANYBYTE,        /* 12 Match any byte (\C); different to OP_ANY for UTF-8 */    OP_ANY,            /* 12 Match any character */
642    OP_NOTPROP,        /* 13 \P (not Unicode property) */    OP_ANYBYTE,        /* 13 Match any byte (\C); different to OP_ANY for UTF-8 */
643    OP_PROP,           /* 14 \p (Unicode property) */    OP_NOTPROP,        /* 14 \P (not Unicode property) */
644    OP_ANYNL,          /* 15 \R (any newline sequence) */    OP_PROP,           /* 15 \p (Unicode property) */
645    OP_EXTUNI,         /* 16 \X (extended Unicode sequence */    OP_ANYNL,          /* 16 \R (any newline sequence) */
646    OP_EODN,           /* 17 End of data or \n at end of data: \Z. */    OP_EXTUNI,         /* 17 \X (extended Unicode sequence */
647    OP_EOD,            /* 18 End of data: \z */    OP_EODN,           /* 18 End of data or \n at end of data: \Z. */
648      OP_EOD,            /* 19 End of data: \z */
649    OP_OPT,            /* 19 Set runtime options */  
650    OP_CIRC,           /* 20 Start of line - varies with multiline switch */    OP_OPT,            /* 20 Set runtime options */
651    OP_DOLL,           /* 21 End of line - varies with multiline switch */    OP_CIRC,           /* 21 Start of line - varies with multiline switch */
652    OP_CHAR,           /* 22 Match one character, casefully */    OP_DOLL,           /* 22 End of line - varies with multiline switch */
653    OP_CHARNC,         /* 23 Match one character, caselessly */    OP_CHAR,           /* 23 Match one character, casefully */
654    OP_NOT,            /* 24 Match one character, not the following one */    OP_CHARNC,         /* 24 Match one character, caselessly */
655      OP_NOT,            /* 25 Match one character, not the following one */
656    OP_STAR,           /* 25 The maximizing and minimizing versions of */  
657    OP_MINSTAR,        /* 26 these six opcodes must come in pairs, with */    OP_STAR,           /* 26 The maximizing and minimizing versions of */
658    OP_PLUS,           /* 27 the minimizing one second. */    OP_MINSTAR,        /* 27 these six opcodes must come in pairs, with */
659    OP_MINPLUS,        /* 28 This first set applies to single characters.*/    OP_PLUS,           /* 28 the minimizing one second. */
660    OP_QUERY,          /* 29 */    OP_MINPLUS,        /* 29 This first set applies to single characters.*/
661    OP_MINQUERY,       /* 30 */    OP_QUERY,          /* 30 */
662      OP_MINQUERY,       /* 31 */
663    OP_UPTO,           /* 31 From 0 to n matches */  
664    OP_MINUPTO,        /* 32 */    OP_UPTO,           /* 32 From 0 to n matches */
665    OP_EXACT,          /* 33 Exactly n matches */    OP_MINUPTO,        /* 33 */
666      OP_EXACT,          /* 34 Exactly n matches */
667    OP_POSSTAR,        /* 34 Possessified star */  
668    OP_POSPLUS,        /* 35 Possessified plus */    OP_POSSTAR,        /* 35 Possessified star */
669    OP_POSQUERY,       /* 36 Posesssified query */    OP_POSPLUS,        /* 36 Possessified plus */
670    OP_POSUPTO,        /* 37 Possessified upto */    OP_POSQUERY,       /* 37 Posesssified query */
671      OP_POSUPTO,        /* 38 Possessified upto */
672    OP_NOTSTAR,        /* 38 The maximizing and minimizing versions of */  
673    OP_NOTMINSTAR,     /* 39 these six opcodes must come in pairs, with */    OP_NOTSTAR,        /* 39 The maximizing and minimizing versions of */
674    OP_NOTPLUS,        /* 40 the minimizing one second. They must be in */    OP_NOTMINSTAR,     /* 40 these six opcodes must come in pairs, with */
675    OP_NOTMINPLUS,     /* 41 exactly the same order as those above. */    OP_NOTPLUS,        /* 41 the minimizing one second. They must be in */
676    OP_NOTQUERY,       /* 42 This set applies to "not" single characters. */    OP_NOTMINPLUS,     /* 42 exactly the same order as those above. */
677    OP_NOTMINQUERY,    /* 43 */    OP_NOTQUERY,       /* 43 This set applies to "not" single characters. */
678      OP_NOTMINQUERY,    /* 44 */
679    OP_NOTUPTO,        /* 44 From 0 to n matches */  
680    OP_NOTMINUPTO,     /* 45 */    OP_NOTUPTO,        /* 45 From 0 to n matches */
681    OP_NOTEXACT,       /* 46 Exactly n matches */    OP_NOTMINUPTO,     /* 46 */
682      OP_NOTEXACT,       /* 47 Exactly n matches */
683    OP_NOTPOSSTAR,     /* 47 Possessified versions */  
684    OP_NOTPOSPLUS,     /* 48 */    OP_NOTPOSSTAR,     /* 48 Possessified versions */
685    OP_NOTPOSQUERY,    /* 49 */    OP_NOTPOSPLUS,     /* 49 */
686    OP_NOTPOSUPTO,     /* 50 */    OP_NOTPOSQUERY,    /* 50 */
687      OP_NOTPOSUPTO,     /* 51 */
688    OP_TYPESTAR,       /* 51 The maximizing and minimizing versions of */  
689    OP_TYPEMINSTAR,    /* 52 these six opcodes must come in pairs, with */    OP_TYPESTAR,       /* 52 The maximizing and minimizing versions of */
690    OP_TYPEPLUS,       /* 53 the minimizing one second. These codes must */    OP_TYPEMINSTAR,    /* 53 these six opcodes must come in pairs, with */
691    OP_TYPEMINPLUS,    /* 54 be in exactly the same order as those above. */    OP_TYPEPLUS,       /* 54 the minimizing one second. These codes must */
692    OP_TYPEQUERY,      /* 55 This set applies to character types such as \d */    OP_TYPEMINPLUS,    /* 55 be in exactly the same order as those above. */
693    OP_TYPEMINQUERY,   /* 56 */    OP_TYPEQUERY,      /* 56 This set applies to character types such as \d */
694      OP_TYPEMINQUERY,   /* 57 */
695    OP_TYPEUPTO,       /* 57 From 0 to n matches */  
696    OP_TYPEMINUPTO,    /* 58 */    OP_TYPEUPTO,       /* 58 From 0 to n matches */
697    OP_TYPEEXACT,      /* 59 Exactly n matches */    OP_TYPEMINUPTO,    /* 59 */
698      OP_TYPEEXACT,      /* 60 Exactly n matches */
699    OP_TYPEPOSSTAR,    /* 60 Possessified versions */  
700    OP_TYPEPOSPLUS,    /* 61 */    OP_TYPEPOSSTAR,    /* 61 Possessified versions */
701    OP_TYPEPOSQUERY,   /* 62 */    OP_TYPEPOSPLUS,    /* 62 */
702    OP_TYPEPOSUPTO,    /* 63 */    OP_TYPEPOSQUERY,   /* 63 */
703      OP_TYPEPOSUPTO,    /* 64 */
704    OP_CRSTAR,         /* 64 The maximizing and minimizing versions of */  
705    OP_CRMINSTAR,      /* 65 all these opcodes must come in pairs, with */    OP_CRSTAR,         /* 65 The maximizing and minimizing versions of */
706    OP_CRPLUS,         /* 66 the minimizing one second. These codes must */    OP_CRMINSTAR,      /* 66 all these opcodes must come in pairs, with */
707    OP_CRMINPLUS,      /* 67 be in exactly the same order as those above. */    OP_CRPLUS,         /* 67 the minimizing one second. These codes must */
708    OP_CRQUERY,        /* 68 These are for character classes and back refs */    OP_CRMINPLUS,      /* 68 be in exactly the same order as those above. */
709    OP_CRMINQUERY,     /* 69 */    OP_CRQUERY,        /* 69 These are for character classes and back refs */
710    OP_CRRANGE,        /* 70 These are different to the three sets above. */    OP_CRMINQUERY,     /* 70 */
711    OP_CRMINRANGE,     /* 71 */    OP_CRRANGE,        /* 71 These are different to the three sets above. */
712      OP_CRMINRANGE,     /* 72 */
713    
714    OP_CLASS,          /* 72 Match a character class, chars < 256 only */    OP_CLASS,          /* 73 Match a character class, chars < 256 only */
715    OP_NCLASS,         /* 73 Same, but the bitmap was created from a negative    OP_NCLASS,         /* 74 Same, but the bitmap was created from a negative
716                             class - the difference is relevant only when a UTF-8                             class - the difference is relevant only when a UTF-8
717                             character > 255 is encountered. */                             character > 255 is encountered. */
718    
719    OP_XCLASS,         /* 74 Extended class for handling UTF-8 chars within the    OP_XCLASS,         /* 75 Extended class for handling UTF-8 chars within the
720                             class. This does both positive and negative. */                             class. This does both positive and negative. */
721    
722    OP_REF,            /* 75 Match a back reference */    OP_REF,            /* 76 Match a back reference */
723    OP_RECURSE,        /* 76 Match a numbered subpattern (possibly recursive) */    OP_RECURSE,        /* 77 Match a numbered subpattern (possibly recursive) */
724    OP_CALLOUT,        /* 77 Call out to external function if provided */    OP_CALLOUT,        /* 78 Call out to external function if provided */
725    
726    OP_ALT,            /* 78 Start of alternation */    OP_ALT,            /* 79 Start of alternation */
727    OP_KET,            /* 79 End of group that doesn't have an unbounded repeat */    OP_KET,            /* 80 End of group that doesn't have an unbounded repeat */
728    OP_KETRMAX,        /* 80 These two must remain together and in this */    OP_KETRMAX,        /* 81 These two must remain together and in this */
729    OP_KETRMIN,        /* 81 order. They are for groups the repeat for ever. */    OP_KETRMIN,        /* 82 order. They are for groups the repeat for ever. */
730    
731    /* The assertions must come before BRA, CBRA, ONCE, and COND.*/    /* The assertions must come before BRA, CBRA, ONCE, and COND.*/
732    
733    OP_ASSERT,         /* 82 Positive lookahead */    OP_ASSERT,         /* 83 Positive lookahead */
734    OP_ASSERT_NOT,     /* 83 Negative lookahead */    OP_ASSERT_NOT,     /* 84 Negative lookahead */
735    OP_ASSERTBACK,     /* 84 Positive lookbehind */    OP_ASSERTBACK,     /* 85 Positive lookbehind */
736    OP_ASSERTBACK_NOT, /* 85 Negative lookbehind */    OP_ASSERTBACK_NOT, /* 86 Negative lookbehind */
737    OP_REVERSE,        /* 86 Move pointer back - used in lookbehind assertions */    OP_REVERSE,        /* 87 Move pointer back - used in lookbehind assertions */
738    
739    /* ONCE, BRA, CBRA, and COND must come after the assertions, with ONCE first,    /* ONCE, BRA, CBRA, and COND must come after the assertions, with ONCE first,
740    as there's a test for >= ONCE for a subpattern that isn't an assertion. */    as there's a test for >= ONCE for a subpattern that isn't an assertion. */
741    
742    OP_ONCE,           /* 87 Atomic group */    OP_ONCE,           /* 88 Atomic group */
743    OP_BRA,            /* 88 Start of non-capturing bracket */    OP_BRA,            /* 89 Start of non-capturing bracket */
744    OP_CBRA,           /* 89 Start of capturing bracket */    OP_CBRA,           /* 90 Start of capturing bracket */
745    OP_COND,           /* 90 Conditional group */    OP_COND,           /* 91 Conditional group */
746    
747    /* These three must follow the previous three, in the same order. There's a    /* These three must follow the previous three, in the same order. There's a
748    check for >= SBRA to distinguish the two sets. */    check for >= SBRA to distinguish the two sets. */
749    
750    OP_SBRA,           /* 91 Start of non-capturing bracket, check empty  */    OP_SBRA,           /* 92 Start of non-capturing bracket, check empty  */
751    OP_SCBRA,          /* 92 Start of capturing bracket, check empty */    OP_SCBRA,          /* 93 Start of capturing bracket, check empty */
752    OP_SCOND,          /* 93 Conditional group, check empty */    OP_SCOND,          /* 94 Conditional group, check empty */
753    
754    OP_CREF,           /* 94 Used to hold a capture number as condition */    OP_CREF,           /* 95 Used to hold a capture number as condition */
755    OP_RREF,           /* 95 Used to hold a recursion number as condition */    OP_RREF,           /* 96 Used to hold a recursion number as condition */
756    OP_DEF,            /* 96 The DEFINE condition */    OP_DEF,            /* 97 The DEFINE condition */
757    
758    OP_BRAZERO,        /* 97 These two must remain together and in this */    OP_BRAZERO,        /* 98 These two must remain together and in this */
759    OP_BRAMINZERO      /* 98 order. */    OP_BRAMINZERO      /* 99 order. */
760  };  };
761    
762    
# Line 763  enum { Line 764  enum {
764  for debugging. The macro is referenced only in pcre_printint.c. */  for debugging. The macro is referenced only in pcre_printint.c. */
765    
766  #define OP_NAME_LIST \  #define OP_NAME_LIST \
767    "End", "\\A", "\\G", "\\B", "\\b", "\\D", "\\d",                \    "End", "\\A", "\\G", "\\K", "\\B", "\\b", "\\D", "\\d",         \
768    "\\S", "\\s", "\\W", "\\w", "Any", "Anybyte",                   \    "\\S", "\\s", "\\W", "\\w", "Any", "Anybyte",                   \
769    "notprop", "prop", "anynl", "extuni",                           \    "notprop", "prop", "anynl", "extuni",                           \
770    "\\Z", "\\z",                                                   \    "\\Z", "\\z",                                                   \
# Line 793  in UTF-8 mode. The code that uses this t Line 794  in UTF-8 mode. The code that uses this t
794    
795  #define OP_LENGTHS \  #define OP_LENGTHS \
796    1,                             /* End                                    */ \    1,                             /* End                                    */ \
797    1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* \A, \G, \B, \B, \D, \d, \S, \s, \W, \w */ \    1, 1, 1, 1, 1,                 /* \A, \G, \K, \B, \b                     */ \
798      1, 1, 1, 1, 1, 1,              /* \D, \d, \S, \s, \W, \w                 */ \
799    1, 1,                          /* Any, Anybyte                           */ \    1, 1,                          /* Any, Anybyte                           */ \
800    3, 3, 1, 1,                    /* NOTPROP, PROP, EXTUNI, ANYNL           */ \    3, 3, 1, 1,                    /* NOTPROP, PROP, EXTUNI, ANYNL           */ \
801    1, 1, 2, 1, 1,                 /* \Z, \z, Opt, ^, $                      */ \    1, 1, 2, 1, 1,                 /* \Z, \z, Opt, ^, $                      */ \
# Line 944  typedef struct recursion_info { Line 946  typedef struct recursion_info {
946    struct recursion_info *prevrec; /* Previous recursion record (or NULL) */    struct recursion_info *prevrec; /* Previous recursion record (or NULL) */
947    int group_num;                /* Number of group that was called */    int group_num;                /* Number of group that was called */
948    const uschar *after_call;     /* "Return value": points after the call in the expr */    const uschar *after_call;     /* "Return value": points after the call in the expr */
949    USPTR save_start;             /* Old value of md->start_match */    USPTR save_start;             /* Old value of mstart */
950    int *offset_save;             /* Pointer to start of saved offsets */    int *offset_save;             /* Pointer to start of saved offsets */
951    int saved_max;                /* Number of saved offsets */    int saved_max;                /* Number of saved offsets */
952  } recursion_info;  } recursion_info;
# Line 985  typedef struct match_data { Line 987  typedef struct match_data {
987    const uschar *start_code;     /* For use when recursing */    const uschar *start_code;     /* For use when recursing */
988    USPTR  start_subject;         /* Start of the subject string */    USPTR  start_subject;         /* Start of the subject string */
989    USPTR  end_subject;           /* End of the subject string */    USPTR  end_subject;           /* End of the subject string */
990    USPTR  start_match;           /* Start of this match attempt */    USPTR  start_match_ptr;       /* Start of matched string */
991    USPTR  end_match_ptr;         /* Subject position at end match */    USPTR  end_match_ptr;         /* Subject position at end match */
992    int    end_offset_top;        /* Highwater mark at end of match */    int    end_offset_top;        /* Highwater mark at end of match */
993    int    capture_last;          /* Most recent capture number */    int    capture_last;          /* Most recent capture number */

Legend:
Removed from v.166  
changed lines
  Added in v.168

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12