0 " ˆl–Ým_J µ5*q@½q‘\eµ1hßÀ ƒh¹¿Ä unsupported + ˆl–ßi~” ”†»Ò�vàp©‹FÿÁ ƒi·�_‡I|¥‰ÓMÁÆ ä
Below is the simplest HarfBuzz shaping example possible.
Create a buffer and put your text in it.
#include <hb.h>
hb_buffer_t *buf;
buf = hb_buffer_create();
hb_buffer_add_utf8(buf, text, -1, 0, -1);
Set the script, language and direction of the buffer.
hb_buffer_set_direction(buf, HB_DIRECTION_LTR);
hb_buffer_set_script(buf, HB_SCRIPT_LATIN);
hb_buffer_set_language(buf, hb_language_from_string("en", -1));
Create a face and a font, using FreeType for now.
#include <hb-ft.h>
FT_New_Face(ft_library, font_path, index, &face);
FT_Set_Char_Size(face, 0, 1000, 0, 0);
hb_font_t *font = hb_ft_font_create(face);
Shape!
hb_shape(font, buf, NULL, 0);
Get the glyph and position information.
hb_glyph_info_t *glyph_info = hb_buffer_get_glyph_infos(buf, &glyph_count);
hb_glyph_position_t *glyph_pos = hb_buffer_get_glyph_positions(buf, &glyph_count);
Iterate over each glyph.
for (i = 0; i < glyph_count; ++i) {
glyphid = glyph_info[i].codepoint;
x_offset = glyph_pos[i].x_offset / 64.0;
y_offset = glyph_pos[i].y_offset / 64.0;
x_advance = glyph_pos[i].x_advance / 64.0;
y_advance = glyph_pos[i].y_advance / 64.0;
draw_glyph(glyphid, cursor_x + x_offset, cursor_y + y_offset);
cursor_x += x_advance;