src/hb-face.cc | 5 +++-- src/hb-open-file.hh | 21 ++++++++++++++------- 2 files changed, 17 insertions(+), 9 deletions(-)
New commits: commit 9479ffefbfa3ea4ee39747e34177d26ab1ebbec9 Author: Behdad Esfahbod <[email protected]> Date: Tue Sep 11 16:41:26 2018 +0200 [dfont] Re-enable and fix offset handling Fixes https://github.com/harfbuzz/harfbuzz/pull/1085 diff --git a/src/hb-face.cc b/src/hb-face.cc index 92c34152..922fd8fd 100644 --- a/src/hb-face.cc +++ b/src/hb-face.cc @@ -163,11 +163,12 @@ _hb_face_for_data_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void return hb_blob_reference (data->blob); const OT::OpenTypeFontFile &ot_file = *data->blob->as<OT::OpenTypeFontFile> (); - const OT::OpenTypeFontFace &ot_face = ot_file.get_face (data->index); + unsigned int base_offset; + const OT::OpenTypeFontFace &ot_face = ot_file.get_face (data->index, &base_offset); const OT::OpenTypeTable &table = ot_face.get_table_by_tag (tag); - hb_blob_t *blob = hb_blob_create_sub_blob (data->blob, table.offset, table.length); + hb_blob_t *blob = hb_blob_create_sub_blob (data->blob, base_offset + table.offset, table.length); return blob; } diff --git a/src/hb-open-file.hh b/src/hb-open-file.hh index b1732057..608de0a9 100644 --- a/src/hb-open-file.hh +++ b/src/hb-open-file.hh @@ -428,14 +428,19 @@ struct ResourceForkHeader return StructAtOffset<LArrayOf<HBUINT8> > (this, offset); } - inline const OpenTypeFontFace& get_face (unsigned int idx) const + inline const OpenTypeFontFace& get_face (unsigned int idx, unsigned int *base_offset = nullptr) const { const ResourceMap &resource_map = this+map; for (unsigned int i = 0; i < resource_map.get_types_count (); ++i) { const ResourceTypeItem& type = resource_map.get_type (i); if (type.is_sfnt () && idx < type.get_resource_count ()) - return (OpenTypeFontFace&) get_data (type, idx).arrayZ; + { + const OpenTypeFontFace &face = (OpenTypeFontFace&) get_data (type, idx).arrayZ; + if (base_offset) + *base_offset = (const char *) &face - (const char *) this; + return face; + } } return Null (OpenTypeFontFace); } @@ -502,12 +507,14 @@ struct OpenTypeFontFile case Typ1Tag: case TrueTypeTag: return 1; case TTCTag: return u.ttcHeader.get_face_count (); -// case DFontTag: return u.rfHeader.get_face_count (); + case DFontTag: return u.rfHeader.get_face_count (); default: return 0; } } - inline const OpenTypeFontFace& get_face (unsigned int i) const + inline const OpenTypeFontFace& get_face (unsigned int i, unsigned int *base_offset = nullptr) const { + if (base_offset) + *base_offset = 0; switch (u.tag) { /* Note: for non-collection SFNT data we ignore index. This is because * Apple dfont container is a container of SFNT's. So each SFNT is a @@ -517,7 +524,7 @@ struct OpenTypeFontFile case Typ1Tag: case TrueTypeTag: return u.fontFace; case TTCTag: return u.ttcHeader.get_face (i); -// case DFontTag: return u.rfHeader.get_face (i); + case DFontTag: return u.rfHeader.get_face (i, base_offset); default: return Null(OpenTypeFontFace); } } @@ -544,7 +551,7 @@ struct OpenTypeFontFile case Typ1Tag: case TrueTypeTag: return_trace (u.fontFace.sanitize (c)); case TTCTag: return_trace (u.ttcHeader.sanitize (c)); -// case DFontTag: return_trace (u.rfHeader.sanitize (c)); + case DFontTag: return_trace (u.rfHeader.sanitize (c)); default: return_trace (true); } } commit a1814e2bec3a43b9eeb4d50a67daae3fc52fd0a5 Author: Behdad Esfahbod <[email protected]> Date: Tue Sep 11 14:45:23 2018 +0200 Whitespace diff --git a/src/hb-open-file.hh b/src/hb-open-file.hh index d3b74860..b1732057 100644 --- a/src/hb-open-file.hh +++ b/src/hb-open-file.hh @@ -485,7 +485,7 @@ struct OpenTypeFontFile { enum { CFFTag = HB_TAG ('O','T','T','O'), /* OpenType with Postscript outlines */ - TrueTypeTag = HB_TAG ( 0 , 1 , 0 , 0 ), /* OpenType with TrueType outlines */ + TrueTypeTag = HB_TAG ( 0 , 1 , 0 , 0 ), /* OpenType with TrueType outlines */ TTCTag = HB_TAG ('t','t','c','f'), /* TrueType Collection */ DFontTag = HB_TAG ( 0 , 0 , 1 , 0 ), /* DFont Mac Resource Fork */ TrueTag = HB_TAG ('t','r','u','e'), /* Obsolete Apple TrueType */ _______________________________________________ HarfBuzz mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/harfbuzz
