mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-15 17:02:53 +08:00
113 lines
3.1 KiB
C
113 lines
3.1 KiB
C
#include "re_config.h"
|
|
#include "pcre_internal.h"
|
|
|
|
|
|
|
|
/*************************************************
|
|
* Check for newline at given position *
|
|
*************************************************/
|
|
|
|
/* It is guaranteed that the initial value of ptr is less than the end of the
|
|
string that is being processed.
|
|
|
|
Arguments:
|
|
ptr pointer to possible newline
|
|
type the newline type
|
|
endptr pointer to the end of the string
|
|
lenptr where to return the length
|
|
utf8 TRUE if in utf8 mode
|
|
|
|
Returns: TRUE or FALSE
|
|
*/
|
|
|
|
BOOL
|
|
_pcre_is_newline(const uschar *ptr, int type, const uschar *endptr,
|
|
int *lenptr, BOOL utf8)
|
|
{
|
|
int c;
|
|
if (utf8) { GETCHAR(c, ptr); } else c = *ptr;
|
|
|
|
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 */
|
|
default: return FALSE;
|
|
}
|
|
|
|
/* NLTYPE_ANY */
|
|
|
|
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 */
|
|
case 0x0085: *lenptr = utf8? 2 : 1; return TRUE; /* NEL */
|
|
case 0x2028: /* LS */
|
|
case 0x2029: *lenptr = 3; return TRUE; /* PS */
|
|
default: return FALSE;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*************************************************
|
|
* Check for newline at previous position *
|
|
*************************************************/
|
|
|
|
/* It is guaranteed that the initial value of ptr is greater than the start of
|
|
the string that is being processed.
|
|
|
|
Arguments:
|
|
ptr pointer to possible newline
|
|
type the newline type
|
|
startptr pointer to the start of the string
|
|
lenptr where to return the length
|
|
utf8 TRUE if in utf8 mode
|
|
|
|
Returns: TRUE or FALSE
|
|
*/
|
|
|
|
BOOL
|
|
_pcre_was_newline(const uschar *ptr, int type, const uschar *startptr,
|
|
int *lenptr, BOOL utf8)
|
|
{
|
|
int c;
|
|
ptr--;
|
|
#ifdef SUPPORT_UTF8
|
|
if (utf8)
|
|
{
|
|
BACKCHAR(ptr);
|
|
GETCHAR(c, ptr);
|
|
}
|
|
else c = *ptr;
|
|
#else /* no UTF-8 support */
|
|
c = *ptr;
|
|
#endif /* SUPPORT_UTF8 */
|
|
|
|
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 */
|
|
default: return FALSE;
|
|
}
|
|
|
|
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 0x0085: *lenptr = utf8? 2 : 1; return TRUE; /* NEL */
|
|
case 0x2028: /* LS */
|
|
case 0x2029: *lenptr = 3; return TRUE; /* PS */
|
|
default: return FALSE;
|
|
}
|
|
}
|
|
|
|
/* End of pcre_newline.c */
|