130 |
0, /* CREF */ |
0, /* CREF */ |
131 |
0, /* RREF */ |
0, /* RREF */ |
132 |
0, /* DEF */ |
0, /* DEF */ |
133 |
0, 0 /* BRAZERO, BRAMINZERO */ |
0, 0, /* BRAZERO, BRAMINZERO */ |
134 |
|
0, 0, 0, 0, /* PRUNE, SKIP, THEN, COMMIT */ |
135 |
|
0, 0 /* FAIL, ACCEPT */ |
136 |
}; |
}; |
137 |
|
|
138 |
/* These 2 tables allow for compact code for testing for \D, \d, \S, \s, \W, |
/* These 2 tables allow for compact code for testing for \D, \d, \S, \s, \W, |
2644 |
used in a loop when finding where to start. */ |
used in a loop when finding where to start. */ |
2645 |
|
|
2646 |
lcc = md->tables + lcc_offset; |
lcc = md->tables + lcc_offset; |
2647 |
startline = (re->options & PCRE_STARTLINE) != 0; |
startline = (re->flags & PCRE_STARTLINE) != 0; |
2648 |
firstline = (re->options & PCRE_FIRSTLINE) != 0; |
firstline = (re->options & PCRE_FIRSTLINE) != 0; |
2649 |
|
|
2650 |
/* Set up the first character to match, if available. The first_byte value is |
/* Set up the first character to match, if available. The first_byte value is |
2655 |
|
|
2656 |
if (!anchored) |
if (!anchored) |
2657 |
{ |
{ |
2658 |
if ((re->options & PCRE_FIRSTSET) != 0) |
if ((re->flags & PCRE_FIRSTSET) != 0) |
2659 |
{ |
{ |
2660 |
first_byte = re->first_byte & 255; |
first_byte = re->first_byte & 255; |
2661 |
if ((first_byte_caseless = ((re->first_byte & REQ_CASELESS) != 0)) == TRUE) |
if ((first_byte_caseless = ((re->first_byte & REQ_CASELESS) != 0)) == TRUE) |
2672 |
/* For anchored or unanchored matches, there may be a "last known required |
/* For anchored or unanchored matches, there may be a "last known required |
2673 |
character" set. */ |
character" set. */ |
2674 |
|
|
2675 |
if ((re->options & PCRE_REQCHSET) != 0) |
if ((re->flags & PCRE_REQCHSET) != 0) |
2676 |
{ |
{ |
2677 |
req_byte = re->req_byte & 255; |
req_byte = re->req_byte & 255; |
2678 |
req_byte_caseless = (re->req_byte & REQ_CASELESS) != 0; |
req_byte_caseless = (re->req_byte & REQ_CASELESS) != 0; |
2842 |
} |
} |
2843 |
if (current_subject > end_subject) break; |
if (current_subject > end_subject) break; |
2844 |
|
|
2845 |
/* If we have just passed a CR and the newline option is CRLF or ANY or |
/* If we have just passed a CR and we are now at a LF, and the pattern does |
2846 |
ANYCRLF, and we are now at a LF, advance the match position by one more |
not contain any explicit matches for \r or \n, and the newline option is CRLF |
2847 |
character. */ |
or ANY or ANYCRLF, advance the match position by one more character. */ |
2848 |
|
|
2849 |
if (current_subject[-1] == '\r' && |
if (current_subject[-1] == '\r' && |
2850 |
(md->nltype == NLTYPE_ANY || |
current_subject < end_subject && |
2851 |
md->nltype == NLTYPE_ANYCRLF || |
*current_subject == '\n' && |
2852 |
md->nllen == 2) && |
(re->flags & PCRE_HASCRORLF) == 0 && |
2853 |
current_subject < end_subject && |
(md->nltype == NLTYPE_ANY || |
2854 |
*current_subject == '\n') |
md->nltype == NLTYPE_ANYCRLF || |
2855 |
|
md->nllen == 2)) |
2856 |
current_subject++; |
current_subject++; |
2857 |
|
|
2858 |
} /* "Bumpalong" loop */ |
} /* "Bumpalong" loop */ |