cairo_font_scale_t 		*sc,
_cairo_ft_font_show_glyphs (void			*abstract_font,			    cairo_font_scale_t 		*sc,                            cairo_operator_t    	operator,                            cairo_surface_t     	*source,			    cairo_surface_t     	*surface,			    int                 	source_x,			    int                 	source_y,                            const cairo_glyph_t 	*glyphs,                            int                 	num_glyphs){    cairo_image_glyph_cache_entry_t *img;    cairo_cache_t *cache;    cairo_glyph_cache_key_t key;    cairo_ft_font_t *font = abstract_font;    cairo_status_t status;    double x, y;    int i;    _cairo_lock_global_image_glyph_cache ();    cache = _cairo_get_global_image_glyph_cache();    if (cache == NULL	|| font == NULL         || source == NULL         || surface == NULL         || glyphs == NULL) {	_cairo_unlock_global_image_glyph_cache ();        return CAIRO_STATUS_NO_MEMORY;    }    key.unscaled = &font->base;    key.scale = *sc;    for (i = 0; i < num_glyphs; i++)    {	img = NULL;	key.index = glyphs[i].index;	if (_cairo_cache_lookup (cache, &key, (void **) &img) 	    != CAIRO_STATUS_SUCCESS 	    || img == NULL 	    || img->image == NULL)	    continue;   	x = glyphs[i].x;	y = glyphs[i].y;	status = _cairo_surface_composite (operator, source, 					   &(img->image->base), 					   surface,					   source_x + x + img->size.x,					   source_y + y + img->size.y,					   0, 0, 					   x + img->size.x, 					   y + img->size.y, 					   (double) img->size.width,					   (double) img->size.height);	if (status) {	    _cairo_unlock_global_image_glyph_cache ();	    	    return status;	}    }      _cairo_unlock_global_image_glyph_cache ();    return CAIRO_STATUS_SUCCESS;}