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