[Fontconfig] Duffer's guide

Behdad Esfahbod behdad at behdad.org
Mon Aug 31 02:34:15 PDT 2015

Hi Simon,

I have had this guide of yours in my TODO list to review:


Of course back then when you posted it I didn't know you or Sile.  Small world
though.  Thanks for working on documentation!

Here's some feedback:

- Instead of these:

  FcPatternAddString (p, FC_FAMILY,(FcChar8*) "Times-Roman");
  FcPatternAddString (p, FC_FAMILY,(FcChar8*) "Times");
  FcPatternAddString (p, FC_FAMILY,(FcChar8*) "Helvetica");

would be enough to add "serif" or "sans" or both, etc.  If you don't specify
any of "serif", "sans", "monospace", etc, fontconfig will add "sans" for you.

- In your get_font_path() function, you just return the font file.  That's not
sufficient.  You also need to return the FC_INDEX, otherwise you can't address
faces in a collection (TTC, etc) other than the first face.

- For converting from FC_WEIGHT values to OpenType weight values and back, I
recently added FcWeightFromOpenType() and FcWeightToOpenType().

- You probably know by now, but the sentence "Except—Harfbuzz expects that
fonts come from Freetype" isn't really accurate.  That's what hb-ft requires.
 You can create a blob and create a hb_face_t from it, and these days, install
the ot-funcs and mostly be good to go...  In a few weeks we should switch to
advertising that as the preferred way to use HarfBuzz unless one explicitly
wants to use it with FreeType.

- Here:

 if (f.direction)
      hb_buffer_set_direction(buf, f.direction);

if you don't set direction, HarfBuzz will abort().  That's one property that
MUST be set on the buffer.  You can also call
hb_buffer_guess_segment_properties().  But I see you already included that in
your new user docs for HarfBuzz.  Thanks!

- Here:

    hb_buffer_add_utf8(buf, text, strlen(text), 0, strlen(text));

you can pass -1 instead of strlen(text).

- "from 0 to glyph_count." should probably say (glyph_count-1).

- "If you need height and depth information for the glyph, then you need to go
back to Freetype and ask it", might want to replace with
hb_font_glyph_extents() version for uniformity.


More information about the Fontconfig mailing list