| """framer's C code templates. |
| |
| Templates use the following variables: |
| |
| FileName: name of the file that contains the C source code |
| ModuleName: name of the module, as in "import ModuleName" |
| ModuleDocstring: C string containing the module doc string |
| """ |
| |
| module_start = '#include "Python.h"' |
| member_include = '#include "structmember.h"' |
| |
| module_doc = """\ |
| PyDoc_STRVAR(%(ModuleName)s_doc, |
| %(ModuleDocstring)s); |
| """ |
| |
| methoddef_start = """\ |
| static struct PyMethodDef %(MethodDefName)s[] = {""" |
| |
| methoddef_def = """\ |
| {"%(PythonName)s", (PyCFunction)%(CName)s, %(MethType)s},""" |
| |
| methoddef_def_doc = """\ |
| {"%(PythonName)s", (PyCFunction)%(CName)s, %(MethType)s, |
| %(DocstringVar)s},""" |
| |
| methoddef_end = """\ |
| {NULL, NULL} |
| }; |
| """ |
| |
| memberdef_start = """\ |
| #define OFF(X) offsetof(%(StructName)s, X) |
| |
| static struct PyMemberDef %(MemberDefName)s[] = {""" |
| |
| memberdef_def_doc = """\ |
| {"%(PythonName)s", %(Type)s, OFF(%(CName)s), %(Flags)s, |
| %(Docstring)s},""" |
| |
| memberdef_def = """\ |
| {"%(PythonName)s", %(Type)s, OFF(%(CName)s), %(Flags)s},""" |
| |
| memberdef_end = """\ |
| {NULL} |
| }; |
| |
| #undef OFF |
| """ |
| |
| dealloc_func = """static void |
| %(name)s(PyObject *ob) |
| { |
| } |
| """ |
| |
| docstring = """\ |
| PyDoc_STRVAR(%(DocstringVar)s, |
| %(Docstring)s); |
| """ |
| |
| funcdef_start = """\ |
| static PyObject * |
| %(name)s(%(args)s) |
| {""" |
| |
| funcdef_end = """\ |
| } |
| """ |
| |
| varargs = """\ |
| if (!PyArg_ParseTuple(args, \"%(ArgParse)s:%(PythonName)s\", |
| %(ArgTargets)s)) |
| return NULL;""" |
| |
| module_init_start = """\ |
| PyMODINIT_FUNC |
| init%(ModuleName)s(void) |
| { |
| PyObject *mod; |
| |
| mod = Py_InitModule3("%(ModuleName)s", %(MethodDefName)s, |
| %(ModuleName)s_doc); |
| if (mod == NULL) |
| return; |
| """ |
| |
| type_init_type = " %(CTypeName)s.ob_type = &PyType_Type;" |
| module_add_type = """\ |
| if (!PyObject_SetAttrString(mod, "%(TypeName)s", |
| (PyObject *)&%(CTypeName)s)) |
| return; |
| """ |
| |
| type_struct_start = """\ |
| static PyTypeObject %(CTypeName)s = { |
| PyObject_HEAD_INIT(0)""" |
| |
| type_struct_end = """\ |
| }; |
| """ |