added quite some code for handling mbs in awk

This commit is contained in:
2019-04-18 08:42:54 +00:00
parent f90ca01493
commit 07be5e22d7
12 changed files with 357 additions and 125 deletions

View File

@ -203,14 +203,14 @@ typedef struct qse_awk_val_str_t qse_awk_val_str_t;
/**
* The qse_awk_val_str_t type is a string type. The type field is
* #QSE_AWK_VAL_BYTEARR.
* #QSE_AWK_VAL_MBS.
*/
struct qse_awk_val_bytearr_t
struct qse_awk_val_mbs_t
{
QSE_AWK_VAL_HDR;
qse_u8ptl_t val;
qse_mcstr_t val;
};
typedef struct qse_awk_val_bytearr_t qse_awk_val_bytearr_t;
typedef struct qse_awk_val_mbs_t qse_awk_val_mbs_t;
/**
* The qse_awk_val_rex_t type is a regular expression type. The type field
@ -358,7 +358,7 @@ enum qse_awk_nde_type_t
/* expression */
/* if you change the following values including their order,
* you should change __eval_func of __eval_expression
* you should change __evaluator of __eval_expression
* in run.c accordingly */
QSE_AWK_NDE_GRP,
QSE_AWK_NDE_ASS,
@ -372,6 +372,7 @@ enum qse_awk_nde_type_t
QSE_AWK_NDE_INT,
QSE_AWK_NDE_FLT,
QSE_AWK_NDE_STR,
QSE_AWK_NDE_MBS,
QSE_AWK_NDE_REX,
/* keep this order for the following items otherwise, you may have
@ -1211,6 +1212,7 @@ enum qse_awk_errnum_t
QSE_AWK_EEOF, /**< unexpected end of source */
QSE_AWK_ECMTNC, /**< comment not closed properly */
QSE_AWK_ESTRNC, /**< string or regular expression not closed */
QSE_AWK_EMBSCHR, /**< invalid mbs character '%{0}' */
QSE_AWK_ELBRACE, /**< left brace expected in place of '${0}' */
QSE_AWK_ELPAREN, /**< left parenthesis expected in place of '${0}' */
QSE_AWK_ERPAREN, /**< right parenthesis expected in place of '${0}' */
@ -1401,7 +1403,7 @@ enum qse_awk_val_type_t
QSE_AWK_VAL_INT = 1, /**< integer */
QSE_AWK_VAL_FLT = 2, /**< floating-pointer number */
QSE_AWK_VAL_STR = 3, /**< string */
QSE_AWK_VAL_BYTEARR = 4, /**< byte array */
QSE_AWK_VAL_MBS = 4, /**< byte array */
QSE_AWK_VAL_MAP = 5, /**< map */
QSE_AWK_VAL_REX = 6, /**< regular expression */
@ -2474,9 +2476,9 @@ QSE_EXPORT qse_awk_val_t* qse_awk_rtx_makenstrvalwithxstr (
* The qse_awk_rtx_makebytearrvaal() function create a byte array value.
* \return value on success, #QSE_NULL on failure
*/
qse_awk_val_t* qse_awk_rtx_makebytearrval (
qse_awk_val_t* qse_awk_rtx_makembsval (
qse_awk_rtx_t* rtx,
const qse_uint8_t* ptr,
const qse_mchar_t* ptr,
qse_size_t len
);

View File

@ -3639,21 +3639,23 @@ QSE_EXPORT qse_size_t qse_wcs_vfmt (
QSE_EXPORT qse_size_t qse_mbs_ncatwcs (
qse_mbs_t* str,
const qse_wchar_t* s,
qse_size_t len
qse_size_t len,
qse_cmgr_t* cmgr
);
qse_size_t qse_wcs_ncatmbs (
qse_wcs_t* str,
const qse_mchar_t* s,
qse_size_t len
qse_size_t len,
qse_cmgr_t* cmgr
);
#if defined(QSE_CHAR_IS_MCHAR)
# define qse_str_ncatwcs(str,s,len) qse_mbs_ncatwcs(str,s,len)
# define qse_str_ncatmbs(str,s,len) qse_mbs_ncat(str,s,len)
# define qse_str_ncatwcs(str,s,len,cmgr) qse_mbs_ncatwcs(str,s,len,cmgr)
# define qse_str_ncatmbs(str,s,len,cmgr) qse_mbs_ncat(str,s,len)
#else
# define qse_str_ncatwcs(str,s,len) qse_wcs_ncat(str,s,len)
# define qse_str_ncatmbs(str,s,len) qse_wcs_ncatmbs(str,s,len)
# define qse_str_ncatwcs(str,s,len,cmgr) qse_wcs_ncat(str,s,len)
# define qse_str_ncatmbs(str,s,len,cmgr) qse_wcs_ncatmbs(str,s,len,cmgr)
#endif
#if defined(__cplusplus)