summaryrefslogtreecommitdiff
path: root/ext/pcre/pcrelib/pcre_newline.c
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2013-03-03 19:06:22 +0100
committerAnatol Belski <ab@php.net>2013-03-03 19:06:22 +0100
commit357ab3cbada57374075ccf57c9ec25bbbbcb6948 (patch)
treef8c61f2068629b070bf82ada4ad2b2adc44516ba /ext/pcre/pcrelib/pcre_newline.c
parentc134f2a1a5ef56da72dbdc1096eddc91e4f5939e (diff)
downloadphp-git-357ab3cbada57374075ccf57c9ec25bbbbcb6948.tar.gz
merged PCRE 8.32
- defined HAVE_CONFIG_H to simplify the future merges - PCRE NEWS http://pcre.org/news.txt
Diffstat (limited to 'ext/pcre/pcrelib/pcre_newline.c')
-rw-r--r--ext/pcre/pcrelib/pcre_newline.c84
1 files changed, 56 insertions, 28 deletions
diff --git a/ext/pcre/pcrelib/pcre_newline.c b/ext/pcre/pcrelib/pcre_newline.c
index ddd7708fa0..b8f5a4de19 100644
--- a/ext/pcre/pcrelib/pcre_newline.c
+++ b/ext/pcre/pcrelib/pcre_newline.c
@@ -47,7 +47,9 @@ and NLTYPE_ANY. The full list of Unicode newline characters is taken from
http://unicode.org/unicode/reports/tr18/. */
+#ifdef HAVE_CONFIG_H
#include "config.h"
+#endif
#include "pcre_internal.h"
@@ -74,7 +76,7 @@ BOOL
PRIV(is_newline)(PCRE_PUCHAR ptr, int type, PCRE_PUCHAR endptr, int *lenptr,
BOOL utf)
{
-int c;
+pcre_uint32 c;
(void)utf;
#ifdef SUPPORT_UTF
if (utf)
@@ -85,11 +87,13 @@ else
#endif /* SUPPORT_UTF */
c = *ptr;
+/* Note that this function is called only for ANY or ANYCRLF. */
+
if (type == NLTYPE_ANYCRLF) switch(c)
{
- case 0x000a: *lenptr = 1; return TRUE; /* LF */
- case 0x000d: *lenptr = (ptr < endptr - 1 && ptr[1] == 0x0a)? 2 : 1;
- return TRUE; /* CR */
+ case CHAR_LF: *lenptr = 1; return TRUE;
+ case CHAR_CR: *lenptr = (ptr < endptr - 1 && ptr[1] == CHAR_LF)? 2 : 1;
+ return TRUE;
default: return FALSE;
}
@@ -97,20 +101,29 @@ if (type == NLTYPE_ANYCRLF) switch(c)
else switch(c)
{
- case 0x000a: /* LF */
- case 0x000b: /* VT */
- case 0x000c: *lenptr = 1; return TRUE; /* FF */
- case 0x000d: *lenptr = (ptr < endptr - 1 && ptr[1] == 0x0a)? 2 : 1;
- return TRUE; /* CR */
+#ifdef EBCDIC
+ case CHAR_NEL:
+#endif
+ case CHAR_LF:
+ case CHAR_VT:
+ case CHAR_FF: *lenptr = 1; return TRUE;
+
+ case CHAR_CR:
+ *lenptr = (ptr < endptr - 1 && ptr[1] == CHAR_LF)? 2 : 1;
+ return TRUE;
+
+#ifndef EBCDIC
#ifdef COMPILE_PCRE8
- case 0x0085: *lenptr = utf? 2 : 1; return TRUE; /* NEL */
+ case CHAR_NEL: *lenptr = utf? 2 : 1; return TRUE;
case 0x2028: /* LS */
case 0x2029: *lenptr = 3; return TRUE; /* PS */
-#else
- case 0x0085: /* NEL */
+#else /* COMPILE_PCRE16 || COMPILE_PCRE32 */
+ case CHAR_NEL:
case 0x2028: /* LS */
case 0x2029: *lenptr = 1; return TRUE; /* PS */
-#endif /* COMPILE_PCRE8 */
+#endif /* COMPILE_PCRE8 */
+#endif /* Not EBCDIC */
+
default: return FALSE;
}
}
@@ -138,7 +151,7 @@ BOOL
PRIV(was_newline)(PCRE_PUCHAR ptr, int type, PCRE_PUCHAR startptr, int *lenptr,
BOOL utf)
{
-int c;
+pcre_uint32 c;
(void)utf;
ptr--;
#ifdef SUPPORT_UTF
@@ -151,30 +164,45 @@ else
#endif /* SUPPORT_UTF */
c = *ptr;
+/* Note that this function is called only for ANY or ANYCRLF. */
+
if (type == NLTYPE_ANYCRLF) switch(c)
{
- case 0x000a: *lenptr = (ptr > startptr && ptr[-1] == 0x0d)? 2 : 1;
- return TRUE; /* LF */
- case 0x000d: *lenptr = 1; return TRUE; /* CR */
+ case CHAR_LF:
+ *lenptr = (ptr > startptr && ptr[-1] == CHAR_CR)? 2 : 1;
+ return TRUE;
+
+ case CHAR_CR: *lenptr = 1; return TRUE;
default: return FALSE;
}
+/* NLTYPE_ANY */
+
else switch(c)
{
- case 0x000a: *lenptr = (ptr > startptr && ptr[-1] == 0x0d)? 2 : 1;
- return TRUE; /* LF */
- case 0x000b: /* VT */
- case 0x000c: /* FF */
- case 0x000d: *lenptr = 1; return TRUE; /* CR */
+ case CHAR_LF:
+ *lenptr = (ptr > startptr && ptr[-1] == CHAR_CR)? 2 : 1;
+ return TRUE;
+
+#ifdef EBCDIC
+ case CHAR_NEL:
+#endif
+ case CHAR_VT:
+ case CHAR_FF:
+ case CHAR_CR: *lenptr = 1; return TRUE;
+
+#ifndef EBCDIC
#ifdef COMPILE_PCRE8
- case 0x0085: *lenptr = utf? 2 : 1; return TRUE; /* NEL */
- case 0x2028: /* LS */
- case 0x2029: *lenptr = 3; return TRUE; /* PS */
-#else
- case 0x0085: /* NEL */
+ case CHAR_NEL: *lenptr = utf? 2 : 1; return TRUE;
+ case 0x2028: /* LS */
+ case 0x2029: *lenptr = 3; return TRUE; /* PS */
+#else /* COMPILE_PCRE16 || COMPILE_PCRE32 */
+ case CHAR_NEL:
case 0x2028: /* LS */
case 0x2029: *lenptr = 1; return TRUE; /* PS */
-#endif /* COMPILE_PCRE8 */
+#endif /* COMPILE_PCRE8 */
+#endif /* NotEBCDIC */
+
default: return FALSE;
}
}