33 |
#include "config.h" |
#include "config.h" |
34 |
#endif |
#endif |
35 |
|
|
36 |
#ifdef _WIN32 |
#ifdef HAVE_WINDOWS_H |
37 |
#define HAVE_STRTOQ 1 |
#define HAVE_STRTOQ 1 |
38 |
#define strtoll _strtoui64 |
#define strtoll _strtoui64 |
39 |
#define strtoull _strtoi64 |
#define strtoull _strtoi64 |
337 |
|
|
338 |
// Returns PCRE_NEWLINE_CRLF, PCRE_NEWLINE_CR, or PCRE_NEWLINE_LF. |
// Returns PCRE_NEWLINE_CRLF, PCRE_NEWLINE_CR, or PCRE_NEWLINE_LF. |
339 |
// Note that PCRE_NEWLINE_CRLF is defined to be P_N_CR | P_N_LF. |
// Note that PCRE_NEWLINE_CRLF is defined to be P_N_CR | P_N_LF. |
340 |
|
// Modified by PH to add PCRE_NEWLINE_ANY and PCRE_NEWLINE_ANYCRLF. |
341 |
|
|
342 |
static int NewlineMode(int pcre_options) { |
static int NewlineMode(int pcre_options) { |
343 |
// TODO: if we can make it threadsafe, cache this var |
// TODO: if we can make it threadsafe, cache this var |
344 |
int newline_mode = 0; |
int newline_mode = 0; |
345 |
/* if (newline_mode) return newline_mode; */ // do this once it's cached |
/* if (newline_mode) return newline_mode; */ // do this once it's cached |
346 |
if (pcre_options & (PCRE_NEWLINE_CRLF|PCRE_NEWLINE_CR|PCRE_NEWLINE_LF)) { |
if (pcre_options & (PCRE_NEWLINE_CRLF|PCRE_NEWLINE_CR|PCRE_NEWLINE_LF| |
347 |
|
PCRE_NEWLINE_ANY|PCRE_NEWLINE_ANYCRLF)) { |
348 |
newline_mode = (pcre_options & |
newline_mode = (pcre_options & |
349 |
(PCRE_NEWLINE_CRLF|PCRE_NEWLINE_CR|PCRE_NEWLINE_LF)); |
(PCRE_NEWLINE_CRLF|PCRE_NEWLINE_CR|PCRE_NEWLINE_LF| |
350 |
|
PCRE_NEWLINE_ANY|PCRE_NEWLINE_ANYCRLF)); |
351 |
} else { |
} else { |
352 |
int newline; |
int newline; |
353 |
pcre_config(PCRE_CONFIG_NEWLINE, &newline); |
pcre_config(PCRE_CONFIG_NEWLINE, &newline); |
357 |
newline_mode = PCRE_NEWLINE_CR; |
newline_mode = PCRE_NEWLINE_CR; |
358 |
else if (newline == 3338) |
else if (newline == 3338) |
359 |
newline_mode = PCRE_NEWLINE_CRLF; |
newline_mode = PCRE_NEWLINE_CRLF; |
360 |
|
else if (newline == -1) |
361 |
|
newline_mode = PCRE_NEWLINE_ANY; |
362 |
|
else if (newline == -2) |
363 |
|
newline_mode = PCRE_NEWLINE_ANYCRLF; |
364 |
else |
else |
365 |
assert("" == "Unexpected return value from pcre_config(NEWLINE)"); |
assert("" == "Unexpected return value from pcre_config(NEWLINE)"); |
366 |
} |
} |
390 |
// Note it's better to call pcre_fullinfo() than to examine |
// Note it's better to call pcre_fullinfo() than to examine |
391 |
// all_options(), since options_ could have changed bewteen |
// all_options(), since options_ could have changed bewteen |
392 |
// compile-time and now, but this is simpler and safe enough. |
// compile-time and now, but this is simpler and safe enough. |
393 |
|
// Modified by PH to add ANY and ANYCRLF. |
394 |
if (start+1 < static_cast<int>(str->length()) && |
if (start+1 < static_cast<int>(str->length()) && |
395 |
(*str)[start] == '\r' && (*str)[start+1] == '\n' && |
(*str)[start] == '\r' && (*str)[start+1] == '\n' && |
396 |
NewlineMode(options_.all_options()) == PCRE_NEWLINE_CRLF) { |
(NewlineMode(options_.all_options()) == PCRE_NEWLINE_CRLF || |
397 |
|
NewlineMode(options_.all_options()) == PCRE_NEWLINE_ANY || |
398 |
|
NewlineMode(options_.all_options()) == PCRE_NEWLINE_ANYCRLF) |
399 |
|
) { |
400 |
matchend++; |
matchend++; |
401 |
} |
} |
402 |
// We also need to advance more than one char if we're in utf8 mode. |
// We also need to advance more than one char if we're in utf8 mode. |