diff --git a/microscript/ILibDuktape_Helpers.c b/microscript/ILibDuktape_Helpers.c index 0355814..489dad6 100644 --- a/microscript/ILibDuktape_Helpers.c +++ b/microscript/ILibDuktape_Helpers.c @@ -960,6 +960,16 @@ char *ILibDuktape_String_WideToUTF8(duk_context *ctx, char *wstr) return(wstr); #endif } +void ILibDuktape_String_UTF8ToWideEx(duk_context *ctx, char *str) +{ +#ifdef WIN32 + size_t tmpLen = 2 + (2 * MultiByteToWideChar(CP_UTF8, 0, (LPCCH)str, -1, NULL, 0)); + LPWSTR retVal = (LPWSTR)Duktape_PushBuffer(ctx, tmpLen); + MultiByteToWideChar(CP_UTF8, 0, (LPCCH)str, -1, retVal, (int)tmpLen); +#else + duk_push_string(ctx, str); +#endif +} char *ILibDuktape_String_UTF8ToWide(duk_context *ctx, char *str) { #ifdef WIN32 diff --git a/microscript/ILibDuktape_Helpers.h b/microscript/ILibDuktape_Helpers.h index f462c99..426893f 100644 --- a/microscript/ILibDuktape_Helpers.h +++ b/microscript/ILibDuktape_Helpers.h @@ -70,6 +70,7 @@ char* ILibDuktape_String_AsWide(duk_context *ctx, duk_idx_t idx, duk_size_t *len void ILibDuktape_String_PushWideString(duk_context *ctx, char *wstr, size_t wstrlen); char *ILibDuktape_String_WideToUTF8(duk_context *ctx, char *wstr); char *ILibDuktape_String_UTF8ToWide(duk_context *ctx, char *str); +void ILibDuktape_String_UTF8ToWideEx(duk_context *ctx, char *str); #define Duktape_PushBuffer(ctx, bufSize) ILibMemory_Init(duk_push_fixed_buffer(ctx, (duk_size_t)(bufSize) + sizeof(ILibMemory_Header)), (bufSize), 0, ILibMemory_Types_OTHER) void Duktape_Console_Log(duk_context *ctx, void *chain, ILibDuktape_LogTypes logType, char *msg, duk_size_t msgLen);