_build_font_scale (gstate, &sc);
status = _cairo_gstate_ensure_font (gstate); if (status) return status;
_cairo_gstate_text_to_glyphs (cairo_gstate_t *gstate, 			      const unsigned char *utf8,			      cairo_glyph_t **glyphs,			      int *nglyphs){    cairo_status_t status;    cairo_font_scale_t sc;    cairo_point_t point;     double origin_x, origin_y;    int i;    _build_font_scale (gstate, &sc);    status = _cairo_path_current_point (&gstate->path, &point);    if (status == CAIRO_STATUS_NO_CURRENT_POINT) {	origin_x = 0.0;	origin_y = 0.0;    } else {	origin_x = _cairo_fixed_to_double (point.x);	origin_y = _cairo_fixed_to_double (point.y);	cairo_matrix_transform_point (&gstate->ctm_inverse,				      &origin_x, &origin_y);    }    status = _cairo_unscaled_font_text_to_glyphs (gstate->font, 						  &sc, utf8, glyphs, nglyphs);    if (status || !glyphs || !nglyphs || !(*glyphs) || !(nglyphs))	return status;    /* The font responded in glyph space, starting from (0,0).  Convert to       user space by applying the font transform, then add any current point       offset. */    for (i = 0; i < *nglyphs; ++i) {	cairo_matrix_transform_point (&gstate->font_matrix, 				      &((*glyphs)[i].x),				      &((*glyphs)[i].y));	(*glyphs)[i].x += origin_x;	(*glyphs)[i].y += origin_y;    }        return CAIRO_STATUS_SUCCESS;}