* Google Author(s): Behdad Esfahbod
*/
+#include "hb.hh"
+
+#ifdef HAVE_GRAPHITE2
+
#include "hb-shaper-impl.hh"
#include "hb-graphite2.h"
return d;
}
-static void hb_graphite2_release_table(const void *data, const void *table_buffer)
-{
- hb_graphite2_face_data_t *face_data = (hb_graphite2_face_data_t *) data;
- hb_graphite2_tablelist_t *tlist = face_data->tlist;
-
- hb_graphite2_tablelist_t *prev = nullptr;
- hb_graphite2_tablelist_t *curr = tlist;
- while (curr)
- {
- if (hb_blob_get_data(curr->blob, nullptr) == table_buffer)
- {
- if (prev == nullptr)
- face_data->tlist.cmpexch(tlist, curr->next);
- else
- prev->next = curr->next;
- hb_blob_destroy(curr->blob);
- free(curr);
- break;
- }
- prev = curr;
- curr = curr->next;
- }
-}
-
-static gr_face_ops hb_graphite2_face_ops = { sizeof(gr_face_ops), hb_graphite2_get_table, hb_graphite2_release_table };
-
hb_graphite2_face_data_t *
_hb_graphite2_shaper_face_data_create (hb_face_t *face)
{
return nullptr;
data->face = face;
- data->grface = gr_make_face_with_ops (data, &hb_graphite2_face_ops, gr_face_preloadAll);
+ data->grface = gr_make_face (data, &hb_graphite2_get_table, gr_face_preloadAll);
if (unlikely (!data->grface)) {
free (data);
{
}
+#ifndef HB_DISABLE_DEPRECATED
/**
* hb_graphite2_font_get_gr_font:
*
{
return nullptr;
}
+#endif
/*
#define ALLOCATE_ARRAY(Type, name, len) \
Type *name = (Type *) scratch; \
- { \
+ do { \
unsigned int _consumed = DIV_CEIL ((len) * sizeof (Type), sizeof (*scratch)); \
assert (_consumed <= scratch_size); \
scratch += _consumed; \
scratch_size -= _consumed; \
- }
+ } while (0)
ALLOCATE_ARRAY (hb_graphite2_cluster_t, clusters, buffer->len);
ALLOCATE_ARRAY (hb_codepoint_t, gids, glyph_count);
c->num_glyphs = 0;
if (HB_DIRECTION_IS_BACKWARD(buffer->props.direction))
{
- c->advance = curradv - gr_slot_origin_X(is) * xscale;
- curradv -= c->advance;
+ c->advance = curradv - gr_slot_origin_X(is) * xscale;
+ curradv -= c->advance;
}
else
{
- c->advance = 0;
- clusters[ci].advance += gr_slot_origin_X(is) * xscale - curradv;
- curradv += clusters[ci].advance;
+ c->advance = 0;
+ clusters[ci].advance += gr_slot_origin_X(is) * xscale - curradv;
+ curradv += clusters[ci].advance;
}
ci++;
}
return true;
}
+
+
+#endif