blob: c5bc79b76c0a068c5ffa0c37fb01cc8b358f36db [file] [log] [blame]
Guido van Rossume270b431992-09-03 20:21:07 +00001/* strop module */
2
Martin v. Löwis5c97c792006-02-17 15:49:09 +00003#define PY_SSIZE_T_CLEAN
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004#include "Python.h"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00005
6PyDoc_STRVAR(strop_module__doc__,
Tim Peters0f8b4942001-05-09 22:15:03 +00007"Common string manipulations, optimized for speed.\n"
8"\n"
9"Always use \"import string\" rather than referencing\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000010"this module directly.");
Guido van Rossum983c9301997-12-29 19:52:29 +000011
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000012PyDoc_STRVAR(maketrans__doc__,
Tim Peters0f8b4942001-05-09 22:15:03 +000013"maketrans(frm, to) -> string\n"
14"\n"
15"Return a translation table (a string of 256 bytes long)\n"
16"suitable for use in string.translate. The strings frm and to\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +000017"must be of the same length.");
Guido van Rossum983c9301997-12-29 19:52:29 +000018
Guido van Rossumed7253c1996-07-23 18:12:39 +000019static PyObject *
Peter Schneider-Kamp8235f1c2000-07-10 09:43:24 +000020strop_maketrans(PyObject *self, PyObject *args)
Guido van Rossumed7253c1996-07-23 18:12:39 +000021{
Guido van Rossume0548b81997-01-06 16:50:09 +000022 unsigned char *c, *from=NULL, *to=NULL;
Martin v. Löwis5c97c792006-02-17 15:49:09 +000023 Py_ssize_t i, fromlen=0, tolen=0;
Guido van Rossume0548b81997-01-06 16:50:09 +000024 PyObject *result;
Guido van Rossumed7253c1996-07-23 18:12:39 +000025
Guido van Rossum43713e52000-02-29 13:59:29 +000026 if (!PyArg_ParseTuple(args, "t#t#:maketrans", &from, &fromlen, &to, &tolen))
Barry Warsawe8fc29c1997-01-03 22:45:34 +000027 return NULL;
Guido van Rossumed7253c1996-07-23 18:12:39 +000028
Barry Warsawe8fc29c1997-01-03 22:45:34 +000029 if (fromlen != tolen) {
Barry Warsawf5256011996-12-09 18:35:56 +000030 PyErr_SetString(PyExc_ValueError,
Guido van Rossumed7253c1996-07-23 18:12:39 +000031 "maketrans arguments must have same length");
32 return NULL;
33 }
Guido van Rossume0548b81997-01-06 16:50:09 +000034
35 result = PyString_FromStringAndSize((char *)NULL, 256);
36 if (result == NULL)
37 return NULL;
38 c = (unsigned char *) PyString_AS_STRING((PyStringObject *)result);
Barry Warsawe8fc29c1997-01-03 22:45:34 +000039 for (i = 0; i < 256; i++)
Guido van Rossumed7253c1996-07-23 18:12:39 +000040 c[i]=(unsigned char)i;
Barry Warsawe8fc29c1997-01-03 22:45:34 +000041 for (i = 0; i < fromlen; i++)
Guido van Rossumed7253c1996-07-23 18:12:39 +000042 c[from[i]]=to[i];
Barry Warsawe8fc29c1997-01-03 22:45:34 +000043
Guido van Rossume0548b81997-01-06 16:50:09 +000044 return result;
Guido van Rossumed7253c1996-07-23 18:12:39 +000045}
46
Guido van Rossume270b431992-09-03 20:21:07 +000047/* List of functions defined in the module */
48
Barry Warsawe8fc29c1997-01-03 22:45:34 +000049static PyMethodDef
50strop_methods[] = {
Tim Peters0f8b4942001-05-09 22:15:03 +000051 {"maketrans", strop_maketrans, METH_VARARGS, maketrans__doc__},
Guido van Rossume270b431992-09-03 20:21:07 +000052 {NULL, NULL} /* sentinel */
53};
54
55
Mark Hammondfe51c6d2002-08-02 02:27:13 +000056PyMODINIT_FUNC
Thomas Woutersf3f33dc2000-07-21 06:00:07 +000057initstrop(void)
Guido van Rossume270b431992-09-03 20:21:07 +000058{
Neal Norwitz9d72bb42007-04-17 08:48:32 +000059 PyObject *m;
Guido van Rossum983c9301997-12-29 19:52:29 +000060 m = Py_InitModule4("strop", strop_methods, strop_module__doc__,
61 (PyObject*)NULL, PYTHON_API_VERSION);
Neal Norwitz1ac754f2006-01-19 06:09:39 +000062 if (m == NULL)
63 return;
Guido van Rossume270b431992-09-03 20:21:07 +000064}