X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpango-font.cc;h=c0218074672d459ae8fd0731a440d01732a158db;hb=8b9415d65ee46aa7cb27f0fc3cd0d19565669056;hp=de7b835ab85f47e9b1065c83512fb0f30068f956;hpb=7533822f4cff54c8cb39ae96e0bff9f8b292c314;p=lilypond.git diff --git a/lily/pango-font.cc b/lily/pango-font.cc index de7b835ab8..c021807467 100644 --- a/lily/pango-font.cc +++ b/lily/pango-font.cc @@ -7,13 +7,15 @@ */ #define PANGO_ENABLE_BACKEND // ugh, why necessary? - #include -#include "main.hh" -#include "lookup.hh" -#include "dimensions.hh" +/* Ugh. */ #include "pango-font.hh" + +#include "dimensions.hh" +#include "file-name.hh" +#include "lookup.hh" +#include "main.hh" #include "warn.hh" #if HAVE_PANGO_FT2 @@ -99,9 +101,11 @@ Pango_font::pango_item_string_stencil (PangoItem *item, String str, Real dx) con PANGO_ASCENT (ink_rect))); b.scale (scale_); - + SCM glyph_exprs = SCM_EOL; SCM *tail = &glyph_exprs; + + bool cid_keyed = false; for (int i = 0; i < pgs->num_glyphs; i++) { PangoGlyphInfo *pgi = pgs->glyphs + i; @@ -118,11 +122,13 @@ Pango_font::pango_item_string_stencil (PangoItem *item, String str, Real dx) con /* CID entry */ + cid_keyed = true; char_id = scm_from_int (pg); } else char_id = scm_makfrom0str (glyph_name); - *tail = scm_cons (scm_list_3 (scm_from_double (ggeo.x_offset * scale_ + dx), + *tail = scm_cons (scm_list_3 (scm_from_double (ggeo.x_offset * scale_ + + dx), scm_from_double (ggeo.y_offset * scale_), char_id), SCM_EOL); @@ -135,32 +141,34 @@ Pango_font::pango_item_string_stencil (PangoItem *item, String str, Real dx) con / (Real (PANGO_SCALE)); FcPattern *fcpat = fcfont->font_pattern; - char *filename = 0; - FcPatternGetString (fcpat, FC_FILE, 0, (FcChar8 **) & filename); + char *file_name = 0; + FcPatternGetString (fcpat, FC_FILE, 0, (FcChar8 **) & file_name); +#ifdef __MINGW32__ + /* Normalize file name. */ + // FIXME: memleak(s?), drop the #ifdef? + file_name = File_name (file_name).to_string ().get_copy_str0 (); +#endif + char const *ps_name_str0 = FT_Get_Postscript_Name (ftface); if (!ps_name_str0) - warning (_f ("no PostScript font name for font `%s'", filename)); + warning (_f ("no PostScript font name for font `%s'", file_name)); String ps_name; if (!ps_name_str0 - && filename - && (String (filename).index (".otf") >= 0 - || String (filename).index (".cff") >= 0)) + && file_name + && (String (file_name).index (".otf") >= 0 + || String (file_name).index (".cff") >= 0)) { - /* - UGH: kludge a PS name for OTF/CFF fonts. - - */ - - String name = filename; - int idx = max (String (filename).index (".otf"), - String (filename).index (".cff")); + /* UGH: kludge a PS name for OTF/CFF fonts. */ + String name = file_name; + int idx = max (String (file_name).index (".otf"), + String (file_name).index (".cff")); name = name.left_string (idx); - int slash_idx = name.index_last ('/'); // UGh. What's happens on windows? + int slash_idx = name.index_last ('/'); if (slash_idx >= 0) name = name.right_string (name.length () - slash_idx - 1); @@ -175,21 +183,20 @@ Pango_font::pango_item_string_stencil (PangoItem *item, String str, Real dx) con if (ps_name.length ()) { - ((Pango_font *) this)->register_font_file (filename, ps_name); + ((Pango_font *) this)->register_font_file (file_name, ps_name); pango_fc_font_unlock_face (fcfont); - SCM expr = scm_list_4 (ly_symbol2scm ("glyph-string"), + SCM expr = scm_list_5 (ly_symbol2scm ("glyph-string"), scm_makfrom0str (ps_name.to_str0 ()), scm_from_double (size), + scm_from_bool (cid_keyed), ly_quote_scm (glyph_exprs)); return Stencil (b, expr); } - else - { - warning (_ ("FreeType face has no PostScript font name")); - return Stencil (); - } + + warning (_ ("FreeType face has no PostScript font name")); + return Stencil (); } SCM