mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-04 01:47:47 +03:00 
			
		
		
		
	Unicode handled as Latin-1 for Py3, Strings handled for Py2.
This commit is contained in:
		
							parent
							
								
									4d32136365
								
							
						
					
					
						commit
						cacd638187
					
				
							
								
								
									
										53
									
								
								_imaging.c
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								_imaging.c
									
									
									
									
									
								
							| 
						 | 
					@ -2239,6 +2239,33 @@ textwidth(ImagingFontObject* self, const unsigned char* text)
 | 
				
			||||||
    return xsize;
 | 
					    return xsize;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void _font_text_asBytes(PyObject* encoded_string, unsigned char** text){
 | 
				
			||||||
 | 
					    PyObject* bytes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (PyUnicode_CheckExact(encoded_string)){
 | 
				
			||||||
 | 
					        bytes = PyUnicode_AsLatin1String(encoded_string);
 | 
				
			||||||
 | 
					        if (bytes) {
 | 
				
			||||||
 | 
					            *text = (unsigned char*)PyBytes_AsString(bytes);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            *text = NULL;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					#if PY_VERSION_HEX >= 0x03000000
 | 
				
			||||||
 | 
					        /* this should always be a unicode if we're in Py3.x */
 | 
				
			||||||
 | 
					        *text = NULL;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					        /* likely case here is py2.x with an ordinary string.
 | 
				
			||||||
 | 
					           but this isn't defined in Py3.x */
 | 
				
			||||||
 | 
					        if (PyString_Check(encoded_string)) {
 | 
				
			||||||
 | 
					            *text = (unsigned char *)PyString_AsString(encoded_string);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            *text = NULL;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static PyObject*
 | 
					static PyObject*
 | 
				
			||||||
_font_getmask(ImagingFontObject* self, PyObject* args)
 | 
					_font_getmask(ImagingFontObject* self, PyObject* args)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -2249,15 +2276,22 @@ _font_getmask(ImagingFontObject* self, PyObject* args)
 | 
				
			||||||
    int status;
 | 
					    int status;
 | 
				
			||||||
    Glyph* glyph;
 | 
					    Glyph* glyph;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    PyObject* encoded_string;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    unsigned char* text;
 | 
					    unsigned char* text;
 | 
				
			||||||
    char* mode = "";
 | 
					    char* mode = "";
 | 
				
			||||||
    if (!PyArg_ParseTuple(args, "es|s:getmask", "latin1", &text, &mode)){
 | 
					
 | 
				
			||||||
 | 
					    if (!PyArg_ParseTuple(args, "O|s:getmask",  &encoded_string, &mode)){
 | 
				
			||||||
 | 
					        return NULL;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    _font_text_asBytes(encoded_string, &text);
 | 
				
			||||||
 | 
					    if (!text) {
 | 
				
			||||||
        return NULL;
 | 
					        return NULL;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    im = ImagingNew(self->bitmap->mode, textwidth(self, text), self->ysize);
 | 
					    im = ImagingNew(self->bitmap->mode, textwidth(self, text), self->ysize);
 | 
				
			||||||
    if (!im) {
 | 
					    if (!im) {
 | 
				
			||||||
        PyMem_Free(text);
 | 
					 | 
				
			||||||
        return NULL;
 | 
					        return NULL;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2283,11 +2317,9 @@ _font_getmask(ImagingFontObject* self, PyObject* args)
 | 
				
			||||||
        x = x + glyph->dx;
 | 
					        x = x + glyph->dx;
 | 
				
			||||||
        b = b + glyph->dy;
 | 
					        b = b + glyph->dy;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    PyMem_Free(text);
 | 
					 | 
				
			||||||
    return PyImagingNew(im);
 | 
					    return PyImagingNew(im);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  failed:
 | 
					  failed:
 | 
				
			||||||
    PyMem_Free(text);
 | 
					 | 
				
			||||||
    ImagingDelete(im);
 | 
					    ImagingDelete(im);
 | 
				
			||||||
    return NULL;
 | 
					    return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -2296,14 +2328,17 @@ static PyObject*
 | 
				
			||||||
_font_getsize(ImagingFontObject* self, PyObject* args)
 | 
					_font_getsize(ImagingFontObject* self, PyObject* args)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    unsigned char* text;
 | 
					    unsigned char* text;
 | 
				
			||||||
    PyObject* retval;
 | 
					    PyObject* encoded_string;
 | 
				
			||||||
    if (!PyArg_ParseTuple(args, "es:getsize", "latin-1", &text))
 | 
					
 | 
				
			||||||
 | 
					    if (!PyArg_ParseTuple(args, "O:getsize", &encoded_string))
 | 
				
			||||||
        return NULL;
 | 
					        return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    retval = Py_BuildValue("ii", textwidth(self, text), self->ysize);
 | 
					    _font_text_asBytes(encoded_string, &text);
 | 
				
			||||||
    PyMem_Free(text);
 | 
					    if (!text) {
 | 
				
			||||||
    return retval;
 | 
					        return NULL;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return Py_BuildValue("ii", textwidth(self, text), self->ysize);        
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct PyMethodDef _font_methods[] = {
 | 
					static struct PyMethodDef _font_methods[] = {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user