#ifndef LIBREGEXP_H
#define LIBREGEXP_H
#include <stddef.h>
#include "libunicode.h"
#define LRE_BOOL int /* for documentation purposes */
#define LRE_FLAG_GLOBAL (1 << 0)
#define LRE_FLAG_IGNORECASE (1 << 1)
#define LRE_FLAG_MULTILINE (1 << 2)
#define LRE_FLAG_DOTALL (1 << 3)
#define LRE_FLAG_UTF16 (1 << 4)
#define LRE_FLAG_STICKY (1 << 5)
#define LRE_FLAG_INDICES (1 << 6) /* Unused by libregexp, just recorded. */
#define LRE_FLAG_NAMED_GROUPS (1 << 7) /* named groups are present in the regexp */
uint8_t *lre_compile(
int
*plen,
char
*error_msg,
int
error_msg_size,
const
char
*buf,
size_t
buf_len,
int
re_flags,
void
*opaque);
int
lre_get_capture_count(
const
uint8_t *bc_buf);
int
lre_get_flags(
const
uint8_t *bc_buf);
const
char
*lre_get_groupnames(
const
uint8_t *bc_buf);
int
lre_exec(uint8_t **capture,
const
uint8_t *bc_buf,
const
uint8_t *cbuf,
int
cindex,
int
clen,
int
cbuf_type,
void
*opaque);
int
lre_parse_escape(
const
uint8_t **pp,
int
allow_utf16);
LRE_BOOL lre_is_space(
int
c);
LRE_BOOL lre_check_stack_overflow(
void
*opaque,
size_t
alloca_size);
void
*lre_realloc(
void
*opaque,
void
*ptr,
size_t
size);
extern
uint32_t
const
lre_id_start_table_ascii[4];
extern
uint32_t
const
lre_id_continue_table_ascii[4];
static
inline
int
lre_js_is_ident_first(
int
c)
{
if
((uint32_t)c < 128) {
return
(lre_id_start_table_ascii[c >> 5] >> (c & 31)) & 1;
}
else
{
#ifdef CONFIG_ALL_UNICODE
return
lre_is_id_start(c);
#else
return
!lre_is_space(c);
#endif
}
}
static
inline
int
lre_js_is_ident_next(
int
c)
{
if
((uint32_t)c < 128) {
return
(lre_id_continue_table_ascii[c >> 5] >> (c & 31)) & 1;
}
else
{
#ifdef CONFIG_ALL_UNICODE
return
lre_is_id_continue(c) || c == 0x200C || c == 0x200D;
#else
return
!lre_is_space(c) || c == 0x200C || c == 0x200D;
#endif
}
}
#undef LRE_BOOL
#endif /* LIBREGEXP_H */