changed get_subst() to compile a regular expression
This commit is contained in:
parent
e04dafed4b
commit
787ba46604
@ -123,8 +123,8 @@ for (c = sed->cmd.buf; c != sed->cmd.cur; c++)
|
|||||||
QSE_MMGR_FREE (sed->mmgr, c->u.subst.file.ptr);
|
QSE_MMGR_FREE (sed->mmgr, c->u.subst.file.ptr);
|
||||||
if (c->u.subst.rpl.ptr != QSE_NULL)
|
if (c->u.subst.rpl.ptr != QSE_NULL)
|
||||||
QSE_MMGR_FREE (sed->mmgr, c->u.subst.rpl.ptr);
|
QSE_MMGR_FREE (sed->mmgr, c->u.subst.rpl.ptr);
|
||||||
if (c->u.subst.rex.ptr != QSE_NULL)
|
if (c->u.subst.rex != QSE_NULL)
|
||||||
QSE_MMGR_FREE (sed->mmgr, c->u.subst.rex.ptr);
|
qse_freerex (sed->mmgr, c->u.subst.rex);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case QSE_SED_CMD_Y:
|
case QSE_SED_CMD_Y:
|
||||||
@ -255,7 +255,8 @@ static void* compile_regex (qse_sed_t* sed, qse_char_t rxend)
|
|||||||
sed->mmgr, 0,
|
sed->mmgr, 0,
|
||||||
QSE_STR_PTR(&sed->rexbuf),
|
QSE_STR_PTR(&sed->rexbuf),
|
||||||
QSE_STR_LEN(&sed->rexbuf),
|
QSE_STR_LEN(&sed->rexbuf),
|
||||||
QSE_NULL);
|
QSE_NULL
|
||||||
|
);
|
||||||
if (code == QSE_NULL)
|
if (code == QSE_NULL)
|
||||||
{
|
{
|
||||||
sed->errnum = QSE_SED_EREXBL;
|
sed->errnum = QSE_SED_EREXBL;
|
||||||
@ -751,8 +752,20 @@ static int get_subst (qse_sed_t* sed, qse_sed_cmd_t* cmd)
|
|||||||
if (cmd->u.subst.file.ptr == QSE_NULL &&
|
if (cmd->u.subst.file.ptr == QSE_NULL &&
|
||||||
terminate_command (sed) == -1) goto oops;
|
terminate_command (sed) == -1) goto oops;
|
||||||
|
|
||||||
qse_str_yield (t[1], &cmd->u.subst.rex, 0);
|
QSE_ASSERT (cmd->u.subst.rex == QSE_NULL);
|
||||||
qse_str_yield (t[0], &cmd->u.subst.rpl, 0);
|
cmd->u.subst.rex = qse_buildrex (
|
||||||
|
sed->mmgr, 0,
|
||||||
|
QSE_STR_PTR(t[0]),
|
||||||
|
QSE_STR_LEN(t[0]),
|
||||||
|
QSE_NULL
|
||||||
|
);
|
||||||
|
if (cmd->u.subst.rex == QSE_NULL)
|
||||||
|
{
|
||||||
|
sed->errnum = QSE_SED_EREXBL;
|
||||||
|
goto oops;
|
||||||
|
}
|
||||||
|
|
||||||
|
qse_str_yield (t[1], &cmd->u.subst.rpl, 0);
|
||||||
if (cmd->u.subst.g == 0 && cmd->u.subst.occ == 0) cmd->u.subst.occ = 1;
|
if (cmd->u.subst.g == 0 && cmd->u.subst.occ == 0) cmd->u.subst.occ = 1;
|
||||||
|
|
||||||
qse_str_close (t[1]);
|
qse_str_close (t[1]);
|
||||||
@ -1050,7 +1063,7 @@ qse_printf (QSE_T("cmd->u.file= [%.*s]\n"), (int)cmd->u.file.len, cmd->u.file.pt
|
|||||||
cmd->type = c;
|
cmd->type = c;
|
||||||
ADVSCP (sed);
|
ADVSCP (sed);
|
||||||
if (get_subst (sed, cmd) == -1) return -1;
|
if (get_subst (sed, cmd) == -1) return -1;
|
||||||
qse_printf (QSE_T("rex= [%.*s]\n"), (int)cmd->u.subst.rex.len, cmd->u.subst.rex.ptr);
|
//qse_printf (QSE_T("rex= [%.*s]\n"), (int)cmd->u.subst.rex.len, cmd->u.subst.rex.ptr);
|
||||||
qse_printf (QSE_T("rpl= [%.*s]\n"), (int)cmd->u.subst.rpl.len, cmd->u.subst.rpl.ptr);
|
qse_printf (QSE_T("rpl= [%.*s]\n"), (int)cmd->u.subst.rpl.len, cmd->u.subst.rpl.ptr);
|
||||||
qse_printf (QSE_T("g=%u p=%u i=%u occ=%d\n"),
|
qse_printf (QSE_T("g=%u p=%u i=%u occ=%d\n"),
|
||||||
cmd->u.subst.g,
|
cmd->u.subst.g,
|
||||||
|
@ -114,7 +114,7 @@ struct qse_sed_cmd_t
|
|||||||
/* data for the s command */
|
/* data for the s command */
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
qse_xstr_t rex; /* regular expression */
|
void* rex; /* regular expression */
|
||||||
qse_xstr_t rpl; /* replacement */
|
qse_xstr_t rpl; /* replacement */
|
||||||
|
|
||||||
/* flags */
|
/* flags */
|
||||||
|
Loading…
Reference in New Issue
Block a user