Expose nl_langinfo through locale where available.

This commit is contained in:
Martin v. Löwis 2001-08-10 13:58:50 +00:00
parent 09379da7de
commit 9b75dca192
6 changed files with 550 additions and 321 deletions

View file

@ -17,6 +17,10 @@ This software comes with no warranty. Use at your own risk.
#include <string.h>
#include <ctype.h>
#ifdef HAVE_LANGINFO_H
#include <langinfo.h>
#endif
#if defined(MS_WIN32)
#define WINDOWS_LEAN_AND_MEAN
#include <windows.h>
@ -391,6 +395,23 @@ PyLocale_getdefaultlocale(PyObject* self, PyObject* args)
}
#endif
#ifdef HAVE_LANGINFO_H
static char nl_langinfo__doc__[] =
"nl_langinfo(key) -> string\n"
"Return the value for the locale information associated with key."
;
static PyObject*
PyLocale_nl_langinfo(PyObject* self, PyObject* args)
{
int item;
if (!PyArg_ParseTuple(args, "i:nl_langinfo", &item))
return NULL;
return PyString_FromString(nl_langinfo(item));
}
#endif
static struct PyMethodDef PyLocale_Methods[] = {
{"setlocale", (PyCFunction) PyLocale_setlocale,
METH_VARARGS, setlocale__doc__},
@ -403,6 +424,11 @@ static struct PyMethodDef PyLocale_Methods[] = {
#if defined(MS_WIN32) || defined(macintosh)
{"_getdefaultlocale", (PyCFunction) PyLocale_getdefaultlocale, 0},
#endif
#ifdef HAVE_LANGINFO_H
{"nl_langinfo", (PyCFunction) PyLocale_nl_langinfo,
METH_VARARGS, nl_langinfo__doc__},
#endif
{NULL, NULL}
};
@ -455,4 +481,81 @@ init_locale(void)
x = PyString_FromString(locale__doc__);
PyDict_SetItemString(d, "__doc__", x);
Py_XDECREF(x);
#define ADDINT(X) PyModule_AddIntConstant(m, #X, X)
#ifdef HAVE_LANGINFO_H
/* These constants should exist on any langinfo implementation */
ADDINT(DAY_1);
ADDINT(DAY_2);
ADDINT(DAY_3);
ADDINT(DAY_4);
ADDINT(DAY_5);
ADDINT(DAY_6);
ADDINT(DAY_7);
ADDINT(ABDAY_1);
ADDINT(ABDAY_2);
ADDINT(ABDAY_3);
ADDINT(ABDAY_4);
ADDINT(ABDAY_5);
ADDINT(ABDAY_6);
ADDINT(ABDAY_7);
ADDINT(MON_1);
ADDINT(MON_2);
ADDINT(MON_3);
ADDINT(MON_4);
ADDINT(MON_5);
ADDINT(MON_6);
ADDINT(MON_7);
ADDINT(MON_8);
ADDINT(MON_9);
ADDINT(MON_10);
ADDINT(MON_11);
ADDINT(MON_12);
ADDINT(ABMON_1);
ADDINT(ABMON_2);
ADDINT(ABMON_3);
ADDINT(ABMON_4);
ADDINT(ABMON_5);
ADDINT(ABMON_6);
ADDINT(ABMON_7);
ADDINT(ABMON_8);
ADDINT(ABMON_9);
ADDINT(ABMON_10);
ADDINT(ABMON_11);
ADDINT(ABMON_12);
ADDINT(RADIXCHAR);
ADDINT(THOUSEP);
/* YESSTR and NOSTR are deprecated in glibc, since they are
a special case of message translation, which should be rather
done using gettext. So we don't expose it to Python in the
first place.
ADDINT(YESSTR);
ADDINT(NOSTR);
*/
ADDINT(CRNCYSTR);
ADDINT(D_T_FMT);
ADDINT(D_FMT);
ADDINT(T_FMT);
ADDINT(AM_STR);
ADDINT(PM_STR);
#ifdef CODESET
/* The following constants are available only with XPG4. */
ADDINT(CODESET);
ADDINT(T_FMT_AMPM);
ADDINT(ERA);
ADDINT(ERA_D_FMT);
ADDINT(ERA_D_T_FMT);
ADDINT(ERA_T_FMT);
ADDINT(ALT_DIGITS);
ADDINT(YESEXPR);
ADDINT(NOEXPR);
ADDINT(_DATE_FMT);
#endif
#endif /* HAVE_LANGINFO_H */
}