[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