[cairo] OpenType font variations and cairo

Adrian Johnson ajohnson at redneon.com
Fri Sep 15 10:51:09 UTC 2017

On 15/09/17 09:29, Matthias Clasen wrote:
> On Thu, Sep 14, 2017 at 5:54 PM, Adrian Johnson <ajohnson at redneon.com
> <mailto:ajohnson at redneon.com>> wrote:
>     On 15/09/17 05:52, Matthias Clasen wrote:
>     > On Thu, Sep 14, 2017 at 12:37 PM, Behdad Esfahbod
>     > <behdad.esfahbod at gmail.com <mailto:behdad.esfahbod at gmail.com>
>     <mailto:behdad.esfahbod at gmail.com
>     <mailto:behdad.esfahbod at gmail.com>>> wrote:
>     >
>     >     Thanks Matthias.  I took a look at the patch.  Looks good!  Minor
>     >     comments:
>     >
>     >     - Moving the format towards CSS by default (no comma, no equal sign;
>     >     just spaces!) while accepting both is what I do in HarfBuzz. Maybe
>     >     advertise the same here,  UPDATE: I was wrong.  CSS uses comma as
>     >     well.  It's the equal sign that they don't use, they use space.  We
>     >     should accept both.
>     >
>     >
>     > I've made the parser a bit more flexible. It now accepts variations like
>     >
>     > wdth=200,wght=300
>     > wdth 200, wght=300
>     > wdth 200 , wght 300
>     Does it work with decimal commas?
> The patch currently uses strtod, so yes, it will parse floating point
> numbers, but decimal separators spell trouble.
> I could rewrite it to use strtod_l, if that is ok to use in cairo.

So what happens on platforms where strtod_l is not available?

The function decode_real() in cairo-cff-subset.c has code for locale
independent parsing of floating-point numbers. Maybe that could be
factored out into separate function and reused.

Where is the variations text string normally expected to come from? I
can see the code reading the FC_FONT_VARIATIONS property but I can't
find this in the current fontconfig git. Where is this documented?

Is the text string supplied to cairo_font_options_set_variations()
likely to be generated by sprintf or is it always read from an external
source in C locale format?

We really need a test case for this. It is hard to review code I can't test.

More information about the cairo mailing list