From 54b9ab704dbf62e2916f1d5276ffef2543bcc2a7 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sat, 20 Jul 2019 12:51:38 +0430 Subject: [PATCH 1/2] Fallback hhea's ascender/descender to OS2 --- src/hb-ot-metrics-internal.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/hb-ot-metrics-internal.cc b/src/hb-ot-metrics-internal.cc index 513053c1f..fb80ee8f4 100644 --- a/src/hb-ot-metrics-internal.cc +++ b/src/hb-ot-metrics-internal.cc @@ -60,14 +60,14 @@ hb_ot_metrics_get_position_internal (hb_face_t *face, (face->table.TABLE->has_data () && \ (position && (*position = face->table.TABLE->ATTR + GET_VAR), true)) case HB_OT_METRICS_HORIZONTAL_ASCENDER: - return (face->table.OS2->use_typo_metrics () && GET_METRIC (OS2, sTypoAscender)) || - GET_METRIC (hhea, ascender); + return (!face->table.OS2->use_typo_metrics () && GET_METRIC (hhea, ascender)) || + GET_METRIC (OS2, sTypoAscender); case HB_OT_METRICS_HORIZONTAL_DESCENDER: - return (face->table.OS2->use_typo_metrics () && GET_METRIC (OS2, sTypoDescender)) || - GET_METRIC (hhea, descender); + return (!face->table.OS2->use_typo_metrics () && GET_METRIC (hhea, descender)) || + GET_METRIC (OS2, sTypoDescender); case HB_OT_METRICS_HORIZONTAL_LINE_GAP: - return (face->table.OS2->use_typo_metrics () && GET_METRIC (OS2, sTypoLineGap)) || - GET_METRIC (hhea, lineGap); + return (!face->table.OS2->use_typo_metrics () && GET_METRIC (hhea, lineGap)) || + GET_METRIC (OS2, sTypoLineGap); case HB_OT_METRICS_HORIZONTAL_CLIPPING_ASCENT: return GET_METRIC (OS2, usWinAscent); case HB_OT_METRICS_HORIZONTAL_CLIPPING_DESCENT: return GET_METRIC (OS2, usWinDescent); case HB_OT_METRICS_VERTICAL_ASCENDER: return GET_METRIC (vhea, ascender); From 08b48e89d3c1bafe252badc7c65a9fc2f166a693 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sat, 20 Jul 2019 12:53:40 +0430 Subject: [PATCH 2/2] [os2] minor spacing tweaks --- src/hb-ot-os2-table.hh | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/hb-ot-os2-table.hh b/src/hb-ot-os2-table.hh index aa1e75dfc..67f21eb34 100644 --- a/src/hb-ot-os2-table.hh +++ b/src/hb-ot-os2-table.hh @@ -117,8 +117,8 @@ struct OS2 OBLIQUE = 1u<<9 }; - bool is_italic () const { return fsSelection & ITALIC; } - bool is_oblique () const { return fsSelection & OBLIQUE; } + bool is_italic () const { return fsSelection & ITALIC; } + bool is_oblique () const { return fsSelection & OBLIQUE; } bool use_typo_metrics () const { return fsSelection & USE_TYPO_METRICS; } enum width_class_t { @@ -196,13 +196,14 @@ struct OS2 } static void find_min_and_max_codepoint (const hb_set_t *codepoints, - uint16_t *min_cp, /* OUT */ - uint16_t *max_cp /* OUT */) + uint16_t *min_cp, /* OUT */ + uint16_t *max_cp /* OUT */) { *min_cp = codepoints->get_min (); *max_cp = codepoints->get_max (); } + /* https://github.com/Microsoft/Font-Validator/blob/520aaae/OTFontFileVal/val_OS2.cs#L644-L681 */ enum font_page_t { HEBREW_FONT_PAGE = 0xB100, // Hebrew Windows 3.1 font page SIMP_ARABIC_FONT_PAGE = 0xB200, // Simplified Arabic Windows 3.1 font page @@ -212,8 +213,6 @@ struct OS2 TRAD_FARSI_FONT_PAGE = 0xBB00, // Traditional Farsi Windows 3.1 font page THAI_FONT_PAGE = 0xDE00 // Thai Windows 3.1 font page }; - - // https://github.com/Microsoft/Font-Validator/blob/520aaae/OTFontFileVal/val_OS2.cs#L644-L681 font_page_t get_font_page () const { return (font_page_t) (version == 0 ? fsSelection & 0xFF00 : 0); }