[subset] Move 2 experimental public api methods to be private methods in GSUB/GPOS.
2 methods are: hb_ot_layout_closure_lookups and hb_ot_layout_closure_features
This commit is contained in:
parent
62de2f749c
commit
973c47f6c9
|
@ -552,8 +552,6 @@ HB_OT_TAG_GPOS
|
||||||
HB_OT_TAG_GSUB
|
HB_OT_TAG_GSUB
|
||||||
HB_OT_TAG_JSTF
|
HB_OT_TAG_JSTF
|
||||||
hb_ot_layout_baseline_tag_t
|
hb_ot_layout_baseline_tag_t
|
||||||
hb_ot_layout_closure_lookups
|
|
||||||
hb_ot_layout_closure_features
|
|
||||||
hb_ot_layout_collect_lookups
|
hb_ot_layout_collect_lookups
|
||||||
hb_ot_layout_collect_features
|
hb_ot_layout_collect_features
|
||||||
hb_ot_layout_feature_get_characters
|
hb_ot_layout_feature_get_characters
|
||||||
|
|
|
@ -37,9 +37,7 @@ hb_draw_funcs_set_line_to_func
|
||||||
hb_draw_funcs_set_move_to_func
|
hb_draw_funcs_set_move_to_func
|
||||||
hb_draw_funcs_set_quadratic_to_func
|
hb_draw_funcs_set_quadratic_to_func
|
||||||
hb_style_get_value
|
hb_style_get_value
|
||||||
hb_font_get_var_coords_design
|
hb_font_get_var_coords_design""".splitlines ()
|
||||||
hb_ot_layout_closure_lookups
|
|
||||||
hb_ot_layout_closure_features""".splitlines ()
|
|
||||||
symbols = [x for x in symbols if x not in experimental_symbols]
|
symbols = [x for x in symbols if x not in experimental_symbols]
|
||||||
symbols = "\n".join (symbols)
|
symbols = "\n".join (symbols)
|
||||||
|
|
||||||
|
|
|
@ -2572,6 +2572,11 @@ struct GPOS : GSUBGPOS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void closure_lookups (hb_face_t *face,
|
||||||
|
const hb_set_t *glyphs,
|
||||||
|
hb_set_t *lookup_indexes /* IN/OUT */) const
|
||||||
|
{ GSUBGPOS::closure_lookups<PosLookup> (face, glyphs, lookup_indexes); }
|
||||||
|
|
||||||
typedef GSUBGPOS::accelerator_t<GPOS> accelerator_t;
|
typedef GSUBGPOS::accelerator_t<GPOS> accelerator_t;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1550,6 +1550,11 @@ struct GSUB : GSUBGPOS
|
||||||
HB_INTERNAL bool is_blocklisted (hb_blob_t *blob,
|
HB_INTERNAL bool is_blocklisted (hb_blob_t *blob,
|
||||||
hb_face_t *face) const;
|
hb_face_t *face) const;
|
||||||
|
|
||||||
|
void closure_lookups (hb_face_t *face,
|
||||||
|
const hb_set_t *glyphs,
|
||||||
|
hb_set_t *lookup_indexes /* IN/OUT */) const
|
||||||
|
{ GSUBGPOS::closure_lookups<SubstLookup> (face, glyphs, lookup_indexes); }
|
||||||
|
|
||||||
typedef GSUBGPOS::accelerator_t<GSUB> accelerator_t;
|
typedef GSUBGPOS::accelerator_t<GSUB> accelerator_t;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -3276,6 +3276,21 @@ struct GSUBGPOS
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename TLookup>
|
||||||
|
void closure_lookups (hb_face_t *face,
|
||||||
|
const hb_set_t *glyphs,
|
||||||
|
hb_set_t *lookup_indexes /* IN/OUT */) const
|
||||||
|
{
|
||||||
|
hb_set_t visited_lookups, inactive_lookups;
|
||||||
|
OT::hb_closure_lookups_context_t c (face, glyphs, &visited_lookups, &inactive_lookups);
|
||||||
|
|
||||||
|
for (unsigned lookup_index : + hb_iter (lookup_indexes))
|
||||||
|
reinterpret_cast<const TLookup &> (get_lookup (lookup_index)).closure_lookups (&c, lookup_index);
|
||||||
|
|
||||||
|
hb_set_union (lookup_indexes, &visited_lookups);
|
||||||
|
hb_set_subtract (lookup_indexes, &inactive_lookups);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename TLookup>
|
template <typename TLookup>
|
||||||
bool subset (hb_subset_layout_context_t *c) const
|
bool subset (hb_subset_layout_context_t *c) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -1202,72 +1202,6 @@ hb_ot_layout_collect_lookups (hb_face_t *face,
|
||||||
g.feature_variation_collect_lookups (&feature_indexes, lookup_indexes);
|
g.feature_variation_collect_lookups (&feature_indexes, lookup_indexes);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HB_EXPERIMENTAL_API
|
|
||||||
/**
|
|
||||||
* hb_ot_layout_closure_lookups:
|
|
||||||
* @face: #hb_face_t to work upon
|
|
||||||
* @table_tag: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
|
|
||||||
* @lookup_indexes: (inout): lookup_indices collected from feature
|
|
||||||
* list
|
|
||||||
*
|
|
||||||
* Returns all inactive lookups reachable from lookup_indices
|
|
||||||
*
|
|
||||||
* Since: EXPERIMENTAL
|
|
||||||
**/
|
|
||||||
void
|
|
||||||
hb_ot_layout_closure_lookups (hb_face_t *face,
|
|
||||||
hb_tag_t table_tag,
|
|
||||||
const hb_set_t *glyphs,
|
|
||||||
hb_set_t *lookup_indexes /* IN/OUT */)
|
|
||||||
{
|
|
||||||
hb_set_t visited_lookups, inactive_lookups;
|
|
||||||
OT::hb_closure_lookups_context_t c (face, glyphs, &visited_lookups, &inactive_lookups);
|
|
||||||
|
|
||||||
for (unsigned lookup_index : + hb_iter (lookup_indexes))
|
|
||||||
{
|
|
||||||
switch (table_tag)
|
|
||||||
{
|
|
||||||
case HB_OT_TAG_GSUB:
|
|
||||||
{
|
|
||||||
const OT::SubstLookup& l = face->table.GSUB->table->get_lookup (lookup_index);
|
|
||||||
l.closure_lookups (&c, lookup_index);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case HB_OT_TAG_GPOS:
|
|
||||||
{
|
|
||||||
const OT::PosLookup& l = face->table.GPOS->table->get_lookup (lookup_index);
|
|
||||||
l.closure_lookups (&c, lookup_index);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
hb_set_union (lookup_indexes, &visited_lookups);
|
|
||||||
hb_set_subtract (lookup_indexes, &inactive_lookups);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* hb_ot_layout_closure_features:
|
|
||||||
* @face: #hb_face_t to work upon
|
|
||||||
* @table_tag: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
|
|
||||||
* @lookup_indexes: (in): collected active lookup_indices
|
|
||||||
* @feature_indexes: (out): all active feature indexes collected
|
|
||||||
*
|
|
||||||
* Returns all active feature indexes
|
|
||||||
*
|
|
||||||
* Since: EXPERIMENTAL
|
|
||||||
**/
|
|
||||||
void
|
|
||||||
hb_ot_layout_closure_features (hb_face_t *face,
|
|
||||||
hb_tag_t table_tag,
|
|
||||||
const hb_map_t *lookup_indexes, /* IN */
|
|
||||||
hb_set_t *feature_indexes /* OUT */)
|
|
||||||
{
|
|
||||||
const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
|
|
||||||
g.closure_features (lookup_indexes, feature_indexes);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef HB_NO_LAYOUT_COLLECT_GLYPHS
|
#ifndef HB_NO_LAYOUT_COLLECT_GLYPHS
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -262,20 +262,6 @@ hb_ot_layout_collect_lookups (hb_face_t *face,
|
||||||
const hb_tag_t *features,
|
const hb_tag_t *features,
|
||||||
hb_set_t *lookup_indexes /* OUT */);
|
hb_set_t *lookup_indexes /* OUT */);
|
||||||
|
|
||||||
#ifdef HB_EXPERIMENTAL_API
|
|
||||||
HB_EXTERN void
|
|
||||||
hb_ot_layout_closure_lookups (hb_face_t *face,
|
|
||||||
hb_tag_t table_tag,
|
|
||||||
const hb_set_t *glyphs,
|
|
||||||
hb_set_t *lookup_indexes /* IN/OUT */);
|
|
||||||
|
|
||||||
HB_EXTERN void
|
|
||||||
hb_ot_layout_closure_features (hb_face_t *face,
|
|
||||||
hb_tag_t table_tag,
|
|
||||||
const hb_map_t *lookup_indexes, /* IN */
|
|
||||||
hb_set_t *feature_indexes /* OUT */);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
HB_EXTERN void
|
HB_EXTERN void
|
||||||
hb_ot_layout_lookup_collect_glyphs (hb_face_t *face,
|
hb_ot_layout_lookup_collect_glyphs (hb_face_t *face,
|
||||||
hb_tag_t table_tag,
|
hb_tag_t table_tag,
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#include "hb-ot-glyf-table.hh"
|
#include "hb-ot-glyf-table.hh"
|
||||||
#include "hb-ot-layout-gdef-table.hh"
|
#include "hb-ot-layout-gdef-table.hh"
|
||||||
#include "hb-ot-layout-gpos-table.hh"
|
#include "hb-ot-layout-gpos-table.hh"
|
||||||
|
#include "hb-ot-layout-gsub-table.hh"
|
||||||
#include "hb-ot-cff1-table.hh"
|
#include "hb-ot-cff1-table.hh"
|
||||||
#include "hb-ot-color-colr-table.hh"
|
#include "hb-ot-color-colr-table.hh"
|
||||||
#include "hb-ot-var-fvar-table.hh"
|
#include "hb-ot-var-fvar-table.hh"
|
||||||
|
@ -54,7 +55,6 @@ _add_cff_seac_components (const OT::cff1::accelerator_t &cff,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef HB_NO_SUBSET_LAYOUT
|
#ifndef HB_NO_SUBSET_LAYOUT
|
||||||
#ifdef HB_EXPERIMENTAL_API
|
|
||||||
static void
|
static void
|
||||||
_remap_indexes (const hb_set_t *indexes,
|
_remap_indexes (const hb_set_t *indexes,
|
||||||
hb_map_t *mapping /* OUT */)
|
hb_map_t *mapping /* OUT */)
|
||||||
|
@ -65,7 +65,6 @@ _remap_indexes (const hb_set_t *indexes,
|
||||||
mapping->set (_.first, _.second);
|
mapping->set (_.first, _.second);
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
_gsub_closure_glyphs_lookups_features (hb_face_t *face,
|
_gsub_closure_glyphs_lookups_features (hb_face_t *face,
|
||||||
|
@ -83,21 +82,17 @@ _gsub_closure_glyphs_lookups_features (hb_face_t *face,
|
||||||
hb_ot_layout_lookups_substitute_closure (face,
|
hb_ot_layout_lookups_substitute_closure (face,
|
||||||
&lookup_indices,
|
&lookup_indices,
|
||||||
gids_to_retain);
|
gids_to_retain);
|
||||||
#ifdef HB_EXPERIMENTAL_API
|
hb_blob_ptr_t<OT::GSUB> gsub = hb_sanitize_context_t ().reference_table<OT::GSUB> (face);
|
||||||
hb_ot_layout_closure_lookups (face,
|
gsub->closure_lookups (face,
|
||||||
HB_OT_TAG_GSUB,
|
gids_to_retain,
|
||||||
gids_to_retain,
|
&lookup_indices);
|
||||||
&lookup_indices);
|
|
||||||
_remap_indexes (&lookup_indices, gsub_lookups);
|
_remap_indexes (&lookup_indices, gsub_lookups);
|
||||||
|
|
||||||
//closure features
|
//closure features
|
||||||
hb_set_t feature_indices;
|
hb_set_t feature_indices;
|
||||||
hb_ot_layout_closure_features (face,
|
gsub->closure_features (gsub_lookups, &feature_indices);
|
||||||
HB_OT_TAG_GSUB,
|
|
||||||
gsub_lookups,
|
|
||||||
&feature_indices);
|
|
||||||
_remap_indexes (&feature_indices, gsub_features);
|
_remap_indexes (&feature_indices, gsub_features);
|
||||||
#endif
|
gsub.destroy ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
|
@ -113,21 +108,17 @@ _gpos_closure_lookups_features (hb_face_t *face,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
&lookup_indices);
|
&lookup_indices);
|
||||||
#ifdef HB_EXPERIMENTAL_API
|
hb_blob_ptr_t<OT::GPOS> gpos = hb_sanitize_context_t ().reference_table<OT::GPOS> (face);
|
||||||
hb_ot_layout_closure_lookups (face,
|
gpos->closure_lookups (face,
|
||||||
HB_OT_TAG_GPOS,
|
gids_to_retain,
|
||||||
gids_to_retain,
|
&lookup_indices);
|
||||||
&lookup_indices);
|
|
||||||
_remap_indexes (&lookup_indices, gpos_lookups);
|
_remap_indexes (&lookup_indices, gpos_lookups);
|
||||||
|
|
||||||
//closure features
|
//closure features
|
||||||
hb_set_t feature_indices;
|
hb_set_t feature_indices;
|
||||||
hb_ot_layout_closure_features (face,
|
gpos->closure_features (gpos_lookups, &feature_indices);
|
||||||
HB_OT_TAG_GPOS,
|
|
||||||
gpos_lookups,
|
|
||||||
&feature_indices);
|
|
||||||
_remap_indexes (&feature_indices, gpos_features);
|
_remap_indexes (&feature_indices, gpos_features);
|
||||||
#endif
|
gpos.destroy ();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -85,16 +85,10 @@ test_font (hb_font_t *font, hb_codepoint_t cp)
|
||||||
|
|
||||||
hb_set_t *lookup_indexes = hb_set_create ();
|
hb_set_t *lookup_indexes = hb_set_create ();
|
||||||
hb_set_add (lookup_indexes, 0);
|
hb_set_add (lookup_indexes, 0);
|
||||||
#ifdef HB_EXPERIMENTAL_API
|
|
||||||
hb_ot_layout_closure_lookups (face, HB_OT_TAG_GSUB, set, lookup_indexes);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
hb_map_t *lookup_mapping = hb_map_create ();
|
hb_map_t *lookup_mapping = hb_map_create ();
|
||||||
hb_map_set (lookup_mapping, 0, 0);
|
hb_map_set (lookup_mapping, 0, 0);
|
||||||
hb_set_t *feature_indices = hb_set_create ();
|
hb_set_t *feature_indices = hb_set_create ();
|
||||||
#ifdef HB_EXPERIMENTAL_API
|
|
||||||
hb_ot_layout_closure_features (face, HB_OT_TAG_GSUB, lookup_mapping, feature_indices);
|
|
||||||
#endif
|
|
||||||
hb_set_destroy (lookup_indexes);
|
hb_set_destroy (lookup_indexes);
|
||||||
hb_set_destroy (feature_indices);
|
hb_set_destroy (feature_indices);
|
||||||
hb_map_destroy (lookup_mapping);
|
hb_map_destroy (lookup_mapping);
|
||||||
|
|
|
@ -9,9 +9,6 @@ TESTS = \
|
||||||
tests/sbix.tests \
|
tests/sbix.tests \
|
||||||
tests/colr.tests \
|
tests/colr.tests \
|
||||||
tests/cbdt.tests \
|
tests/cbdt.tests \
|
||||||
$(NULL)
|
|
||||||
|
|
||||||
DISABLED_TESTS = \
|
|
||||||
tests/layout.tests \
|
tests/layout.tests \
|
||||||
tests/layout.gpos.tests \
|
tests/layout.gpos.tests \
|
||||||
tests/layout.gpos2.tests \
|
tests/layout.gpos2.tests \
|
||||||
|
|
|
@ -29,11 +29,6 @@ run_test = find_program('run-tests.py')
|
||||||
foreach t : tests
|
foreach t : tests
|
||||||
fname = '@0@.tests'.format(t)
|
fname = '@0@.tests'.format(t)
|
||||||
|
|
||||||
# layout test are enabled only under experimental API flag for now
|
|
||||||
if t.contains('layout') and not get_option('experimental_api')
|
|
||||||
continue
|
|
||||||
endif
|
|
||||||
|
|
||||||
test(t, run_test,
|
test(t, run_test,
|
||||||
args: [
|
args: [
|
||||||
hb_subset,
|
hb_subset,
|
||||||
|
|
Loading…
Reference in New Issue