diff options
author | Vince Harron <vharron@google.com> | 2015-06-07 21:43:05 -0700 |
---|---|---|
committer | Vince Harron <vharron@google.com> | 2015-06-08 08:33:11 -0700 |
commit | 330b6544424d02bcdf29653dd889d524d2e6f7d2 (patch) | |
tree | 4c40fd53e5c12fcc83aeaa06f27fa606bcfe3d3c /share/swig/2.0.11/tcl/tclwstrings.swg | |
parent | 7b7c39b73762eb3aa12d79a3893e156fd801468e (diff) | |
download | windows-x86-330b6544424d02bcdf29653dd889d524d2e6f7d2.tar.gz |
Adding binaries for 2.0.11HEADstudio-master-dev_before_27917934studio-master-dev_before_26911779studio-3.1.2studio-2.3studio-2.0-rc1studio-2.0studio-1.5studio-1.4gradle_3.1.2gradle_2.3.0gradle_2.0.0studio-master-releasestudio-1.4-releasestudio-1.4-devstudio-1.3-releasestudio-1.3-devmastermain
Diffstat (limited to 'share/swig/2.0.11/tcl/tclwstrings.swg')
-rw-r--r-- | share/swig/2.0.11/tcl/tclwstrings.swg | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/share/swig/2.0.11/tcl/tclwstrings.swg b/share/swig/2.0.11/tcl/tclwstrings.swg new file mode 100644 index 0000000..b3b682e --- /dev/null +++ b/share/swig/2.0.11/tcl/tclwstrings.swg @@ -0,0 +1,67 @@ +/* ----------------------------------------------------------------------------- + * tclwstrings.wg + * + * Utility methods for wchar strings + * ----------------------------------------------------------------------------- */ + +%{ +#include <wchar.h> +%} + +%fragment("SWIG_AsWCharPtrAndSize","header") { +SWIGINTERN int +SWIG_AsWCharPtrAndSize(Tcl_Obj *obj, wchar_t** cptr, size_t* psize, int *alloc) +{ + int len = 0; + Tcl_UniChar *ustr = Tcl_GetUnicodeFromObj(obj, &len); + if (ustr) { + if (cptr) { + Tcl_Encoding encoding = NULL; + char *src = (char *) ustr; + int srcLen = (len)*sizeof(Tcl_UniChar); + int dstLen = sizeof(wchar_t)*(len + 1); + char *dst = %new_array(dstLen, char); + int flags = 0; + Tcl_EncodingState *statePtr = 0; + int srcRead = 0; + int dstWrote = 0; + int dstChars = 0; + Tcl_UtfToExternal(0, encoding, src, srcLen, flags, statePtr, dst, + dstLen, &srcRead, &dstWrote, &dstChars); + + if (alloc) *alloc = SWIG_NEWOBJ; + } + if (psize) *psize = len + 1; + return SWIG_OK; + } + return SWIG_TypeError; +} +} + +%fragment("SWIG_FromWCharPtrAndSize","header") { +SWIGINTERNINLINE Tcl_Obj * +SWIG_FromWCharPtrAndSize(const wchar_t* carray, size_t size) +{ + Tcl_Obj *res = NULL; + if (size < INT_MAX) { + Tcl_Encoding encoding = NULL; + char *src = (char *) carray; + int srcLen = (int)(size*sizeof(wchar_t)); + int dstLen = (int)(size*sizeof(Tcl_UniChar)); + char *dst = %new_array(dstLen, char); + int flags = 0; + Tcl_EncodingState *statePtr = 0; + int srcRead = 0; + int dstWrote = 0; + int dstChars = 0; + + Tcl_ExternalToUtf(0, encoding, src, srcLen, flags, statePtr, dst, + dstLen, &srcRead, &dstWrote, &dstChars); + + res = Tcl_NewUnicodeObj((Tcl_UniChar*)dst, (int)size); + %delete_array(dst); + } + return res; +} +} + |