[HarfBuzz] hb_shape, hb_feature_from_string and using hb_feature_t *features

Nikolay Sivov bunglehead at gmail.com
Wed Feb 3 18:48:54 UTC 2016


On 03.02.2016 21:33, Liam wrote:
> Hello again,
> 
> I have been reviewing the tutorial provided with the source code for
> harfbuzz and I am still uncertain on how to tell 'hb_shape' to use a
> different glyph for a character in a buffer.
> 
> I have a string 'Coffee Time' and when I add that value to the hb_buffer
> struct with the 'hb_buffer_add_utf*' if I call the hb_shape as done in
> the tutorial it only pulls the glyphs '*.calt', but this behavior is not
> exactly what I want.
> 
> The OTF font set I am using has '*.swsh" glyphs present for certain utf
> characters, and I want shape to use the 'C.swsh' for the start of this
> buffer when I call hb_shape.
> 
> I figure that the 'hb_features *' tells hb_shape how to treat the buffer
> since the hb_feature_t has fields for a tag, the start point and end
> point. Is this the correct way to instruct hb_shape on which glyphs to
> use an alternative glyph (in my case I want to use C.swsh and not C.calt'
> 
> How does one construct this hb_feature_t struct, reading the provided
> documentation  'hb_feature_from_string' looks like the call I wish to
> use, but it has an argument called "str" I am assuming this is the
> string value that will set the tag value in the struct, but I have not
> found a correct value that will actually return an initialized
> hb_feature struct.
> 
> I have tried the values from hb-shape --help-features from the command
> line including other various other guesses and wild stabs, and none of
> them seemed to work.
> 
> Is my reasoning correct, the array of features will tell hb_shape how to
> shape the UTF buffer the way I want (replace glyphs with swashed
> variants, granted from reading the documentation and code hb_shape will
> try it's best). And is there an example on how to set a feature struct
> and passing it to hb_shape, the tutorial for using harfbuzz just passes
> a NULL value to hb_shape for the hb_feature_t * argument.

I think all you need is to set hb_feature_t fields, like this:

hb_feature_t f;
f.tag = HB_TAG('s','w','s',h');
f.value = 1;
f.start = 0;
f.end = 1;

and then call hb_shape(..., ..., &f, 1);

> 
> Thanks
> _______________________________________________
> HarfBuzz mailing list
> HarfBuzz at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/harfbuzz



More information about the HarfBuzz mailing list