Changeset 388 for python/vendor/current/Modules/fmmodule.c
- Timestamp:
- Mar 19, 2014, 11:11:30 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
python/vendor/current/Modules/fmmodule.c
r2 r388 12 12 13 13 typedef struct { 14 15 14 PyObject_HEAD 15 fmfonthandle fh_fh; 16 16 } fhobject; 17 17 18 18 static PyTypeObject Fhtype; 19 19 20 #define is_fhobject(v) 20 #define is_fhobject(v) ((v)->ob_type == &Fhtype) 21 21 22 22 static PyObject * 23 23 newfhobject(fmfonthandle fh) 24 24 { 25 26 27 28 29 30 31 32 33 34 35 25 fhobject *fhp; 26 if (fh == NULL) { 27 PyErr_SetString(PyExc_RuntimeError, 28 "error creating new font handle"); 29 return NULL; 30 } 31 fhp = PyObject_New(fhobject, &Fhtype); 32 if (fhp == NULL) 33 return NULL; 34 fhp->fh_fh = fh; 35 return (PyObject *)fhp; 36 36 } 37 37 … … 41 41 fh_scalefont(fhobject *self, PyObject *args) 42 42 { 43 44 45 46 43 double size; 44 if (!PyArg_ParseTuple(args, "d", &size)) 45 return NULL; 46 return newfhobject(fmscalefont(self->fh_fh, size)); 47 47 } 48 48 … … 52 52 fh_setfont(fhobject *self) 53 53 { 54 55 56 54 fmsetfont(self->fh_fh); 55 Py_INCREF(Py_None); 56 return Py_None; 57 57 } 58 58 … … 60 60 fh_getfontname(fhobject *self) 61 61 { 62 63 64 65 66 67 68 69 62 char fontname[256]; 63 int len; 64 len = fmgetfontname(self->fh_fh, sizeof fontname, fontname); 65 if (len < 0) { 66 PyErr_SetString(PyExc_RuntimeError, "error in fmgetfontname"); 67 return NULL; 68 } 69 return PyString_FromStringAndSize(fontname, len); 70 70 } 71 71 … … 73 73 fh_getcomment(fhobject *self) 74 74 { 75 76 77 78 79 80 81 82 75 char comment[256]; 76 int len; 77 len = fmgetcomment(self->fh_fh, sizeof comment, comment); 78 if (len < 0) { 79 PyErr_SetString(PyExc_RuntimeError, "error in fmgetcomment"); 80 return NULL; 81 } 82 return PyString_FromStringAndSize(comment, len); 83 83 } 84 84 … … 86 86 fh_getfontinfo(fhobject *self) 87 87 { 88 89 90 91 92 93 94 95 96 97 98 99 100 101 88 fmfontinfo info; 89 if (fmgetfontinfo(self->fh_fh, &info) < 0) { 90 PyErr_SetString(PyExc_RuntimeError, "error in fmgetfontinfo"); 91 return NULL; 92 } 93 return Py_BuildValue("(llllllll)", 94 info.printermatched, 95 info.fixed_width, 96 info.xorig, 97 info.yorig, 98 info.xsize, 99 info.ysize, 100 info.height, 101 info.nglyphs); 102 102 } 103 103 … … 112 112 fh_getstrwidth(fhobject *self, PyObject *args) 113 113 { 114 115 116 117 114 char *str; 115 if (!PyArg_ParseTuple(args, "s", &str)) 116 return NULL; 117 return PyInt_FromLong(fmgetstrwidth(self->fh_fh, str)); 118 118 } 119 119 120 120 static PyMethodDef fh_methods[] = { 121 {"scalefont",(PyCFunction)fh_scalefont, METH_VARARGS},122 {"setfont",(PyCFunction)fh_setfont, METH_NOARGS},123 {"getfontname",(PyCFunction)fh_getfontname, METH_NOARGS},124 {"getcomment",(PyCFunction)fh_getcomment, METH_NOARGS},125 {"getfontinfo",(PyCFunction)fh_getfontinfo, METH_NOARGS},121 {"scalefont", (PyCFunction)fh_scalefont, METH_VARARGS}, 122 {"setfont", (PyCFunction)fh_setfont, METH_NOARGS}, 123 {"getfontname", (PyCFunction)fh_getfontname, METH_NOARGS}, 124 {"getcomment", (PyCFunction)fh_getcomment, METH_NOARGS}, 125 {"getfontinfo", (PyCFunction)fh_getfontinfo, METH_NOARGS}, 126 126 #if 0 127 {"getwholemetrics",(PyCFunction)fh_getwholemetrics, METH_VARARGS},127 {"getwholemetrics", (PyCFunction)fh_getwholemetrics, METH_VARARGS}, 128 128 #endif 129 {"getstrwidth",(PyCFunction)fh_getstrwidth, METH_VARARGS},130 {NULL, NULL}/* sentinel */129 {"getstrwidth", (PyCFunction)fh_getstrwidth, METH_VARARGS}, 130 {NULL, NULL} /* sentinel */ 131 131 }; 132 132 … … 134 134 fh_getattr(fhobject *fhp, char *name) 135 135 { 136 136 return Py_FindMethod(fh_methods, (PyObject *)fhp, name); 137 137 } 138 138 … … 140 140 fh_dealloc(fhobject *fhp) 141 141 { 142 143 142 fmfreefont(fhp->fh_fh); 143 PyObject_Del(fhp); 144 144 } 145 145 146 146 static PyTypeObject Fhtype = { 147 148 0,/*ob_size*/149 "fm.font handle",/*tp_name*/150 sizeof(fhobject),/*tp_size*/151 0,/*tp_itemsize*/152 153 (destructor)fh_dealloc,/*tp_dealloc*/154 0,/*tp_print*/155 (getattrfunc)fh_getattr,/*tp_getattr*/156 0,/*tp_setattr*/157 0,/*tp_compare*/158 0,/*tp_repr*/147 PyObject_HEAD_INIT(&PyType_Type) 148 0, /*ob_size*/ 149 "fm.font handle", /*tp_name*/ 150 sizeof(fhobject), /*tp_size*/ 151 0, /*tp_itemsize*/ 152 /* methods */ 153 (destructor)fh_dealloc, /*tp_dealloc*/ 154 0, /*tp_print*/ 155 (getattrfunc)fh_getattr, /*tp_getattr*/ 156 0, /*tp_setattr*/ 157 0, /*tp_compare*/ 158 0, /*tp_repr*/ 159 159 }; 160 160 … … 165 165 fm_init(PyObject *self) 166 166 { 167 168 169 167 fminit(); 168 Py_INCREF(Py_None); 169 return Py_None; 170 170 } 171 171 … … 173 173 fm_findfont(PyObject *self, PyObject *args) 174 174 { 175 176 177 178 175 char *str; 176 if (!PyArg_ParseTuple(args, "s", &str)) 177 return NULL; 178 return newfhobject(fmfindfont(str)); 179 179 } 180 180 … … 182 182 fm_prstr(PyObject *self, PyObject *args) 183 183 { 184 185 186 187 188 189 184 char *str; 185 if (!PyArg_ParseTuple(args, "s", &str)) 186 return NULL; 187 fmprstr(str); 188 Py_INCREF(Py_None); 189 return Py_None; 190 190 } 191 191 … … 197 197 clientproc(char *fontname) 198 198 { 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 199 int err; 200 PyObject *v; 201 if (fontlist == NULL) 202 return; 203 v = PyString_FromString(fontname); 204 if (v == NULL) 205 err = -1; 206 else { 207 err = PyList_Append(fontlist, v); 208 Py_DECREF(v); 209 } 210 if (err != 0) { 211 Py_DECREF(fontlist); 212 fontlist = NULL; 213 } 214 214 } 215 215 … … 217 217 fm_enumerate(PyObject *self) 218 218 { 219 220 221 222 223 224 225 226 219 PyObject *res; 220 fontlist = PyList_New(0); 221 if (fontlist == NULL) 222 return NULL; 223 fmenumerate(clientproc); 224 res = fontlist; 225 fontlist = NULL; 226 return res; 227 227 } 228 228 … … 230 230 fm_setpath(PyObject *self, PyObject *args) 231 231 { 232 233 234 235 236 237 232 char *str; 233 if (!PyArg_ParseTuple(args, "s", &str)) 234 return NULL; 235 fmsetpath(str); 236 Py_INCREF(Py_None); 237 return Py_None; 238 238 } 239 239 … … 241 241 fm_fontpath(PyObject *self) 242 242 { 243 243 return PyString_FromString(fmfontpath()); 244 244 } 245 245 246 246 static PyMethodDef fm_methods[] = { 247 {"init",fm_init, METH_NOARGS},248 {"findfont",fm_findfont, METH_VARARGS},249 {"enumerate",fm_enumerate, METH_NOARGS},250 {"prstr",fm_prstr, METH_VARARGS},251 {"setpath",fm_setpath, METH_VARARGS},252 {"fontpath",fm_fontpath, METH_NOARGS},253 {NULL, NULL}/* sentinel */247 {"init", fm_init, METH_NOARGS}, 248 {"findfont", fm_findfont, METH_VARARGS}, 249 {"enumerate", fm_enumerate, METH_NOARGS}, 250 {"prstr", fm_prstr, METH_VARARGS}, 251 {"setpath", fm_setpath, METH_VARARGS}, 252 {"fontpath", fm_fontpath, METH_NOARGS}, 253 {NULL, NULL} /* sentinel */ 254 254 }; 255 255 … … 258 258 initfm(void) 259 259 { 260 260 261 261 if (PyErr_WarnPy3k("the fm module has been removed in " 262 262 "Python 3.0", 2) < 0) 263 return; 264 265 Py_InitModule("fm", fm_methods); 266 if (m == NULL) 263 267 return; 264 265 Py_InitModule("fm", fm_methods); 266 if (m == NULL) 267 return; 268 fminit(); 269 } 268 fminit(); 269 }
Note:
See TracChangeset
for help on using the changeset viewer.