From 51faac5778f5e2e41afb99e4e14b9dbe022adaae Mon Sep 17 00:00:00 2001 From: Daniel Holden Date: Sat, 2 Nov 2013 20:42:38 +0000 Subject: [PATCH] WIP RE unescape stuff --- mpc.c | 24 +++++++++++++----------- mpc.h | 8 ++++++-- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/mpc.c b/mpc.c index edd07db..726c72e 100644 --- a/mpc.c +++ b/mpc.c @@ -1936,10 +1936,15 @@ static mpc_val_t* mpc_re_escape(mpc_val_t* x) { } } + +static mpc_val_t* mpcf_unescape_rechars(mpc_val_t* x); static mpc_val_t* mpc_re_range(mpc_val_t* x) { - char* unescaped = mpcf_unescape(x); + char* unescaped = mpcf_unescape_rechars(x); + + printf("###%s###\n", unescaped); + char* s = unescaped; int i; int comp = 0; @@ -1962,16 +1967,8 @@ static mpc_val_t* mpc_re_range(mpc_val_t* x) { range = calloc(1, 1); while (*s) { - - if (*s == '\\') { - if (*(s+1) == '\0') { break; } - range = realloc(range, strlen(range) + 2); - buff[0] = *(s+1); buff[1] = '\0'; - strcat(range, buff); - s++; - } - else if (*s == '-') { + if (*s == '-') { start = *(s-1); end = *(s+1); @@ -2217,6 +2214,10 @@ mpc_val_t* mpcf_unescape_regex(mpc_val_t* x) { mpc_val_t* y = mpcf_unescape_new(x, mpc_escape_input_raw_re, mpc_escape_output_raw_re); free(x); return y; +} + +mpc_val_t* mpcf_unescape_regexchars(mpc_val_t* x) { + } mpc_val_t* mpcf_strcrop(mpc_val_t* x) { @@ -2813,7 +2814,8 @@ static mpc_val_t* mpca_grammar_apply_char(mpc_val_t* x) { } static mpc_val_t* mpca_grammar_apply_regex(mpc_val_t* x) { - char* y = mpcf_unescape_regex(x); + char* y = mpcf_unescape_regex(x); + printf("||%s||\n", y); mpc_parser_t* p = mpc_tok(mpc_re(y)); free(y); return mpca_tag(mpc_apply(p, mpcf_apply_str_ast), "regex"); diff --git a/mpc.h b/mpc.h index 60a42d3..d1022fd 100644 --- a/mpc.h +++ b/mpc.h @@ -203,9 +203,13 @@ mpc_val_t* mpcf_free(mpc_val_t* x); mpc_val_t* mpcf_int(mpc_val_t* x); mpc_val_t* mpcf_hex(mpc_val_t* x); mpc_val_t* mpcf_oct(mpc_val_t* x); -mpc_val_t* mpcf_float(mpc_val_t* x); +mpc_val_t* mpcf_float(mpc_val_t* x); + mpc_val_t* mpcf_escape(mpc_val_t* x); -mpc_val_t* mpcf_unescape(mpc_val_t* x); +mpc_val_t* mpcf_unescape(mpc_val_t* x); +mpc_val_t* mpcf_unescape_regex(mpc_val_t* x); +mpc_val_t* mpcf_unescape_regexchars(mpc_val_t* x); + mpc_val_t* mpcf_strcrop(mpc_val_t* x); mpc_val_t* mpcf_fst(mpc_val_t* x, mpc_val_t* y);