[repacker] support extension promotion in 24bit GSUB/GPOS.
This commit is contained in:
parent
b37374b04f
commit
11709f0fbe
|
@ -77,7 +77,6 @@ struct Lookup : public OT::Lookup
|
||||||
bool make_extension (make_extension_context_t& c,
|
bool make_extension (make_extension_context_t& c,
|
||||||
unsigned this_index)
|
unsigned this_index)
|
||||||
{
|
{
|
||||||
// TODO: use a context_t?
|
|
||||||
unsigned type = lookupType;
|
unsigned type = lookupType;
|
||||||
unsigned ext_type = extension_type (c.table_tag);
|
unsigned ext_type = extension_type (c.table_tag);
|
||||||
if (!ext_type || is_extension (c.table_tag))
|
if (!ext_type || is_extension (c.table_tag))
|
||||||
|
@ -113,7 +112,6 @@ struct Lookup : public OT::Lookup
|
||||||
unsigned start = c.buffer.length;
|
unsigned start = c.buffer.length;
|
||||||
unsigned end = start + extension_size;
|
unsigned end = start + extension_size;
|
||||||
if (!c.buffer.resize (c.buffer.length + extension_size))
|
if (!c.buffer.resize (c.buffer.length + extension_size))
|
||||||
// TODO: resizing potentially invalidates existing head/tail pointers.
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
OT::ExtensionFormat1<OT::Layout::GSUB_impl::ExtensionSubst>* extension =
|
OT::ExtensionFormat1<OT::Layout::GSUB_impl::ExtensionSubst>* extension =
|
||||||
|
@ -209,12 +207,23 @@ struct GSTAR : public OT::GSUBGPOS
|
||||||
void find_lookups (graph_t& graph,
|
void find_lookups (graph_t& graph,
|
||||||
hb_hashmap_t<unsigned, Lookup*>& lookups /* OUT */)
|
hb_hashmap_t<unsigned, Lookup*>& lookups /* OUT */)
|
||||||
{
|
{
|
||||||
// TODO: template on types, based on gstar version.
|
switch (u.version.major) {
|
||||||
|
case 1: find_lookups<SmallTypes> (graph, lookups); break;
|
||||||
|
#ifndef HB_NO_BORING_EXPANSION
|
||||||
|
case 2: find_lookups<MediumTypes> (graph, lookups); break;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename Types>
|
||||||
|
void find_lookups (graph_t& graph,
|
||||||
|
hb_hashmap_t<unsigned, Lookup*>& lookups /* OUT */)
|
||||||
|
{
|
||||||
unsigned lookup_list_idx = graph.index_for_offset (graph.root_idx (),
|
unsigned lookup_list_idx = graph.index_for_offset (graph.root_idx (),
|
||||||
get_lookup_list_field_offset());
|
get_lookup_list_field_offset());
|
||||||
|
|
||||||
const LookupList<SmallTypes>* lookupList =
|
const LookupList<Types>* lookupList =
|
||||||
(const LookupList<SmallTypes>*) graph.object (lookup_list_idx).head;
|
(const LookupList<Types>*) graph.object (lookup_list_idx).head;
|
||||||
if (!lookupList->sanitize (graph.vertices_[lookup_list_idx]))
|
if (!lookupList->sanitize (graph.vertices_[lookup_list_idx]))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -193,7 +193,7 @@ hb_resolve_overflows (const T& packed,
|
||||||
if (ext_context.in_error ())
|
if (ext_context.in_error ())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
if (1 && !_promote_extensions_if_needed (ext_context)) {
|
if (0 && !_promote_extensions_if_needed (ext_context)) {
|
||||||
DEBUG_MSG (SUBSET_REPACK, nullptr, "Extensions promotion failed.");
|
DEBUG_MSG (SUBSET_REPACK, nullptr, "Extensions promotion failed.");
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue