| 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-2006 University of Cambridge |
Copyright (c) 1997-2007 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 |
| 2057 |
|
|
| 2058 |
Arguments: |
Arguments: |
| 2059 |
argument_re points to the compiled expression |
argument_re points to the compiled expression |
| 2060 |
extra_data points to extra data or is NULL (not currently used) |
extra_data points to extra data or is NULL |
| 2061 |
subject points to the subject string |
subject points to the subject string |
| 2062 |
length length of subject string (may contain binary zeros) |
length length of subject string (may contain binary zeros) |
| 2063 |
start_offset where to start in the subject string |
start_offset where to start in the subject string |
| 2073 |
< -1 => some kind of unexpected problem |
< -1 => some kind of unexpected problem |
| 2074 |
*/ |
*/ |
| 2075 |
|
|
| 2076 |
PCRE_DATA_SCOPE int |
PCRE_EXP_DEFN int |
| 2077 |
pcre_dfa_exec(const pcre *argument_re, const pcre_extra *extra_data, |
pcre_dfa_exec(const pcre *argument_re, const pcre_extra *extra_data, |
| 2078 |
const char *subject, int length, int start_offset, int options, int *offsets, |
const char *subject, int length, int start_offset, int options, int *offsets, |
| 2079 |
int offsetcount, int *workspace, int wscount) |
int offsetcount, int *workspace, int wscount) |
| 2163 |
md->moptions = options; |
md->moptions = options; |
| 2164 |
md->poptions = re->options; |
md->poptions = re->options; |
| 2165 |
|
|
| 2166 |
/* Handle different types of newline. The two bits give four cases. If nothing |
/* Handle different types of newline. The three bits give eight cases. If |
| 2167 |
is set at run time, whatever was used at compile time applies. */ |
nothing is set at run time, whatever was used at compile time applies. */ |
| 2168 |
|
|
| 2169 |
switch ((((options & PCRE_NEWLINE_BITS) == 0)? re->options : options) & |
switch ((((options & PCRE_NEWLINE_BITS) == 0)? re->options : (pcre_uint32)options) & |
| 2170 |
PCRE_NEWLINE_BITS) |
PCRE_NEWLINE_BITS) |
| 2171 |
{ |
{ |
| 2172 |
case 0: newline = NEWLINE; break; /* Compile-time default */ |
case 0: newline = NEWLINE; break; /* Compile-time default */ |
| 2308 |
{ |
{ |
| 2309 |
while (current_subject <= end_subject && !WAS_NEWLINE(current_subject)) |
while (current_subject <= end_subject && !WAS_NEWLINE(current_subject)) |
| 2310 |
current_subject++; |
current_subject++; |
| 2311 |
|
|
| 2312 |
|
/* If we have just passed a CR and the newline option is ANY, and we |
| 2313 |
|
are now at a LF, advance the match position by one more character. */ |
| 2314 |
|
|
| 2315 |
|
if (current_subject[-1] == '\r' && |
| 2316 |
|
md->nltype == NLTYPE_ANY && |
| 2317 |
|
current_subject < end_subject && |
| 2318 |
|
*current_subject == '\n') |
| 2319 |
|
current_subject++; |
| 2320 |
} |
} |
| 2321 |
} |
} |
| 2322 |
|
|