static PyObject *Color_subscript(ColorObject *self, PyObject *item) { if (PyIndex_Check(item)) { Py_ssize_t i; i = PyNumber_AsSsize_t(item, PyExc_IndexError); if (i == -1 && PyErr_Occurred()) return NULL; if (i < 0) i += COLOR_SIZE; return Color_item(self, i); } else if (PySlice_Check(item)) { Py_ssize_t start, stop, step, slicelength; if (PySlice_GetIndicesEx((void *)item, COLOR_SIZE, &start, &stop, &step, &slicelength) < 0) return NULL; if (slicelength <= 0) { return PyTuple_New(0); } else if (step == 1) { return Color_slice(self, start, stop); } else { PyErr_SetString(PyExc_IndexError, "slice steps not supported with color"); return NULL; } } else { PyErr_Format(PyExc_TypeError, "color indices must be integers, not %.200s", Py_TYPE(item)->tp_name); return NULL; } }
static PyObject *Color_channel_get(ColorObject *self, void *type) { return Color_item(self, GET_INT_FROM_POINTER(type)); }