Merge branch 'master' into cff-subset

This commit is contained in:
Michiharu Ariza 2018-11-15 11:03:46 -08:00
commit c37aecd41c
12 changed files with 61 additions and 44 deletions

View File

@ -801,7 +801,7 @@ struct hb_aat_apply_context_t :
static return_t default_return_value (void) { return false; }
bool stop_sublookup_iteration (return_t r) const { return r; }
hb_ot_shape_plan_t *plan;
const hb_ot_shape_plan_t *plan;
hb_font_t *font;
hb_face_t *face;
hb_buffer_t *buffer;
@ -813,7 +813,7 @@ struct hb_aat_apply_context_t :
unsigned int lookup_index;
unsigned int debug_depth;
HB_INTERNAL hb_aat_apply_context_t (hb_ot_shape_plan_t *plan_,
HB_INTERNAL hb_aat_apply_context_t (const hb_ot_shape_plan_t *plan_,
hb_font_t *font_,
hb_buffer_t *buffer_,
hb_blob_t *blob = const_cast<hb_blob_t *> (&Null(hb_blob_t)));

View File

@ -135,7 +135,7 @@ hb_aat_layout_find_feature_mapping (hb_tag_t tag)
* hb_aat_apply_context_t
*/
AAT::hb_aat_apply_context_t::hb_aat_apply_context_t (hb_ot_shape_plan_t *plan_,
AAT::hb_aat_apply_context_t::hb_aat_apply_context_t (const hb_ot_shape_plan_t *plan_,
hb_font_t *font_,
hb_buffer_t *buffer_,
hb_blob_t *blob) :
@ -202,7 +202,7 @@ hb_aat_layout_has_substitution (hb_face_t *face)
}
void
hb_aat_layout_substitute (hb_ot_shape_plan_t *plan,
hb_aat_layout_substitute (const hb_ot_shape_plan_t *plan,
hb_font_t *font,
hb_buffer_t *buffer)
{
@ -257,7 +257,7 @@ hb_aat_layout_has_positioning (hb_face_t *face)
}
void
hb_aat_layout_position (hb_ot_shape_plan_t *plan,
hb_aat_layout_position (const hb_ot_shape_plan_t *plan,
hb_font_t *font,
hb_buffer_t *buffer)
{
@ -280,7 +280,7 @@ hb_aat_layout_has_tracking (hb_face_t *face)
}
void
hb_aat_layout_track (hb_ot_shape_plan_t *plan,
hb_aat_layout_track (const hb_ot_shape_plan_t *plan,
hb_font_t *font,
hb_buffer_t *buffer)
{

View File

@ -60,7 +60,7 @@ HB_INTERNAL bool
hb_aat_layout_has_substitution (hb_face_t *face);
HB_INTERNAL void
hb_aat_layout_substitute (hb_ot_shape_plan_t *plan,
hb_aat_layout_substitute (const hb_ot_shape_plan_t *plan,
hb_font_t *font,
hb_buffer_t *buffer);
@ -74,7 +74,7 @@ HB_INTERNAL bool
hb_aat_layout_has_positioning (hb_face_t *face);
HB_INTERNAL void
hb_aat_layout_position (hb_ot_shape_plan_t *plan,
hb_aat_layout_position (const hb_ot_shape_plan_t *plan,
hb_font_t *font,
hb_buffer_t *buffer);
@ -82,7 +82,7 @@ HB_INTERNAL bool
hb_aat_layout_has_tracking (hb_face_t *face);
HB_INTERNAL void
hb_aat_layout_track (hb_ot_shape_plan_t *plan,
hb_aat_layout_track (const hb_ot_shape_plan_t *plan,
hb_font_t *font,
hb_buffer_t *buffer);

View File

@ -198,6 +198,7 @@ struct MinMax
const BaseCoord **min,
const BaseCoord **max) const
{
/* TODO Replace hb_bsearch() with .bsearch(). */
const FeatMinMaxRecord *minMaxCoord = (const FeatMinMaxRecord *)
hb_bsearch (&feature_tag, featMinMaxRecords.arrayZ,
featMinMaxRecords.len,
@ -230,7 +231,7 @@ struct MinMax
maxCoord; /* Offset to BaseCoord table that defines
* maximum extent value, from the beginning
* of MinMax table (may be NULL) */
ArrayOf<FeatMinMaxRecord>
SortedArrayOf<FeatMinMaxRecord>
featMinMaxRecords;
/* Array of FeatMinMaxRecords, in alphabetical
* order by featureTableTag */
@ -302,6 +303,7 @@ struct BaseScript
{
inline const MinMax &get_min_max (hb_tag_t language_tag) const
{
/* TODO Replace hb_bsearch() with .bsearch(). */
const BaseLangSysRecord* record = (const BaseLangSysRecord *)
hb_bsearch (&language_tag, baseLangSysRecords.arrayZ,
baseLangSysRecords.len,
@ -332,7 +334,7 @@ struct BaseScript
OffsetTo<MinMax>
defaultMinMax; /* Offset to MinMax table, from beginning of
* BaseScript table (may be NULL) */
ArrayOf<BaseLangSysRecord>
SortedArrayOf<BaseLangSysRecord>
baseLangSysRecords;
/* Number of BaseLangSysRecords
* defined may be zero (0) */
@ -377,6 +379,7 @@ struct BaseScriptList
{
inline const BaseScriptRecord *find_record (hb_tag_t script) const
{
/* TODO Replace hb_bsearch() with .bsearch(). */
return (const BaseScriptRecord *) hb_bsearch (&script, baseScriptRecords.arrayZ,
baseScriptRecords.len,
BaseScriptRecord::static_size,
@ -400,7 +403,7 @@ struct BaseScriptList
}
protected:
ArrayOf<BaseScriptRecord>
SortedArrayOf<BaseScriptRecord>
baseScriptRecords;
public:

View File

@ -72,7 +72,7 @@ hb_ot_layout_has_cross_kerning (hb_face_t *face)
}
void
hb_ot_layout_kern (hb_ot_shape_plan_t *plan,
hb_ot_layout_kern (const hb_ot_shape_plan_t *plan,
hb_font_t *font,
hb_buffer_t *buffer)
{

View File

@ -52,7 +52,7 @@ HB_INTERNAL bool
hb_ot_layout_has_cross_kerning (hb_face_t *face);
HB_INTERNAL void
hb_ot_layout_kern (hb_ot_shape_plan_t *plan,
hb_ot_layout_kern (const hb_ot_shape_plan_t *plan,
hb_font_t *font,
hb_buffer_t *buffer);

View File

@ -181,6 +181,33 @@ hb_ot_shape_plan_t::fini (void)
aat_map.fini ();
}
void
hb_ot_shape_plan_t::substitute (hb_font_t *font,
hb_buffer_t *buffer) const
{
if (unlikely (apply_morx))
hb_aat_layout_substitute (this, font, buffer);
else
map.substitute (this, font, buffer);
}
void
hb_ot_shape_plan_t::position (hb_font_t *font,
hb_buffer_t *buffer) const
{
if (this->apply_gpos)
map.position (this, font, buffer);
else if (this->apply_kerx)
hb_aat_layout_position (this, font, buffer);
else if (this->apply_kern)
hb_ot_layout_kern (this, font, buffer);
else
_hb_ot_shape_fallback_kern (this, font, buffer);
if (this->apply_trak)
hb_aat_layout_track (this, font, buffer);
}
static const hb_ot_map_feature_t
common_features[] =
@ -687,10 +714,7 @@ hb_ot_substitute_complex (const hb_ot_shape_context_t *c)
if (c->plan->fallback_glyph_classes)
hb_synthesize_glyph_classes (c->buffer);
if (unlikely (c->plan->apply_morx))
hb_aat_layout_substitute (c->plan, c->font, c->buffer);
else
c->plan->substitute (c->font, buffer);
c->plan->substitute (c->font, buffer);
}
static inline void
@ -825,17 +849,7 @@ hb_ot_position_complex (const hb_ot_shape_context_t *c)
break;
}
if (c->plan->apply_gpos)
c->plan->position (c->font, c->buffer);
else if (c->plan->apply_kerx)
hb_aat_layout_position (c->plan, c->font, c->buffer);
else if (c->plan->apply_kern)
hb_ot_layout_kern (c->plan, c->font, c->buffer);
else
_hb_ot_shape_fallback_kern (c->plan, c->font, c->buffer);
if (c->plan->apply_trak)
hb_aat_layout_track (c->plan, c->font, c->buffer);
c->plan->position (c->font, c->buffer);
if (c->plan->zero_marks)
switch (c->plan->shaper->zero_width_marks)

View File

@ -84,7 +84,6 @@ struct hb_ot_shape_plan_t
bool apply_morx : 1;
bool apply_trak : 1;
inline void collect_lookups (hb_tag_t table_tag, hb_set_t *lookups) const
{
unsigned int table_index;
@ -95,12 +94,13 @@ struct hb_ot_shape_plan_t
}
map.collect_lookups (table_index, lookups);
}
inline void substitute (hb_font_t *font, hb_buffer_t *buffer) const { map.substitute (this, font, buffer); }
inline void position (hb_font_t *font, hb_buffer_t *buffer) const { map.position (this, font, buffer); }
HB_INTERNAL bool init0 (hb_face_t *face,
const hb_shape_plan_key_t *key);
HB_INTERNAL void fini (void);
HB_INTERNAL void substitute (hb_font_t *font, hb_buffer_t *buffer) const;
HB_INTERNAL void position (hb_font_t *font, hb_buffer_t *buffer) const;
};
struct hb_shape_plan_t;

View File

@ -108,7 +108,7 @@ hb_shape_plan_key_t::init (bool copy,
}
else
{
const hb_shaper_pair_static_t *shapers = _hb_shapers_get ();
const hb_shaper_entry_t *shapers = _hb_shapers_get ();
for (unsigned int i = 0; i < HB_SHAPERS_COUNT; i++)
if (false)
;

View File

@ -63,7 +63,7 @@ static struct hb_shaper_list_lazy_loader_t : hb_lazy_loader_t<const char *,
if (unlikely (!shaper_list))
return nullptr;
const hb_shaper_pair_static_t *shapers = _hb_shapers_get ();
const hb_shaper_entry_t *shapers = _hb_shapers_get ();
unsigned int i;
for (i = 0; i < HB_SHAPERS_COUNT; i++)
shaper_list[i] = shapers[i].name;

View File

@ -29,7 +29,7 @@
#include "hb-machinery.hh"
static const hb_shaper_pair_static_t all_shapers[] = {
static const hb_shaper_entry_t all_shapers[] = {
#define HB_SHAPER_IMPLEMENT(name) {#name, _hb_##name##_shape},
#include "hb-shaper-list.hh"
#undef HB_SHAPER_IMPLEMENT
@ -39,16 +39,16 @@ static const hb_shaper_pair_static_t all_shapers[] = {
static void free_static_shapers (void);
#endif
static struct hb_shapers_lazy_loader_t : hb_lazy_loader_t<const hb_shaper_pair_static_t,
static struct hb_shapers_lazy_loader_t : hb_lazy_loader_t<const hb_shaper_entry_t,
hb_shapers_lazy_loader_t>
{
static inline hb_shaper_pair_static_t *create (void)
static inline hb_shaper_entry_t *create (void)
{
char *env = getenv ("HB_SHAPER_LIST");
if (!env || !*env)
return nullptr;
hb_shaper_pair_static_t *shapers = (hb_shaper_pair_static_t *) calloc (1, sizeof (all_shapers));
hb_shaper_entry_t *shapers = (hb_shaper_entry_t *) calloc (1, sizeof (all_shapers));
if (unlikely (!shapers))
return nullptr;
@ -68,7 +68,7 @@ static struct hb_shapers_lazy_loader_t : hb_lazy_loader_t<const hb_shaper_pair_s
0 == strncmp (shapers[j].name, p, end - p))
{
/* Reorder this shaper to position i */
struct hb_shaper_pair_static_t t = shapers[j];
struct hb_shaper_entry_t t = shapers[j];
memmove (&shapers[i + 1], &shapers[i], sizeof (shapers[i]) * (j - i));
shapers[i] = t;
i++;
@ -86,11 +86,11 @@ static struct hb_shapers_lazy_loader_t : hb_lazy_loader_t<const hb_shaper_pair_s
return shapers;
}
static inline void destroy (const hb_shaper_pair_static_t *p)
static inline void destroy (const hb_shaper_entry_t *p)
{
free ((void *) p);
}
static inline const hb_shaper_pair_static_t *get_null (void)
static inline const hb_shaper_entry_t *get_null (void)
{
return all_shapers;
}
@ -104,7 +104,7 @@ void free_static_shapers (void)
}
#endif
const hb_shaper_pair_static_t *
const hb_shaper_entry_t *
_hb_shapers_get (void)
{
return static_shapers.get_unconst ();

View File

@ -40,12 +40,12 @@ typedef hb_bool_t hb_shape_func_t (hb_shape_plan_t *shape_plan,
#include "hb-shaper-list.hh"
#undef HB_SHAPER_IMPLEMENT
struct hb_shaper_pair_static_t {
struct hb_shaper_entry_t {
char name[16];
hb_shape_func_t *func;
};
HB_INTERNAL const hb_shaper_pair_static_t *
HB_INTERNAL const hb_shaper_entry_t *
_hb_shapers_get (void);