Merge branch 'main' into main
This commit is contained in:
commit
892e309042
|
@ -49,7 +49,7 @@ struct Coverage
|
|||
HBUINT16 format; /* Format identifier */
|
||||
CoverageFormat1_3<SmallTypes> format1;
|
||||
CoverageFormat2_4<SmallTypes> format2;
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
CoverageFormat1_3<MediumTypes>format3;
|
||||
CoverageFormat2_4<MediumTypes>format4;
|
||||
#endif
|
||||
|
@ -65,7 +65,7 @@ struct Coverage
|
|||
{
|
||||
case 1: return_trace (u.format1.sanitize (c));
|
||||
case 2: return_trace (u.format2.sanitize (c));
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 3: return_trace (u.format3.sanitize (c));
|
||||
case 4: return_trace (u.format4.sanitize (c));
|
||||
#endif
|
||||
|
@ -87,7 +87,7 @@ struct Coverage
|
|||
switch (u.format) {
|
||||
case 1: return u.format1.get_coverage (glyph_id);
|
||||
case 2: return u.format2.get_coverage (glyph_id);
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 3: return u.format3.get_coverage (glyph_id);
|
||||
case 4: return u.format4.get_coverage (glyph_id);
|
||||
#endif
|
||||
|
@ -100,7 +100,7 @@ struct Coverage
|
|||
switch (u.format) {
|
||||
case 1: return u.format1.get_population ();
|
||||
case 2: return u.format2.get_population ();
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 3: return u.format3.get_population ();
|
||||
case 4: return u.format4.get_population ();
|
||||
#endif
|
||||
|
@ -127,7 +127,7 @@ struct Coverage
|
|||
}
|
||||
u.format = count <= num_ranges * 3 ? 1 : 2;
|
||||
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
if (count && last > 0xFFFFu)
|
||||
u.format += 2;
|
||||
#endif
|
||||
|
@ -136,7 +136,7 @@ struct Coverage
|
|||
{
|
||||
case 1: return_trace (u.format1.serialize (c, glyphs));
|
||||
case 2: return_trace (u.format2.serialize (c, glyphs));
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 3: return_trace (u.format3.serialize (c, glyphs));
|
||||
case 4: return_trace (u.format4.serialize (c, glyphs));
|
||||
#endif
|
||||
|
@ -166,7 +166,7 @@ struct Coverage
|
|||
{
|
||||
case 1: return u.format1.intersects (glyphs);
|
||||
case 2: return u.format2.intersects (glyphs);
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 3: return u.format3.intersects (glyphs);
|
||||
case 4: return u.format4.intersects (glyphs);
|
||||
#endif
|
||||
|
@ -179,7 +179,7 @@ struct Coverage
|
|||
{
|
||||
case 1: return u.format1.intersects_coverage (glyphs, index);
|
||||
case 2: return u.format2.intersects_coverage (glyphs, index);
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 3: return u.format3.intersects_coverage (glyphs, index);
|
||||
case 4: return u.format4.intersects_coverage (glyphs, index);
|
||||
#endif
|
||||
|
@ -196,7 +196,7 @@ struct Coverage
|
|||
{
|
||||
case 1: return u.format1.collect_coverage (glyphs);
|
||||
case 2: return u.format2.collect_coverage (glyphs);
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 3: return u.format3.collect_coverage (glyphs);
|
||||
case 4: return u.format4.collect_coverage (glyphs);
|
||||
#endif
|
||||
|
@ -212,7 +212,7 @@ struct Coverage
|
|||
{
|
||||
case 1: return u.format1.intersect_set (glyphs, intersect_glyphs);
|
||||
case 2: return u.format2.intersect_set (glyphs, intersect_glyphs);
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 3: return u.format3.intersect_set (glyphs, intersect_glyphs);
|
||||
case 4: return u.format4.intersect_set (glyphs, intersect_glyphs);
|
||||
#endif
|
||||
|
@ -231,7 +231,7 @@ struct Coverage
|
|||
{
|
||||
case 1: u.format1.init (c_.u.format1); return;
|
||||
case 2: u.format2.init (c_.u.format2); return;
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 3: u.format3.init (c_.u.format3); return;
|
||||
case 4: u.format4.init (c_.u.format4); return;
|
||||
#endif
|
||||
|
@ -244,7 +244,7 @@ struct Coverage
|
|||
{
|
||||
case 1: return u.format1.__more__ ();
|
||||
case 2: return u.format2.__more__ ();
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 3: return u.format3.__more__ ();
|
||||
case 4: return u.format4.__more__ ();
|
||||
#endif
|
||||
|
@ -257,7 +257,7 @@ struct Coverage
|
|||
{
|
||||
case 1: u.format1.__next__ (); break;
|
||||
case 2: u.format2.__next__ (); break;
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 3: u.format3.__next__ (); break;
|
||||
case 4: u.format4.__next__ (); break;
|
||||
#endif
|
||||
|
@ -273,7 +273,7 @@ struct Coverage
|
|||
{
|
||||
case 1: return u.format1.get_glyph ();
|
||||
case 2: return u.format2.get_glyph ();
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 3: return u.format3.get_glyph ();
|
||||
case 4: return u.format4.get_glyph ();
|
||||
#endif
|
||||
|
@ -287,7 +287,7 @@ struct Coverage
|
|||
{
|
||||
case 1: return u.format1 != o.u.format1;
|
||||
case 2: return u.format2 != o.u.format2;
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 3: return u.format3 != o.u.format3;
|
||||
case 4: return u.format4 != o.u.format4;
|
||||
#endif
|
||||
|
@ -302,7 +302,7 @@ struct Coverage
|
|||
{
|
||||
case 1: it.u.format1 = u.format1.__end__ (); break;
|
||||
case 2: it.u.format2 = u.format2.__end__ (); break;
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 3: it.u.format3 = u.format3.__end__ (); break;
|
||||
case 4: it.u.format4 = u.format4.__end__ (); break;
|
||||
#endif
|
||||
|
@ -314,7 +314,7 @@ struct Coverage
|
|||
private:
|
||||
unsigned int format;
|
||||
union {
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
CoverageFormat2_4<MediumTypes>::iter_t format4; /* Put this one first since it's larger; helps shut up compiler. */
|
||||
CoverageFormat1_3<MediumTypes>::iter_t format3;
|
||||
#endif
|
||||
|
|
|
@ -13,7 +13,7 @@ struct MarkBasePos
|
|||
union {
|
||||
HBUINT16 format; /* Format identifier */
|
||||
MarkBasePosFormat1_2<SmallTypes> format1;
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
MarkBasePosFormat1_2<MediumTypes> format2;
|
||||
#endif
|
||||
} u;
|
||||
|
@ -26,7 +26,7 @@ struct MarkBasePos
|
|||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||
switch (u.format) {
|
||||
case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
|
||||
#endif
|
||||
default:return_trace (c->default_return_value ());
|
||||
|
|
|
@ -13,7 +13,7 @@ struct MarkLigPos
|
|||
union {
|
||||
HBUINT16 format; /* Format identifier */
|
||||
MarkLigPosFormat1_2<SmallTypes> format1;
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
MarkLigPosFormat1_2<MediumTypes> format2;
|
||||
#endif
|
||||
} u;
|
||||
|
@ -26,7 +26,7 @@ struct MarkLigPos
|
|||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||
switch (u.format) {
|
||||
case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
|
||||
#endif
|
||||
default:return_trace (c->default_return_value ());
|
||||
|
|
|
@ -13,7 +13,7 @@ struct MarkMarkPos
|
|||
union {
|
||||
HBUINT16 format; /* Format identifier */
|
||||
MarkMarkPosFormat1_2<SmallTypes> format1;
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
MarkMarkPosFormat1_2<MediumTypes> format2;
|
||||
#endif
|
||||
} u;
|
||||
|
@ -26,7 +26,7 @@ struct MarkMarkPos
|
|||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||
switch (u.format) {
|
||||
case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
|
||||
#endif
|
||||
default:return_trace (c->default_return_value ());
|
||||
|
|
|
@ -15,7 +15,7 @@ struct PairPos
|
|||
HBUINT16 format; /* Format identifier */
|
||||
PairPosFormat1_3<SmallTypes> format1;
|
||||
PairPosFormat2_4<SmallTypes> format2;
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
PairPosFormat1_3<MediumTypes> format3;
|
||||
PairPosFormat2_4<MediumTypes> format4;
|
||||
#endif
|
||||
|
@ -30,7 +30,7 @@ struct PairPos
|
|||
switch (u.format) {
|
||||
case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
|
||||
case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
|
||||
case 4: return_trace (c->dispatch (u.format4, std::forward<Ts> (ds)...));
|
||||
#endif
|
||||
|
|
|
@ -14,7 +14,7 @@ struct AlternateSubst
|
|||
union {
|
||||
HBUINT16 format; /* Format identifier */
|
||||
AlternateSubstFormat1_2<SmallTypes> format1;
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
AlternateSubstFormat1_2<MediumTypes> format2;
|
||||
#endif
|
||||
} u;
|
||||
|
@ -27,7 +27,7 @@ struct AlternateSubst
|
|||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||
switch (u.format) {
|
||||
case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
|
||||
#endif
|
||||
default:return_trace (c->default_return_value ());
|
||||
|
|
|
@ -118,7 +118,7 @@ struct Ligature
|
|||
match_positions[i] += delta;
|
||||
if (i)
|
||||
*p++ = ',';
|
||||
snprintf (p, sizeof(buf), "%u", match_positions[i]);
|
||||
snprintf (p, sizeof(buf) - (p - buf), "%u", match_positions[i]);
|
||||
p += strlen(p);
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ struct LigatureSubst
|
|||
union {
|
||||
HBUINT16 format; /* Format identifier */
|
||||
LigatureSubstFormat1_2<SmallTypes> format1;
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
LigatureSubstFormat1_2<MediumTypes> format2;
|
||||
#endif
|
||||
} u;
|
||||
|
@ -27,7 +27,7 @@ struct LigatureSubst
|
|||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||
switch (u.format) {
|
||||
case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
|
||||
#endif
|
||||
default:return_trace (c->default_return_value ());
|
||||
|
|
|
@ -14,7 +14,7 @@ struct MultipleSubst
|
|||
union {
|
||||
HBUINT16 format; /* Format identifier */
|
||||
MultipleSubstFormat1_2<SmallTypes> format1;
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
MultipleSubstFormat1_2<MediumTypes> format2;
|
||||
#endif
|
||||
} u;
|
||||
|
@ -28,7 +28,7 @@ struct MultipleSubst
|
|||
if (unlikely (!c->may_dispatch (this, &u.format))) return_trace (c->no_dispatch_return_value ());
|
||||
switch (u.format) {
|
||||
case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
|
||||
#endif
|
||||
default:return_trace (c->default_return_value ());
|
||||
|
|
|
@ -117,7 +117,7 @@ struct Sequence
|
|||
{
|
||||
if (buf < p)
|
||||
*p++ = ',';
|
||||
snprintf (p, sizeof(buf), "%u", i);
|
||||
snprintf (p, sizeof(buf) - (p - buf), "%u", i);
|
||||
p += strlen(p);
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ struct SingleSubst
|
|||
HBUINT16 format; /* Format identifier */
|
||||
SingleSubstFormat1_3<SmallTypes> format1;
|
||||
SingleSubstFormat2_4<SmallTypes> format2;
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
SingleSubstFormat1_3<MediumTypes> format3;
|
||||
SingleSubstFormat2_4<MediumTypes> format4;
|
||||
#endif
|
||||
|
@ -32,7 +32,7 @@ struct SingleSubst
|
|||
switch (u.format) {
|
||||
case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
|
||||
case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
|
||||
case 4: return_trace (c->dispatch (u.format4, std::forward<Ts> (ds)...));
|
||||
#endif
|
||||
|
@ -55,7 +55,7 @@ struct SingleSubst
|
|||
format = 1;
|
||||
hb_codepoint_t mask = 0xFFFFu;
|
||||
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
if (+ glyphs
|
||||
| hb_map_retains_sorting (hb_first)
|
||||
| hb_filter ([] (hb_codepoint_t gid) { return gid > 0xFFFFu; }))
|
||||
|
@ -78,7 +78,7 @@ struct SingleSubst
|
|||
| hb_map_retains_sorting (hb_first),
|
||||
delta));
|
||||
case 2: return_trace (u.format2.serialize (c, glyphs));
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 3: return_trace (u.format3.serialize (c,
|
||||
+ glyphs
|
||||
| hb_map_retains_sorting (hb_first),
|
||||
|
|
|
@ -112,7 +112,7 @@ struct ClassDef : public OT::ClassDef
|
|||
{
|
||||
case 1: return ((ClassDefFormat1*)this)->sanitize (vertex);
|
||||
case 2: return ((ClassDefFormat2*)this)->sanitize (vertex);
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
// Not currently supported
|
||||
case 3:
|
||||
case 4:
|
||||
|
|
|
@ -136,7 +136,7 @@ struct Coverage : public OT::Layout::Common::Coverage
|
|||
{
|
||||
case 1: return ((CoverageFormat1*)this)->sanitize (vertex);
|
||||
case 2: return ((CoverageFormat2*)this)->sanitize (vertex);
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
// Not currently supported
|
||||
case 3:
|
||||
case 4:
|
||||
|
|
|
@ -355,7 +355,7 @@ struct GSTAR : public OT::GSUBGPOS
|
|||
{
|
||||
switch (u.version.major) {
|
||||
case 1: return u.version1.get_lookup_list_offset ();
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 2: return u.version2.get_lookup_list_offset ();
|
||||
#endif
|
||||
default: return 0;
|
||||
|
@ -374,7 +374,7 @@ struct GSTAR : public OT::GSUBGPOS
|
|||
{
|
||||
switch (u.version.major) {
|
||||
case 1: find_lookups<SmallTypes> (graph, lookups); break;
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 2: find_lookups<MediumTypes> (graph, lookups); break;
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -477,7 +477,7 @@ struct MarkBasePos : public OT::Layout::GPOS_impl::MarkBasePos
|
|||
switch (u.format) {
|
||||
case 1:
|
||||
return ((MarkBasePosFormat1*)(&u.format1))->split_subtables (c, parent_index, this_index);
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 2: HB_FALLTHROUGH;
|
||||
// Don't split 24bit PairPos's.
|
||||
#endif
|
||||
|
@ -494,7 +494,7 @@ struct MarkBasePos : public OT::Layout::GPOS_impl::MarkBasePos
|
|||
switch (u.format) {
|
||||
case 1:
|
||||
return ((MarkBasePosFormat1*)(&u.format1))->sanitize (vertex);
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 2: HB_FALLTHROUGH;
|
||||
#endif
|
||||
default:
|
||||
|
|
|
@ -611,7 +611,7 @@ struct PairPos : public OT::Layout::GPOS_impl::PairPos
|
|||
return ((PairPosFormat1*)(&u.format1))->split_subtables (c, parent_index, this_index);
|
||||
case 2:
|
||||
return ((PairPosFormat2*)(&u.format2))->split_subtables (c, parent_index, this_index);
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 3: HB_FALLTHROUGH;
|
||||
case 4: HB_FALLTHROUGH;
|
||||
// Don't split 24bit PairPos's.
|
||||
|
@ -631,7 +631,7 @@ struct PairPos : public OT::Layout::GPOS_impl::PairPos
|
|||
return ((PairPosFormat1*)(&u.format1))->sanitize (vertex);
|
||||
case 2:
|
||||
return ((PairPosFormat2*)(&u.format2))->sanitize (vertex);
|
||||
#ifndef HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_NO_BEYOND_64K
|
||||
case 3: HB_FALLTHROUGH;
|
||||
case 4: HB_FALLTHROUGH;
|
||||
#endif
|
||||
|
|
|
@ -1136,7 +1136,7 @@ get_C_locale ()
|
|||
/**
|
||||
* hb_variation_to_string:
|
||||
* @variation: an #hb_variation_t to convert
|
||||
* @buf: (array length=size) (out): output string
|
||||
* @buf: (array length=size) (out caller-allocates): output string
|
||||
* @size: the allocated size of @buf
|
||||
*
|
||||
* Converts an #hb_variation_t into a `NULL`-terminated string in the format
|
||||
|
|
|
@ -35,8 +35,8 @@
|
|||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#ifndef HB_BORING_EXPANSION
|
||||
#define HB_NO_BORING_EXPANSION
|
||||
#ifndef HB_EXPERIMENTAL
|
||||
#define HB_NO_BEYOND_64K
|
||||
#endif
|
||||
|
||||
#ifdef HB_TINY
|
||||
|
@ -104,7 +104,7 @@
|
|||
|
||||
#ifdef HB_NO_BORING_EXPANSION
|
||||
#define HB_NO_BEYOND_64K
|
||||
#define HB_NO_VARIATIONS2
|
||||
#define HB_NO_AVAR2
|
||||
#endif
|
||||
|
||||
#ifdef HB_DISABLE_DEPRECATED
|
||||
|
|
30
src/hb-ft.cc
30
src/hb-ft.cc
|
@ -732,16 +732,18 @@ hb_ft_get_font_h_extents (hb_font_t *font HB_UNUSED,
|
|||
|
||||
static int
|
||||
_hb_ft_move_to (const FT_Vector *to,
|
||||
hb_draw_session_t *drawing)
|
||||
void *arg)
|
||||
{
|
||||
hb_draw_session_t *drawing = (hb_draw_session_t *) arg;
|
||||
drawing->move_to (to->x, to->y);
|
||||
return FT_Err_Ok;
|
||||
}
|
||||
|
||||
static int
|
||||
_hb_ft_line_to (const FT_Vector *to,
|
||||
hb_draw_session_t *drawing)
|
||||
void *arg)
|
||||
{
|
||||
hb_draw_session_t *drawing = (hb_draw_session_t *) arg;
|
||||
drawing->line_to (to->x, to->y);
|
||||
return FT_Err_Ok;
|
||||
}
|
||||
|
@ -749,8 +751,9 @@ _hb_ft_line_to (const FT_Vector *to,
|
|||
static int
|
||||
_hb_ft_conic_to (const FT_Vector *control,
|
||||
const FT_Vector *to,
|
||||
hb_draw_session_t *drawing)
|
||||
void *arg)
|
||||
{
|
||||
hb_draw_session_t *drawing = (hb_draw_session_t *) arg;
|
||||
drawing->quadratic_to (control->x, control->y,
|
||||
to->x, to->y);
|
||||
return FT_Err_Ok;
|
||||
|
@ -760,8 +763,9 @@ static int
|
|||
_hb_ft_cubic_to (const FT_Vector *control1,
|
||||
const FT_Vector *control2,
|
||||
const FT_Vector *to,
|
||||
hb_draw_session_t *drawing)
|
||||
void *arg)
|
||||
{
|
||||
hb_draw_session_t *drawing = (hb_draw_session_t *) arg;
|
||||
drawing->cubic_to (control1->x, control1->y,
|
||||
control2->x, control2->y,
|
||||
to->x, to->y);
|
||||
|
@ -787,10 +791,10 @@ hb_ft_get_glyph_shape (hb_font_t *font HB_UNUSED,
|
|||
return;
|
||||
|
||||
const FT_Outline_Funcs outline_funcs = {
|
||||
(FT_Outline_MoveToFunc) _hb_ft_move_to,
|
||||
(FT_Outline_LineToFunc) _hb_ft_line_to,
|
||||
(FT_Outline_ConicToFunc) _hb_ft_conic_to,
|
||||
(FT_Outline_CubicToFunc) _hb_ft_cubic_to,
|
||||
_hb_ft_move_to,
|
||||
_hb_ft_line_to,
|
||||
_hb_ft_conic_to,
|
||||
_hb_ft_cubic_to,
|
||||
0, /* shift */
|
||||
0, /* delta */
|
||||
};
|
||||
|
@ -975,8 +979,9 @@ hb_ft_face_create_referenced (FT_Face ft_face)
|
|||
}
|
||||
|
||||
static void
|
||||
hb_ft_face_finalize (FT_Face ft_face)
|
||||
hb_ft_face_finalize (void *arg)
|
||||
{
|
||||
FT_Face ft_face = (FT_Face) arg;
|
||||
hb_face_destroy ((hb_face_t *) ft_face->generic.data);
|
||||
}
|
||||
|
||||
|
@ -1008,7 +1013,7 @@ hb_ft_face_create_cached (FT_Face ft_face)
|
|||
ft_face->generic.finalizer (ft_face);
|
||||
|
||||
ft_face->generic.data = hb_ft_face_create (ft_face, nullptr);
|
||||
ft_face->generic.finalizer = (FT_Generic_Finalizer) hb_ft_face_finalize;
|
||||
ft_face->generic.finalizer = hb_ft_face_finalize;
|
||||
}
|
||||
|
||||
return hb_face_reference ((hb_face_t *) ft_face->generic.data);
|
||||
|
@ -1217,8 +1222,9 @@ get_ft_library ()
|
|||
}
|
||||
|
||||
static void
|
||||
_release_blob (FT_Face ft_face)
|
||||
_release_blob (void *arg)
|
||||
{
|
||||
FT_Face ft_face = (FT_Face) arg;
|
||||
hb_blob_destroy ((hb_blob_t *) ft_face->generic.data);
|
||||
}
|
||||
|
||||
|
@ -1271,7 +1277,7 @@ hb_ft_font_set_funcs (hb_font_t *font)
|
|||
|
||||
|
||||
ft_face->generic.data = blob;
|
||||
ft_face->generic.finalizer = (FT_Generic_Finalizer) _release_blob;
|
||||
ft_face->generic.finalizer = _release_blob;
|
||||
|
||||
_hb_ft_font_set_funcs (font, ft_face, true);
|
||||
hb_ft_font_set_load_flags (font, FT_LOAD_DEFAULT | FT_LOAD_NO_HINTING);
|
||||
|
|
|
@ -221,7 +221,7 @@ struct hb_hashmap_t
|
|||
unsigned int i = bucket_for (key);
|
||||
if (items[i].is_real () && items[i] == key)
|
||||
{
|
||||
if (vp) *vp = &items[i].value;
|
||||
if (vp) *vp = std::addressof (items[i].value);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
|
|
|
@ -82,7 +82,7 @@ hb_ot_name_convert_utf (hb_bytes_t bytes,
|
|||
|
||||
if (text_size && *text_size)
|
||||
{
|
||||
(*text_size)--; /* Same room for NUL-termination. */
|
||||
(*text_size)--; /* Save room for NUL-termination. */
|
||||
const typename out_utf_t::codepoint_t *dst_end = text + *text_size;
|
||||
|
||||
while (src < src_end && dst < dst_end)
|
||||
|
|
|
@ -212,17 +212,6 @@ struct OS2
|
|||
TRACE_SUBSET (this);
|
||||
OS2 *os2_prime = c->serializer->embed (this);
|
||||
if (unlikely (!os2_prime)) return_trace (false);
|
||||
if (c->plan->flags & HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES)
|
||||
return_trace (true);
|
||||
|
||||
/* when --gids option is not used, no need to do collect_mapping that is
|
||||
* iterating all codepoints in each subtable, which is not efficient */
|
||||
uint16_t min_cp, max_cp;
|
||||
find_min_and_max_codepoint (c->plan->unicodes, &min_cp, &max_cp);
|
||||
os2_prime->usFirstCharIndex = min_cp;
|
||||
os2_prime->usLastCharIndex = max_cp;
|
||||
|
||||
_update_unicode_ranges (c->plan->unicodes, os2_prime->ulUnicodeRange);
|
||||
|
||||
if (c->plan->user_axes_location->has (HB_TAG ('w','g','h','t')) &&
|
||||
!c->plan->pinned_at_default)
|
||||
|
@ -244,6 +233,18 @@ struct OS2
|
|||
return_trace (false);
|
||||
}
|
||||
|
||||
if (c->plan->flags & HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES)
|
||||
return_trace (true);
|
||||
|
||||
/* when --gids option is not used, no need to do collect_mapping that is
|
||||
* iterating all codepoints in each subtable, which is not efficient */
|
||||
uint16_t min_cp, max_cp;
|
||||
find_min_and_max_codepoint (c->plan->unicodes, &min_cp, &max_cp);
|
||||
os2_prime->usFirstCharIndex = min_cp;
|
||||
os2_prime->usLastCharIndex = max_cp;
|
||||
|
||||
_update_unicode_ranges (c->plan->unicodes, os2_prime->ulUnicodeRange);
|
||||
|
||||
return_trace (true);
|
||||
}
|
||||
|
||||
|
|
|
@ -742,14 +742,40 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
|
|||
|
||||
/* Sit tight, rock 'n roll! */
|
||||
hb_stable_sort (info + start, end - start, compare_indic_order);
|
||||
/* Find base again */
|
||||
|
||||
/* Find base again; also flip left-matra sequence. */
|
||||
unsigned first_left_matra = end;
|
||||
unsigned last_left_matra = end;
|
||||
base = end;
|
||||
for (unsigned int i = start; i < end; i++)
|
||||
{
|
||||
if (info[i].indic_position() == POS_BASE_C)
|
||||
{
|
||||
base = i;
|
||||
break;
|
||||
}
|
||||
else if (info[i].indic_position() == POS_PRE_M)
|
||||
{
|
||||
if (first_left_matra == end)
|
||||
first_left_matra = i;
|
||||
last_left_matra = i;
|
||||
}
|
||||
}
|
||||
/* https://github.com/harfbuzz/harfbuzz/issues/3863 */
|
||||
if (first_left_matra < last_left_matra)
|
||||
{
|
||||
/* No need to merge clusters, handled later. */
|
||||
buffer->reverse_range (first_left_matra, last_left_matra + 1);
|
||||
/* Reverse back nuktas, etc. */
|
||||
unsigned i = first_left_matra;
|
||||
for (unsigned j = i; j <= last_left_matra; j++)
|
||||
if (info[j].indic_category() == I_Cat(M))
|
||||
{
|
||||
buffer->reverse_range (i, j + 1);
|
||||
i = j + 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Things are out-of-control for post base positions, they may shuffle
|
||||
* around like crazy. In old-spec mode, we move halants around, so in
|
||||
* that case merge all clusters after base. Otherwise, check the sort
|
||||
|
|
|
@ -270,6 +270,33 @@ initial_reordering_consonant_syllable (hb_buffer_t *buffer,
|
|||
|
||||
/* Sit tight, rock 'n roll! */
|
||||
buffer->sort (start, end, compare_myanmar_order);
|
||||
|
||||
/* Flip left-matra sequence. */
|
||||
unsigned first_left_matra = end;
|
||||
unsigned last_left_matra = end;
|
||||
for (unsigned int i = start; i < end; i++)
|
||||
{
|
||||
if (info[i].myanmar_position() == POS_PRE_M)
|
||||
{
|
||||
if (first_left_matra == end)
|
||||
first_left_matra = i;
|
||||
last_left_matra = i;
|
||||
}
|
||||
}
|
||||
/* https://github.com/harfbuzz/harfbuzz/issues/3863 */
|
||||
if (first_left_matra < last_left_matra)
|
||||
{
|
||||
/* No need to merge clusters, done already? */
|
||||
buffer->reverse_range (first_left_matra, last_left_matra + 1);
|
||||
/* Reverse back VS, etc. */
|
||||
unsigned i = first_left_matra;
|
||||
for (unsigned j = i; j <= last_left_matra; j++)
|
||||
if (info[j].myanmar_category() == M_Cat(VPre))
|
||||
{
|
||||
buffer->reverse_range (i, j + 1);
|
||||
i = j + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -143,7 +143,7 @@ struct avar
|
|||
TRACE_SANITIZE (this);
|
||||
if (!(version.sanitize (c) &&
|
||||
(version.major == 1
|
||||
#ifndef HB_NO_VARIATIONS2
|
||||
#ifndef HB_NO_AVAR2
|
||||
|| version.major == 2
|
||||
#endif
|
||||
) &&
|
||||
|
@ -159,7 +159,7 @@ struct avar
|
|||
map = &StructAfter<SegmentMaps> (*map);
|
||||
}
|
||||
|
||||
#ifndef HB_NO_VARIATIONS2
|
||||
#ifndef HB_NO_AVAR2
|
||||
if (version.major < 2)
|
||||
return_trace (true);
|
||||
|
||||
|
@ -182,7 +182,7 @@ struct avar
|
|||
map = &StructAfter<SegmentMaps> (*map);
|
||||
}
|
||||
|
||||
#ifndef HB_NO_VARIATIONS2
|
||||
#ifndef HB_NO_AVAR2
|
||||
if (version.major < 2)
|
||||
return;
|
||||
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
/* Ignored intentionally. */
|
||||
#ifndef HB_NO_PRAGMA_GCC_DIAGNOSTIC_IGNORED
|
||||
#pragma GCC diagnostic ignored "-Wclass-memaccess"
|
||||
#pragma GCC diagnostic ignored "-Wcast-function-type-strict" // https://github.com/harfbuzz/harfbuzz/pull/3859#issuecomment-1295409126
|
||||
#pragma GCC diagnostic ignored "-Wformat-nonliteral"
|
||||
#pragma GCC diagnostic ignored "-Wformat-zero-length"
|
||||
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
|
||||
|
|
|
@ -240,5 +240,15 @@ main (int argc, char **argv)
|
|||
m1->set (2,4);
|
||||
assert (!m.has (p2));
|
||||
}
|
||||
/* Test value type with hb_bytes_t. */
|
||||
{
|
||||
hb_hashmap_t<int, hb_bytes_t> m;
|
||||
char c_str[] = "Test";
|
||||
hb_bytes_t bytes (c_str, 4);
|
||||
|
||||
m.set (1, bytes);
|
||||
assert (m.has (1));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -2,3 +2,5 @@
|
|||
../fonts/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf;;U+0CB0,U+200D,U+0CCD,U+0C95;[gid2=0+1334|gid6=0+358]
|
||||
../fonts/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf;;U+0CB0,U+0CCD,U+200D,U+0C95;[gid2=0+1334|gid6=0+358]
|
||||
../fonts/e716f6bd00a108d186b7e9f47b4515565f784f36.ttf;;U+0C1A,U+0C3F,U+0C32,U+0C4D,U+0C15,U+0C42,U+0C30,U+0C4D;[civoweltelu=0+766|latelu=2+709|uuvowelsigntelu=2+661|kasubscripttelu=2+483|rahalanttelu=6+593]
|
||||
../fonts/9d8c53cb64b8747abdd2b70755cce2ee0eb42ef7.ttf;;U+0915,U+093F,U+094E,U+093C;[uni094E=0+273|uni093C=0+0|ivowelsign03deva=0+259|uni0915=0+762]
|
||||
../fonts/9d8c53cb64b8747abdd2b70755cce2ee0eb42ef7.ttf;;U+0915,U+093F,U+093C,U+094E;[uni094E=0+273|ivowelsign00deva=0+259|uni093C=0+0|uni0915=0+762]
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
../fonts/065b01e54f35f0d849fd43bd5b936212739a50cb.ttf;;U+101A,U+1035;[ya_e_above=0+1000]
|
||||
../fonts/a232bb734d4c6c898a44506547d19768f0eba6a6.ttf;;U+1000,U+1031,U+1084;[e_shn=0+592|_e=0+618|ka=0+1124]
|
||||
|
|
|
@ -7,6 +7,7 @@ SUBDIRS = repack_tests
|
|||
|
||||
EXTRA_DIST += \
|
||||
$(TESTS) \
|
||||
$(DISABLED_TESTS) \
|
||||
expected/32bit_var_store \
|
||||
expected/basics \
|
||||
expected/full-font \
|
||||
|
@ -55,6 +56,10 @@ EXTRA_DIST += \
|
|||
expected/math \
|
||||
expected/math_coverage_offset \
|
||||
expected/post \
|
||||
expected/full_instance \
|
||||
expected/instance_feature_variations \
|
||||
expected/instantiate_glyf \
|
||||
expected/pin_all_at_default \
|
||||
fonts \
|
||||
profiles \
|
||||
$(NULL)
|
||||
|
|
|
@ -57,5 +57,10 @@ TESTS = \
|
|||
XFAIL_TESTS = \
|
||||
$(NULL)
|
||||
|
||||
# Disabled because instancing is only available w/ experimental API on.
|
||||
DISABLED_TESTS = \
|
||||
tests/full_instance.tests \
|
||||
tests/instance_feature_variations.tests \
|
||||
tests/instantiate_glyf.tests \
|
||||
tests/pin_all_at_default.tests \
|
||||
$(NULL)
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -3,6 +3,7 @@ Roboto-Variable.ttf
|
|||
|
||||
PROFILES:
|
||||
default.txt
|
||||
no-prune-unicode-ranges.txt
|
||||
|
||||
SUBSETS:
|
||||
*
|
||||
|
|
|
@ -49,13 +49,18 @@ tests = [
|
|||
'glyph_names',
|
||||
'post',
|
||||
'32bit_var_store',
|
||||
# instacing tests, enable when --instance is not experimental
|
||||
# 'pin_all_at_default',
|
||||
# 'instantiate_glyf',
|
||||
# 'full_instance',
|
||||
# 'instance_feature_variations',
|
||||
]
|
||||
|
||||
if get_option('experimental_api')
|
||||
# instacing tests, only supported in experimental api
|
||||
tests += [
|
||||
'pin_all_at_default',
|
||||
'instantiate_glyf',
|
||||
'full_instance',
|
||||
'instance_feature_variations',
|
||||
]
|
||||
endif
|
||||
|
||||
repack_tests = [
|
||||
'basic',
|
||||
'prioritization',
|
||||
|
|
|
@ -71,7 +71,17 @@ helper_cairo_use_hb_draw (const font_options_t *font_opts)
|
|||
{
|
||||
const char *env = getenv ("HB_DRAW");
|
||||
if (!env)
|
||||
#if 1
|
||||
/* Following branch disabled because we prefer our
|
||||
* OpenType extensions working, ie going through hb-draw,
|
||||
* over avoiding the obscure cairo bug. */
|
||||
return true;
|
||||
#else
|
||||
/* Older cairo had a bug in rendering COLRv0 fonts in
|
||||
* right-to-left direction. */
|
||||
return cairo_version () >= CAIRO_VERSION_ENCODE (1, 17, 5);
|
||||
#endif
|
||||
|
||||
return atoi (env);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue