|
/* retoor <retoor@molodetz.nl> */
|
|
#ifndef LOREX_H
|
|
#define LOREX_H
|
|
|
|
#include <stddef.h>
|
|
#include <stdbool.h>
|
|
|
|
#define LOREX_VERSION "1.0.0"
|
|
#define LOREX_MAX_STATES 4096
|
|
#define LOREX_MAX_GROUPS 32
|
|
|
|
typedef enum {
|
|
LOREX_OK = 0,
|
|
LOREX_ERR_INVALID_PATTERN,
|
|
LOREX_ERR_UNBALANCED_PAREN,
|
|
LOREX_ERR_EMPTY_GROUP,
|
|
LOREX_ERR_INVALID_QUANTIFIER,
|
|
LOREX_ERR_INVALID_ESCAPE,
|
|
LOREX_ERR_OUT_OF_MEMORY,
|
|
LOREX_ERR_STATE_OVERFLOW
|
|
} lorex_error_t;
|
|
|
|
typedef struct {
|
|
size_t start;
|
|
size_t end;
|
|
bool matched;
|
|
} lorex_group_t;
|
|
|
|
typedef struct {
|
|
bool matched;
|
|
size_t match_start;
|
|
size_t match_end;
|
|
lorex_group_t groups[LOREX_MAX_GROUPS];
|
|
size_t group_count;
|
|
} lorex_match_t;
|
|
|
|
typedef struct lorex_regex lorex_regex_t;
|
|
|
|
lorex_regex_t *lorex_compile(const char *pattern, lorex_error_t *error);
|
|
void lorex_free(lorex_regex_t *regex);
|
|
bool lorex_match(lorex_regex_t *regex, const char *text, lorex_match_t *result);
|
|
bool lorex_search(lorex_regex_t *regex, const char *text, lorex_match_t *result);
|
|
const char *lorex_error_string(lorex_error_t error);
|
|
|
|
#endif
|