added qse_utf8cmgr and qse_loccmgr
This commit is contained in:
parent
5e0b9418d7
commit
dd02292cc4
@ -42,6 +42,9 @@ struct qse_mbstate_t
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern qse_cmgr_t* qse_utf8cmgr;
|
||||||
|
extern qse_cmgr_t* qse_loccmgr;
|
||||||
|
|
||||||
qse_cmgr_t* qse_getdflcmgr (
|
qse_cmgr_t* qse_getdflcmgr (
|
||||||
void
|
void
|
||||||
);
|
);
|
||||||
|
@ -716,7 +716,6 @@ struct qse_mmgr_t
|
|||||||
};
|
};
|
||||||
typedef struct qse_mmgr_t qse_mmgr_t;
|
typedef struct qse_mmgr_t qse_mmgr_t;
|
||||||
|
|
||||||
|
|
||||||
typedef qse_size_t (*qse_cmgr_mbtowc_t) (
|
typedef qse_size_t (*qse_cmgr_mbtowc_t) (
|
||||||
const qse_mchar_t* mb,
|
const qse_mchar_t* mb,
|
||||||
qse_size_t size,
|
qse_size_t size,
|
||||||
@ -730,7 +729,8 @@ typedef qse_size_t (*qse_cmgr_wctomb_t) (
|
|||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The qse_cmgr_t type defines the interface to various character handling.
|
* The qse_cmgr_t type defines the character-level interface to
|
||||||
|
* multibyte/wide-character string conversion.
|
||||||
*/
|
*/
|
||||||
struct qse_cmgr_t
|
struct qse_cmgr_t
|
||||||
{
|
{
|
||||||
|
@ -21,20 +21,23 @@
|
|||||||
#include <qse/cmn/mbwc.h>
|
#include <qse/cmn/mbwc.h>
|
||||||
#include <qse/cmn/utf8.h>
|
#include <qse/cmn/utf8.h>
|
||||||
|
|
||||||
|
static qse_cmgr_t builtin_cmgr[] =
|
||||||
static qse_cmgr_t utf8_cmgr =
|
|
||||||
{
|
{
|
||||||
qse_utf8touc,
|
{
|
||||||
qse_uctoutf8
|
qse_mbtowc,
|
||||||
|
qse_wctomb
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
qse_utf8touc,
|
||||||
|
qse_uctoutf8
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static qse_cmgr_t locale_cmgr =
|
qse_cmgr_t* qse_loccmgr = &builtin_cmgr[0];
|
||||||
{
|
qse_cmgr_t* qse_utf8cmgr = &builtin_cmgr[1];
|
||||||
qse_mbtowc,
|
|
||||||
qse_wctomb
|
|
||||||
};
|
|
||||||
|
|
||||||
static qse_cmgr_t* dfl_cmgr = &locale_cmgr;
|
static qse_cmgr_t* dfl_cmgr = &builtin_cmgr[0];
|
||||||
|
|
||||||
qse_cmgr_t* qse_getdflcmgr (void)
|
qse_cmgr_t* qse_getdflcmgr (void)
|
||||||
{
|
{
|
||||||
@ -43,7 +46,7 @@ qse_cmgr_t* qse_getdflcmgr (void)
|
|||||||
|
|
||||||
void qse_setdflcmgr (qse_cmgr_t* cmgr)
|
void qse_setdflcmgr (qse_cmgr_t* cmgr)
|
||||||
{
|
{
|
||||||
dfl_cmgr = (cmgr? cmgr: &locale_cmgr);
|
dfl_cmgr = (cmgr? cmgr: &builtin_cmgr[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* string conversion function using default character conversion manager */
|
/* string conversion function using default character conversion manager */
|
||||||
@ -66,7 +69,8 @@ int qse_mbsntowcsnupto (
|
|||||||
const qse_mchar_t* mbs, qse_size_t* mbslen,
|
const qse_mchar_t* mbs, qse_size_t* mbslen,
|
||||||
qse_wchar_t* wcs, qse_size_t* wcslen, qse_wchar_t stopper)
|
qse_wchar_t* wcs, qse_size_t* wcslen, qse_wchar_t stopper)
|
||||||
{
|
{
|
||||||
return qse_mbsntowcsnuptowithcmgr (mbs, mbslen, wcs, wcslen, stopper, dfl_cmgr);
|
return qse_mbsntowcsnuptowithcmgr (
|
||||||
|
mbs, mbslen, wcs, wcslen, stopper, dfl_cmgr);
|
||||||
}
|
}
|
||||||
|
|
||||||
qse_wchar_t* qse_mbstowcsdup (const qse_mchar_t* mbs, qse_mmgr_t* mmgr)
|
qse_wchar_t* qse_mbstowcsdup (const qse_mchar_t* mbs, qse_mmgr_t* mmgr)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include <qse/cmn/sio.h>
|
#include <qse/cmn/sio.h>
|
||||||
|
#include <qse/cmn/mbwc.h>
|
||||||
#include <qse/cmn/mem.h>
|
#include <qse/cmn/mem.h>
|
||||||
#include <qse/cmn/fmt.h>
|
#include <qse/cmn/fmt.h>
|
||||||
#include <qse/cmn/stdio.h>
|
#include <qse/cmn/stdio.h>
|
||||||
@ -143,11 +144,24 @@ static int test3 (void)
|
|||||||
|
|
||||||
int main ()
|
int main ()
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
UINT old_cp = GetConsoleOutputCP();
|
char locale[100];
|
||||||
SetConsoleOutputCP (CP_UTF8);
|
UINT codepage = GetConsoleOutputCP();
|
||||||
#endif
|
if (codepage == CP_UTF8)
|
||||||
|
{
|
||||||
|
/*SetConsoleOutputCP (CP_UTF8);*/
|
||||||
|
qse_setdflcmgr (qse_utf8cmgr);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprintf (locale, ".%u", (unsigned int)codepage);
|
||||||
|
setlocale (LC_ALL, locale);
|
||||||
|
qse_setdflcmgr (qse_loccmgr);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
setlocale (LC_ALL, "");
|
||||||
|
qse_setdflcmgr (qse_loccmgr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
setlocale (LC_ALL, "");
|
setlocale (LC_ALL, "");
|
||||||
@ -159,11 +173,5 @@ int main ()
|
|||||||
R (test3);
|
R (test3);
|
||||||
|
|
||||||
qse_sio_close (g_out);
|
qse_sio_close (g_out);
|
||||||
|
|
||||||
#if 0
|
|
||||||
#if defined(_WIN32)
|
|
||||||
SetConsoleOutputCP (old_cp);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include <qse/cmn/sio.h>
|
#include <qse/cmn/sio.h>
|
||||||
|
#include <qse/cmn/mbwc.h>
|
||||||
#include <qse/cmn/mem.h>
|
#include <qse/cmn/mem.h>
|
||||||
#include <qse/cmn/stdio.h>
|
#include <qse/cmn/stdio.h>
|
||||||
|
|
||||||
@ -129,17 +130,22 @@ static int test3 (void)
|
|||||||
int main ()
|
int main ()
|
||||||
{
|
{
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
char codepage[100];
|
char locale[100];
|
||||||
UINT old_cp = GetConsoleOutputCP();
|
UINT codepage = GetConsoleOutputCP();
|
||||||
SetConsoleOutputCP (CP_UTF8);
|
if (codepage == CP_UTF8)
|
||||||
|
{
|
||||||
/* TODO: on windows this set locale only affects those mbcs fucntions in clib.
|
/*SetConsoleOUtputCP (CP_UTF8);*/
|
||||||
* it doesn't support utf8 i guess find a working way. the following won't work
|
qse_setdflcmgr (qse_utf8cmgr);
|
||||||
sprintf (codepage, ".%d", GetACP());
|
}
|
||||||
setlocale (LC_ALL, codepage);
|
else
|
||||||
*/
|
{
|
||||||
|
sprintf (locale, ".%u", (unsigned int)codepage);
|
||||||
|
setlocale (LC_ALL, locale);
|
||||||
|
qse_setdflcmgr (qse_loccmgr);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
setlocale (LC_ALL, "");
|
setlocale (LC_ALL, "");
|
||||||
|
qse_setdflcmgr (qse_loccmgr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
qse_printf (QSE_T("--------------------------------------------------------------------------------\n"));
|
qse_printf (QSE_T("--------------------------------------------------------------------------------\n"));
|
||||||
@ -150,8 +156,5 @@ int main ()
|
|||||||
R (test2);
|
R (test2);
|
||||||
R (test3);
|
R (test3);
|
||||||
|
|
||||||
#if defined(_WIN32)
|
|
||||||
SetConsoleOutputCP (old_cp);
|
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user