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