[CBDT] Implement IndexSubtableFormat3
This commit is contained in:
parent
9eda74c92c
commit
a141d1da9b
|
@ -100,7 +100,8 @@ struct IndexSubtableHeader
|
||||||
DEFINE_SIZE_STATIC(8);
|
DEFINE_SIZE_STATIC(8);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IndexSubtableFormat1
|
template <typename OffsetType>
|
||||||
|
struct IndexSubtableFormat1Or3
|
||||||
{
|
{
|
||||||
inline bool sanitize (hb_sanitize_context_t *c, unsigned int glyph_count) const
|
inline bool sanitize (hb_sanitize_context_t *c, unsigned int glyph_count) const
|
||||||
{
|
{
|
||||||
|
@ -122,11 +123,14 @@ struct IndexSubtableFormat1
|
||||||
}
|
}
|
||||||
|
|
||||||
IndexSubtableHeader header;
|
IndexSubtableHeader header;
|
||||||
Offset<ULONG> offsetArrayZ[VAR];
|
Offset<OffsetType> offsetArrayZ[VAR];
|
||||||
|
|
||||||
DEFINE_SIZE_ARRAY(8, offsetArrayZ);
|
DEFINE_SIZE_ARRAY(8, offsetArrayZ);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct IndexSubtableFormat1 : IndexSubtableFormat1Or3<ULONG> {};
|
||||||
|
struct IndexSubtableFormat3 : IndexSubtableFormat1Or3<USHORT> {};
|
||||||
|
|
||||||
struct IndexSubtable
|
struct IndexSubtable
|
||||||
{
|
{
|
||||||
inline bool sanitize (hb_sanitize_context_t *c, unsigned int glyph_count) const
|
inline bool sanitize (hb_sanitize_context_t *c, unsigned int glyph_count) const
|
||||||
|
@ -135,6 +139,7 @@ struct IndexSubtable
|
||||||
if (!u.header.sanitize (c)) return_trace (false);
|
if (!u.header.sanitize (c)) return_trace (false);
|
||||||
switch (u.header.indexFormat) {
|
switch (u.header.indexFormat) {
|
||||||
case 1: return_trace (u.format1.sanitize (c, glyph_count));
|
case 1: return_trace (u.format1.sanitize (c, glyph_count));
|
||||||
|
case 3: return_trace (u.format3.sanitize (c, glyph_count));
|
||||||
default:return_trace (true);
|
default:return_trace (true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -156,6 +161,7 @@ struct IndexSubtable
|
||||||
*format = u.header.imageFormat;
|
*format = u.header.imageFormat;
|
||||||
switch (u.header.indexFormat) {
|
switch (u.header.indexFormat) {
|
||||||
case 1: return u.format1.get_image_data (idx, offset, length);
|
case 1: return u.format1.get_image_data (idx, offset, length);
|
||||||
|
case 3: return u.format3.get_image_data (idx, offset, length);
|
||||||
default: return false;
|
default: return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -164,6 +170,7 @@ struct IndexSubtable
|
||||||
union {
|
union {
|
||||||
IndexSubtableHeader header;
|
IndexSubtableHeader header;
|
||||||
IndexSubtableFormat1 format1;
|
IndexSubtableFormat1 format1;
|
||||||
|
IndexSubtableFormat3 format3;
|
||||||
} u;
|
} u;
|
||||||
public:
|
public:
|
||||||
DEFINE_SIZE_UNION (8, header);
|
DEFINE_SIZE_UNION (8, header);
|
||||||
|
|
Loading…
Reference in New Issue