diff lib/swig/swigwin-2.0.11/Lib/lua/wchar.i @ 1899:b3009adc0e2f

Adding swig, gitignore, hgignore
author Nomad
date Mon, 21 Oct 2013 10:42:27 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/swig/swigwin-2.0.11/Lib/lua/wchar.i	Mon Oct 21 10:42:27 2013 +0200
@@ -0,0 +1,42 @@
+/* -----------------------------------------------------------------------------
+ * wchar.i
+ *
+ * Typemaps for the wchar_t type
+ * These are mapped to a Lua string and are passed around by value.
+ * ----------------------------------------------------------------------------- */
+
+// note: only support for pointer right now, not fixed length strings
+// TODO: determine how long a const wchar_t* is so we can write wstr2str() 
+// & do the output typemap
+
+%{
+#include <stdlib.h>
+	
+wchar_t* str2wstr(const char *str, int len)
+{
+  wchar_t* p;
+  if (str==0 || len<1)  return 0;
+  p=(wchar *)malloc((len+1)*sizeof(wchar_t));
+  if (p==0)	return 0;
+  if (mbstowcs(p, str, len)==-1)
+  {
+    free(p);
+    return 0;
+  }
+  p[len]=0;
+  return p;
+}
+%}
+
+%typemap(in, checkfn="SWIG_lua_isnilstring", fragment="SWIG_lua_isnilstring") wchar_t *
+%{
+$1 = str2wstr(lua_tostring( L, $input ),lua_rawlen( L, $input ));
+if ($1==0) {SWIG_Lua_pushferrstring(L,"Error in converting to wchar (arg %d)",$input);goto fail;}
+%}
+
+%typemap(freearg) wchar_t *
+%{
+free($1);
+%}
+
+%typemap(typecheck) wchar_t * = char *;