|
/* retoor <retoor@molodetz.nl> */
|
|
#ifndef LOREG_H
|
|
#define LOREG_H
|
|
|
|
#include <stddef.h>
|
|
#include <stdbool.h>
|
|
|
|
#define LOREG_VERSION "1.0.0"
|
|
#define LOREG_MAX_STATES 4096
|
|
#define LOREG_MAX_GROUPS 32
|
|
|
|
typedef enum {
|
|
LOREG_OK = 0,
|
|
LOREG_ERR_INVALID_PATTERN,
|
|
LOREG_ERR_UNBALANCED_PAREN,
|
|
LOREG_ERR_EMPTY_GROUP,
|
|
LOREG_ERR_INVALID_QUANTIFIER,
|
|
LOREG_ERR_INVALID_ESCAPE,
|
|
LOREG_ERR_OUT_OF_MEMORY,
|
|
LOREG_ERR_STATE_OVERFLOW
|
|
} loreg_error_t;
|
|
|
|
typedef struct {
|
|
size_t start;
|
|
size_t end;
|
|
bool matched;
|
|
} loreg_group_t;
|
|
|
|
typedef struct {
|
|
bool matched;
|
|
size_t match_start;
|
|
size_t match_end;
|
|
loreg_group_t groups[LOREG_MAX_GROUPS];
|
|
size_t group_count;
|
|
} loreg_match_t;
|
|
|
|
typedef struct loreg_regex loreg_regex_t;
|
|
|
|
loreg_regex_t *loreg_compile(const char *pattern, loreg_error_t *error);
|
|
void loreg_free(loreg_regex_t *regex);
|
|
bool loreg_match(loreg_regex_t *regex, const char *text, loreg_match_t *result);
|
|
bool loreg_search(loreg_regex_t *regex, const char *text, loreg_match_t *result);
|
|
const char *loreg_error_string(loreg_error_t error);
|
|
|
|
#endif
|