[Fontconfig] Duffer's guide
behdad at behdad.org
Mon Aug 31 02:34:15 PDT 2015
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.
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!
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