You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-24 15:26:15 +00:00
HarfBuzz: Update to version 4.4.1
This commit is contained in:
48
thirdparty/harfbuzz/src/hb-ot-layout.cc
vendored
48
thirdparty/harfbuzz/src/hb-ot-layout.cc
vendored
@@ -46,7 +46,7 @@
|
||||
#include "hb-ot-layout-gdef-table.hh"
|
||||
#include "hb-ot-layout-gsub-table.hh"
|
||||
#include "hb-ot-layout-gpos-table.hh"
|
||||
#include "hb-ot-layout-base-table.hh" // Just so we compile it; unused otherwise.
|
||||
#include "hb-ot-layout-base-table.hh"
|
||||
#include "hb-ot-layout-jstf-table.hh" // Just so we compile it; unused otherwise.
|
||||
#include "hb-ot-name-table.hh"
|
||||
#include "hb-ot-os2-table.hh"
|
||||
@@ -55,6 +55,7 @@
|
||||
#include "hb-aat-layout-opbd-table.hh" // Just so we compile it; unused otherwise.
|
||||
|
||||
using OT::Layout::GSUB::GSUB;
|
||||
using OT::Layout::GPOS;
|
||||
|
||||
/**
|
||||
* SECTION:hb-ot-layout
|
||||
@@ -260,7 +261,6 @@ _hb_ot_layout_set_glyph_props (hb_font_t *font,
|
||||
{
|
||||
_hb_glyph_info_set_glyph_props (&buffer->info[i], gdef.get_glyph_props (buffer->info[i].codepoint));
|
||||
_hb_glyph_info_clear_lig_props (&buffer->info[i]);
|
||||
buffer->info[i].syllable() = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -401,7 +401,7 @@ GSUB::is_blocklisted (hb_blob_t *blob HB_UNUSED,
|
||||
}
|
||||
|
||||
bool
|
||||
OT::GPOS::is_blocklisted (hb_blob_t *blob HB_UNUSED,
|
||||
GPOS::is_blocklisted (hb_blob_t *blob HB_UNUSED,
|
||||
hb_face_t *face HB_UNUSED) const
|
||||
{
|
||||
#ifdef HB_NO_OT_LAYOUT_BLOCKLIST
|
||||
@@ -1501,15 +1501,12 @@ hb_ot_layout_lookup_substitute_closure (hb_face_t *face,
|
||||
hb_set_t *glyphs /* OUT */)
|
||||
{
|
||||
hb_map_t done_lookups_glyph_count;
|
||||
hb_hashmap_t<unsigned, hb_set_t *> done_lookups_glyph_set;
|
||||
hb_hashmap_t<unsigned, hb::unique_ptr<hb_set_t>> done_lookups_glyph_set;
|
||||
OT::hb_closure_context_t c (face, glyphs, &done_lookups_glyph_count, &done_lookups_glyph_set);
|
||||
|
||||
const OT::SubstLookup& l = face->table.GSUB->table->get_lookup (lookup_index);
|
||||
|
||||
l.closure (&c, lookup_index);
|
||||
|
||||
for (auto _ : done_lookups_glyph_set.iter ())
|
||||
hb_set_destroy (_.second);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1529,7 +1526,7 @@ hb_ot_layout_lookups_substitute_closure (hb_face_t *face,
|
||||
hb_set_t *glyphs /* OUT */)
|
||||
{
|
||||
hb_map_t done_lookups_glyph_count;
|
||||
hb_hashmap_t<unsigned, hb_set_t *> done_lookups_glyph_set;
|
||||
hb_hashmap_t<unsigned, hb::unique_ptr<hb_set_t>> done_lookups_glyph_set;
|
||||
OT::hb_closure_context_t c (face, glyphs, &done_lookups_glyph_count, &done_lookups_glyph_set);
|
||||
const GSUB& gsub = *face->table.GSUB->table;
|
||||
|
||||
@@ -1551,13 +1548,10 @@ hb_ot_layout_lookups_substitute_closure (hb_face_t *face,
|
||||
}
|
||||
} while (iteration_count++ <= HB_CLOSURE_MAX_STAGES &&
|
||||
glyphs_length != glyphs->get_population ());
|
||||
|
||||
for (auto _ : done_lookups_glyph_set.iter ())
|
||||
hb_set_destroy (_.second);
|
||||
}
|
||||
|
||||
/*
|
||||
* OT::GPOS
|
||||
* GPOS
|
||||
*/
|
||||
|
||||
|
||||
@@ -1588,7 +1582,7 @@ hb_ot_layout_has_positioning (hb_face_t *face)
|
||||
void
|
||||
hb_ot_layout_position_start (hb_font_t *font, hb_buffer_t *buffer)
|
||||
{
|
||||
OT::GPOS::position_start (font, buffer);
|
||||
GPOS::position_start (font, buffer);
|
||||
}
|
||||
|
||||
|
||||
@@ -1603,7 +1597,7 @@ hb_ot_layout_position_start (hb_font_t *font, hb_buffer_t *buffer)
|
||||
void
|
||||
hb_ot_layout_position_finish_advances (hb_font_t *font, hb_buffer_t *buffer)
|
||||
{
|
||||
OT::GPOS::position_finish_advances (font, buffer);
|
||||
GPOS::position_finish_advances (font, buffer);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1617,7 +1611,7 @@ hb_ot_layout_position_finish_advances (hb_font_t *font, hb_buffer_t *buffer)
|
||||
void
|
||||
hb_ot_layout_position_finish_offsets (hb_font_t *font, hb_buffer_t *buffer)
|
||||
{
|
||||
OT::GPOS::position_finish_offsets (font, buffer);
|
||||
GPOS::position_finish_offsets (font, buffer);
|
||||
}
|
||||
|
||||
|
||||
@@ -1652,7 +1646,7 @@ hb_ot_layout_get_size_params (hb_face_t *face,
|
||||
unsigned int *range_start, /* OUT. May be NULL */
|
||||
unsigned int *range_end /* OUT. May be NULL */)
|
||||
{
|
||||
const OT::GPOS &gpos = *face->table.GPOS->table;
|
||||
const GPOS &gpos = *face->table.GPOS->table;
|
||||
const hb_tag_t tag = HB_TAG ('s','i','z','e');
|
||||
|
||||
unsigned int num_features = gpos.get_feature_count ();
|
||||
@@ -1803,7 +1797,7 @@ hb_ot_layout_feature_get_characters (hb_face_t *face,
|
||||
struct GSUBProxy
|
||||
{
|
||||
static constexpr unsigned table_index = 0u;
|
||||
static constexpr bool inplace = false;
|
||||
static constexpr bool always_inplace = false;
|
||||
typedef OT::SubstLookup Lookup;
|
||||
|
||||
GSUBProxy (hb_face_t *face) :
|
||||
@@ -1817,14 +1811,14 @@ struct GSUBProxy
|
||||
struct GPOSProxy
|
||||
{
|
||||
static constexpr unsigned table_index = 1u;
|
||||
static constexpr bool inplace = true;
|
||||
static constexpr bool always_inplace = true;
|
||||
typedef OT::PosLookup Lookup;
|
||||
|
||||
GPOSProxy (hb_face_t *face) :
|
||||
table (*face->table.GPOS->table),
|
||||
accels (face->table.GPOS->accels) {}
|
||||
|
||||
const OT::GPOS &table;
|
||||
const GPOS &table;
|
||||
const OT::hb_ot_layout_lookup_accelerator_t *accels;
|
||||
};
|
||||
|
||||
@@ -1833,6 +1827,8 @@ static inline bool
|
||||
apply_forward (OT::hb_ot_apply_context_t *c,
|
||||
const OT::hb_ot_layout_lookup_accelerator_t &accel)
|
||||
{
|
||||
bool use_cache = accel.cache_enter (c);
|
||||
|
||||
bool ret = false;
|
||||
hb_buffer_t *buffer = c->buffer;
|
||||
while (buffer->idx < buffer->len && buffer->successful)
|
||||
@@ -1842,7 +1838,7 @@ apply_forward (OT::hb_ot_apply_context_t *c,
|
||||
(buffer->cur().mask & c->lookup_mask) &&
|
||||
c->check_glyph_property (&buffer->cur(), c->lookup_props))
|
||||
{
|
||||
applied = accel.apply (c);
|
||||
applied = accel.apply (c, use_cache);
|
||||
}
|
||||
|
||||
if (applied)
|
||||
@@ -1850,6 +1846,10 @@ apply_forward (OT::hb_ot_apply_context_t *c,
|
||||
else
|
||||
(void) buffer->next_glyph ();
|
||||
}
|
||||
|
||||
if (use_cache)
|
||||
accel.cache_leave (c);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1864,7 +1864,7 @@ apply_backward (OT::hb_ot_apply_context_t *c,
|
||||
if (accel.may_have (buffer->cur().codepoint) &&
|
||||
(buffer->cur().mask & c->lookup_mask) &&
|
||||
c->check_glyph_property (&buffer->cur(), c->lookup_props))
|
||||
ret |= accel.apply (c);
|
||||
ret |= accel.apply (c, false);
|
||||
|
||||
/* The reverse lookup doesn't "advance" cursor (for good reason). */
|
||||
buffer->idx--;
|
||||
@@ -1890,13 +1890,13 @@ apply_string (OT::hb_ot_apply_context_t *c,
|
||||
if (likely (!lookup.is_reverse ()))
|
||||
{
|
||||
/* in/out forward substitution/positioning */
|
||||
if (!Proxy::inplace)
|
||||
if (!Proxy::always_inplace)
|
||||
buffer->clear_output ();
|
||||
|
||||
buffer->idx = 0;
|
||||
apply_forward (c, accel);
|
||||
|
||||
if (!Proxy::inplace)
|
||||
if (!Proxy::always_inplace)
|
||||
buffer->sync ();
|
||||
}
|
||||
else
|
||||
@@ -1917,7 +1917,7 @@ inline void hb_ot_map_t::apply (const Proxy &proxy,
|
||||
const unsigned int table_index = proxy.table_index;
|
||||
unsigned int i = 0;
|
||||
OT::hb_ot_apply_context_t c (table_index, font, buffer);
|
||||
c.set_recurse_func (Proxy::Lookup::apply_recurse_func);
|
||||
c.set_recurse_func (Proxy::Lookup::template dispatch_recurse_func<OT::hb_ot_apply_context_t>);
|
||||
|
||||
for (unsigned int stage_index = 0; stage_index < stages[table_index].length; stage_index++)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user