[HB] Check for GDEF/GSUB/GPOS versions
This commit is contained in:
parent
a21b5062cc
commit
212aba6189
@ -195,8 +195,7 @@ struct GDEF
|
|||||||
ComponentGlyph = 4,
|
ComponentGlyph = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
STATIC_DEFINE_GET_FOR_DATA (GDEF);
|
STATIC_DEFINE_GET_FOR_DATA_CHECK_MAJOR_VERSION (GDEF, 1);
|
||||||
/* XXX check version here? */
|
|
||||||
|
|
||||||
inline bool has_glyph_classes () const { return glyphClassDef != 0; }
|
inline bool has_glyph_classes () const { return glyphClassDef != 0; }
|
||||||
inline hb_ot_layout_class_t get_glyph_class (hb_codepoint_t glyph) const { return (this+glyphClassDef).get_class (glyph); }
|
inline hb_ot_layout_class_t get_glyph_class (hb_codepoint_t glyph) const { return (this+glyphClassDef).get_class (glyph); }
|
||||||
|
@ -1313,8 +1313,7 @@ struct GPOS : GSUBGPOS
|
|||||||
{
|
{
|
||||||
static const hb_tag_t Tag = HB_TAG ('G','P','O','S');
|
static const hb_tag_t Tag = HB_TAG ('G','P','O','S');
|
||||||
|
|
||||||
STATIC_DEFINE_GET_FOR_DATA (GPOS);
|
STATIC_DEFINE_GET_FOR_DATA_CHECK_MAJOR_VERSION (GPOS, 1);
|
||||||
/* XXX check version here? */
|
|
||||||
|
|
||||||
inline const PosLookup& get_lookup (unsigned int i) const
|
inline const PosLookup& get_lookup (unsigned int i) const
|
||||||
{
|
{
|
||||||
|
@ -730,8 +730,7 @@ struct GSUB : GSUBGPOS
|
|||||||
{
|
{
|
||||||
static const hb_tag_t Tag = HB_TAG ('G','S','U','B');
|
static const hb_tag_t Tag = HB_TAG ('G','S','U','B');
|
||||||
|
|
||||||
STATIC_DEFINE_GET_FOR_DATA (GSUB);
|
STATIC_DEFINE_GET_FOR_DATA_CHECK_MAJOR_VERSION (GSUB, 1);
|
||||||
/* XXX check version here? */
|
|
||||||
|
|
||||||
inline const SubstLookup& get_lookup (unsigned int i) const
|
inline const SubstLookup& get_lookup (unsigned int i) const
|
||||||
{
|
{
|
||||||
|
@ -747,8 +747,7 @@ struct GSUBGPOS
|
|||||||
static const hb_tag_t GSUBTag = HB_TAG ('G','S','U','B');
|
static const hb_tag_t GSUBTag = HB_TAG ('G','S','U','B');
|
||||||
static const hb_tag_t GPOSTag = HB_TAG ('G','P','O','S');
|
static const hb_tag_t GPOSTag = HB_TAG ('G','P','O','S');
|
||||||
|
|
||||||
STATIC_DEFINE_GET_FOR_DATA (GSUBGPOS);
|
STATIC_DEFINE_GET_FOR_DATA_CHECK_MAJOR_VERSION (GSUBGPOS, 1);
|
||||||
/* XXX check version here? */
|
|
||||||
|
|
||||||
DEFINE_TAG_LIST_INTERFACE (Script, script ); /* get_script_count (), get_script (i), get_script_tag (i) */
|
DEFINE_TAG_LIST_INTERFACE (Script, script ); /* get_script_count (), get_script (i), get_script_tag (i) */
|
||||||
DEFINE_TAG_LIST_INTERFACE (Feature, feature); /* get_feature_count(), get_feature(i), get_feature_tag(i) */
|
DEFINE_TAG_LIST_INTERFACE (Feature, feature); /* get_feature_count(), get_feature(i), get_feature_tag(i) */
|
||||||
@ -758,7 +757,7 @@ struct GSUBGPOS
|
|||||||
DEFINE_TAG_FIND_INTERFACE (Script, script ); /* find_script_index (), get_script_by_tag (tag) */
|
DEFINE_TAG_FIND_INTERFACE (Script, script ); /* find_script_index (), get_script_by_tag (tag) */
|
||||||
DEFINE_TAG_FIND_INTERFACE (Feature, feature); /* find_feature_index(), get_feature_by_tag(tag) */
|
DEFINE_TAG_FIND_INTERFACE (Feature, feature); /* find_feature_index(), get_feature_by_tag(tag) */
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
Fixed_Version version; /* Version of the GSUB/GPOS table--initially set
|
Fixed_Version version; /* Version of the GSUB/GPOS table--initially set
|
||||||
* to 0x00010000 */
|
* to 0x00010000 */
|
||||||
OffsetTo<ScriptList>
|
OffsetTo<ScriptList>
|
||||||
|
@ -172,7 +172,16 @@ struct Null <Type> \
|
|||||||
{ \
|
{ \
|
||||||
if (HB_UNLIKELY (data == NULL)) return Null(Type); \
|
if (HB_UNLIKELY (data == NULL)) return Null(Type); \
|
||||||
return (const Type&)*data; \
|
return (const Type&)*data; \
|
||||||
} \
|
}
|
||||||
|
/* Like get_for_data(), but checks major version first. */
|
||||||
|
#define STATIC_DEFINE_GET_FOR_DATA_CHECK_MAJOR_VERSION(Type, Major) \
|
||||||
|
static inline const Type& get_for_data (const char *data) \
|
||||||
|
{ \
|
||||||
|
if (HB_UNLIKELY (data == NULL)) return Null(Type); \
|
||||||
|
const Type& t = (const Type&)*data; \
|
||||||
|
if (HB_UNLIKELY (t.version.major () != Major)) return Null(Type); \
|
||||||
|
return t; \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user