/*********************************************************** Copyright (C) 1997 Martin von Löwis Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies. This software comes with no warranty. Use at your own risk. ******************************************************************/ #include #include #include #include #include "Python.h" static PyObject* PyIntl_gettext(PyObject* self,PyObject *args) { char *in; if (!PyArg_ParseTuple(args,"z",&in)) return 0; return PyString_FromString(gettext(in)); } static PyObject* PyIntl_dgettext(PyObject* self,PyObject *args) { char *domain,*in; if(!PyArg_ParseTuple(args,"zz",&domain,&in))return 0; return PyString_FromString(dgettext(domain,in)); } static PyObject* PyIntl_dcgettext(PyObject *self,PyObject *args) { char *domain,*msgid; int category; if(!PyArg_ParseTuple(args,"zzi",&domain,&msgid,&category)) return 0; return PyString_FromString(dcgettext(domain,msgid,category)); } static PyObject* PyIntl_textdomain(PyObject* self,PyObject* args) { char *domain; if(!PyArg_ParseTuple(args,"z",&domain))return 0; return PyString_FromString(textdomain(domain)); } static PyObject* PyIntl_bindtextdomain(PyObject* self,PyObject*args) { char *domain,*dirname; if(!PyArg_ParseTuple(args,"zz",&domain,&dirname))return 0; return PyString_FromString(bindtextdomain(domain,dirname)); } static PyObject* PyIntl_setlocale(PyObject* self,PyObject* args) { int category; char *locale=0; if(!PyArg_ParseTuple(args,"i|z",&category,&locale))return 0; return Py_BuildValue("z",setlocale(category,locale)); } static PyObject* PyIntl_localeconv(PyObject* self,PyObject* args) { PyObject* result; struct lconv *l; if(!PyArg_NoArgs(args))return 0; result = PyDict_New(); if(!result)return 0; l=localeconv(); #define RESULT_STRING(s) \ PyDict_SetItemString(result,#s,PyString_FromString(l->s)) #define RESULT_INT(i) \ PyDict_SetItemString(result,#i,PyInt_FromLong(l->i)) #define RESULT_CHAR(c) {\ char tmp[2]; \ tmp[0]=l->c;tmp[1]='\0';\ PyDict_SetItemString(result,#c,PyString_FromString(tmp)); \ } /* Numeric information */ RESULT_STRING(decimal_point); RESULT_STRING(thousands_sep); RESULT_STRING(grouping); /* Monetary information */ RESULT_STRING(int_curr_symbol); RESULT_STRING(currency_symbol); RESULT_STRING(mon_decimal_point); RESULT_STRING(mon_thousands_sep); RESULT_STRING(mon_grouping); RESULT_STRING(positive_sign); RESULT_STRING(negative_sign); RESULT_INT(int_frac_digits); RESULT_INT(frac_digits); RESULT_INT(p_cs_precedes); RESULT_INT(p_sep_by_space); RESULT_INT(n_cs_precedes); RESULT_INT(n_sep_by_space); RESULT_INT(p_sign_posn); RESULT_INT(n_sign_posn); return result; } static struct PyMethodDef PyIntl_Methods[] = { {"gettext",(PyCFunction)PyIntl_gettext,1}, {"dgettext",(PyCFunction)PyIntl_dgettext,1}, {"dcgettext",(PyCFunction)PyIntl_dcgettext,1}, {"textdomain",(PyCFunction)PyIntl_textdomain,1}, {"bindtextdomain",(PyCFunction)PyIntl_bindtextdomain,1}, {"setlocale",(PyCFunction)PyIntl_setlocale,1}, {"localeconv",(PyCFunction)PyIntl_localeconv,0}, {NULL, NULL} }; void initintl() { PyObject *m,*d; m=Py_InitModule("intl",PyIntl_Methods); d = PyModule_GetDict(m); PyDict_SetItemString(d,"LC_CTYPE",PyInt_FromLong(LC_CTYPE)); PyDict_SetItemString(d,"LC_NUMERIC",PyInt_FromLong(LC_NUMERIC)); PyDict_SetItemString(d,"LC_TIME",PyInt_FromLong(LC_TIME)); PyDict_SetItemString(d,"LC_COLLATE",PyInt_FromLong(LC_COLLATE)); PyDict_SetItemString(d,"LC_MONETARY",PyInt_FromLong(LC_MONETARY)); PyDict_SetItemString(d,"LC_MESSAGES",PyInt_FromLong(LC_MESSAGES)); PyDict_SetItemString(d,"LC_ALL",PyInt_FromLong(LC_ALL)); if(PyErr_Occurred()) Py_FatalError("Can't initialize module intl"); }