diff --git a/qse/include/qse/sed/sed.h b/qse/include/qse/sed/sed.h index df51eda0..b928a124 100644 --- a/qse/include/qse/sed/sed.h +++ b/qse/include/qse/sed/sed.h @@ -62,10 +62,10 @@ enum qse_sed_errnum_t { QSE_SED_ENOERR, /**< no error occurred */ QSE_SED_ENOMEM, /**< insufficient memory is available */ - QSE_SED_ETMTXT, /**< too much text */ QSE_SED_ECMDNR, /**< a command is not recognized */ QSE_SED_ECMDMS, /**< a command is missing */ QSE_SED_ECMDIC, /**< a command is incomplete */ + QSE_SED_EREXIC, /**< regular expression incomplete */ QSE_SED_EREXBL, /**< regular expression build error */ QSE_SED_EREXMA, /**< regular expression match error */ QSE_SED_EA1PHB, /**< address 1 prohibited */ diff --git a/qse/lib/sed/err.c b/qse/lib/sed/err.c index 0380e9a2..d6f15881 100644 --- a/qse/lib/sed/err.c +++ b/qse/lib/sed/err.c @@ -24,13 +24,13 @@ static const qse_char_t* geterrstr (int errnum) { QSE_T("no error"), QSE_T("out of memory"), - QSE_T("too much text"), - QSE_T("command ${0} not recognized"), + QSE_T("command '${0}' not recognized"), QSE_T("command code missing"), - QSE_T("command ${0} not terminated properly"), - QSE_T("regular expression build error"), - QSE_T("regular expression match error"), - QSE_T("address 1 prohibited"), + QSE_T("command '${0}' not terminated properly"), + QSE_T("regular expression '${0}' incomplete"), + QSE_T("failed to compile regular expression '${0}'"), + QSE_T("failed to match regular expression"), + QSE_T("address 1 prohibited for '${0}'"), QSE_T("address 2 prohibited"), QSE_T("invalid step address"), QSE_T("a new line expected"), @@ -39,8 +39,8 @@ static const qse_char_t* geterrstr (int errnum) QSE_T("garbage after a backslash"), QSE_T("a semicolon expected"), QSE_T("empty label name"), - QSE_T("duplicate label name ${0}"), - QSE_T("label ${0} not found"), + QSE_T("duplicate label name '${0}'"), + QSE_T("label '${0}' not found"), QSE_T("empty file name"), QSE_T("illegal file name"), QSE_T("strings in translation set not the same length"), diff --git a/qse/lib/sed/sed.c b/qse/lib/sed/sed.c index 9a181530..6c3f8a29 100644 --- a/qse/lib/sed/sed.c +++ b/qse/lib/sed/sed.c @@ -262,7 +262,10 @@ static void* compile_rex (qse_sed_t* sed, qse_char_t rxend) c = NXTSC (sed); if (c == QSE_CHAR_EOF || c == QSE_T('\n')) { - sed->errnum = QSE_SED_ETMTXT; + SETERR1 (sed, QSE_SED_EREXIC, 0, + QSE_STR_PTR(&sed->rexbuf), + QSE_STR_LEN(&sed->rexbuf) + ); return QSE_NULL; } @@ -274,7 +277,10 @@ static void* compile_rex (qse_sed_t* sed, qse_char_t rxend) c = CURSC (sed); if (c == QSE_CHAR_EOF || c == QSE_T('\n')) { - sed->errnum = QSE_SED_ETMTXT; + SETERR1 (sed, QSE_SED_EREXIC, 0, + QSE_STR_PTR(&sed->rexbuf), + QSE_STR_LEN(&sed->rexbuf) + ); return QSE_NULL; } @@ -298,7 +304,10 @@ static void* compile_rex (qse_sed_t* sed, qse_char_t rxend) ); if (code == QSE_NULL) { - sed->errnum = QSE_SED_EREXBL; + SETERR1 (sed, QSE_SED_EREXBL, 0, + QSE_STR_PTR(&sed->rexbuf), + QSE_STR_LEN(&sed->rexbuf) + ); return QSE_NULL; } @@ -343,9 +352,7 @@ static qse_sed_adr_t* get_address (qse_sed_t* sed, qse_sed_adr_t* a) c = NXTSC (sed); if (c == QSE_CHAR_EOF || c == QSE_T('\n')) { - /* TODO: change error code - - * unterminated address regular expression */ - sed->errnum = QSE_SED_ETMTXT; + SETERR1 (sed, QSE_SED_EREXIC, 0, QSE_T(""), 0); return QSE_NULL; } @@ -811,7 +818,10 @@ static int get_subst (qse_sed_t* sed, qse_sed_cmd_t* cmd) ); if (cmd->u.subst.rex == QSE_NULL) { - sed->errnum = QSE_SED_EREXBL; + SETERR1 (sed, QSE_SED_EREXBL, 0, + QSE_STR_PTR(t[0]), + QSE_STR_LEN(t[0]) + ); goto oops; } @@ -968,7 +978,7 @@ restart: if (cmd->a1.type != QSE_SED_ADR_NONE) { /* label cannot have an address */ - sed->errnum = QSE_SED_EA1PHB; + SETERR1 (sed, QSE_SED_EA1PHB, 0, &cmd->type, 1); return -1; } diff --git a/qse/test/sed/Makefile.am b/qse/test/sed/Makefile.am index 9dec592a..f2d9a962 100644 --- a/qse/test/sed/Makefile.am +++ b/qse/test/sed/Makefile.am @@ -1,11 +1,14 @@ AM_CPPFLAGS = -I$(top_srcdir)/include -bin_PROGRAMS = sed01 sed02 +bin_PROGRAMS = sed01 LDFLAGS = -L../../lib/cmn -L../../lib/utl -L../../lib/sed LDADD = -lqsesed -lqseutl -lqsecmn $(LIBM) sed01_SOURCES = sed01.c +if ENABLE_CXX +bin_PROGRAMS += sed02 sed02_SOURCES = sed02.cpp sed02_LDADD = -lqsesed++ $(LDADD) +endif