/* 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