enhanced the Sed class with a few more methods
This commit is contained in:
@ -28,6 +28,10 @@ int Sed::open () throw ()
|
||||
sed = qse_sed_open (this, QSE_SIZEOF(Sed*));
|
||||
if (sed == QSE_NULL) return -1;
|
||||
*(Sed**)QSE_XTN(sed) = this;
|
||||
|
||||
dflerrstr = qse_sed_geterrstr (sed);
|
||||
qse_sed_seterrstr (sed, xerrstr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -58,17 +62,29 @@ int Sed::execute () throw ()
|
||||
return qse_sed_exec (sed, xin, xout);
|
||||
}
|
||||
|
||||
const Sed::char_t* Sed::getErrorMessage () const
|
||||
int Sed::getOption() const throw ()
|
||||
{
|
||||
QSE_ASSERT (sed != QSE_NULL);
|
||||
return qse_sed_getoption (sed);
|
||||
}
|
||||
|
||||
void Sed::setOption (int opt) throw ()
|
||||
{
|
||||
QSE_ASSERT (sed != QSE_NULL);
|
||||
qse_sed_setoption (sed, opt);
|
||||
}
|
||||
|
||||
const Sed::char_t* Sed::getErrorMessage () const throw ()
|
||||
{
|
||||
return (sed == QSE_NULL)? QSE_T(""): qse_sed_geterrmsg (sed);
|
||||
}
|
||||
|
||||
Sed::size_t Sed::getErrorLine () const
|
||||
Sed::size_t Sed::getErrorLine () const throw ()
|
||||
{
|
||||
return (sed == QSE_NULL)? 0: qse_sed_geterrlin (sed);
|
||||
}
|
||||
|
||||
Sed::errnum_t Sed::getErrorNumber () const
|
||||
Sed::errnum_t Sed::getErrorNumber () const throw ()
|
||||
{
|
||||
return (sed == QSE_NULL)? QSE_SED_ENOERR: qse_sed_geterrnum (sed);
|
||||
}
|
||||
@ -181,6 +197,25 @@ Sed::ssize_t Sed::xout (sed_t* s, io_cmd_t cmd, io_arg_t* arg) throw ()
|
||||
}
|
||||
}
|
||||
|
||||
const Sed::char_t* Sed::getErrorString (errnum_t num)
|
||||
{
|
||||
QSE_ASSERT (dflerrstr != QSE_NULL);
|
||||
return dflerrstr (sed, num);
|
||||
}
|
||||
|
||||
const Sed::char_t* Sed::xerrstr (sed_t* s, errnum_t num) throw ()
|
||||
{
|
||||
Sed* sed = *(Sed**)QSE_XTN(s);
|
||||
try
|
||||
{
|
||||
return sed->getErrorString (num);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
return sed->dflerrstr (s, num);
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////
|
||||
QSE_END_NAMESPACE(QSE)
|
||||
/////////////////////////////////
|
||||
|
@ -52,11 +52,11 @@ static const qse_char_t* dflerrstr (qse_sed_t* sed, qse_sed_errnum_t errnum)
|
||||
QSE_T("address 1 prohibited for '${0}'"),
|
||||
QSE_T("address 2 prohibited"),
|
||||
QSE_T("address 2 missing or invalid"),
|
||||
QSE_T("a new line expected"),
|
||||
QSE_T("a backslash expected"),
|
||||
QSE_T("a backslash used as a delimiter"),
|
||||
QSE_T("garbage after a backslash"),
|
||||
QSE_T("a semicolon expected"),
|
||||
QSE_T("newline expected"),
|
||||
QSE_T("backslash expected"),
|
||||
QSE_T("backslash used as delimiter"),
|
||||
QSE_T("garbage after backslash"),
|
||||
QSE_T("semicolon expected"),
|
||||
QSE_T("empty label name"),
|
||||
QSE_T("duplicate label name '${0}'"),
|
||||
QSE_T("label '${0}' not found"),
|
||||
@ -65,8 +65,8 @@ static const qse_char_t* dflerrstr (qse_sed_t* sed, qse_sed_errnum_t errnum)
|
||||
QSE_T("strings in translation set not the same length"),
|
||||
QSE_T("group brackets not balanced"),
|
||||
QSE_T("group nesting too deep"),
|
||||
QSE_T("multiple occurrence specifier"),
|
||||
QSE_T("occurrence specifier is zero"),
|
||||
QSE_T("multiple occurrence specifiers"),
|
||||
QSE_T("occurrence specifier zero"),
|
||||
QSE_T("occurrence specifier too large"),
|
||||
QSE_T("io error with file '${0}'"),
|
||||
QSE_T("error returned by user io handler")
|
||||
@ -998,7 +998,7 @@ oops:
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int command (qse_sed_t* sed)
|
||||
static int get_command (qse_sed_t* sed)
|
||||
{
|
||||
qse_cint_t c;
|
||||
qse_sed_cmd_t* cmd = sed->cmd.cur;
|
||||
@ -1304,7 +1304,7 @@ int qse_sed_comp (qse_sed_t* sed, const qse_char_t* sptr, qse_size_t slen)
|
||||
}
|
||||
|
||||
|
||||
n = command (sed);
|
||||
n = get_command (sed);
|
||||
if (n <= -1)
|
||||
{
|
||||
free_address (sed, cmd);
|
||||
@ -1734,7 +1734,8 @@ static int write_str_to_file (
|
||||
if (n == 0)
|
||||
{
|
||||
/* EOF is returned upon opening a write stream.
|
||||
* it is also an error as it can't write any more */
|
||||
* it is also an error as it can't write
|
||||
* a requested string */
|
||||
sed->e.out.fun (sed, QSE_SED_IO_CLOSE, ap);
|
||||
ap->handle = QSE_NULL;
|
||||
SETERR1 (sed, QSE_SED_EIOFIL, cmd->lnum, path, plen);
|
||||
|
Reference in New Issue
Block a user