static PyObject* PyIntl_bindtextdomain(PyObject* self,PyObject*args) { char *domain, *dirname, *current_dirname; PyObject *dirname_obj, *dirname_bytes = NULL, *result; if (!PyArg_ParseTuple(args, "sO", &domain, &dirname_obj)) return 0; if (!strlen(domain)) { PyErr_SetString(Error, "domain must be a non-empty string"); return 0; } if (dirname_obj != Py_None) { if (!PyUnicode_FSConverter(dirname_obj, &dirname_bytes)) return NULL; dirname = PyBytes_AsString(dirname_bytes); } else { dirname_bytes = NULL; dirname = NULL; } current_dirname = bindtextdomain(domain, dirname); if (current_dirname == NULL) { Py_XDECREF(dirname_bytes); PyErr_SetFromErrno(PyExc_OSError); return NULL; } result = str2uni(current_dirname); Py_XDECREF(dirname_bytes); return result; }
static PyObject* PyIntl_dgettext(PyObject* self, PyObject *args) { char *domain, *in; if (!PyArg_ParseTuple(args, "zs", &domain, &in)) return 0; return str2uni(dgettext(domain, in)); }
static PyObject* PyIntl_gettext(PyObject* self, PyObject *args) { char *in; if (!PyArg_ParseTuple(args, "s", &in)) return 0; return str2uni(gettext(in)); }
static PyObject* PyIntl_dcgettext(PyObject *self, PyObject *args) { char *domain, *msgid; int category; if (!PyArg_ParseTuple(args, "zsi", &domain, &msgid, &category)) return 0; return str2uni(dcgettext(domain,msgid,category)); }
static PyObject* PyIntl_bind_textdomain_codeset(PyObject* self,PyObject*args) { char *domain,*codeset; if (!PyArg_ParseTuple(args, "sz", &domain, &codeset)) return NULL; codeset = bind_textdomain_codeset(domain, codeset); if (codeset) return str2uni(codeset); Py_RETURN_NONE; }
static PyObject* PyLocale_setlocale(PyObject* self, PyObject* args) { int category; char *locale = NULL, *result; PyObject *result_object; if (!PyArg_ParseTuple(args, "i|z:setlocale", &category, &locale)) return NULL; #if defined(MS_WINDOWS) if (category < LC_MIN || category > LC_MAX) { PyErr_SetString(Error, "invalid locale category"); return NULL; } #endif if (locale) { /* set locale */ result = setlocale(category, locale); if (!result) { /* operation failed, no setting was changed */ PyErr_SetString(Error, "unsupported locale setting"); return NULL; } result_object = str2uni(result); if (!result_object) return NULL; } else { /* get locale */ result = setlocale(category, NULL); if (!result) { PyErr_SetString(Error, "locale query failed"); return NULL; } result_object = str2uni(result); } return result_object; }
static PyObject* PyIntl_textdomain(PyObject* self, PyObject* args) { char *domain; if (!PyArg_ParseTuple(args, "z", &domain)) return 0; domain = textdomain(domain); if (!domain) { PyErr_SetFromErrno(PyExc_OSError); return NULL; } return str2uni(domain); }
static PyObject* PyIntl_bindtextdomain(PyObject* self,PyObject*args) { char *domain, *dirname; if (!PyArg_ParseTuple(args, "sz", &domain, &dirname)) return 0; if (!strlen(domain)) { PyErr_SetString(Error, "domain must be a non-empty string"); return 0; } dirname = bindtextdomain(domain, dirname); if (!dirname) { PyErr_SetFromErrno(PyExc_OSError); return NULL; } return str2uni(dirname); }
int tokenlist_from_lua(lua_State * L) { const char *s; int tok, t; size_t i, j; halfword p, q, r; r = get_avail(); token_info(r) = 0; token_link(r) = null; p = r; t = lua_type(L, -1); if (t == LUA_TTABLE) { j = lua_rawlen(L, -1); if (j > 0) { for (i = 1; i <= j; i++) { lua_rawgeti(L, -1, (int) i); tok = token_from_lua(L); if (tok >= 0) { store_new_token(tok); } lua_pop(L, 1); }; } return r; } else if (t == LUA_TSTRING) { s = lua_tolstring(L, -1, &j); for (i = 0; i < j; i++) { if (s[i] == 32) { tok = token_val(10, s[i]); } else { int j1 = (int) str2uni((const unsigned char *) (s + i)); i = i + (size_t) (utf8_size(j1) - 1); tok = token_val(12, j1); } store_new_token(tok); } return r; } else { free_avail(r); return null; } }
static PyObject* PyLocale_nl_langinfo(PyObject* self, PyObject* args) { int item, i; if (!PyArg_ParseTuple(args, "i:nl_langinfo", &item)) return NULL; /* Check whether this is a supported constant. GNU libc sometimes returns numeric values in the char* return value, which would crash PyUnicode_FromString. */ for (i = 0; langinfo_constants[i].name; i++) if (langinfo_constants[i].value == item) { /* Check NULL as a workaround for GNU libc's returning NULL instead of an empty string for nl_langinfo(ERA). */ const char *result = nl_langinfo(item); result = result != NULL ? result : ""; return str2uni(result); } PyErr_SetString(PyExc_ValueError, "unsupported langinfo constant"); return NULL; }