From e5fa90ec02db08f7bd510fd18f5504155484ec62 Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Fri, 19 Jan 2018 03:53:43 +0000 Subject: [PATCH] added the QSE_XLI_CASE_INSENSITIVE trait enumerator and revised macro defintions of string comparision functiosn for supporting the added enumerator --- qse/include/qse/cmn/str.h | 504 +++++++++++++++++++------------------- qse/include/qse/xli/xli.h | 22 +- qse/lib/xli/read-ini.c | 2 +- qse/lib/xli/read-json.c | 3 +- qse/lib/xli/read.c | 9 +- qse/lib/xli/xli.c | 20 +- qse/lib/xli/xli.h | 3 + 7 files changed, 292 insertions(+), 271 deletions(-) diff --git a/qse/include/qse/cmn/str.h b/qse/include/qse/cmn/str.h index f0103e0a..89bf2e3a 100644 --- a/qse/include/qse/cmn/str.h +++ b/qse/include/qse/cmn/str.h @@ -456,11 +456,11 @@ QSE_EXPORT qse_size_t qse_wcsbytes ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strlen(str) qse_mbslen(str) -# define qse_strbytes(str) qse_mbsbytes(str) +# define qse_strlen qse_mbslen +# define qse_strbytes qse_mbsbytes #else -# define qse_strlen(str) qse_wcslen(str) -# define qse_strbytes(str) qse_wcsbytes(str) +# define qse_strlen qse_wcslen +# define qse_strbytes qse_wcsbytes #endif QSE_EXPORT qse_size_t qse_mbscpy ( @@ -528,15 +528,15 @@ QSE_EXPORT qse_size_t qse_wcsxncpy ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strcpy(buf,str) qse_mbscpy(buf,str) -# define qse_strxcpy(buf,bsz,str) qse_mbsxcpy(buf,bsz,str) -# define qse_strncpy(buf,str,len) qse_mbsncpy(buf,str,len) -# define qse_strxncpy(buf,bsz,str,len) qse_mbsxncpy(buf,bsz,str,len) +# define qse_strcpy qse_mbscpy +# define qse_strxcpy qse_mbsxcpy +# define qse_strncpy qse_mbsncpy +# define qse_strxncpy qse_mbsxncpy #else -# define qse_strcpy(buf,str) qse_wcscpy(buf,str) -# define qse_strxcpy(buf,bsz,str) qse_wcsxcpy(buf,bsz,str) -# define qse_strncpy(buf,str,len) qse_wcsncpy(buf,str,len) -# define qse_strxncpy(buf,bsz,str,len) qse_wcsxncpy(buf,bsz,str,len) +# define qse_strcpy qse_wcscpy +# define qse_strxcpy qse_wcsxcpy +# define qse_strncpy qse_wcsncpy +# define qse_strxncpy qse_wcsxncpy #endif QSE_EXPORT qse_size_t qse_mbsput ( @@ -586,13 +586,13 @@ QSE_EXPORT qse_size_t qse_wcsxnput ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strput(buf,str) qse_mbsput(buf,str) -# define qse_strxput(buf,bsz,str) qse_mbsxput(buf,bsz,str) -# define qse_strxnput(buf,bsz,str,len) qse_mbsxnput(buf,bsz,str,len) +# define qse_strput qse_mbsput +# define qse_strxput qse_mbsxput +# define qse_strxnput qse_mbsxnput #else -# define qse_strput(buf,str) qse_wcsput(buf,str) -# define qse_strxput(buf,bsz,str) qse_wcsxput(buf,bsz,str) -# define qse_strxnput(buf,bsz,str,len) qse_wcsxnput(buf,bsz,str,len) +# define qse_strput qse_wcsput +# define qse_strxput qse_wcsxput +# define qse_strxnput qse_wcsxnput #endif /** @@ -718,15 +718,15 @@ QSE_EXPORT qse_size_t qse_wcsxfncpy ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strfcpy(buf,fmt,str) qse_mbsfcpy(buf,fmt,str) -# define qse_strfncpy(buf,fmt,str) qse_mbsfncpy(buf,fmt,str) -# define qse_strxfcpy(buf,bsz,fmt,str) qse_mbsxfcpy(buf,bsz,fmt,str) -# define qse_strxfncpy(buf,bsz,fmt,str) qse_mbsxfncpy(buf,bsz,fmt,str) +# define qse_strfcpy qse_mbsfcpy +# define qse_strfncpy qse_mbsfncpy +# define qse_strxfcpy qse_mbsxfcpy +# define qse_strxfncpy qse_mbsxfncpy #else -# define qse_strfcpy(buf,fmt,str) qse_wcsfcpy(buf,fmt,str) -# define qse_strfncpy(buf,fmt,str) qse_wcsfncpy(buf,fmt,str) -# define qse_strxfcpy(buf,bsz,fmt,str) qse_wcsxfcpy(buf,bsz,fmt,str) -# define qse_strxfncpy(buf,bsz,fmt,str) qse_wcsxfncpy(buf,bsz,fmt,str) +# define qse_strfcpy qse_wcsfcpy +# define qse_strfncpy qse_wcsfncpy +# define qse_strxfcpy qse_wcsxfcpy +# define qse_strxfncpy qse_wcsxfncpy #endif @@ -1042,11 +1042,11 @@ QSE_EXPORT qse_size_t qse_wcsxnsubst ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strxsubst(buf,bsz,fmt,subst,ctx) qse_mbsxsubst(buf,bsz,fmt,subst,ctx) -# define qse_strxnsubst(buf,bsz,fmt,fsz,subst,ctx) qse_mbsxnsubst(buf,bsz,fmt,fsz,subst,ctx) +# define qse_strxsubst qse_mbsxsubst +# define qse_strxnsubst qse_mbsxnsubst #else -# define qse_strxsubst(buf,bsz,fmt,subst,ctx) qse_wcsxsubst(buf,bsz,fmt,subst,ctx) -# define qse_strxnsubst(buf,bsz,fmt,fsz,subst,ctx) qse_wcsxnsubst(buf,bsz,fmt,fsz,subst,ctx) +# define qse_strxsubst qse_wcsxsubst +# define qse_strxnsubst qse_wcsxnsubst #endif QSE_EXPORT qse_size_t qse_mbscat ( @@ -1110,17 +1110,17 @@ QSE_EXPORT qse_size_t qse_wcsxncat ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strcat(buf,str) qse_mbscat(buf,str) -# define qse_strncat(buf,str,len) qse_mbsncat(buf,str,len) -# define qse_strcatn(buf,str,n) qse_mbscatn(buf,str,n) -# define qse_strxcat(buf,bsz,str) qse_mbsxcat(buf,bsz,str); -# define qse_strxncat(buf,bsz,str,len) qse_mbsxncat(buf,bsz,str,len) +# define qse_strcat qse_mbscat +# define qse_strncat qse_mbsncat +# define qse_strcatn qse_mbscatn +# define qse_strxcat qse_mbsxcat; +# define qse_strxncat qse_mbsxncat #else -# define qse_strcat(buf,str) qse_wcscat(buf,str) -# define qse_strncat(buf,str,len) qse_wcsncat(buf,str,len) -# define qse_strcatn(buf,str,n) qse_wcscatn(buf,str,n) -# define qse_strxcat(buf,bsz,str) qse_wcsxcat(buf,bsz,str); -# define qse_strxncat(buf,bsz,str,len) qse_wcsxncat(buf,bsz,str,len) +# define qse_strcat qse_wcscat +# define qse_strncat qse_wcsncat +# define qse_strcatn qse_wcscatn +# define qse_strxcat qse_wcsxcat; +# define qse_strxncat qse_wcsxncat #endif @@ -1183,15 +1183,15 @@ QSE_EXPORT qse_size_t qse_wcsxjoinv ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strjoin qse_mbsjoin -# define qse_strxjoin qse_mbsxjoin -# define qse_strjoinv(buf,ap) qse_mbsjoinv(buf,ap) -# define qse_strxjoinv(buf,size,ap) qse_mbsxjoinv(buf,size,ap) +# define qse_strjoin qse_mbsjoin +# define qse_strxjoin qse_mbsxjoin +# define qse_strjoinv qse_mbsjoinv +# define qse_strxjoinv qse_mbsxjoinv #else -# define qse_strjoin qse_wcsjoin -# define qse_strxjoin qse_wcsxjoin -# define qse_strjoinv(buf,ap) qse_wcsjoinv(buf,ap) -# define qse_strxjoinv(buf,size,ap) qse_wcsxjoinv(buf,size,ap) +# define qse_strjoin qse_wcsjoin +# define qse_strxjoin qse_wcsxjoin +# define qse_strjoinv qse_wcsjoinv +# define qse_strxjoinv qse_wcsxjoinv #endif /* ---------------------------------------------------- */ @@ -1333,23 +1333,23 @@ QSE_EXPORT int qse_wcszcasecmp ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strcmp(s1,s2) qse_mbscmp(s1,s2) -# define qse_strxcmp(s1,ln1,s2) qse_mbsxcmp(s1,ln1,s2) -# define qse_strxncmp(s1,ln1,s2,ln2) qse_mbsxncmp(s1,ln1,s2,ln2) -# define qse_strcasecmp(s1,s2) qse_mbscasecmp(s1,s2) -# define qse_strxcasecmp(s1,ln1,s2) qse_mbsxcasecmp(s1,ln1,s2) -# define qse_strxncasecmp(s1,ln1,s2,ln2) qse_mbsxncasecmp(s1,ln1,s2,ln2) -# define qse_strzcmp(s1,s2,n) qse_mbszcmp(s1,s2,n) -# define qse_strzcasecmp(s1,s2,n) qse_mbszcasecmp(s1,s2,n) +# define qse_strcmp qse_mbscmp +# define qse_strxcmp qse_mbsxcmp +# define qse_strxncmp qse_mbsxncmp +# define qse_strcasecmp qse_mbscasecmp +# define qse_strxcasecmp qse_mbsxcasecmp +# define qse_strxncasecmp qse_mbsxncasecmp +# define qse_strzcmp qse_mbszcmp +# define qse_strzcasecmp qse_mbszcasecmp #else -# define qse_strcmp(s1,s2) qse_wcscmp(s1,s2) -# define qse_strxcmp(s1,ln1,s2) qse_wcsxcmp(s1,ln1,s2) -# define qse_strxncmp(s1,ln1,s2,ln2) qse_wcsxncmp(s1,ln1,s2,ln2) -# define qse_strcasecmp(s1,s2) qse_wcscasecmp(s1,s2) -# define qse_strxcasecmp(s1,ln1,s2) qse_wcsxcasecmp(s1,ln1,s2) -# define qse_strxncasecmp(s1,ln1,s2,ln2) qse_wcsxncasecmp(s1,ln1,s2,ln2) -# define qse_strzcmp(s1,s2,n) qse_wcszcmp(s1,s2,n) -# define qse_strzcasecmp(s1,s2,n) qse_wcszcasecmp(s1,s2,n) +# define qse_strcmp qse_wcscmp +# define qse_strxcmp qse_wcsxcmp +# define qse_strxncmp qse_wcsxncmp +# define qse_strcasecmp qse_wcscasecmp +# define qse_strxcasecmp qse_wcsxcasecmp +# define qse_strxncasecmp qse_wcsxncasecmp +# define qse_strzcmp qse_wcszcmp +# define qse_strzcasecmp qse_wcszcasecmp #endif QSE_EXPORT qse_mchar_t* qse_mbsdup ( @@ -1415,17 +1415,17 @@ QSE_EXPORT qse_wchar_t* qse_wcsadup ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strdup(s,mmgr) qse_mbsdup(s,mmgr) -# define qse_strdup2(s1,s2,mmgr) qse_mbsdup2(s1,s2,mmgr) -# define qse_strxdup(s,l,mmgr) qse_mbsxdup(s,l,mmgr) -# define qse_strxdup2(s1,l1,s2,l2,mmgr) qse_mbsxdup(s1,l1,s2,l2,mmgr) -# define qse_stradup(sa,len,mmgr) qse_mbsadup(sa,len,mmgr) +# define qse_strdup qse_mbsdup +# define qse_strdup2 qse_mbsdup2 +# define qse_strxdup qse_mbsxdup +# define qse_strxdup2 qse_mbsxdup +# define qse_stradup qse_mbsadup #else -# define qse_strdup(s,mmgr) qse_wcsdup(s,mmgr) -# define qse_strdup2(s1,s2,mmgr) qse_wcsdup2(s1,s2,mmgr) -# define qse_strxdup(s,l,mmgr) qse_wcsxdup(s,l,mmgr) -# define qse_strxdup2(s1,l1,s2,l2,mmgr) qse_wcsxdup(s1,l1,s2,l2,mmgr) -# define qse_stradup(sa,len,mmgr) qse_wcsadup(sa,len,mmgr) +# define qse_strdup qse_wcsdup +# define qse_strdup2 qse_wcsdup2 +# define qse_strxdup qse_wcsxdup +# define qse_strxdup2 qse_wcsxdup +# define qse_stradup qse_wcsadup #endif QSE_EXPORT qse_mchar_t* qse_mcstrdup ( @@ -1451,11 +1451,11 @@ QSE_EXPORT qse_wchar_t* qse_wcstradup ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_cstrdup(sa,mmgr) qse_mcstrdup(sa,mmgr) -# define qse_cstradup(sa,len,mmgr) qse_mcstradup(sa,len,mmgr) +# define qse_cstrdup qse_mcstrdup +# define qse_cstradup qse_mcstradup #else -# define qse_cstrdup(sa,mmgr) qse_wcstrdup(sa,mmgr) -# define qse_cstradup(sa,len,mmgr) qse_wcstradup(sa,len,mmgr) +# define qse_cstrdup qse_wcstrdup +# define qse_cstradup qse_wcstradup #endif @@ -1628,31 +1628,31 @@ QSE_EXPORT qse_wchar_t* qse_wcsxnrcasestr ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strstr(str,sub) qse_mbsstr(str,sub) -# define qse_strxstr(str,size,sub) qse_mbsxstr(str,size,sub) -# define qse_strxnstr(str,strsz,sub,subsz) qse_mbsxnstr(str,strsz,sub,subsz) -# define qse_strcasestr(str,sub) qse_mbscasestr(str,sub) -# define qse_strxcasestr(str,size,sub) qse_mbsxcasestr(str,size,sub) -# define qse_strxncasestr(str,strsz,sub,subsz) qse_mbsxncasestr(str,strsz,sub,subsz) -# define qse_strrstr(str,sub) qse_mbsrstr(str,sub) -# define qse_strxrstr(str,size,sub) qse_mbsxrstr(str,size,sub) -# define qse_strxnrstr(str,strsz,sub,subsz) qse_mbsxnrstr(str,strsz,sub,subsz) -# define qse_strrcasestr(str,sub) qse_mbsrcasestr(str,sub) -# define qse_strxrcasestr(str,size,sub) qse_mbsxrcasestr(str,size,sub) -# define qse_strxnrcasestr(str,strsz,sub,subsz) qse_mbsxnrcasestr(str,strsz,sub,subsz) +# define qse_strstr qse_mbsstr +# define qse_strxstr qse_mbsxstr +# define qse_strxnstr qse_mbsxnstr +# define qse_strcasestr qse_mbscasestr +# define qse_strxcasestr qse_mbsxcasestr +# define qse_strxncasestr qse_mbsxncasestr +# define qse_strrstr qse_mbsrstr +# define qse_strxrstr qse_mbsxrstr +# define qse_strxnrstr qse_mbsxnrstr +# define qse_strrcasestr qse_mbsrcasestr +# define qse_strxrcasestr qse_mbsxrcasestr +# define qse_strxnrcasestr qse_mbsxnrcasestr #else -# define qse_strstr(str,sub) qse_wcsstr(str,sub) -# define qse_strxstr(str,size,sub) qse_wcsxstr(str,size,sub) -# define qse_strxnstr(str,strsz,sub,subsz) qse_wcsxnstr(str,strsz,sub,subsz) -# define qse_strcasestr(str,sub) qse_wcscasestr(str,sub) -# define qse_strxcasestr(str,size,sub) qse_wcsxcasestr(str,size,sub) -# define qse_strxncasestr(str,strsz,sub,subsz) qse_wcsxncasestr(str,strsz,sub,subsz) -# define qse_strrstr(str,sub) qse_wcsrstr(str,sub) -# define qse_strxrstr(str,size,sub) qse_wcsxrstr(str,size,sub) -# define qse_strxnrstr(str,strsz,sub,subsz) qse_wcsxnrstr(str,strsz,sub,subsz) -# define qse_strrcasestr(str,sub) qse_wcsrcasestr(str,sub) -# define qse_strxrcasestr(str,size,sub) qse_wcsxrcasestr(str,size,sub) -# define qse_strxnrcasestr(str,strsz,sub,subsz) qse_wcsxnrcasestr(str,strsz,sub,subsz) +# define qse_strstr qse_wcsstr +# define qse_strxstr qse_wcsxstr +# define qse_strxnstr qse_wcsxnstr +# define qse_strcasestr qse_wcscasestr +# define qse_strxcasestr qse_wcsxcasestr +# define qse_strxncasestr qse_wcsxncasestr +# define qse_strrstr qse_wcsrstr +# define qse_strxrstr qse_wcsxrstr +# define qse_strxnrstr qse_wcsxnrstr +# define qse_strrcasestr qse_wcsrcasestr +# define qse_strxrcasestr qse_wcsxrcasestr +# define qse_strxnrcasestr qse_wcsxnrcasestr #endif QSE_EXPORT const qse_mchar_t* qse_mbsword ( @@ -1728,15 +1728,15 @@ QSE_EXPORT const qse_wchar_t* qse_wcsxcaseword ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strword(str,word,edelim) qse_mbsword(str,word,edelim) -# define qse_strxword(str,len,word,edelim) qse_mbsxword(str,len,word,edelim) -# define qse_strcaseword(str,word,edelim) qse_mbscaseword(str,word,edelim) -# define qse_strxcaseword(str,len,word,edelim) qse_mbsxcaseword(str,len,word,edelim) +# define qse_strword qse_mbsword +# define qse_strxword qse_mbsxword +# define qse_strcaseword qse_mbscaseword +# define qse_strxcaseword qse_mbsxcaseword #else -# define qse_strword(str,word,edelim) qse_wcsword(str,word,edelim) -# define qse_strxword(str,len,word,edelim) qse_wcsxword(str,len,word,edelim) -# define qse_strcaseword(str,word,edelim) qse_wcscaseword(str,word,edelim) -# define qse_strxcaseword(str,len,word,edelim) qse_wcsxcaseword(str,len,word,edelim) +# define qse_strword qse_wcsword +# define qse_strxword qse_wcsxword +# define qse_strcaseword qse_wcscaseword +# define qse_strxcaseword qse_wcsxcaseword #endif /** @@ -1790,15 +1790,15 @@ QSE_EXPORT qse_wchar_t* qse_wcsxrchr ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strchr(str,c) qse_mbschr(str,c) -# define qse_strxchr(str,len,c) qse_mbsxchr(str,len,c) -# define qse_strrchr(str,c) qse_mbsrchr(str,c) -# define qse_strxrchr(str,len,c) qse_mbsxrchr(str,len,c) +# define qse_strchr qse_mbschr +# define qse_strxchr qse_mbsxchr +# define qse_strrchr qse_mbsrchr +# define qse_strxrchr qse_mbsxrchr #else -# define qse_strchr(str,c) qse_wcschr(str,c) -# define qse_strxchr(str,len,c) qse_wcsxchr(str,len,c) -# define qse_strrchr(str,c) qse_wcsrchr(str,c) -# define qse_strxrrchr(str,len,c) qse_wcsxrchr(str,len,c) +# define qse_strchr qse_wcschr +# define qse_strxchr qse_wcsxchr +# define qse_strrchr qse_wcsrchr +# define qse_strxrrchr qse_wcsxrchr #endif /** @@ -1870,17 +1870,17 @@ QSE_EXPORT qse_wchar_t* qse_wcscasebeg ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strbeg(str,sub) qse_mbsbeg(str,sub) -# define qse_strxbeg(str,len,sub) qse_mbsxbeg(str,len,sub) -# define qse_strnbeg(str,sub,len) qse_mbsnbeg(str,sub,len) -# define qse_strxnbeg(str,len1,sub,len2) qse_mbsxnbeg(str,len1,sub,len2) -# define qse_strcasebeg(str,sub) qse_mbscasebeg(str,sub) +# define qse_strbeg qse_mbsbeg +# define qse_strxbeg qse_mbsxbeg +# define qse_strnbeg qse_mbsnbeg +# define qse_strxnbeg qse_mbsxnbeg +# define qse_strcasebeg qse_mbscasebeg #else -# define qse_strbeg(str,sub) qse_wcsbeg(str,sub) -# define qse_strxbeg(str,len,sub) qse_wcsxbeg(str,len,sub) -# define qse_strnbeg(str,sub,len) qse_wcsnbeg(str,sub,len) -# define qse_strxnbeg(str,len1,sub,len2) qse_wcsxnbeg(str,len1,sub,len2) -# define qse_strcasebeg(str,sub) qse_wcscasebeg(str,sub) +# define qse_strbeg qse_wcsbeg +# define qse_strxbeg qse_wcsxbeg +# define qse_strnbeg qse_wcsnbeg +# define qse_strxnbeg qse_wcsxnbeg +# define qse_strcasebeg qse_wcscasebeg #endif /** @@ -1942,15 +1942,15 @@ QSE_EXPORT qse_wchar_t* qse_wcsxnend ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strend(str,sub) qse_mbsend(str,sub) -# define qse_strxend(str,len,sub) qse_mbsxend(str,len,sub) -# define qse_strnend(str,sub,len) qse_mbsnend(str,sub,len) -# define qse_strxnend(str,len1,sub,len2) qse_mbsxnend(str,len1,sub,len2) +# define qse_strend qse_mbsend +# define qse_strxend qse_mbsxend +# define qse_strnend qse_mbsnend +# define qse_strxnend qse_mbsxnend #else -# define qse_strend(str,sub) qse_wcsend(str,sub) -# define qse_strxend(str,len,sub) qse_wcsxend(str,len,sub) -# define qse_strnend(str,sub,len) qse_wcsnend(str,sub,len) -# define qse_strxnend(str,len1,sub,len2) qse_wcsxnend(str,len1,sub,len2) +# define qse_strend qse_wcsend +# define qse_strxend qse_wcsxend +# define qse_strnend qse_wcsnend +# define qse_strxnend qse_wcsxnend #endif QSE_EXPORT qse_size_t qse_mbsspn ( @@ -1974,11 +1974,11 @@ QSE_EXPORT qse_size_t qse_wcscspn ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strspn(str1,str2) qse_mbsspn(str1,str2) -# define qse_strcspn(str1,str2) qse_mbscspn(str1,str2) +# define qse_strspn qse_mbsspn +# define qse_strcspn qse_mbscspn #else -# define qse_strspn(str1,str2) qse_wcsspn(str1,str2) -# define qse_strcspn(str1,str2) qse_wcscspn(str1,str2) +# define qse_strspn qse_wcsspn +# define qse_strcspn qse_wcscspn #endif /* @@ -2038,15 +2038,15 @@ QSE_EXPORT qse_wchar_t* qse_wcsxrpbrk ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strpbrk(str1,str2) qse_mbspbrk(str1,str2) -# define qse_strxpbrk(str1,len,str2) qse_mbsxpbrk(str1,len,str2) -# define qse_strrpbrk(str1,str2) qse_mbsrpbrk(str1,str2) -# define qse_strxrpbrk(str1,len,str2) qse_mbsxrpbrk(str1,len,str2) +# define qse_strpbrk qse_mbspbrk +# define qse_strxpbrk qse_mbsxpbrk +# define qse_strrpbrk qse_mbsrpbrk +# define qse_strxrpbrk qse_mbsxrpbrk #else -# define qse_strpbrk(str1,str2) qse_wcspbrk(str1,str2) -# define qse_strxpbrk(str1,len,str2) qse_wcsxpbrk(str1,len,str2) -# define qse_strrpbrk(str1,str2) qse_wcsrpbrk(str1,str2) -# define qse_strxrpbrk(str1,len,str2) qse_wcsxrpbrk(str1,len,str2) +# define qse_strpbrk qse_wcspbrk +# define qse_strxpbrk qse_wcsxpbrk +# define qse_strrpbrk qse_wcsrpbrk +# define qse_strxrpbrk qse_wcsxrpbrk #endif /* @@ -2326,59 +2326,59 @@ QSE_EXPORT qse_uintmax_t qse_wcsxtouintmax ( #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strtoi(str,base,end) qse_mbstoi(str,base,end) -# define qse_strtol(str,base,end) qse_mbstol(str,base,end) -# define qse_strtoui(str,base,end) qse_mbstoui(str,base,end) -# define qse_strtoul(str,base,end) qse_mbstoul(str,base,end) +# define qse_strtoi qse_mbstoi +# define qse_strtol qse_mbstol +# define qse_strtoui qse_mbstoui +# define qse_strtoul qse_mbstoul /* ----- */ -# define qse_strxtoi(str,len,base,end) qse_mbsxtoi(str,len,base,end) -# define qse_strxtol(str,len,base,end) qse_mbsxtol(str,len,base,end) -# define qse_strxtoui(str,len,base,end) qse_mbsxtoui(str,len,base,end) -# define qse_strxtoul(str,len,base,end) qse_mbsxtoul(str,len,base,end) +# define qse_strxtoi qse_mbsxtoi +# define qse_strxtol qse_mbsxtol +# define qse_strxtoui qse_mbsxtoui +# define qse_strxtoul qse_mbsxtoul /* ----- */ -# define qse_strtoint(str,base,end) qse_mbstoint(str,base,end) -# define qse_strtolong(str,base,end) qse_mbstolong(str,base,end) -# define qse_strtointmax(str,base,end) qse_mbstointmax(str,base,end) +# define qse_strtoint qse_mbstoint +# define qse_strtolong qse_mbstolong +# define qse_strtointmax qse_mbstointmax /* ----- */ -# define qse_strtouint(str,base,end) qse_mbstouint(str,base,end) -# define qse_strtoulong(str,base,end) qse_mbstoulong(str,base,end) -# define qse_strtouintmax(str,base,end) qse_mbstouintmax(str,base,end) +# define qse_strtouint qse_mbstouint +# define qse_strtoulong qse_mbstoulong +# define qse_strtouintmax qse_mbstouintmax /* ----- */ -# define qse_strxtoint(str,len,base,end) qse_mbsxtoint(str,len,base,end) -# define qse_strxtolong(str,len,base,end) qse_mbsxtolong(str,len,base,end) -# define qse_strxtointmax(str,len,base,end) qse_mbsxtointmax(str,len,base,end) +# define qse_strxtoint qse_mbsxtoint +# define qse_strxtolong qse_mbsxtolong +# define qse_strxtointmax qse_mbsxtointmax /* ----- */ -# define qse_strxtouint(str,len,base,end) qse_mbsxtouint(str,len,base,end) -# define qse_strxtoulong(str,len,base,end) qse_mbsxtoulong(str,len,base,end) -# define qse_strxtouintmax(str,len,base,end) qse_mbsxtouintmax(str,len,base,end) +# define qse_strxtouint qse_mbsxtouint +# define qse_strxtoulong qse_mbsxtoulong +# define qse_strxtouintmax qse_mbsxtouintmax #else -# define qse_strtoi(str,base,end) qse_wcstoi(str,base,end) -# define qse_strtol(str,base,end) qse_wcstol(str,base,end) -# define qse_strtoui(str,base,end) qse_wcstoui(str,base,end) -# define qse_strtoul(str,base,end) qse_wcstoul(str,base,end) +# define qse_strtoi qse_wcstoi +# define qse_strtol qse_wcstol +# define qse_strtoui qse_wcstoui +# define qse_strtoul qse_wcstoul /* ----- */ -# define qse_strxtoi(str,len,base,end) qse_wcsxtoi(str,len,base,end) -# define qse_strxtol(str,len,base,end) qse_wcsxtol(str,len,base,end) -# define qse_strxtoui(str,len,base,end) qse_wcsxtoui(str,len,base,end) -# define qse_strxtoul(str,len,base,end) qse_wcsxtoul(str,len,base,end) +# define qse_strxtoi qse_wcsxtoi +# define qse_strxtol qse_wcsxtol +# define qse_strxtoui qse_wcsxtoui +# define qse_strxtoul qse_wcsxtoul /* ----- */ -# define qse_strtoint(str,base,end) qse_wcstoint(str,base,end) -# define qse_strtolong(str,base,end) qse_wcstolong(str,base,end) -# define qse_strtointmax(str,base,end) qse_wcstointmax(str,base,end) +# define qse_strtoint qse_wcstoint +# define qse_strtolong qse_wcstolong +# define qse_strtointmax qse_wcstointmax /* ----- */ -# define qse_strtouint(str,base,end) qse_wcstouint(str,base,end) -# define qse_strtoulong(str,base,end) qse_wcstoulong(str,base,end) -# define qse_strtouintmax(str,base,end) qse_wcstouintmax(str,base,end) +# define qse_strtouint qse_wcstouint +# define qse_strtoulong qse_wcstoulong +# define qse_strtouintmax qse_wcstouintmax /* ----- */ -# define qse_strxtoint(str,len,base,end) qse_wcsxtoint(str,len,base,end) -# define qse_strxtolong(str,len,base,end) qse_wcsxtolong(str,len,base,end) -# define qse_strxtointmax(str,len,base,end) qse_wcsxtointmax(str,len,base,end) +# define qse_strxtoint qse_wcsxtoint +# define qse_strxtolong qse_wcsxtolong +# define qse_strxtointmax qse_wcsxtointmax /* ----- */ -# define qse_strxtouint(str,len,base,end) qse_wcsxtouint(str,len,base,end) -# define qse_strxtoulong(str,len,base,end) qse_wcsxtoulong(str,len,base,end) -# define qse_strxtouintmax(str,len,base,end) qse_wcsxtouintmax(str,len,base,end) +# define qse_strxtouint qse_wcsxtouint +# define qse_strxtoulong qse_wcsxtoulong +# define qse_strxtouintmax qse_wcsxtouintmax #endif @@ -2398,9 +2398,9 @@ QSE_EXPORT int qse_wcshextobin ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strhextobin(hex,hexlen,buf,buflen) qse_mbshextobin(hex,hexlen,buf,buflen) +# define qse_strhextobin qse_mbshextobin #else -# define qse_strhextobin(hex,hexlen,buf,buflen) qse_wcshextobin(hex,hexlen,buf,buflen) +# define qse_strhextobin qse_wcshextobin #endif QSE_EXPORT qse_size_t qse_mbsdel ( @@ -2430,11 +2430,11 @@ QSE_EXPORT qse_size_t qse_wcsxdel ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strdel(str,pos,n) qse_mbsdel(str,pos,n) -# define qse_strxdel(str,len,pos,n) qse_mbsxdel(str,len,pos,n) +# define qse_strdel qse_mbsdel +# define qse_strxdel qse_mbsxdel #else -# define qse_strdel(str,pos,n) qse_wcsdel(str,pos,n) -# define qse_strxdel(str,len,pos,n) qse_wcsxdel(str,len,pos,n) +# define qse_strdel qse_wcsdel +# define qse_strxdel qse_wcsxdel #endif @@ -2461,11 +2461,11 @@ QSE_EXPORT qse_size_t qse_wcsxexcl ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strexcl(str,cs) qse_mbsexcl(str,cs) -# define qse_strxexcl(str,len,cs) qse_mbsxexcl(str,len,cs) +# define qse_strexcl qse_mbsexcl +# define qse_strxexcl qse_mbsxexcl #else -# define qse_strexcl(str,cs) qse_wcsexcl(str,cs) -# define qse_strxexcl(str,len,cs) qse_wcsxexcl(str,len,cs) +# define qse_strexcl qse_wcsexcl +# define qse_strxexcl qse_wcsxexcl #endif QSE_EXPORT qse_size_t qse_mbsincl ( @@ -2491,11 +2491,11 @@ QSE_EXPORT qse_size_t qse_wcsxincl ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strincl(str,cs) qse_mbsincl(str,cs) -# define qse_strxincl(str,len,cs) qse_mbsxincl(str,len,cs) +# define qse_strincl qse_mbsincl +# define qse_strxincl qse_mbsxincl #else -# define qse_strincl(str,cs) qse_wcsincl(str,cs) -# define qse_strxincl(str,len,cs) qse_wcsxincl(str,len,cs) +# define qse_strincl qse_wcsincl +# define qse_strxincl qse_wcsxincl #endif QSE_EXPORT qse_size_t qse_mbsset ( @@ -2526,11 +2526,11 @@ QSE_EXPORT qse_size_t qse_wcsxset ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strset(buf,c,n) qse_mbsset(buf,c,n) -# define qse_strxset(buf,bsz,c,n) qse_mbsxset(buf,bsz,c,n) +# define qse_strset qse_mbsset +# define qse_strxset qse_mbsxset #else -# define qse_strset(buf,c,n) qse_wcsset(buf,c,n) -# define qse_strxset(buf,bsz,c,n) qse_wcsxset(buf,bsz,c,n) +# define qse_strset qse_wcsset +# define qse_strxset qse_wcsxset #endif /* case conversion */ @@ -2552,11 +2552,11 @@ QSE_EXPORT qse_size_t qse_wcsupr ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strlwr(str) qse_mbslwr(str); -# define qse_strupr(str) qse_mbsupr(str); +# define qse_strlwr qse_mbslwr; +# define qse_strupr qse_mbsupr; #else -# define qse_strlwr(str) qse_wcslwr(str); -# define qse_strupr(str) qse_wcsupr(str); +# define qse_strlwr qse_wcslwr; +# define qse_strupr qse_wcsupr; #endif @@ -2579,11 +2579,11 @@ QSE_EXPORT qse_size_t qse_wcsxrev ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strrev(str) qse_mbsrev(str) -# define qse_strxrev(str,len) qse_mbsxrev(str,len) +# define qse_strrev qse_mbsrev +# define qse_strxrev qse_mbsxrev #else -# define qse_strrev(str) qse_wcsrev(str) -# define qse_strxrev(str,len) qse_wcsxrev(str,len) +# define qse_strrev qse_wcsrev +# define qse_strxrev qse_wcsxrev #endif QSE_EXPORT qse_size_t qse_mbsrot ( @@ -2613,11 +2613,11 @@ QSE_EXPORT qse_size_t qse_wcsxrot ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strrot(str,dir,n) qse_mbsrot(str,dir,n) -# define qse_strxrot(str,len,dir,n) qse_mbsrot(str,len,dir,n) +# define qse_strrot qse_mbsrot +# define qse_strxrot qse_mbsrot #else -# define qse_strrot(str,dir,n) qse_wcsrot(str,dir,n) -# define qse_strxrot(str,len,dir,n) qse_wcsrot(str,len,dir,n) +# define qse_strrot qse_wcsrot +# define qse_strxrot qse_wcsrot #endif /** @@ -2707,11 +2707,11 @@ QSE_EXPORT int qse_wcsspltrn ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strspl(str,delim,lquote,rquote,escape) qse_mbsspl(str,delim,lquote,rquote,escape) -# define qse_strspltrn(str,delim,lquote,rquote,escape,trset) qse_mbsspltrn(str,delim,lquote,rquote,escape,trset) +# define qse_strspl qse_mbsspl +# define qse_strspltrn qse_mbsspltrn #else -# define qse_strspl(str,delim,lquote,rquote,escape) qse_wcsspl(str,delim,lquote,rquote,escape) -# define qse_strspltrn(str,delim,lquote,rquote,escape,trset) qse_wcsspltrn(str,delim,lquote,rquote,escape,trset) +# define qse_strspl qse_wcsspl +# define qse_strspltrn qse_wcsspltrn #endif @@ -2758,13 +2758,13 @@ QSE_EXPORT qse_wchar_t* qse_wcsxntok ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strtok(s,d,t) qse_mbstok(s,d,t) -# define qse_strxtok(s,len,d,t) qse_mbsxtok(s,len,d,t) -# define qse_strxntok(s,len,d,dl,t) qse_mbsxntok(s,len,d,dl,t) +# define qse_strtok qse_mbstok +# define qse_strxtok qse_mbsxtok +# define qse_strxntok qse_mbsxntok #else -# define qse_strtok(s,d,t) qse_wcstok(s,d,t) -# define qse_strxtok(s,len,d,t) qse_wcsxtok(s,len,d,t) -# define qse_strxntok(s,len,d,dl,t) qse_wcsxntok(s,len,d,dl,t) +# define qse_strtok qse_wcstok +# define qse_strxtok qse_wcsxtok +# define qse_strxntok qse_wcsxntok #endif /** @@ -2878,15 +2878,15 @@ QSE_EXPORT qse_size_t qse_wcsxtrm ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strtrmx(str,opt) qse_mbstrmx(str,opt) -# define qse_strxtrmx(str,len,opt) qse_mbsxtrmx(str,len,opt) -# define qse_strtrm(str) qse_mbstrm(str) -# define qse_strxtrm(str,len) qse_mbsxtrm(str,len) +# define qse_strtrmx qse_mbstrmx +# define qse_strxtrmx qse_mbsxtrmx +# define qse_strtrm qse_mbstrm +# define qse_strxtrm qse_mbsxtrm #else -# define qse_strtrmx(str,opt) qse_wcstrmx(str,opt) -# define qse_strxtrmx(str,len,opt) qse_wcsxtrmx(str,len,opt) -# define qse_strtrm(str) qse_wcstrm(str) -# define qse_strxtrm(str,len) qse_wcsxtrm(str,len) +# define qse_strtrmx qse_wcstrmx +# define qse_strxtrmx qse_wcsxtrmx +# define qse_strtrm qse_wcstrm +# define qse_strxtrm qse_wcsxtrm #endif /** @@ -2929,11 +2929,11 @@ QSE_EXPORT qse_size_t qse_wcsxpac ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strpac(str) qse_mbspac(str) -# define qse_strxpac(str,len) qse_mbsxpac(str,len) +# define qse_strpac qse_mbspac +# define qse_strxpac qse_mbsxpac #else -# define qse_strpac(str) qse_wcspac(str) -# define qse_strxpac(str,len) qse_wcsxpac(str,len) +# define qse_strpac qse_wcspac +# define qse_strxpac qse_wcsxpac #endif QSE_EXPORT int qse_mbsfnmat ( @@ -2993,15 +2993,15 @@ QSE_EXPORT int qse_wcsxnfnmat ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_strfnmat(str,ptn,flags) qse_mbsfnmat(str,ptn,flags) -# define qse_strxfnmat(str,slen,ptn,flags) qse_mbsxfnmat(str,slen,ptn,flags) -# define qse_strnfnmat(str,ptn,plen,flags) qse_mbsnfnmat(str,ptn,plen,flags) -# define qse_strxnfnmat(str,slen,ptn,plen,flags) qse_mbsxnfnmat(str,slen,ptn,plen,flags) +# define qse_strfnmat qse_mbsfnmat +# define qse_strxfnmat qse_mbsxfnmat +# define qse_strnfnmat qse_mbsnfnmat +# define qse_strxnfnmat qse_mbsxnfnmat #else -# define qse_strfnmat(str,ptn,flags) qse_wcsfnmat(str,ptn,flags) -# define qse_strxfnmat(str,slen,ptn,flags) qse_wcsxfnmat(str,slen,ptn,flags) -# define qse_strnfnmat(str,ptn,plen,flags) qse_wcsnfnmat(str,ptn,plen,flags) -# define qse_strxnfnmat(str,slen,ptn,plen,flags) qse_wcsxnfnmat(str,slen,ptn,plen,flags) +# define qse_strfnmat qse_wcsfnmat +# define qse_strxfnmat qse_wcsxfnmat +# define qse_strnfnmat qse_wcsnfnmat +# define qse_strxnfnmat qse_wcsxnfnmat #endif QSE_EXPORT int qse_mbsistype ( @@ -3027,11 +3027,11 @@ QSE_EXPORT int qse_wcsxistype ( ); #if defined(QSE_CHAR_IS_MCHAR) -# define qse_stristype(str,type) qse_mbsistype(str,type) -# define qse_strxistype(str,len,type) qse_mbsxistype(str,len,type) +# define qse_stristype qse_mbsistype +# define qse_strxistype qse_mbsxistype #else -# define qse_stristype(str,type) qse_wcsistype(str,type) -# define qse_strxistype(str,len,type) qse_wcsxistype(str,len,type) +# define qse_stristype qse_wcsistype +# define qse_strxistype qse_wcsxistype #endif /* ------------------------------------------------------------------------- */ diff --git a/qse/include/qse/xli/xli.h b/qse/include/qse/xli/xli.h index 804b44cc..4a6a7674 100644 --- a/qse/include/qse/xli/xli.h +++ b/qse/include/qse/xli/xli.h @@ -76,11 +76,11 @@ enum qse_xli_errnum_t QSE_XLI_EVALUE, /**< value expected in place of '${0}' */ QSE_XLI_ESTRNC, /**< string not closed */ QSE_XLI_ETAGNC, /**< tag not closed */ - QSE_XLI_EINCLSTR ,/**< '@include' not followed by a string */ + QSE_XLI_EINCLSTR ,/**< '\include' not followed by a string */ QSE_XLI_ELXCHR, /**< invalid character '${0} */ QSE_XLI_ETAGCHR, /**< invalid tag character '${0} */ - QSE_XLI_EXKWNR, /**< @word '${0}' not recognized */ - QSE_XLI_EXKWEM, /**< @ not followed by a valid word */ + QSE_XLI_EXKWNR, /**< \word '${0}' not recognized */ + QSE_XLI_EXKWEM, /**< \ not followed by a valid word */ QSE_XLI_EIDENT, /**< invalid identifier '${0}' */ QSE_XLI_EKEY, /**< key expected in place of '${0}' */ QSE_XLI_ENOKEY, /**< missing key after key tag */ @@ -154,8 +154,12 @@ enum qse_xli_trait_t * the ini format doesn't support these regardless of this option. */ QSE_XLI_BOOLEAN = (1 << 11), + /** perform a case insensitive search. it doesn't affect + * tokenization of keyword idntifiers like @include. */ + QSE_XLI_CASE_INSENSITIVE = (1 << 12), + /** enable pair validation against pair definitions while reading */ - QSE_XLI_VALIDATE = (1 << 12) + QSE_XLI_VALIDATE = (1 << 13) }; typedef enum qse_xli_trait_t qse_xli_trait_t; @@ -520,7 +524,7 @@ QSE_EXPORT qse_xli_errstr_t qse_xli_geterrstr ( * * Here is an example of changing the formatting string for the #QSE_XLI_EIOFIL * error. - * @code + * \code * qse_xli_errstr_t orgerrstr; * * const qse_char_t* myerrstr (qse_xli_t* xli, qse_xli_errnum_t num) @@ -536,7 +540,7 @@ QSE_EXPORT qse_xli_errstr_t qse_xli_geterrstr ( * qse_xli_seterrstr (xli, myerrstr); * ... * } - * @endcode + * \endcode */ QSE_EXPORT void qse_xli_seterrstr ( qse_xli_t* xli, /**< xli object */ @@ -545,7 +549,7 @@ QSE_EXPORT void qse_xli_seterrstr ( /** * The qse_xli_geterrnum() function gets the number of the last error. - * @return error number + * \return error number */ QSE_EXPORT qse_xli_errnum_t qse_xli_geterrnum ( const qse_xli_t* xli /**< xli object */ @@ -554,7 +558,7 @@ QSE_EXPORT qse_xli_errnum_t qse_xli_geterrnum ( /** * The qse_xli_geterrloc() function gets the location where the last error * has occurred. - * @return error location + * \return error location */ QSE_EXPORT const qse_xli_loc_t* qse_xli_geterrloc ( const qse_xli_t* xli /**< xli object */ @@ -562,7 +566,7 @@ QSE_EXPORT const qse_xli_loc_t* qse_xli_geterrloc ( /** * The qse_xli_geterrmsg() function gets a string describing the last error. - * @return error message pointer + * \return error message pointer */ QSE_EXPORT const qse_char_t* qse_xli_geterrmsg ( const qse_xli_t* xli /**< xli object */ diff --git a/qse/lib/xli/read-ini.c b/qse/lib/xli/read-ini.c index 9d9e50bc..deedb2a5 100644 --- a/qse/lib/xli/read-ini.c +++ b/qse/lib/xli/read-ini.c @@ -354,7 +354,7 @@ static int read_list (qse_xli_t* xli) while (atom) { if (atom->type == QSE_XLI_PAIR && - qse_strcmp (((qse_xli_pair_t*)atom)->key, QSE_STR_PTR(xli->tok.name)) == 0) + xli->opt.strcmp(((qse_xli_pair_t*)atom)->key, QSE_STR_PTR(xli->tok.name)) == 0) { qse_xli_seterror (xli, QSE_XLI_EEXIST, QSE_STR_XSTR(xli->tok.name), &xli->tok.loc); goto oops; diff --git a/qse/lib/xli/read-json.c b/qse/lib/xli/read-json.c index 07a87f33..e89c7735 100644 --- a/qse/lib/xli/read-json.c +++ b/qse/lib/xli/read-json.c @@ -167,6 +167,7 @@ static qse_xli_tok_type_t classify_ident (qse_xli_t* xli, const qse_cstr_t* name mid = left + (right - left) / 2; kwp = &kwtab[mid]; + /* not affected by case-insensitivity */ n = qse_strxncmp (kwp->name.ptr, kwp->name.len, name->ptr, name->len); if (n > 0) { @@ -539,7 +540,7 @@ static int check_token_for_key_eligibility (qse_xli_t* xli, qse_xli_list_t* parl while (atom) { if (atom->type == QSE_XLI_PAIR && - qse_strcmp(((qse_xli_pair_t*)atom)->key, QSE_STR_PTR(xli->tok.name)) == 0) + xli->opt.strcmp(((qse_xli_pair_t*)atom)->key, QSE_STR_PTR(xli->tok.name)) == 0) { qse_xli_seterror (xli, QSE_XLI_EEXIST, QSE_STR_XSTR(xli->tok.name), &xli->tok.loc); return -1; diff --git a/qse/lib/xli/read.c b/qse/lib/xli/read.c index 83e446d9..5e5c6aeb 100644 --- a/qse/lib/xli/read.c +++ b/qse/lib/xli/read.c @@ -285,7 +285,8 @@ retry: mid = left + (right - left) / 2; kwp = &kwtabp[mid]; - n = qse_strxncmp (kwp->name.ptr, kwp->name.len, name->ptr, name->len); + /* the identifier classification is not affected by case-insensivity */ + n = qse_strxncmp(kwp->name.ptr, kwp->name.len, name->ptr, name->len); if (n > 0) { /* if left, right, mid were of qse_size_t, @@ -809,7 +810,7 @@ static int read_pair (qse_xli_t* xli, const qse_char_t* keytag, const qse_xli_sc while (atom) { if (atom->type == QSE_XLI_PAIR && - qse_strcmp (((qse_xli_pair_t*)atom)->key, QSE_STR_PTR(xli->tok.name)) == 0) + xli->opt.strcmp(((qse_xli_pair_t*)atom)->key, QSE_STR_PTR(xli->tok.name)) == 0) { qse_xli_seterror (xli, QSE_XLI_EEXIST, QSE_STR_XSTR(xli->tok.name), &xli->tok.loc); goto oops; @@ -836,8 +837,8 @@ static int read_pair (qse_xli_t* xli, const qse_char_t* keytag, const qse_xli_sc { if (atom->type == QSE_XLI_PAIR && ((qse_xli_pair_t*)atom)->alias && - qse_strcmp (((qse_xli_pair_t*)atom)->key, key.ptr) == 0 && - qse_strcmp (((qse_xli_pair_t*)atom)->alias, QSE_STR_PTR(xli->tok.name)) == 0) + xli->opt.strcmp(((qse_xli_pair_t*)atom)->key, key.ptr) == 0 && + xli->opt.strcmp(((qse_xli_pair_t*)atom)->alias, QSE_STR_PTR(xli->tok.name)) == 0) { qse_xli_seterror (xli, QSE_XLI_EEXIST, QSE_STR_XSTR(xli->tok.name), &xli->tok.loc); goto oops; diff --git a/qse/lib/xli/xli.c b/qse/lib/xli/xli.c index dc29093c..7b5bc5c1 100644 --- a/qse/lib/xli/xli.c +++ b/qse/lib/xli/xli.c @@ -70,6 +70,8 @@ int qse_xli_init (qse_xli_t* xli, qse_mmgr_t* mmgr, qse_size_t rootxtnsize) xli->errstr = qse_xli_dflerrstr; xli->opt.root_xtnsize = rootxtnsize; xli->opt.key_splitter = QSE_T('.'); + xli->opt.strcmp = qse_strcmp; + xli->opt.strxcmp = qse_strxcmp; xli->dotted_curkey = qse_str_open (mmgr, 0, 128); if (xli->dotted_curkey == QSE_NULL) goto oops; @@ -121,6 +123,16 @@ int qse_xli_setopt (qse_xli_t* xli, qse_xli_opt_t id, const void* value) { case QSE_XLI_TRAIT: xli->opt.trait = *(const int*)value; + if (xli->opt.trait & QSE_XLI_CASE_INSENSITIVE) + { + xli->opt.strcmp = qse_strcasecmp; + xli->opt.strxcmp = qse_strxcasecmp; + } + else + { + xli->opt.strcmp = qse_strcmp; + xli->opt.strxcmp = qse_strxcmp; + } return 0; case QSE_XLI_PAIRXTNSIZE: @@ -648,7 +660,7 @@ static qse_size_t count_pairs_by_key ( if (p->type == QSE_XLI_PAIR) { qse_xli_pair_t* pair = (qse_xli_pair_t*)p; - if (qse_strxcmp (key->ptr, key->len, pair->key) == 0) count++; + if (xli->opt.strxcmp(key->ptr, key->len, pair->key) == 0) count++; } p = p->next; @@ -670,10 +682,10 @@ static qse_xli_pair_t* find_pair_by_key_and_alias ( if (p->type == QSE_XLI_PAIR) { qse_xli_pair_t* pair = (qse_xli_pair_t*)p; - if (qse_strxcmp (key->ptr, key->len, pair->key) == 0) + if (xli->opt.strxcmp(key->ptr, key->len, pair->key) == 0) { if (alias == QSE_NULL || - qse_strxcmp (alias->ptr, alias->len, pair->alias) == 0) return pair; + xli->opt.strxcmp(alias->ptr, alias->len, pair->alias) == 0) return pair; } } @@ -697,7 +709,7 @@ static qse_xli_pair_t* find_pair_by_key_and_index ( if (p->type == QSE_XLI_PAIR) { qse_xli_pair_t* pair = (qse_xli_pair_t*)p; - if (qse_strxcmp (key->ptr, key->len, pair->key) == 0) + if (xli->opt.strxcmp(key->ptr, key->len, pair->key) == 0) { if (index == count) return pair; count++; diff --git a/qse/lib/xli/xli.h b/qse/lib/xli/xli.h index 5f7767ef..cf8504e3 100644 --- a/qse/lib/xli/xli.h +++ b/qse/lib/xli/xli.h @@ -103,6 +103,9 @@ struct qse_xli_t qse_size_t pair_xtnsize; qse_size_t root_xtnsize; qse_char_t key_splitter; /**< character to use to split a key in the fqpn format */ + + int (*strcmp) (const qse_char_t* s1, const qse_char_t* s2); + int (*strxcmp) (const qse_char_t* s1, qse_size_t len1, const qse_char_t* s2); } opt; qse_xli_ecb_t* ecb;