From 122a2897e4782c5e0a39ec7bb0eedb2e7d568913 Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Sun, 5 Jul 2020 22:45:11 +0430 Subject: [PATCH] [aat] Remove lcar support Very low use, only two distinct font files, Apple Chancery.ttf and Hoefler Text.ttc have it so it really doesn't worth the size addition and so, but one may argue that whole ligature caret is low use but guess we better to encourage GDEF one anyway. --- src/Makefile.sources | 1 - src/hb-aat-layout-lcar-table.hh | 174 ----------------------------- src/hb-ot-face-table-list.hh | 1 - src/hb-ot-layout.cc | 18 +-- src/meson.build | 1 - test/api/fonts/lcar.ttf | Bin 808 -> 0 bytes test/api/test-ot-ligature-carets.c | 75 ------------- 7 files changed, 1 insertion(+), 269 deletions(-) delete mode 100644 src/hb-aat-layout-lcar-table.hh delete mode 100644 test/api/fonts/lcar.ttf diff --git a/src/Makefile.sources b/src/Makefile.sources index c3ec7e83b..4ad11e2bc 100644 --- a/src/Makefile.sources +++ b/src/Makefile.sources @@ -7,7 +7,6 @@ HB_BASE_sources = \ hb-aat-layout-feat-table.hh \ hb-aat-layout-just-table.hh \ hb-aat-layout-kerx-table.hh \ - hb-aat-layout-lcar-table.hh \ hb-aat-layout-morx-table.hh \ hb-aat-layout-opbd-table.hh \ hb-aat-layout-trak-table.hh \ diff --git a/src/hb-aat-layout-lcar-table.hh b/src/hb-aat-layout-lcar-table.hh deleted file mode 100644 index 25458a1a0..000000000 --- a/src/hb-aat-layout-lcar-table.hh +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright © 2018 Ebrahim Byagowi - * - * This is part of HarfBuzz, a text shaping library. - * - * Permission is hereby granted, without written agreement and without - * license or royalty fees, to use, copy, modify, and distribute this - * software and its documentation for any purpose, provided that the - * above copyright notice and the following two paragraphs appear in - * all copies of this software. - * - * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR - * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES - * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN - * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS - * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO - * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - */ -#ifndef HB_AAT_LAYOUT_LCAR_TABLE_HH -#define HB_AAT_LAYOUT_LCAR_TABLE_HH - -#include "hb-open-type.hh" -#include "hb-aat-layout-common.hh" - -/* - * lcar -- Ligature caret - * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6lcar.html - */ -#define HB_AAT_TAG_lcar HB_TAG('l','c','a','r') - - -namespace AAT { - -typedef ArrayOf LigCaretClassEntry; - -struct lcarFormat0 -{ - unsigned int get_lig_carets (hb_font_t *font, - hb_direction_t direction, - hb_codepoint_t glyph, - unsigned int start_offset, - unsigned int *caret_count /* IN/OUT */, - hb_position_t *caret_array /* OUT */, - const void *base) const - { - const OffsetTo* entry_offset = lookupTable.get_value (glyph, - font->face->get_num_glyphs ()); - const LigCaretClassEntry& array = entry_offset ? base+*entry_offset : Null (LigCaretClassEntry); - if (caret_count) - { - + array.sub_array (start_offset, caret_count) - | hb_map ([&] (int v) { return font->em_scale_dir (v, direction); }) - | hb_sink (hb_array (caret_array, *caret_count)) - ; - } - return array.len; - } - - bool sanitize (hb_sanitize_context_t *c, const void *base) const - { - TRACE_SANITIZE (this); - return_trace (likely (c->check_struct (this) && lookupTable.sanitize (c, base))); - } - - protected: - Lookup> - lookupTable; /* data Lookup table associating glyphs */ - public: - DEFINE_SIZE_MIN (2); -}; - -struct lcarFormat1 -{ - unsigned int get_lig_carets (hb_font_t *font, - hb_direction_t direction, - hb_codepoint_t glyph, - unsigned int start_offset, - unsigned int *caret_count /* IN/OUT */, - hb_position_t *caret_array /* OUT */, - const void *base) const - { - const OffsetTo* entry_offset = lookupTable.get_value (glyph, - font->face->get_num_glyphs ()); - const LigCaretClassEntry& array = entry_offset ? base+*entry_offset : Null (LigCaretClassEntry); - if (caret_count) - { - + array.sub_array (start_offset, caret_count) - | hb_map ([&] (unsigned int point_index) - { - hb_position_t x = 0, y = 0; - font->get_glyph_contour_point_for_origin (glyph, point_index, direction, &x, &y); - return HB_DIRECTION_IS_HORIZONTAL (direction) ? x : y; - }) - | hb_sink (hb_array (caret_array, *caret_count)) - ; - } - return array.len; - } - - bool sanitize (hb_sanitize_context_t *c, const void *base) const - { - TRACE_SANITIZE (this); - return_trace (likely (c->check_struct (this) && lookupTable.sanitize (c, base))); - } - - protected: - Lookup> - lookupTable; /* data Lookup table associating glyphs */ - public: - DEFINE_SIZE_MIN (2); -}; - -struct lcar -{ - static constexpr hb_tag_t tableTag = HB_AAT_TAG_lcar; - - bool has_data () const { return version.major; } - - unsigned int get_lig_carets (hb_font_t *font, - hb_direction_t direction, - hb_codepoint_t glyph, - unsigned int start_offset, - unsigned int *caret_count /* IN/OUT */, - hb_position_t *caret_array /* OUT */) const - { - if (!has_data ()) - { - if (caret_count) - *caret_count = 0; - return 0; - } - - switch (format) - { - case 0: return u.format0.get_lig_carets (font, direction, glyph, start_offset, - caret_count, caret_array, this); - case 1: return u.format1.get_lig_carets (font, direction, glyph, start_offset, - caret_count, caret_array, this); - default:if (caret_count) *caret_count = 0; return 0; - } - } - - bool sanitize (hb_sanitize_context_t *c) const - { - TRACE_SANITIZE (this); - if (unlikely (!c->check_struct (this) || version.major != 1)) - return_trace (false); - - switch (format) { - case 0: return_trace (u.format0.sanitize (c, this)); - case 1: return_trace (u.format1.sanitize (c, this)); - default:return_trace (true); - } - } - - protected: - FixedVersion<>version; /* Version number of the ligature caret table */ - HBUINT16 format; /* Format of the ligature caret table. */ - union { - lcarFormat0 format0; - lcarFormat0 format1; - } u; - public: - DEFINE_SIZE_MIN (8); -}; - -} /* namespace AAT */ - -#endif /* HB_AAT_LAYOUT_LCAR_TABLE_HH */ diff --git a/src/hb-ot-face-table-list.hh b/src/hb-ot-face-table-list.hh index 5a2a9f1ad..367e143fd 100644 --- a/src/hb-ot-face-table-list.hh +++ b/src/hb-ot-face-table-list.hh @@ -113,7 +113,6 @@ HB_OT_TABLE (AAT, mort) HB_OT_TABLE (AAT, kerx) HB_OT_TABLE (AAT, ankr) HB_OT_TABLE (AAT, trak) -HB_OT_TABLE (AAT, lcar) HB_OT_TABLE (AAT, ltag) HB_OT_TABLE (AAT, feat) // HB_OT_TABLE (AAT, opbd) diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index 905261976..46408bb9d 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc @@ -51,9 +51,7 @@ #include "hb-ot-name-table.hh" #include "hb-ot-os2-table.hh" -#include "hb-aat-layout-lcar-table.hh" #include "hb-aat-layout-morx-table.hh" - #include "hb-aat-layout-opbd-table.hh" // Just so we compile it; unused otherwise. /** @@ -368,21 +366,7 @@ hb_ot_layout_get_ligature_carets (hb_font_t *font, unsigned int *caret_count /* IN/OUT */, hb_position_t *caret_array /* OUT */) { - unsigned int result_caret_count = caret_count ? *caret_count : 0; - unsigned int result = font->face->table.GDEF->table->get_lig_carets (font, direction, glyph, start_offset, &result_caret_count, caret_array); - if (result) - { - if (caret_count) *caret_count = result_caret_count; - } - else - { -#ifndef HB_NO_AAT - result = font->face->table.lcar->get_lig_carets (font, direction, glyph, start_offset, caret_count, caret_array); -#else - if (caret_count) *caret_count = 0; -#endif - } - return result; + return font->face->table.GDEF->table->get_lig_carets (font, direction, glyph, start_offset, caret_count, caret_array); } #endif diff --git a/src/meson.build b/src/meson.build index 3af210be6..cb8c49b84 100644 --- a/src/meson.build +++ b/src/meson.build @@ -6,7 +6,6 @@ hb_base_sources = files( 'hb-aat-layout-feat-table.hh', 'hb-aat-layout-just-table.hh', 'hb-aat-layout-kerx-table.hh', - 'hb-aat-layout-lcar-table.hh', 'hb-aat-layout-morx-table.hh', 'hb-aat-layout-opbd-table.hh', 'hb-aat-layout-trak-table.hh', diff --git a/test/api/fonts/lcar.ttf b/test/api/fonts/lcar.ttf deleted file mode 100644 index 4d176636ec64de94fb6fce55c8c7469d6879c262..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 808 zcmdr~yG{Z@6g@lpki}<#Hd0V%M|=>qFeZZ0R*0`wS3oggfdD2HnD7A>78VvHSQu-5 zfR4ggSy)(5_zeb)v02Z|YNCl>;GNui&pC5v=I+fVcXpDn(SVMzDMCWI6%SA#T!_aumkTf-l66^r@U%t;MU$S3G|}exFY}WpQh?06jz= za-CWUnG_-3=~lsUv&L@thWFRWYo%hP>a`Ff?~_MV8*HWBxOVqPS6-o+J?f}Ww;M7) z*#pCX_hxqkN2EH0RB1e8cbV_(t`^mz#Oj08o*&5BM}|bO<^m>$w7%BI2VyFNn26g! zOSjBHAq>|3x+Sr`wt+ac^!Ho9^Qz`~o_w8Jf(vF(cJLpT8l2#iS=EP diff --git a/test/api/test-ot-ligature-carets.c b/test/api/test-ot-ligature-carets.c index 4a91643f6..8a8c671eb 100644 --- a/test/api/test-ot-ligature-carets.c +++ b/test/api/test-ot-ligature-carets.c @@ -27,80 +27,6 @@ #include -static void -test_ot_layout_get_ligature_carets_aat_lcar (void) -{ - hb_face_t *face = hb_test_open_font_file ("fonts/lcar.ttf"); - hb_font_t *font = hb_font_create (face); - hb_font_set_scale (font, hb_face_get_upem (face) * 2, hb_face_get_upem (face) * 4); - - hb_position_t caret_array[16]; - - /* a normal call */ - { - unsigned caret_count = 16; - g_assert_cmpuint (2, ==, hb_ot_layout_get_ligature_carets (font, HB_DIRECTION_LTR, - 98, 0, &caret_count, - caret_array)); - - g_assert_cmpuint (2, ==, caret_count); - g_assert_cmpuint (1130, ==, caret_array[0]); - g_assert_cmpuint (2344, ==, caret_array[1]); - } - - /* RTL, maybe needs to be tweaked however */ - { - unsigned caret_count = 16; - g_assert_cmpuint (2, ==, hb_ot_layout_get_ligature_carets (font, HB_DIRECTION_RTL, - 98, 0, &caret_count, - caret_array)); - - g_assert_cmpuint (2, ==, caret_count); - g_assert_cmpuint (1130, ==, caret_array[0]); - g_assert_cmpuint (2344, ==, caret_array[1]); - } - - /* bottom to top call, bigger caret positions as the specified scaling */ - { - unsigned caret_count = 16; - g_assert_cmpuint (2, ==, hb_ot_layout_get_ligature_carets (font, HB_DIRECTION_BTT, - 98, 0, &caret_count, - caret_array)); - - g_assert_cmpuint (2, ==, caret_count); - g_assert_cmpuint (2260, ==, caret_array[0]); - g_assert_cmpuint (4688, ==, caret_array[1]); - } - - /* the same glyph as above but with offset */ - { - caret_array[1] = 123; - - unsigned caret_count = 16; - g_assert_cmpuint (2, ==, hb_ot_layout_get_ligature_carets (font, HB_DIRECTION_BTT, - 98, 1, &caret_count, - caret_array)); - - g_assert_cmpuint (1, ==, caret_count); - g_assert_cmpuint (4688, ==, caret_array[0]); - - g_assert_cmpuint (123, ==, caret_array[1]); - } - - /* empty carets */ - { - unsigned caret_count = 16; - g_assert_cmpuint (0, ==, hb_ot_layout_get_ligature_carets (font, HB_DIRECTION_LTR, - 97, 0, &caret_count, - caret_array)); - - g_assert_cmpuint (0, ==, caret_count); - } - - hb_font_destroy (font); - hb_face_destroy (face); -} - static void test_ot_layout_get_ligature_carets_ot_gsub (void) { @@ -241,7 +167,6 @@ main (int argc, char **argv) { g_test_init (&argc, &argv, NULL); - hb_test_add (test_ot_layout_get_ligature_carets_aat_lcar); hb_test_add (test_ot_layout_get_ligature_carets_ot_gsub); hb_test_add (test_ot_layout_get_ligature_carets_empty);