static void svg_metric_info(int c, const pGEcontext gc, double* ascent, double* descent, double* width, pDevDesc dd) { SVGDesc *svgd = (SVGDesc*) dd->deviceSpecific; // Convert to string - negative implies unicode code point char str[16]; if (c < 0) { Rf_ucstoutf8(str, (unsigned int) -c); } else { str[0] = (char) c; str[1] = '\0'; } gdtools::context_set_font(svgd->cc, fontname(gc->fontfamily), gc->cex * gc->ps, is_bold(gc->fontface), is_italic(gc->fontface)); FontMetric fm = gdtools::context_extents(svgd->cc, std::string(str)); *ascent = fm.ascent; *descent = fm.descent; *width = fm.width; }
static void xlsx_metric_info(int c, const pGEcontext gc, double* ascent, double* descent, double* width, pDevDesc dd) { XLSX_dev *xlsx_obj = (XLSX_dev*) dd->deviceSpecific; // Convert to string - negative implies unicode code point char str[16]; if (c < 0) { Rf_ucstoutf8(str, (unsigned int) -c); } else { str[0] = (char) c; str[1] = '\0'; } std::string file = fontfile(gc->fontfamily, gc->fontface, xlsx_obj->user_aliases); std::string name = fontname(gc->fontfamily, gc->fontface, xlsx_obj->system_aliases, xlsx_obj->user_aliases); gdtools::context_set_font(xlsx_obj->cc, name, gc->cex * gc->ps, is_bold(gc->fontface), is_italic(gc->fontface), file); FontMetric fm = gdtools::context_extents(xlsx_obj->cc, std::string(str)); *ascent = fm.ascent; *descent = fm.descent; *width = fm.width; }