[Fontconfig] Matching font by unicode coverage
Behdad Esfahbod
behdad at behdad.org
Mon Jan 19 15:59:31 PST 2015
Thanks David,
Comments below.
On 15-01-19 12:36 PM, David Lattimore wrote:
> Matching with an FC_CHARSET works for me. No idea if what I'm doing is right,
> but roughly what I do is:
> - Identify script for each character
> (using http://unicode.org/Public/UNIDATA/Scripts.txt)
> - Split runs based on script (so that no run has two different scripts)
> - Build an FC_CHARSET for the run.
> - Match and use the resulting font.
While this works, it will be extremely slow, and results in ransom-note
effects whereas eg adding a diacritic mark to a run will change the font for
the entire run.
What most clients of Fontconfig do instead is to call FcFontSort() for all
desired properties but NOT FC_CHARSET, and then walk down the returned list of
font and pick the first font that supports each desired character.
Does that make sense?
behdad
> So if a font didn't define all the characters in a script, I might still get
> some missing glyphs. But it seems to work reasonably well. If I wanted to make
> sure all characters had glyphs, I could probably so a second round of
> splitting where adjacent characters for which no glyphs was found were broken
> off into a separate text run and rematched. So far I haven't bothered.
>
> Hope that helps.
>
> On 19 January 2015 at 22:51, Sam Varshavchik <mrsam at courier-mta.com
> <mailto:mrsam at courier-mta.com>> wrote:
>
> Akira TAGOH writes:
>
> That way is what Pango do to figure out the glyph coverage in fonts.
> they convert the result into their own structure so that it's not that
> easy to find out a font that have the certain coverage in fontconfig only.
>
>
> You mean match by FC_CHARSET? That was the first part of what I'm trying
> to figure out, whether creating an FcCharset containing the unicode
> characters in the text, and then trying to match a font using it, will work.
>
>
> On Mon, Jan 19, 2015 at 12:51 PM, Sam Varshavchik
> <<URL:mailto:mrsam at courier-__mta.com
> <mailto:mrsam at courier-mta.com>>mrsam at courier-mta.com
> <mailto:mrsam at courier-mta.com>> wrote:
>
> I'm learning the fontconfig API, and I'm trying to figure out how to do
> the following.
>
> I have arbitrary Unicode text, and I would like to match a
> reasonable font
> to use for displaying it. It's possible that I might need more than one
> font if, say, the text is a mixture of Latin characters and Asian
> ideographs.
>
> I see that FC_CHARSET is an option to FcPattern. Does this sound
> like I'm
> on the right track:
>
> A) Construct an FcCharset and add all unicode characters in the text to
> display
>
> B) Add it as a FC_CHARSET value to an FcPattern.
>
> C) Use FcFontList() to search for the matching font.
>
> The developer reference contains the following statement:
> "Fontconfig uses
> some of these properties for font matching and font completion.
> Others are
> provided as a convenience for the application's rendering mechanism."
>
> So, I guess I'm trying to clarify whether I can use the FC_CHARSET
> property to search for fonts that have coverage for my unicode
> text, or if
> this a non-searchable property, only.
>
>
>
> _______________________________________________
> Fontconfig mailing list
> Fontconfig at lists.freedesktop.org <mailto:Fontconfig at lists.freedesktop.org>
> http://lists.freedesktop.org/mailman/listinfo/fontconfig
>
>
>
>
> _______________________________________________
> Fontconfig mailing list
> Fontconfig at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/fontconfig
>
--
behdad
http://behdad.org/
More information about the Fontconfig
mailing list