Merge branch 'master' into cff-subset
This commit is contained in:
commit
c37aecd41c
|
@ -801,7 +801,7 @@ struct hb_aat_apply_context_t :
|
||||||
static return_t default_return_value (void) { return false; }
|
static return_t default_return_value (void) { return false; }
|
||||||
bool stop_sublookup_iteration (return_t r) const { return r; }
|
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_font_t *font;
|
||||||
hb_face_t *face;
|
hb_face_t *face;
|
||||||
hb_buffer_t *buffer;
|
hb_buffer_t *buffer;
|
||||||
|
@ -813,7 +813,7 @@ struct hb_aat_apply_context_t :
|
||||||
unsigned int lookup_index;
|
unsigned int lookup_index;
|
||||||
unsigned int debug_depth;
|
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_font_t *font_,
|
||||||
hb_buffer_t *buffer_,
|
hb_buffer_t *buffer_,
|
||||||
hb_blob_t *blob = const_cast<hb_blob_t *> (&Null(hb_blob_t)));
|
hb_blob_t *blob = const_cast<hb_blob_t *> (&Null(hb_blob_t)));
|
||||||
|
|
|
@ -135,7 +135,7 @@ hb_aat_layout_find_feature_mapping (hb_tag_t tag)
|
||||||
* hb_aat_apply_context_t
|
* 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_font_t *font_,
|
||||||
hb_buffer_t *buffer_,
|
hb_buffer_t *buffer_,
|
||||||
hb_blob_t *blob) :
|
hb_blob_t *blob) :
|
||||||
|
@ -202,7 +202,7 @@ hb_aat_layout_has_substitution (hb_face_t *face)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
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_font_t *font,
|
||||||
hb_buffer_t *buffer)
|
hb_buffer_t *buffer)
|
||||||
{
|
{
|
||||||
|
@ -257,7 +257,7 @@ hb_aat_layout_has_positioning (hb_face_t *face)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
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_font_t *font,
|
||||||
hb_buffer_t *buffer)
|
hb_buffer_t *buffer)
|
||||||
{
|
{
|
||||||
|
@ -280,7 +280,7 @@ hb_aat_layout_has_tracking (hb_face_t *face)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
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_font_t *font,
|
||||||
hb_buffer_t *buffer)
|
hb_buffer_t *buffer)
|
||||||
{
|
{
|
||||||
|
|
|
@ -60,7 +60,7 @@ HB_INTERNAL bool
|
||||||
hb_aat_layout_has_substitution (hb_face_t *face);
|
hb_aat_layout_has_substitution (hb_face_t *face);
|
||||||
|
|
||||||
HB_INTERNAL void
|
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_font_t *font,
|
||||||
hb_buffer_t *buffer);
|
hb_buffer_t *buffer);
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ HB_INTERNAL bool
|
||||||
hb_aat_layout_has_positioning (hb_face_t *face);
|
hb_aat_layout_has_positioning (hb_face_t *face);
|
||||||
|
|
||||||
HB_INTERNAL void
|
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_font_t *font,
|
||||||
hb_buffer_t *buffer);
|
hb_buffer_t *buffer);
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ HB_INTERNAL bool
|
||||||
hb_aat_layout_has_tracking (hb_face_t *face);
|
hb_aat_layout_has_tracking (hb_face_t *face);
|
||||||
|
|
||||||
HB_INTERNAL void
|
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_font_t *font,
|
||||||
hb_buffer_t *buffer);
|
hb_buffer_t *buffer);
|
||||||
|
|
||||||
|
|
|
@ -198,6 +198,7 @@ struct MinMax
|
||||||
const BaseCoord **min,
|
const BaseCoord **min,
|
||||||
const BaseCoord **max) const
|
const BaseCoord **max) const
|
||||||
{
|
{
|
||||||
|
/* TODO Replace hb_bsearch() with .bsearch(). */
|
||||||
const FeatMinMaxRecord *minMaxCoord = (const FeatMinMaxRecord *)
|
const FeatMinMaxRecord *minMaxCoord = (const FeatMinMaxRecord *)
|
||||||
hb_bsearch (&feature_tag, featMinMaxRecords.arrayZ,
|
hb_bsearch (&feature_tag, featMinMaxRecords.arrayZ,
|
||||||
featMinMaxRecords.len,
|
featMinMaxRecords.len,
|
||||||
|
@ -230,7 +231,7 @@ struct MinMax
|
||||||
maxCoord; /* Offset to BaseCoord table that defines
|
maxCoord; /* Offset to BaseCoord table that defines
|
||||||
* maximum extent value, from the beginning
|
* maximum extent value, from the beginning
|
||||||
* of MinMax table (may be NULL) */
|
* of MinMax table (may be NULL) */
|
||||||
ArrayOf<FeatMinMaxRecord>
|
SortedArrayOf<FeatMinMaxRecord>
|
||||||
featMinMaxRecords;
|
featMinMaxRecords;
|
||||||
/* Array of FeatMinMaxRecords, in alphabetical
|
/* Array of FeatMinMaxRecords, in alphabetical
|
||||||
* order by featureTableTag */
|
* order by featureTableTag */
|
||||||
|
@ -302,6 +303,7 @@ struct BaseScript
|
||||||
{
|
{
|
||||||
inline const MinMax &get_min_max (hb_tag_t language_tag) const
|
inline const MinMax &get_min_max (hb_tag_t language_tag) const
|
||||||
{
|
{
|
||||||
|
/* TODO Replace hb_bsearch() with .bsearch(). */
|
||||||
const BaseLangSysRecord* record = (const BaseLangSysRecord *)
|
const BaseLangSysRecord* record = (const BaseLangSysRecord *)
|
||||||
hb_bsearch (&language_tag, baseLangSysRecords.arrayZ,
|
hb_bsearch (&language_tag, baseLangSysRecords.arrayZ,
|
||||||
baseLangSysRecords.len,
|
baseLangSysRecords.len,
|
||||||
|
@ -332,7 +334,7 @@ struct BaseScript
|
||||||
OffsetTo<MinMax>
|
OffsetTo<MinMax>
|
||||||
defaultMinMax; /* Offset to MinMax table, from beginning of
|
defaultMinMax; /* Offset to MinMax table, from beginning of
|
||||||
* BaseScript table (may be NULL) */
|
* BaseScript table (may be NULL) */
|
||||||
ArrayOf<BaseLangSysRecord>
|
SortedArrayOf<BaseLangSysRecord>
|
||||||
baseLangSysRecords;
|
baseLangSysRecords;
|
||||||
/* Number of BaseLangSysRecords
|
/* Number of BaseLangSysRecords
|
||||||
* defined — may be zero (0) */
|
* defined — may be zero (0) */
|
||||||
|
@ -377,6 +379,7 @@ struct BaseScriptList
|
||||||
{
|
{
|
||||||
inline const BaseScriptRecord *find_record (hb_tag_t script) const
|
inline const BaseScriptRecord *find_record (hb_tag_t script) const
|
||||||
{
|
{
|
||||||
|
/* TODO Replace hb_bsearch() with .bsearch(). */
|
||||||
return (const BaseScriptRecord *) hb_bsearch (&script, baseScriptRecords.arrayZ,
|
return (const BaseScriptRecord *) hb_bsearch (&script, baseScriptRecords.arrayZ,
|
||||||
baseScriptRecords.len,
|
baseScriptRecords.len,
|
||||||
BaseScriptRecord::static_size,
|
BaseScriptRecord::static_size,
|
||||||
|
@ -400,7 +403,7 @@ struct BaseScriptList
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ArrayOf<BaseScriptRecord>
|
SortedArrayOf<BaseScriptRecord>
|
||||||
baseScriptRecords;
|
baseScriptRecords;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -72,7 +72,7 @@ hb_ot_layout_has_cross_kerning (hb_face_t *face)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
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_font_t *font,
|
||||||
hb_buffer_t *buffer)
|
hb_buffer_t *buffer)
|
||||||
{
|
{
|
||||||
|
|
|
@ -52,7 +52,7 @@ HB_INTERNAL bool
|
||||||
hb_ot_layout_has_cross_kerning (hb_face_t *face);
|
hb_ot_layout_has_cross_kerning (hb_face_t *face);
|
||||||
|
|
||||||
HB_INTERNAL void
|
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_font_t *font,
|
||||||
hb_buffer_t *buffer);
|
hb_buffer_t *buffer);
|
||||||
|
|
||||||
|
|
|
@ -181,6 +181,33 @@ hb_ot_shape_plan_t::fini (void)
|
||||||
aat_map.fini ();
|
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
|
static const hb_ot_map_feature_t
|
||||||
common_features[] =
|
common_features[] =
|
||||||
|
@ -687,10 +714,7 @@ hb_ot_substitute_complex (const hb_ot_shape_context_t *c)
|
||||||
if (c->plan->fallback_glyph_classes)
|
if (c->plan->fallback_glyph_classes)
|
||||||
hb_synthesize_glyph_classes (c->buffer);
|
hb_synthesize_glyph_classes (c->buffer);
|
||||||
|
|
||||||
if (unlikely (c->plan->apply_morx))
|
c->plan->substitute (c->font, buffer);
|
||||||
hb_aat_layout_substitute (c->plan, c->font, c->buffer);
|
|
||||||
else
|
|
||||||
c->plan->substitute (c->font, buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
|
@ -825,17 +849,7 @@ hb_ot_position_complex (const hb_ot_shape_context_t *c)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c->plan->apply_gpos)
|
c->plan->position (c->font, c->buffer);
|
||||||
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);
|
|
||||||
|
|
||||||
if (c->plan->zero_marks)
|
if (c->plan->zero_marks)
|
||||||
switch (c->plan->shaper->zero_width_marks)
|
switch (c->plan->shaper->zero_width_marks)
|
||||||
|
|
|
@ -84,7 +84,6 @@ struct hb_ot_shape_plan_t
|
||||||
bool apply_morx : 1;
|
bool apply_morx : 1;
|
||||||
bool apply_trak : 1;
|
bool apply_trak : 1;
|
||||||
|
|
||||||
|
|
||||||
inline void collect_lookups (hb_tag_t table_tag, hb_set_t *lookups) const
|
inline void collect_lookups (hb_tag_t table_tag, hb_set_t *lookups) const
|
||||||
{
|
{
|
||||||
unsigned int table_index;
|
unsigned int table_index;
|
||||||
|
@ -95,12 +94,13 @@ struct hb_ot_shape_plan_t
|
||||||
}
|
}
|
||||||
map.collect_lookups (table_index, lookups);
|
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,
|
HB_INTERNAL bool init0 (hb_face_t *face,
|
||||||
const hb_shape_plan_key_t *key);
|
const hb_shape_plan_key_t *key);
|
||||||
HB_INTERNAL void fini (void);
|
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;
|
struct hb_shape_plan_t;
|
||||||
|
|
|
@ -108,7 +108,7 @@ hb_shape_plan_key_t::init (bool copy,
|
||||||
}
|
}
|
||||||
else
|
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++)
|
for (unsigned int i = 0; i < HB_SHAPERS_COUNT; i++)
|
||||||
if (false)
|
if (false)
|
||||||
;
|
;
|
||||||
|
|
|
@ -63,7 +63,7 @@ static struct hb_shaper_list_lazy_loader_t : hb_lazy_loader_t<const char *,
|
||||||
if (unlikely (!shaper_list))
|
if (unlikely (!shaper_list))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
const hb_shaper_pair_static_t *shapers = _hb_shapers_get ();
|
const hb_shaper_entry_t *shapers = _hb_shapers_get ();
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
for (i = 0; i < HB_SHAPERS_COUNT; i++)
|
for (i = 0; i < HB_SHAPERS_COUNT; i++)
|
||||||
shaper_list[i] = shapers[i].name;
|
shaper_list[i] = shapers[i].name;
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
#include "hb-machinery.hh"
|
#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},
|
#define HB_SHAPER_IMPLEMENT(name) {#name, _hb_##name##_shape},
|
||||||
#include "hb-shaper-list.hh"
|
#include "hb-shaper-list.hh"
|
||||||
#undef HB_SHAPER_IMPLEMENT
|
#undef HB_SHAPER_IMPLEMENT
|
||||||
|
@ -39,16 +39,16 @@ static const hb_shaper_pair_static_t all_shapers[] = {
|
||||||
static void free_static_shapers (void);
|
static void free_static_shapers (void);
|
||||||
#endif
|
#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>
|
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");
|
char *env = getenv ("HB_SHAPER_LIST");
|
||||||
if (!env || !*env)
|
if (!env || !*env)
|
||||||
return nullptr;
|
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))
|
if (unlikely (!shapers))
|
||||||
return nullptr;
|
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))
|
0 == strncmp (shapers[j].name, p, end - p))
|
||||||
{
|
{
|
||||||
/* Reorder this shaper to position i */
|
/* 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));
|
memmove (&shapers[i + 1], &shapers[i], sizeof (shapers[i]) * (j - i));
|
||||||
shapers[i] = t;
|
shapers[i] = t;
|
||||||
i++;
|
i++;
|
||||||
|
@ -86,11 +86,11 @@ static struct hb_shapers_lazy_loader_t : hb_lazy_loader_t<const hb_shaper_pair_s
|
||||||
|
|
||||||
return shapers;
|
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);
|
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;
|
return all_shapers;
|
||||||
}
|
}
|
||||||
|
@ -104,7 +104,7 @@ void free_static_shapers (void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const hb_shaper_pair_static_t *
|
const hb_shaper_entry_t *
|
||||||
_hb_shapers_get (void)
|
_hb_shapers_get (void)
|
||||||
{
|
{
|
||||||
return static_shapers.get_unconst ();
|
return static_shapers.get_unconst ();
|
||||||
|
|
|
@ -40,12 +40,12 @@ typedef hb_bool_t hb_shape_func_t (hb_shape_plan_t *shape_plan,
|
||||||
#include "hb-shaper-list.hh"
|
#include "hb-shaper-list.hh"
|
||||||
#undef HB_SHAPER_IMPLEMENT
|
#undef HB_SHAPER_IMPLEMENT
|
||||||
|
|
||||||
struct hb_shaper_pair_static_t {
|
struct hb_shaper_entry_t {
|
||||||
char name[16];
|
char name[16];
|
||||||
hb_shape_func_t *func;
|
hb_shape_func_t *func;
|
||||||
};
|
};
|
||||||
|
|
||||||
HB_INTERNAL const hb_shaper_pair_static_t *
|
HB_INTERNAL const hb_shaper_entry_t *
|
||||||
_hb_shapers_get (void);
|
_hb_shapers_get (void);
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue