/* retoor */ #ifndef LOREX_H #define LOREX_H #include #include #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