[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.
This commit is contained in:
parent
a3b9b94b63
commit
122a2897e4
@ -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 \
|
||||
|
@ -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<HBINT16> 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<LigCaretClassEntry>* 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<OffsetTo<LigCaretClassEntry>>
|
||||
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<LigCaretClassEntry>* 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<OffsetTo<LigCaretClassEntry>>
|
||||
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 */
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
@ -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',
|
||||
|
Binary file not shown.
@ -27,80 +27,6 @@
|
||||
|
||||
#include <hb-ot.h>
|
||||
|
||||
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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user