forked from osmocom/wireshark
139 lines
8.1 KiB
C
139 lines
8.1 KiB
C
![]() |
/* lrexlib_gregex_f.c - GLib regular expression library */
|
||
|
/* See Copyright Notice in the file lrexlib.h */
|
||
|
|
||
|
#include <glib.h>
|
||
|
#include "lua.h"
|
||
|
#include "lauxlib.h"
|
||
|
#include "lrexlib.h"
|
||
|
|
||
|
#define VERSION_GLIB (GLIB_MAJOR_VERSION*100 + GLIB_MINOR_VERSION)
|
||
|
|
||
|
static flag_pair gregex_compile_flags[] = {
|
||
|
{ "MAJOR", GLIB_MAJOR_VERSION },
|
||
|
{ "MINOR", GLIB_MINOR_VERSION },
|
||
|
{ "MICRO", GLIB_MICRO_VERSION },
|
||
|
/*----------------------- Compile flags -----------------------------------*/
|
||
|
{ "CASELESS", G_REGEX_CASELESS },
|
||
|
{ "MULTILINE", G_REGEX_MULTILINE },
|
||
|
{ "DOTALL", G_REGEX_DOTALL },
|
||
|
{ "EXTENDED", G_REGEX_EXTENDED },
|
||
|
{ "ANCHORED", G_REGEX_ANCHORED },
|
||
|
{ "DOLLAR_ENDONLY", G_REGEX_DOLLAR_ENDONLY },
|
||
|
{ "UNGREEDY", G_REGEX_UNGREEDY },
|
||
|
{ "NO_AUTO_CAPTURE", G_REGEX_NO_AUTO_CAPTURE },
|
||
|
{ "OPTIMIZE", G_REGEX_OPTIMIZE },
|
||
|
{ "DUPNAMES", G_REGEX_DUPNAMES },
|
||
|
{ "NEWLINE_CR", G_REGEX_NEWLINE_CR },
|
||
|
{ "NEWLINE_LF", G_REGEX_NEWLINE_LF },
|
||
|
{ "NEWLINE_CRLF", G_REGEX_NEWLINE_CRLF },
|
||
|
#if VERSION_GLIB >= 234
|
||
|
{ "FIRSTLINE", G_REGEX_FIRSTLINE },
|
||
|
{ "NEWLINE_ANYCRLF", G_REGEX_NEWLINE_ANYCRLF },
|
||
|
{ "BSR_ANYCRLF", G_REGEX_BSR_ANYCRLF },
|
||
|
{ "JAVASCRIPT_COMPAT", G_REGEX_JAVASCRIPT_COMPAT },
|
||
|
#endif
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
{ NULL, 0 }
|
||
|
};
|
||
|
|
||
|
/*----------------------- Match flags -------------------------------------*/
|
||
|
static flag_pair gregex_match_flags[] = {
|
||
|
{ "ANCHORED", G_REGEX_MATCH_ANCHORED },
|
||
|
{ "NOTBOL", G_REGEX_MATCH_NOTBOL },
|
||
|
{ "NOTEOL", G_REGEX_MATCH_NOTEOL },
|
||
|
{ "NOTEMPTY", G_REGEX_MATCH_NOTEMPTY },
|
||
|
{ "PARTIAL", G_REGEX_MATCH_PARTIAL },
|
||
|
{ "NEWLINE_CR", G_REGEX_MATCH_NEWLINE_CR },
|
||
|
{ "NEWLINE_LF", G_REGEX_MATCH_NEWLINE_LF },
|
||
|
{ "NEWLINE_CRLF", G_REGEX_MATCH_NEWLINE_CRLF },
|
||
|
{ "NEWLINE_ANY", G_REGEX_MATCH_NEWLINE_ANY },
|
||
|
#if VERSION_GLIB >= 234
|
||
|
{ "NEWLINE_ANYCRLF", G_REGEX_MATCH_NEWLINE_ANYCRLF },
|
||
|
{ "BSR_ANYCRLF", G_REGEX_MATCH_BSR_ANYCRLF },
|
||
|
{ "BSR_ANY", G_REGEX_MATCH_BSR_ANY },
|
||
|
{ "PARTIAL_SOFT", G_REGEX_MATCH_PARTIAL_SOFT },
|
||
|
{ "PARTIAL_HARD", G_REGEX_MATCH_PARTIAL_HARD },
|
||
|
{ "NOTEMPTY_ATSTART", G_REGEX_MATCH_NOTEMPTY_ATSTART },
|
||
|
#endif
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
{ NULL, 0 }
|
||
|
};
|
||
|
|
||
|
flag_pair gregex_error_flags[] = {
|
||
|
{ "COMPILE", G_REGEX_ERROR_COMPILE },
|
||
|
{ "OPTIMIZE", G_REGEX_ERROR_OPTIMIZE },
|
||
|
{ "REPLACE", G_REGEX_ERROR_REPLACE },
|
||
|
{ "MATCH", G_REGEX_ERROR_MATCH },
|
||
|
{ "INTERNAL", G_REGEX_ERROR_INTERNAL },
|
||
|
{ "STRAY_BACKSLASH", G_REGEX_ERROR_STRAY_BACKSLASH },
|
||
|
{ "MISSING_CONTROL_CHAR", G_REGEX_ERROR_MISSING_CONTROL_CHAR },
|
||
|
{ "UNRECOGNIZED_ESCAPE", G_REGEX_ERROR_UNRECOGNIZED_ESCAPE },
|
||
|
{ "QUANTIFIERS_OUT_OF_ORDER", G_REGEX_ERROR_QUANTIFIERS_OUT_OF_ORDER },
|
||
|
{ "QUANTIFIER_TOO_BIG", G_REGEX_ERROR_QUANTIFIER_TOO_BIG },
|
||
|
{ "UNTERMINATED_CHARACTER_CLASS", G_REGEX_ERROR_UNTERMINATED_CHARACTER_CLASS },
|
||
|
{ "INVALID_ESCAPE_IN_CHARACTER_CLASS", G_REGEX_ERROR_INVALID_ESCAPE_IN_CHARACTER_CLASS },
|
||
|
{ "RANGE_OUT_OF_ORDER", G_REGEX_ERROR_RANGE_OUT_OF_ORDER },
|
||
|
{ "NOTHING_TO_REPEAT", G_REGEX_ERROR_NOTHING_TO_REPEAT },
|
||
|
{ "UNRECOGNIZED_CHARACTER", G_REGEX_ERROR_UNRECOGNIZED_CHARACTER },
|
||
|
{ "POSIX_NAMED_CLASS_OUTSIDE_CLASS", G_REGEX_ERROR_POSIX_NAMED_CLASS_OUTSIDE_CLASS },
|
||
|
{ "UNMATCHED_PARENTHESIS", G_REGEX_ERROR_UNMATCHED_PARENTHESIS },
|
||
|
{ "INEXISTENT_SUBPATTERN_REFERENCE", G_REGEX_ERROR_INEXISTENT_SUBPATTERN_REFERENCE },
|
||
|
{ "UNTERMINATED_COMMENT", G_REGEX_ERROR_UNTERMINATED_COMMENT },
|
||
|
{ "EXPRESSION_TOO_LARGE", G_REGEX_ERROR_EXPRESSION_TOO_LARGE },
|
||
|
{ "MEMORY_ERROR", G_REGEX_ERROR_MEMORY_ERROR },
|
||
|
{ "VARIABLE_LENGTH_LOOKBEHIND", G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND },
|
||
|
{ "MALFORMED_CONDITION", G_REGEX_ERROR_MALFORMED_CONDITION },
|
||
|
{ "TOO_MANY_CONDITIONAL_BRANCHES", G_REGEX_ERROR_TOO_MANY_CONDITIONAL_BRANCHES },
|
||
|
{ "ASSERTION_EXPECTED", G_REGEX_ERROR_ASSERTION_EXPECTED },
|
||
|
{ "UNKNOWN_POSIX_CLASS_NAME", G_REGEX_ERROR_UNKNOWN_POSIX_CLASS_NAME },
|
||
|
{ "POSIX_COLLATING_ELEMENTS_NOT_SUPPORTED", G_REGEX_ERROR_POSIX_COLLATING_ELEMENTS_NOT_SUPPORTED },
|
||
|
{ "HEX_CODE_TOO_LARGE", G_REGEX_ERROR_HEX_CODE_TOO_LARGE },
|
||
|
{ "INVALID_CONDITION", G_REGEX_ERROR_INVALID_CONDITION },
|
||
|
{ "SINGLE_BYTE_MATCH_IN_LOOKBEHIND", G_REGEX_ERROR_SINGLE_BYTE_MATCH_IN_LOOKBEHIND },
|
||
|
{ "INFINITE_LOOP", G_REGEX_ERROR_INFINITE_LOOP },
|
||
|
{ "MISSING_SUBPATTERN_NAME_TERMINATOR", G_REGEX_ERROR_MISSING_SUBPATTERN_NAME_TERMINATOR },
|
||
|
{ "DUPLICATE_SUBPATTERN_NAME", G_REGEX_ERROR_DUPLICATE_SUBPATTERN_NAME },
|
||
|
{ "MALFORMED_PROPERTY", G_REGEX_ERROR_MALFORMED_PROPERTY },
|
||
|
{ "UNKNOWN_PROPERTY", G_REGEX_ERROR_UNKNOWN_PROPERTY },
|
||
|
{ "SUBPATTERN_NAME_TOO_LONG", G_REGEX_ERROR_SUBPATTERN_NAME_TOO_LONG },
|
||
|
{ "TOO_MANY_SUBPATTERNS", G_REGEX_ERROR_TOO_MANY_SUBPATTERNS },
|
||
|
{ "INVALID_OCTAL_VALUE", G_REGEX_ERROR_INVALID_OCTAL_VALUE },
|
||
|
{ "TOO_MANY_BRANCHES_IN_DEFINE", G_REGEX_ERROR_TOO_MANY_BRANCHES_IN_DEFINE },
|
||
|
{ "INCONSISTENT_NEWLINE_OPTIONS", G_REGEX_ERROR_INCONSISTENT_NEWLINE_OPTIONS },
|
||
|
{ "MISSING_BACK_REFERENCE", G_REGEX_ERROR_MISSING_BACK_REFERENCE },
|
||
|
#if VERSION_GLIB >= 234
|
||
|
{ "INVALID_RELATIVE_REFERENCE", G_REGEX_ERROR_INVALID_RELATIVE_REFERENCE },
|
||
|
{ "BACKTRACKING_CONTROL_VERB_ARGUMENT_FORBIDDEN",G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_FORBIDDEN },
|
||
|
{ "UNKNOWN_BACKTRACKING_CONTROL_VERB", G_REGEX_ERROR_UNKNOWN_BACKTRACKING_CONTROL_VERB },
|
||
|
{ "NUMBER_TOO_BIG", G_REGEX_ERROR_NUMBER_TOO_BIG },
|
||
|
{ "MISSING_SUBPATTERN_NAME", G_REGEX_ERROR_MISSING_SUBPATTERN_NAME },
|
||
|
{ "MISSING_DIGIT", G_REGEX_ERROR_MISSING_DIGIT },
|
||
|
{ "INVALID_DATA_CHARACTER", G_REGEX_ERROR_INVALID_DATA_CHARACTER },
|
||
|
{ "EXTRA_SUBPATTERN_NAME", G_REGEX_ERROR_EXTRA_SUBPATTERN_NAME },
|
||
|
{ "BACKTRACKING_CONTROL_VERB_ARGUMENT_REQUIRED",G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_REQUIRED },
|
||
|
{ "INVALID_CONTROL_CHAR", G_REGEX_ERROR_INVALID_CONTROL_CHAR },
|
||
|
{ "MISSING_NAME", G_REGEX_ERROR_MISSING_NAME },
|
||
|
{ "NOT_SUPPORTED_IN_CLASS", G_REGEX_ERROR_NOT_SUPPORTED_IN_CLASS },
|
||
|
{ "TOO_MANY_FORWARD_REFERENCES", G_REGEX_ERROR_TOO_MANY_FORWARD_REFERENCES },
|
||
|
{ "NAME_TOO_LONG", G_REGEX_ERROR_NAME_TOO_LONG },
|
||
|
{ "CHARACTER_VALUE_TOO_LARGE", G_REGEX_ERROR_CHARACTER_VALUE_TOO_LARGE },
|
||
|
#endif
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
{ NULL, 0 }
|
||
|
};
|
||
|
|
||
|
int Gregex_get_compile_flags (lua_State *L) {
|
||
|
const flag_pair* fps[] = { gregex_compile_flags, NULL };
|
||
|
return get_flags (L, fps);
|
||
|
}
|
||
|
|
||
|
int Gregex_get_match_flags (lua_State *L) {
|
||
|
const flag_pair* fps[] = { gregex_match_flags, NULL };
|
||
|
return get_flags (L, fps);
|
||
|
}
|
||
|
|
||
|
int Gregex_get_flags (lua_State *L) {
|
||
|
const flag_pair* fps[] = { gregex_compile_flags, gregex_match_flags, gregex_error_flags, NULL };
|
||
|
return get_flags (L, fps);
|
||
|
}
|