mirror of
https://github.com/godotengine/godot.git
synced 2025-01-30 21:33:18 +08:00
harfbuzz: Update to 10.1.0
This commit is contained in:
parent
24d74510e5
commit
269b1dfa03
@ -64,7 +64,8 @@ if env["builtin_harfbuzz"]:
|
||||
# "src/hb-cairo-utils.cc",
|
||||
# "src/hb-cairo.cc",
|
||||
"src/hb-common.cc",
|
||||
# "src/hb-coretext.cc",
|
||||
# "src/hb-coretext-font.cc",
|
||||
# "src/hb-coretext-shape.cc",
|
||||
# "src/hb-directwrite.cc",
|
||||
"src/hb-draw.cc",
|
||||
"src/hb-face-builder.cc",
|
||||
|
@ -298,7 +298,8 @@ thirdparty_harfbuzz_sources = [
|
||||
# "src/hb-cairo-utils.cc",
|
||||
# "src/hb-cairo.cc",
|
||||
"src/hb-common.cc",
|
||||
# "src/hb-coretext.cc",
|
||||
# "src/hb-coretext-font.cc",
|
||||
# "src/hb-coretext-shape.cc",
|
||||
# "src/hb-directwrite.cc",
|
||||
"src/hb-draw.cc",
|
||||
"src/hb-face-builder.cc",
|
||||
|
4
thirdparty/README.md
vendored
4
thirdparty/README.md
vendored
@ -394,7 +394,7 @@ Files extracted from upstream source:
|
||||
## harfbuzz
|
||||
|
||||
- Upstream: https://github.com/harfbuzz/harfbuzz
|
||||
- Version: 10.0.1 (a1d9bfe62818ef0fa9cf63b6e6d51436b1c93cbc, 2024)
|
||||
- Version: 10.1.0 (9ef44a2d67ac870c1f7f671f6dc98d08a2579865, 2024)
|
||||
- License: MIT
|
||||
|
||||
Files extracted from upstream source:
|
||||
@ -402,7 +402,7 @@ Files extracted from upstream source:
|
||||
- `AUTHORS`, `COPYING`, `THANKS`
|
||||
- From the `src` folder, recursively:
|
||||
- All the `.cc`, `.h`, `.hh` files
|
||||
- Except `main.cc`, `harfbuzz*.cc`, `failing-alloc.c`, `test*.cc`, `hb-wasm*.*`
|
||||
- Except `main.cc`, `harfbuzz*.cc`, `failing-alloc.c`, `test*.cc`, `hb-wasm*.*`, `wasm/*`
|
||||
|
||||
|
||||
## icu4c
|
||||
|
47
thirdparty/harfbuzz/src/OT/Color/COLR/COLR.hh
vendored
47
thirdparty/harfbuzz/src/OT/Color/COLR/COLR.hh
vendored
@ -2058,7 +2058,7 @@ struct delta_set_index_map_subset_plan_t
|
||||
unsigned outer = (*var_idx) >> 16;
|
||||
unsigned bit_count = (outer == 0) ? 1 : hb_bit_storage (outer);
|
||||
outer_bit_count = hb_max (bit_count, outer_bit_count);
|
||||
|
||||
|
||||
unsigned inner = (*var_idx) & 0xFFFF;
|
||||
bit_count = (inner == 0) ? 1 : hb_bit_storage (inner);
|
||||
inner_bit_count = hb_max (bit_count, inner_bit_count);
|
||||
@ -2080,7 +2080,7 @@ struct COLR
|
||||
bool has_v0_data () const { return numBaseGlyphs; }
|
||||
bool has_v1_data () const
|
||||
{
|
||||
if (version != 1)
|
||||
if (version < 1)
|
||||
return false;
|
||||
hb_barrier ();
|
||||
|
||||
@ -2180,7 +2180,7 @@ struct COLR
|
||||
hb_set_t *variation_indices,
|
||||
hb_set_t *delta_set_indices) const
|
||||
{
|
||||
if (version != 1) return;
|
||||
if (version < 1) return;
|
||||
hb_barrier ();
|
||||
|
||||
hb_set_t visited_glyphs;
|
||||
@ -2222,16 +2222,22 @@ struct COLR
|
||||
{ return (this+baseGlyphList); }
|
||||
|
||||
bool has_var_store () const
|
||||
{ return version >= 1 && varStore != 0; }
|
||||
{ return version >= 1 && hb_barrier () && varStore != 0; }
|
||||
|
||||
bool has_delta_set_index_map () const
|
||||
{ return version >= 1 && varIdxMap != 0; }
|
||||
{ return version >= 1 && hb_barrier () && varIdxMap != 0; }
|
||||
|
||||
bool has_clip_list () const
|
||||
{ return version >= 1 && hb_barrier () && clipList != 0; }
|
||||
|
||||
const DeltaSetIndexMap &get_delta_set_index_map () const
|
||||
{ return (version == 0 || varIdxMap == 0) ? Null (DeltaSetIndexMap) : this+varIdxMap; }
|
||||
{ return has_delta_set_index_map () && hb_barrier () ? this+varIdxMap : Null (DeltaSetIndexMap); }
|
||||
|
||||
const ItemVariationStore &get_var_store () const
|
||||
{ return (version == 0 || varStore == 0) ? Null (ItemVariationStore) : this+varStore; }
|
||||
{ return has_var_store () && hb_barrier () ? this+varStore : Null (ItemVariationStore); }
|
||||
|
||||
const ClipList &get_clip_list () const
|
||||
{ return has_clip_list () && hb_barrier () ? this+clipList : Null (ClipList); }
|
||||
|
||||
bool sanitize (hb_sanitize_context_t *c) const
|
||||
{
|
||||
@ -2242,7 +2248,6 @@ struct COLR
|
||||
(this+layersZ).sanitize (c, numLayers) &&
|
||||
(version == 0 ||
|
||||
(hb_barrier () &&
|
||||
version == 1 &&
|
||||
baseGlyphList.sanitize (c, this) &&
|
||||
layerList.sanitize (c, this) &&
|
||||
clipList.sanitize (c, this) &&
|
||||
@ -2465,7 +2470,9 @@ struct COLR
|
||||
if (unlikely (!c->serializer->extend_min (colr_prime))) return_trace (false);
|
||||
|
||||
if (version == 0 || downgrade_to_V0 (glyphset))
|
||||
return_trace (colr_prime->serialize_V0 (c->serializer, 0, base_it, layer_it));
|
||||
return_trace (colr_prime->serialize_V0 (c->serializer, 0, base_it, layer_it));
|
||||
|
||||
hb_barrier ();
|
||||
|
||||
//start version 1
|
||||
if (!c->serializer->allocate_size<void> (5 * HBUINT32::static_size)) return_trace (false);
|
||||
@ -2475,8 +2482,8 @@ struct COLR
|
||||
* after instancing */
|
||||
if (!subset_varstore (c, colr_prime)) return_trace (false);
|
||||
|
||||
ItemVarStoreInstancer instancer (varStore ? &(this+varStore) : nullptr,
|
||||
varIdxMap ? &(this+varIdxMap) : nullptr,
|
||||
ItemVarStoreInstancer instancer (&(get_var_store ()),
|
||||
&(get_delta_set_index_map ()),
|
||||
c->plan->normalized_coords.as_array ());
|
||||
|
||||
if (!colr_prime->baseGlyphList.serialize_subset (c, baseGlyphList, this, instancer))
|
||||
@ -2505,12 +2512,10 @@ struct COLR
|
||||
bool
|
||||
get_extents (hb_font_t *font, hb_codepoint_t glyph, hb_glyph_extents_t *extents) const
|
||||
{
|
||||
if (version != 1)
|
||||
return false;
|
||||
|
||||
ItemVarStoreInstancer instancer (&(this+varStore),
|
||||
&(this+varIdxMap),
|
||||
hb_array (font->coords, font->num_coords));
|
||||
ItemVarStoreInstancer instancer (&(get_var_store ()),
|
||||
&(get_delta_set_index_map ()),
|
||||
hb_array (font->coords, font->num_coords));
|
||||
|
||||
if (get_clip (glyph, extents, instancer))
|
||||
{
|
||||
@ -2545,7 +2550,7 @@ struct COLR
|
||||
bool
|
||||
has_paint_for_glyph (hb_codepoint_t glyph) const
|
||||
{
|
||||
if (version == 1)
|
||||
if (version >= 1)
|
||||
{
|
||||
hb_barrier ();
|
||||
|
||||
@ -2561,7 +2566,7 @@ struct COLR
|
||||
hb_glyph_extents_t *extents,
|
||||
const ItemVarStoreInstancer instancer) const
|
||||
{
|
||||
return (this+clipList).get_extents (glyph,
|
||||
return get_clip_list ().get_extents (glyph,
|
||||
extents,
|
||||
instancer);
|
||||
}
|
||||
@ -2570,13 +2575,13 @@ struct COLR
|
||||
bool
|
||||
paint_glyph (hb_font_t *font, hb_codepoint_t glyph, hb_paint_funcs_t *funcs, void *data, unsigned int palette_index, hb_color_t foreground, bool clip = true) const
|
||||
{
|
||||
ItemVarStoreInstancer instancer (&(this+varStore),
|
||||
&(this+varIdxMap),
|
||||
ItemVarStoreInstancer instancer (&(get_var_store ()),
|
||||
&(get_delta_set_index_map ()),
|
||||
hb_array (font->coords, font->num_coords));
|
||||
hb_paint_context_t c (this, funcs, data, font, palette_index, foreground, instancer);
|
||||
c.current_glyphs.add (glyph);
|
||||
|
||||
if (version == 1)
|
||||
if (version >= 1)
|
||||
{
|
||||
hb_barrier ();
|
||||
|
||||
|
401
thirdparty/harfbuzz/src/OT/glyf/VarCompositeGlyph.hh
vendored
401
thirdparty/harfbuzz/src/OT/glyf/VarCompositeGlyph.hh
vendored
@ -1,401 +0,0 @@
|
||||
#ifndef OT_GLYF_VARCOMPOSITEGLYPH_HH
|
||||
#define OT_GLYF_VARCOMPOSITEGLYPH_HH
|
||||
|
||||
|
||||
#include "../../hb-open-type.hh"
|
||||
#include "coord-setter.hh"
|
||||
|
||||
|
||||
namespace OT {
|
||||
namespace glyf_impl {
|
||||
|
||||
|
||||
struct VarCompositeGlyphRecord
|
||||
{
|
||||
protected:
|
||||
enum var_composite_glyph_flag_t
|
||||
{
|
||||
USE_MY_METRICS = 0x0001,
|
||||
AXIS_INDICES_ARE_SHORT = 0x0002,
|
||||
UNIFORM_SCALE = 0x0004,
|
||||
HAVE_TRANSLATE_X = 0x0008,
|
||||
HAVE_TRANSLATE_Y = 0x0010,
|
||||
HAVE_ROTATION = 0x0020,
|
||||
HAVE_SCALE_X = 0x0040,
|
||||
HAVE_SCALE_Y = 0x0080,
|
||||
HAVE_SKEW_X = 0x0100,
|
||||
HAVE_SKEW_Y = 0x0200,
|
||||
HAVE_TCENTER_X = 0x0400,
|
||||
HAVE_TCENTER_Y = 0x0800,
|
||||
GID_IS_24BIT = 0x1000,
|
||||
AXES_HAVE_VARIATION = 0x2000,
|
||||
RESET_UNSPECIFIED_AXES = 0x4000,
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
unsigned int get_size () const
|
||||
{
|
||||
unsigned fl = flags;
|
||||
unsigned int size = min_size;
|
||||
|
||||
unsigned axis_width = (fl & AXIS_INDICES_ARE_SHORT) ? 4 : 3;
|
||||
size += numAxes * axis_width;
|
||||
|
||||
if (fl & GID_IS_24BIT) size += 1;
|
||||
|
||||
// 2 bytes each for the following flags
|
||||
fl = fl & (HAVE_TRANSLATE_X | HAVE_TRANSLATE_Y |
|
||||
HAVE_ROTATION |
|
||||
HAVE_SCALE_X | HAVE_SCALE_Y |
|
||||
HAVE_SKEW_X | HAVE_SKEW_Y |
|
||||
HAVE_TCENTER_X | HAVE_TCENTER_Y);
|
||||
size += hb_popcount (fl) * 2;
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
bool has_more () const { return true; }
|
||||
|
||||
bool is_use_my_metrics () const { return flags & USE_MY_METRICS; }
|
||||
bool is_reset_unspecified_axes () const { return flags & RESET_UNSPECIFIED_AXES; }
|
||||
|
||||
hb_codepoint_t get_gid () const
|
||||
{
|
||||
if (flags & GID_IS_24BIT)
|
||||
return * (const HBGlyphID24 *) &pad;
|
||||
else
|
||||
return * (const HBGlyphID16 *) &pad;
|
||||
}
|
||||
|
||||
void set_gid (hb_codepoint_t gid)
|
||||
{
|
||||
if (flags & GID_IS_24BIT)
|
||||
* (HBGlyphID24 *) &pad = gid;
|
||||
else
|
||||
* (HBGlyphID16 *) &pad = gid;
|
||||
}
|
||||
|
||||
unsigned get_numAxes () const
|
||||
{
|
||||
return numAxes;
|
||||
}
|
||||
|
||||
unsigned get_num_points () const
|
||||
{
|
||||
unsigned fl = flags;
|
||||
unsigned num = 0;
|
||||
if (fl & AXES_HAVE_VARIATION) num += numAxes;
|
||||
|
||||
/* Hopefully faster code, relying on the value of the flags. */
|
||||
fl = (((fl & (HAVE_TRANSLATE_Y | HAVE_SCALE_Y | HAVE_SKEW_Y | HAVE_TCENTER_Y)) >> 1) | fl) &
|
||||
(HAVE_TRANSLATE_X | HAVE_ROTATION | HAVE_SCALE_X | HAVE_SKEW_X | HAVE_TCENTER_X);
|
||||
num += hb_popcount (fl);
|
||||
return num;
|
||||
|
||||
/* Slower but more readable code. */
|
||||
if (fl & (HAVE_TRANSLATE_X | HAVE_TRANSLATE_Y)) num++;
|
||||
if (fl & HAVE_ROTATION) num++;
|
||||
if (fl & (HAVE_SCALE_X | HAVE_SCALE_Y)) num++;
|
||||
if (fl & (HAVE_SKEW_X | HAVE_SKEW_Y)) num++;
|
||||
if (fl & (HAVE_TCENTER_X | HAVE_TCENTER_Y)) num++;
|
||||
return num;
|
||||
}
|
||||
|
||||
void transform_points (hb_array_t<const contour_point_t> record_points,
|
||||
hb_array_t<contour_point_t> points) const
|
||||
{
|
||||
float matrix[4];
|
||||
contour_point_t trans;
|
||||
|
||||
get_transformation_from_points (record_points.arrayZ, matrix, trans);
|
||||
|
||||
auto arrayZ = points.arrayZ;
|
||||
unsigned count = points.length;
|
||||
|
||||
if (matrix[0] != 1.f || matrix[1] != 0.f ||
|
||||
matrix[2] != 0.f || matrix[3] != 1.f)
|
||||
for (unsigned i = 0; i < count; i++)
|
||||
arrayZ[i].transform (matrix);
|
||||
|
||||
if (trans.x != 0.f || trans.y != 0.f)
|
||||
for (unsigned i = 0; i < count; i++)
|
||||
arrayZ[i].translate (trans);
|
||||
}
|
||||
|
||||
static inline void transform (float (&matrix)[4], contour_point_t &trans,
|
||||
float (other)[6])
|
||||
{
|
||||
// https://github.com/fonttools/fonttools/blob/f66ee05f71c8b57b5f519ee975e95edcd1466e14/Lib/fontTools/misc/transform.py#L268
|
||||
float xx1 = other[0];
|
||||
float xy1 = other[1];
|
||||
float yx1 = other[2];
|
||||
float yy1 = other[3];
|
||||
float dx1 = other[4];
|
||||
float dy1 = other[5];
|
||||
float xx2 = matrix[0];
|
||||
float xy2 = matrix[1];
|
||||
float yx2 = matrix[2];
|
||||
float yy2 = matrix[3];
|
||||
float dx2 = trans.x;
|
||||
float dy2 = trans.y;
|
||||
|
||||
matrix[0] = xx1*xx2 + xy1*yx2;
|
||||
matrix[1] = xx1*xy2 + xy1*yy2;
|
||||
matrix[2] = yx1*xx2 + yy1*yx2;
|
||||
matrix[3] = yx1*xy2 + yy1*yy2;
|
||||
trans.x = xx2*dx1 + yx2*dy1 + dx2;
|
||||
trans.y = xy2*dx1 + yy2*dy1 + dy2;
|
||||
}
|
||||
|
||||
static void translate (float (&matrix)[4], contour_point_t &trans,
|
||||
float translateX, float translateY)
|
||||
{
|
||||
if (!translateX && !translateY)
|
||||
return;
|
||||
|
||||
trans.x += matrix[0] * translateX + matrix[2] * translateY;
|
||||
trans.y += matrix[1] * translateX + matrix[3] * translateY;
|
||||
}
|
||||
|
||||
static void scale (float (&matrix)[4], contour_point_t &trans,
|
||||
float scaleX, float scaleY)
|
||||
{
|
||||
if (scaleX == 1.f && scaleY == 1.f)
|
||||
return;
|
||||
|
||||
matrix[0] *= scaleX;
|
||||
matrix[1] *= scaleX;
|
||||
matrix[2] *= scaleY;
|
||||
matrix[3] *= scaleY;
|
||||
}
|
||||
|
||||
static void rotate (float (&matrix)[4], contour_point_t &trans,
|
||||
float rotation)
|
||||
{
|
||||
if (!rotation)
|
||||
return;
|
||||
|
||||
// https://github.com/fonttools/fonttools/blob/f66ee05f71c8b57b5f519ee975e95edcd1466e14/Lib/fontTools/misc/transform.py#L240
|
||||
rotation = rotation * HB_PI;
|
||||
float c;
|
||||
float s;
|
||||
#ifdef HAVE_SINCOSF
|
||||
sincosf (rotation, &s, &c);
|
||||
#else
|
||||
c = cosf (rotation);
|
||||
s = sinf (rotation);
|
||||
#endif
|
||||
float other[6] = {c, s, -s, c, 0.f, 0.f};
|
||||
transform (matrix, trans, other);
|
||||
}
|
||||
|
||||
static void skew (float (&matrix)[4], contour_point_t &trans,
|
||||
float skewX, float skewY)
|
||||
{
|
||||
if (!skewX && !skewY)
|
||||
return;
|
||||
|
||||
// https://github.com/fonttools/fonttools/blob/f66ee05f71c8b57b5f519ee975e95edcd1466e14/Lib/fontTools/misc/transform.py#L255
|
||||
skewX = skewX * HB_PI;
|
||||
skewY = skewY * HB_PI;
|
||||
float other[6] = {1.f,
|
||||
skewY ? tanf (skewY) : 0.f,
|
||||
skewX ? tanf (skewX) : 0.f,
|
||||
1.f,
|
||||
0.f, 0.f};
|
||||
transform (matrix, trans, other);
|
||||
}
|
||||
|
||||
bool get_points (contour_point_vector_t &points) const
|
||||
{
|
||||
unsigned num_points = get_num_points ();
|
||||
|
||||
points.alloc (points.length + num_points + 4); // For phantom points
|
||||
if (unlikely (!points.resize (points.length + num_points, false))) return false;
|
||||
contour_point_t *rec_points = points.arrayZ + (points.length - num_points);
|
||||
hb_memset (rec_points, 0, num_points * sizeof (rec_points[0]));
|
||||
|
||||
unsigned fl = flags;
|
||||
|
||||
unsigned num_axes = numAxes;
|
||||
unsigned axis_width = (fl & AXIS_INDICES_ARE_SHORT) ? 2 : 1;
|
||||
unsigned axes_size = num_axes * axis_width;
|
||||
|
||||
const F2DOT14 *q = (const F2DOT14 *) (axes_size +
|
||||
(fl & GID_IS_24BIT ? 3 : 2) +
|
||||
(const HBUINT8 *) &pad);
|
||||
|
||||
unsigned count = num_axes;
|
||||
if (fl & AXES_HAVE_VARIATION)
|
||||
{
|
||||
for (unsigned i = 0; i < count; i++)
|
||||
rec_points++->x = q++->to_int ();
|
||||
}
|
||||
else
|
||||
q += count;
|
||||
|
||||
const HBUINT16 *p = (const HBUINT16 *) q;
|
||||
|
||||
if (fl & (HAVE_TRANSLATE_X | HAVE_TRANSLATE_Y))
|
||||
{
|
||||
int translateX = (fl & HAVE_TRANSLATE_X) ? * (const FWORD *) p++ : 0;
|
||||
int translateY = (fl & HAVE_TRANSLATE_Y) ? * (const FWORD *) p++ : 0;
|
||||
rec_points->x = translateX;
|
||||
rec_points->y = translateY;
|
||||
rec_points++;
|
||||
}
|
||||
if (fl & HAVE_ROTATION)
|
||||
{
|
||||
int rotation = (fl & HAVE_ROTATION) ? ((const F4DOT12 *) p++)->to_int () : 0;
|
||||
rec_points->x = rotation;
|
||||
rec_points++;
|
||||
}
|
||||
if (fl & (HAVE_SCALE_X | HAVE_SCALE_Y))
|
||||
{
|
||||
int scaleX = (fl & HAVE_SCALE_X) ? ((const F6DOT10 *) p++)->to_int () : 1 << 10;
|
||||
int scaleY = (fl & HAVE_SCALE_Y) ? ((const F6DOT10 *) p++)->to_int () : 1 << 10;
|
||||
if ((fl & UNIFORM_SCALE) && !(fl & HAVE_SCALE_Y))
|
||||
scaleY = scaleX;
|
||||
rec_points->x = scaleX;
|
||||
rec_points->y = scaleY;
|
||||
rec_points++;
|
||||
}
|
||||
if (fl & (HAVE_SKEW_X | HAVE_SKEW_Y))
|
||||
{
|
||||
int skewX = (fl & HAVE_SKEW_X) ? ((const F4DOT12 *) p++)->to_int () : 0;
|
||||
int skewY = (fl & HAVE_SKEW_Y) ? ((const F4DOT12 *) p++)->to_int () : 0;
|
||||
rec_points->x = skewX;
|
||||
rec_points->y = skewY;
|
||||
rec_points++;
|
||||
}
|
||||
if (fl & (HAVE_TCENTER_X | HAVE_TCENTER_Y))
|
||||
{
|
||||
int tCenterX = (fl & HAVE_TCENTER_X) ? * (const FWORD *) p++ : 0;
|
||||
int tCenterY = (fl & HAVE_TCENTER_Y) ? * (const FWORD *) p++ : 0;
|
||||
rec_points->x = tCenterX;
|
||||
rec_points->y = tCenterY;
|
||||
rec_points++;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void get_transformation_from_points (const contour_point_t *rec_points,
|
||||
float (&matrix)[4], contour_point_t &trans) const
|
||||
{
|
||||
unsigned fl = flags;
|
||||
|
||||
if (fl & AXES_HAVE_VARIATION)
|
||||
rec_points += numAxes;
|
||||
|
||||
matrix[0] = matrix[3] = 1.f;
|
||||
matrix[1] = matrix[2] = 0.f;
|
||||
trans.init (0.f, 0.f);
|
||||
|
||||
float translateX = 0.f;
|
||||
float translateY = 0.f;
|
||||
float rotation = 0.f;
|
||||
float scaleX = 1.f;
|
||||
float scaleY = 1.f;
|
||||
float skewX = 0.f;
|
||||
float skewY = 0.f;
|
||||
float tCenterX = 0.f;
|
||||
float tCenterY = 0.f;
|
||||
|
||||
if (fl & (HAVE_TRANSLATE_X | HAVE_TRANSLATE_Y))
|
||||
{
|
||||
translateX = rec_points->x;
|
||||
translateY = rec_points->y;
|
||||
rec_points++;
|
||||
}
|
||||
if (fl & HAVE_ROTATION)
|
||||
{
|
||||
rotation = rec_points->x / (1 << 12);
|
||||
rec_points++;
|
||||
}
|
||||
if (fl & (HAVE_SCALE_X | HAVE_SCALE_Y))
|
||||
{
|
||||
scaleX = rec_points->x / (1 << 10);
|
||||
scaleY = rec_points->y / (1 << 10);
|
||||
rec_points++;
|
||||
}
|
||||
if (fl & (HAVE_SKEW_X | HAVE_SKEW_Y))
|
||||
{
|
||||
skewX = rec_points->x / (1 << 12);
|
||||
skewY = rec_points->y / (1 << 12);
|
||||
rec_points++;
|
||||
}
|
||||
if (fl & (HAVE_TCENTER_X | HAVE_TCENTER_Y))
|
||||
{
|
||||
tCenterX = rec_points->x;
|
||||
tCenterY = rec_points->y;
|
||||
rec_points++;
|
||||
}
|
||||
|
||||
translate (matrix, trans, translateX + tCenterX, translateY + tCenterY);
|
||||
rotate (matrix, trans, rotation);
|
||||
scale (matrix, trans, scaleX, scaleY);
|
||||
skew (matrix, trans, -skewX, skewY);
|
||||
translate (matrix, trans, -tCenterX, -tCenterY);
|
||||
}
|
||||
|
||||
void set_variations (coord_setter_t &setter,
|
||||
hb_array_t<contour_point_t> rec_points) const
|
||||
{
|
||||
bool have_variations = flags & AXES_HAVE_VARIATION;
|
||||
unsigned axis_width = (flags & AXIS_INDICES_ARE_SHORT) ? 2 : 1;
|
||||
unsigned num_axes = numAxes;
|
||||
|
||||
const HBUINT8 *p = (const HBUINT8 *) (((HBUINT8 *) &numAxes) + numAxes.static_size + (flags & GID_IS_24BIT ? 3 : 2));
|
||||
const HBUINT16 *q = (const HBUINT16 *) (((HBUINT8 *) &numAxes) + numAxes.static_size + (flags & GID_IS_24BIT ? 3 : 2));
|
||||
|
||||
const F2DOT14 *a = (const F2DOT14 *) ((HBUINT8 *) (axis_width == 1 ? (p + num_axes) : (HBUINT8 *) (q + num_axes)));
|
||||
|
||||
unsigned count = num_axes;
|
||||
for (unsigned i = 0; i < count; i++)
|
||||
{
|
||||
unsigned axis_index = axis_width == 1 ? (unsigned) *p++ : (unsigned) *q++;
|
||||
|
||||
signed v = have_variations ? rec_points.arrayZ[i].x : a++->to_int ();
|
||||
|
||||
v = hb_clamp (v, -(1<<14), (1<<14));
|
||||
setter[axis_index] = v;
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
HBUINT16 flags;
|
||||
HBUINT8 numAxes;
|
||||
HBUINT16 pad;
|
||||
public:
|
||||
DEFINE_SIZE_MIN (5);
|
||||
};
|
||||
|
||||
using var_composite_iter_t = composite_iter_tmpl<VarCompositeGlyphRecord>;
|
||||
|
||||
struct VarCompositeGlyph
|
||||
{
|
||||
const GlyphHeader &header;
|
||||
hb_bytes_t bytes;
|
||||
VarCompositeGlyph (const GlyphHeader &header_, hb_bytes_t bytes_) :
|
||||
header (header_), bytes (bytes_) {}
|
||||
|
||||
var_composite_iter_t iter () const
|
||||
{ return var_composite_iter_t (bytes, &StructAfter<VarCompositeGlyphRecord, GlyphHeader> (header)); }
|
||||
|
||||
const hb_bytes_t trim_padding () const
|
||||
{
|
||||
unsigned length = GlyphHeader::static_size;
|
||||
for (auto &comp : iter ())
|
||||
length += comp.get_size ();
|
||||
return bytes.sub_array (0, length);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
} /* namespace glyf_impl */
|
||||
} /* namespace OT */
|
||||
|
||||
|
||||
#endif /* OT_GLYF_VARCOMPOSITEGLYPH_HH */
|
36
thirdparty/harfbuzz/src/OT/glyf/coord-setter.hh
vendored
36
thirdparty/harfbuzz/src/OT/glyf/coord-setter.hh
vendored
@ -1,36 +0,0 @@
|
||||
#ifndef OT_GLYF_COORD_SETTER_HH
|
||||
#define OT_GLYF_COORD_SETTER_HH
|
||||
|
||||
|
||||
#include "../../hb.hh"
|
||||
|
||||
|
||||
namespace OT {
|
||||
namespace glyf_impl {
|
||||
|
||||
|
||||
struct coord_setter_t
|
||||
{
|
||||
coord_setter_t (hb_array_t<int> coords) :
|
||||
coords (coords) {}
|
||||
|
||||
int& operator [] (unsigned idx)
|
||||
{
|
||||
if (unlikely (idx >= HB_GLYF_VAR_COMPOSITE_MAX_AXES))
|
||||
return Crap(int);
|
||||
if (coords.length < idx + 1)
|
||||
coords.resize (idx + 1);
|
||||
return coords[idx];
|
||||
}
|
||||
|
||||
hb_array_t<int> get_coords ()
|
||||
{ return coords.as_array (); }
|
||||
|
||||
hb_vector_t<int> coords;
|
||||
};
|
||||
|
||||
|
||||
} /* namespace glyf_impl */
|
||||
} /* namespace OT */
|
||||
|
||||
#endif /* OT_GLYF_COORD_SETTER_HH */
|
5
thirdparty/harfbuzz/src/hb-blob.cc
vendored
5
thirdparty/harfbuzz/src/hb-blob.cc
vendored
@ -617,10 +617,9 @@ hb_blob_create_from_file (const char *file_name)
|
||||
|
||||
/**
|
||||
* hb_blob_create_from_file_or_fail:
|
||||
* @file_name: A font filename
|
||||
* @file_name: A filename
|
||||
*
|
||||
* Creates a new blob containing the data from the
|
||||
* specified binary font file.
|
||||
* Creates a new blob containing the data from the specified file.
|
||||
*
|
||||
* The filename is passed directly to the system on all platforms,
|
||||
* except on Windows, where the filename is interpreted as UTF-8.
|
||||
|
2
thirdparty/harfbuzz/src/hb-cairo.cc
vendored
2
thirdparty/harfbuzz/src/hb-cairo.cc
vendored
@ -482,7 +482,7 @@ hb_cairo_init_scaled_font (cairo_scaled_font_t *scaled_font,
|
||||
&hb_cairo_face_user_data_key);
|
||||
font = hb_font_create (face);
|
||||
|
||||
#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1,16,0)
|
||||
#if !defined(HB_NO_VAR) && CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1,16,0)
|
||||
cairo_font_options_t *font_options = cairo_font_options_create ();
|
||||
|
||||
// Set variations
|
||||
|
1
thirdparty/harfbuzz/src/hb-config.hh
vendored
1
thirdparty/harfbuzz/src/hb-config.hh
vendored
@ -56,7 +56,6 @@
|
||||
|
||||
#ifdef HB_LEAN
|
||||
#define HB_DISABLE_DEPRECATED
|
||||
#define HB_NDEBUG
|
||||
#define HB_NO_ATEXIT
|
||||
#define HB_NO_BUFFER_MESSAGE
|
||||
#define HB_NO_BUFFER_SERIALIZE
|
||||
|
461
thirdparty/harfbuzz/src/hb-coretext-font.cc
vendored
Normal file
461
thirdparty/harfbuzz/src/hb-coretext-font.cc
vendored
Normal file
@ -0,0 +1,461 @@
|
||||
/*
|
||||
* Copyright © 2024 Google, Inc.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Author(s): Behdad Esfahbod
|
||||
*/
|
||||
|
||||
#include "hb.hh"
|
||||
|
||||
#ifdef HAVE_CORETEXT
|
||||
|
||||
#include "hb-coretext.h"
|
||||
|
||||
#include "hb-draw.hh"
|
||||
#include "hb-font.hh"
|
||||
#include "hb-machinery.hh"
|
||||
|
||||
#if MAC_OS_X_VERSION_MIN_REQUIRED < 101100
|
||||
# define kCTFontOrientationDefault kCTFontDefaultOrientation
|
||||
#endif
|
||||
|
||||
#define MAX_GLYPHS 64u
|
||||
|
||||
static void
|
||||
_hb_coretext_font_destroy (void *font_data)
|
||||
{
|
||||
CTFontRef ct_font = (CTFontRef) font_data;
|
||||
|
||||
CFRelease (ct_font);
|
||||
}
|
||||
|
||||
static hb_bool_t
|
||||
hb_coretext_get_nominal_glyph (hb_font_t *font HB_UNUSED,
|
||||
void *font_data,
|
||||
hb_codepoint_t unicode,
|
||||
hb_codepoint_t *glyph,
|
||||
void *user_data HB_UNUSED)
|
||||
{
|
||||
CTFontRef ct_font = (CTFontRef) font_data;
|
||||
UniChar ch = unicode;
|
||||
CGGlyph cg_glyph;
|
||||
if (CTFontGetGlyphsForCharacters (ct_font, &ch, &cg_glyph, 1))
|
||||
{
|
||||
*glyph = cg_glyph;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static unsigned int
|
||||
hb_coretext_get_nominal_glyphs (hb_font_t *font HB_UNUSED,
|
||||
void *font_data,
|
||||
unsigned int count,
|
||||
const hb_codepoint_t *first_unicode,
|
||||
unsigned int unicode_stride,
|
||||
hb_codepoint_t *first_glyph,
|
||||
unsigned int glyph_stride,
|
||||
void *user_data HB_UNUSED)
|
||||
{
|
||||
CTFontRef ct_font = (CTFontRef) font_data;
|
||||
|
||||
UniChar ch[MAX_GLYPHS];
|
||||
CGGlyph cg_glyph[MAX_GLYPHS];
|
||||
for (unsigned i = 0; i < count; i += MAX_GLYPHS)
|
||||
{
|
||||
unsigned c = (unsigned) hb_min ((int) MAX_GLYPHS, (int) count - (int) i);
|
||||
for (unsigned j = 0; j < c; j++)
|
||||
{
|
||||
ch[j] = *first_unicode;
|
||||
first_unicode = &StructAtOffset<const hb_codepoint_t> (first_unicode, unicode_stride);
|
||||
}
|
||||
CTFontGetGlyphsForCharacters (ct_font, ch, cg_glyph, c);
|
||||
for (unsigned j = 0; j < c; j++)
|
||||
{
|
||||
*first_glyph = cg_glyph[j];
|
||||
first_glyph = &StructAtOffset<hb_codepoint_t> (first_glyph, glyph_stride);
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static hb_bool_t
|
||||
hb_coretext_get_variation_glyph (hb_font_t *font HB_UNUSED,
|
||||
void *font_data,
|
||||
hb_codepoint_t unicode,
|
||||
hb_codepoint_t variation_selector,
|
||||
hb_codepoint_t *glyph,
|
||||
void *user_data HB_UNUSED)
|
||||
{
|
||||
CTFontRef ct_font = (CTFontRef) font_data;
|
||||
|
||||
UniChar ch[2] = { unicode, variation_selector };
|
||||
CGGlyph cg_glyph[2];
|
||||
|
||||
CTFontGetGlyphsForCharacters (ct_font, ch, cg_glyph, 2);
|
||||
|
||||
if (cg_glyph[1])
|
||||
return false;
|
||||
|
||||
*glyph = cg_glyph[0];
|
||||
return true;
|
||||
}
|
||||
|
||||
static void
|
||||
hb_coretext_get_glyph_h_advances (hb_font_t* font, void* font_data,
|
||||
unsigned count,
|
||||
const hb_codepoint_t *first_glyph,
|
||||
unsigned glyph_stride,
|
||||
hb_position_t *first_advance,
|
||||
unsigned advance_stride,
|
||||
void *user_data HB_UNUSED)
|
||||
{
|
||||
CTFontRef ct_font = (CTFontRef) font_data;
|
||||
|
||||
CGFloat ct_font_size = CTFontGetSize (ct_font);
|
||||
CGFloat x_mult = (CGFloat) font->x_scale / ct_font_size;
|
||||
|
||||
CGGlyph cg_glyph[MAX_GLYPHS];
|
||||
CGSize advances[MAX_GLYPHS];
|
||||
for (unsigned i = 0; i < count; i += MAX_GLYPHS)
|
||||
{
|
||||
unsigned c = (unsigned) hb_min ((int) MAX_GLYPHS, (int) count - (int) i);
|
||||
for (unsigned j = 0; j < c; j++)
|
||||
{
|
||||
cg_glyph[j] = *first_glyph;
|
||||
first_glyph = &StructAtOffset<const hb_codepoint_t> (first_glyph, glyph_stride);
|
||||
}
|
||||
CTFontGetAdvancesForGlyphs (ct_font, kCTFontOrientationHorizontal, cg_glyph, advances, c);
|
||||
for (unsigned j = 0; j < c; j++)
|
||||
{
|
||||
*first_advance = round (advances[j].width * x_mult);
|
||||
first_advance = &StructAtOffset<hb_position_t> (first_advance, advance_stride);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef HB_NO_VERTICAL
|
||||
static void
|
||||
hb_coretext_get_glyph_v_advances (hb_font_t* font, void* font_data,
|
||||
unsigned count,
|
||||
const hb_codepoint_t *first_glyph,
|
||||
unsigned glyph_stride,
|
||||
hb_position_t *first_advance,
|
||||
unsigned advance_stride,
|
||||
void *user_data HB_UNUSED)
|
||||
{
|
||||
CTFontRef ct_font = (CTFontRef) font_data;
|
||||
|
||||
CGFloat ct_font_size = CTFontGetSize (ct_font);
|
||||
CGFloat y_mult = (CGFloat) -font->y_scale / ct_font_size;
|
||||
|
||||
CGGlyph cg_glyph[MAX_GLYPHS];
|
||||
CGSize advances[MAX_GLYPHS];
|
||||
for (unsigned i = 0; i < count; i += MAX_GLYPHS)
|
||||
{
|
||||
unsigned c = (unsigned) hb_min ((int) MAX_GLYPHS, (int) count - (int) i);
|
||||
for (unsigned j = 0; j < c; j++)
|
||||
{
|
||||
cg_glyph[j] = *first_glyph;
|
||||
first_glyph = &StructAtOffset<const hb_codepoint_t> (first_glyph, glyph_stride);
|
||||
}
|
||||
CTFontGetAdvancesForGlyphs (ct_font, kCTFontOrientationVertical, cg_glyph, advances, c);
|
||||
for (unsigned j = 0; j < c; j++)
|
||||
{
|
||||
*first_advance = round (advances[j].width * y_mult);
|
||||
first_advance = &StructAtOffset<hb_position_t> (first_advance, advance_stride);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef HB_NO_VERTICAL
|
||||
static hb_bool_t
|
||||
hb_coretext_get_glyph_v_origin (hb_font_t *font,
|
||||
void *font_data,
|
||||
hb_codepoint_t glyph,
|
||||
hb_position_t *x,
|
||||
hb_position_t *y,
|
||||
void *user_data HB_UNUSED)
|
||||
{
|
||||
CTFontRef ct_font = (CTFontRef) font_data;
|
||||
|
||||
CGFloat ct_font_size = CTFontGetSize (ct_font);
|
||||
CGFloat x_mult = (CGFloat) -font->x_scale / ct_font_size;
|
||||
CGFloat y_mult = (CGFloat) -font->y_scale / ct_font_size;
|
||||
|
||||
const CGGlyph glyphs = glyph;
|
||||
CGSize origin;
|
||||
CTFontGetVerticalTranslationsForGlyphs (ct_font, &glyphs, &origin, 1);
|
||||
|
||||
*x = round (x_mult * origin.width);
|
||||
*y = round (y_mult * origin.height);
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
static hb_bool_t
|
||||
hb_coretext_get_glyph_extents (hb_font_t *font,
|
||||
void *font_data,
|
||||
hb_codepoint_t glyph,
|
||||
hb_glyph_extents_t *extents,
|
||||
void *user_data HB_UNUSED)
|
||||
{
|
||||
CTFontRef ct_font = (CTFontRef) font_data;
|
||||
|
||||
CGFloat ct_font_size = CTFontGetSize (ct_font);
|
||||
CGFloat x_mult = (CGFloat) font->x_scale / ct_font_size;
|
||||
CGFloat y_mult = (CGFloat) font->y_scale / ct_font_size;
|
||||
|
||||
CGGlyph glyphs[1] = { glyph };
|
||||
CGRect bounds = ::CTFontGetBoundingRectsForGlyphs(ct_font,
|
||||
kCTFontOrientationDefault, glyphs, NULL, 1);
|
||||
|
||||
extents->x_bearing = round (bounds.origin.x * x_mult);
|
||||
extents->y_bearing = round (bounds.origin.y * y_mult);
|
||||
extents->width = round (bounds.size.width * x_mult);
|
||||
extents->height = round (bounds.size.height * y_mult);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static hb_bool_t
|
||||
hb_coretext_get_font_h_extents (hb_font_t *font,
|
||||
void *font_data,
|
||||
hb_font_extents_t *metrics,
|
||||
void *user_data HB_UNUSED)
|
||||
{
|
||||
CTFontRef ct_font = (CTFontRef) font_data;
|
||||
CGFloat ct_font_size = CTFontGetSize (ct_font);
|
||||
CGFloat y_mult = (CGFloat) font->y_scale / ct_font_size;
|
||||
|
||||
metrics->ascender = round (CTFontGetAscent (ct_font) * y_mult);
|
||||
metrics->descender = -round (CTFontGetDescent (ct_font) * y_mult);
|
||||
metrics->line_gap = round (CTFontGetLeading (ct_font) * y_mult);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#ifndef HB_NO_DRAW
|
||||
|
||||
static void
|
||||
ct_apply_func (void *info, const CGPathElement *element)
|
||||
{
|
||||
hb_draw_session_t *draws = (hb_draw_session_t *) info;
|
||||
|
||||
switch (element->type)
|
||||
{
|
||||
case kCGPathElementMoveToPoint:
|
||||
draws->move_to (element->points[0].x, element->points[0].y);
|
||||
break;
|
||||
case kCGPathElementAddLineToPoint:
|
||||
draws->line_to (element->points[0].x, element->points[0].y);
|
||||
break;
|
||||
case kCGPathElementAddQuadCurveToPoint:
|
||||
draws->quadratic_to (element->points[0].x, element->points[0].y,
|
||||
element->points[1].x, element->points[1].y);
|
||||
break;
|
||||
case kCGPathElementAddCurveToPoint:
|
||||
draws->cubic_to (element->points[0].x, element->points[0].y,
|
||||
element->points[1].x, element->points[1].y,
|
||||
element->points[2].x, element->points[2].y);
|
||||
break;
|
||||
case kCGPathElementCloseSubpath:
|
||||
draws->close_path ();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
hb_coretext_draw_glyph (hb_font_t *font,
|
||||
void *font_data HB_UNUSED,
|
||||
hb_codepoint_t glyph,
|
||||
hb_draw_funcs_t *draw_funcs, void *draw_data,
|
||||
void *user_data)
|
||||
{
|
||||
CTFontRef ct_font = (CTFontRef) font_data;
|
||||
|
||||
CGFloat ct_font_size = CTFontGetSize (ct_font);
|
||||
CGFloat x_mult = (CGFloat) font->x_scale / ct_font_size;
|
||||
CGFloat y_mult = (CGFloat) font->y_scale / ct_font_size;
|
||||
|
||||
CGAffineTransform transform = CGAffineTransformIdentity;
|
||||
transform = CGAffineTransformScale (transform, x_mult, y_mult);
|
||||
|
||||
CGPathRef path = CTFontCreatePathForGlyph (ct_font, glyph, &transform);
|
||||
if (!path)
|
||||
return;
|
||||
|
||||
hb_draw_session_t drawing = {draw_funcs, draw_data, font->slant};
|
||||
|
||||
CGPathApply (path, &drawing, ct_apply_func);
|
||||
|
||||
CFRelease (path);
|
||||
}
|
||||
#endif
|
||||
|
||||
static hb_bool_t
|
||||
hb_coretext_get_glyph_name (hb_font_t *font,
|
||||
void *font_data HB_UNUSED,
|
||||
hb_codepoint_t glyph,
|
||||
char *name, unsigned int size,
|
||||
void *user_data HB_UNUSED)
|
||||
{
|
||||
CGFontRef cg_font = (CGFontRef) (const void *) font->face->data.coretext;
|
||||
|
||||
CGGlyph cg_glyph = glyph;
|
||||
CFStringRef cf_name = CGFontCopyGlyphNameForGlyph (cg_font, cg_glyph);
|
||||
if (!cf_name)
|
||||
return false;
|
||||
|
||||
CFIndex len = CFStringGetLength (cf_name);
|
||||
if (len > size - 1)
|
||||
len = size - 1;
|
||||
|
||||
CFStringGetBytes (cf_name, CFRangeMake (0, len),
|
||||
kCFStringEncodingUTF8, 0, false,
|
||||
(UInt8 *) name, size, &len);
|
||||
|
||||
name[len] = '\0';
|
||||
return true;
|
||||
}
|
||||
|
||||
static hb_bool_t
|
||||
hb_coretext_get_glyph_from_name (hb_font_t *font HB_UNUSED,
|
||||
void *font_data,
|
||||
const char *name, int len,
|
||||
hb_codepoint_t *glyph,
|
||||
void *user_data HB_UNUSED)
|
||||
{
|
||||
CTFontRef ct_font = (CTFontRef) font_data;
|
||||
|
||||
if (len == -1)
|
||||
len = strlen (name);
|
||||
|
||||
CFStringRef cf_name = CFStringCreateWithBytes (kCFAllocatorDefault,
|
||||
(const UInt8 *) name, len,
|
||||
kCFStringEncodingUTF8, false);
|
||||
CGGlyph cg_glyph = CTFontGetGlyphWithName (ct_font, cf_name);
|
||||
*glyph = cg_glyph;
|
||||
|
||||
CFRelease (cf_name);
|
||||
|
||||
// TODO Return true for .notdef; hb-ft does that.
|
||||
|
||||
return cg_glyph != 0;
|
||||
}
|
||||
|
||||
|
||||
static inline void free_static_coretext_funcs ();
|
||||
|
||||
static struct hb_coretext_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_coretext_font_funcs_lazy_loader_t>
|
||||
{
|
||||
static hb_font_funcs_t *create ()
|
||||
{
|
||||
hb_font_funcs_t *funcs = hb_font_funcs_create ();
|
||||
|
||||
hb_font_funcs_set_nominal_glyph_func (funcs, hb_coretext_get_nominal_glyph, nullptr, nullptr);
|
||||
hb_font_funcs_set_nominal_glyphs_func (funcs, hb_coretext_get_nominal_glyphs, nullptr, nullptr);
|
||||
hb_font_funcs_set_variation_glyph_func (funcs, hb_coretext_get_variation_glyph, nullptr, nullptr);
|
||||
|
||||
hb_font_funcs_set_font_h_extents_func (funcs, hb_coretext_get_font_h_extents, nullptr, nullptr);
|
||||
hb_font_funcs_set_glyph_h_advances_func (funcs, hb_coretext_get_glyph_h_advances, nullptr, nullptr);
|
||||
//hb_font_funcs_set_glyph_h_origin_func (funcs, hb_coretext_get_glyph_h_origin, nullptr, nullptr);
|
||||
|
||||
#ifndef HB_NO_VERTICAL
|
||||
//hb_font_funcs_set_font_v_extents_func (funcs, hb_coretext_get_font_v_extents, nullptr, nullptr);
|
||||
hb_font_funcs_set_glyph_v_advances_func (funcs, hb_coretext_get_glyph_v_advances, nullptr, nullptr);
|
||||
hb_font_funcs_set_glyph_v_origin_func (funcs, hb_coretext_get_glyph_v_origin, nullptr, nullptr);
|
||||
#endif
|
||||
|
||||
#ifndef HB_NO_DRAW
|
||||
hb_font_funcs_set_draw_glyph_func (funcs, hb_coretext_draw_glyph, nullptr, nullptr);
|
||||
#endif
|
||||
|
||||
hb_font_funcs_set_glyph_extents_func (funcs, hb_coretext_get_glyph_extents, nullptr, nullptr);
|
||||
|
||||
#ifndef HB_NO_OT_FONT_GLYPH_NAMES
|
||||
hb_font_funcs_set_glyph_name_func (funcs, hb_coretext_get_glyph_name, nullptr, nullptr);
|
||||
hb_font_funcs_set_glyph_from_name_func (funcs, hb_coretext_get_glyph_from_name, nullptr, nullptr);
|
||||
#endif
|
||||
|
||||
hb_font_funcs_make_immutable (funcs);
|
||||
|
||||
hb_atexit (free_static_coretext_funcs);
|
||||
|
||||
return funcs;
|
||||
}
|
||||
} static_coretext_funcs;
|
||||
|
||||
static inline
|
||||
void free_static_coretext_funcs ()
|
||||
{
|
||||
static_coretext_funcs.free_instance ();
|
||||
}
|
||||
|
||||
static hb_font_funcs_t *
|
||||
_hb_coretext_get_font_funcs ()
|
||||
{
|
||||
return static_coretext_funcs.get_unconst ();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* hb_coretext_font_set_funcs:
|
||||
* @font: #hb_font_t to work upon
|
||||
*
|
||||
* Configures the font-functions structure of the specified
|
||||
* #hb_font_t font object to use CoreText font functions.
|
||||
*
|
||||
* In particular, you can use this function to configure an
|
||||
* existing #hb_face_t face object for use with CoreText font
|
||||
* functions even if that #hb_face_t face object was initially
|
||||
* created with hb_face_create(), and therefore was not
|
||||
* initially configured to use CoreText font functions.
|
||||
*
|
||||
* An #hb_font_t object created with hb_coretext_font_create()
|
||||
* is preconfigured for CoreText font functions and does not
|
||||
* require this function to be used.
|
||||
*
|
||||
* <note>Note: Internally, this function creates a CTFont.
|
||||
* </note>
|
||||
*
|
||||
* Since: 10.1.0
|
||||
**/
|
||||
void
|
||||
hb_coretext_font_set_funcs (hb_font_t *font)
|
||||
{
|
||||
CTFontRef ct_font = hb_coretext_font_get_ct_font (font);
|
||||
if (unlikely (!ct_font))
|
||||
return;
|
||||
|
||||
hb_font_set_funcs (font,
|
||||
_hb_coretext_get_font_funcs (),
|
||||
(void *) CFRetain (ct_font),
|
||||
_hb_coretext_font_destroy);
|
||||
}
|
||||
|
||||
#undef MAX_GLYPHS
|
||||
|
||||
#endif
|
@ -335,7 +335,7 @@ _hb_coretext_shaper_face_data_destroy (hb_coretext_face_data_t *data)
|
||||
* Creates an #hb_face_t face object from the specified
|
||||
* CGFontRef.
|
||||
*
|
||||
* Return value: the new #hb_face_t face object
|
||||
* Return value: (transfer full): The new face object
|
||||
*
|
||||
* Since: 0.9.10
|
||||
*/
|
||||
@ -347,6 +347,65 @@ hb_coretext_face_create (CGFontRef cg_font)
|
||||
return face;
|
||||
}
|
||||
|
||||
/**
|
||||
* hb_coretext_face_create_from_file_or_fail:
|
||||
* @file_name: A font filename
|
||||
* @index: The index of the face within the file
|
||||
*
|
||||
* Creates an #hb_face_t face object from the specified
|
||||
* font file and face index.
|
||||
*
|
||||
* This is similar in functionality to hb_face_create_from_file_or_fail(),
|
||||
* but uses the CoreText library for loading the font file.
|
||||
*
|
||||
* Return value: (transfer full): The new face object, or `NULL` if
|
||||
* no face is found at the specified index or the file cannot be read.
|
||||
*
|
||||
* Since: 10.1.0
|
||||
*/
|
||||
hb_face_t *
|
||||
hb_coretext_face_create_from_file_or_fail (const char *file_name,
|
||||
unsigned int index)
|
||||
{
|
||||
auto url = CFURLCreateFromFileSystemRepresentation (nullptr,
|
||||
(const UInt8 *) file_name,
|
||||
strlen (file_name),
|
||||
false);
|
||||
if (unlikely (!url))
|
||||
return nullptr;
|
||||
|
||||
auto ct_font_desc_array = CTFontManagerCreateFontDescriptorsFromURL (url);
|
||||
if (unlikely (!ct_font_desc_array))
|
||||
{
|
||||
CFRelease (url);
|
||||
return nullptr;
|
||||
}
|
||||
auto ct_font_desc = (CFArrayGetCount (ct_font_desc_array) > index) ?
|
||||
(CTFontDescriptorRef) CFArrayGetValueAtIndex (ct_font_desc_array, index) : nullptr;
|
||||
if (unlikely (!ct_font_desc))
|
||||
{
|
||||
CFRelease (ct_font_desc_array);
|
||||
CFRelease (url);
|
||||
return nullptr;
|
||||
}
|
||||
CFRelease (url);
|
||||
auto ct_font = ct_font_desc ? CTFontCreateWithFontDescriptor (ct_font_desc, 0, nullptr) : nullptr;
|
||||
CFRelease (ct_font_desc_array);
|
||||
if (unlikely (!ct_font))
|
||||
return nullptr;
|
||||
|
||||
auto cg_font = ct_font ? CTFontCopyGraphicsFont (ct_font, nullptr) : nullptr;
|
||||
CFRelease (ct_font);
|
||||
if (unlikely (!cg_font))
|
||||
return nullptr;
|
||||
|
||||
hb_face_t *face = hb_coretext_face_create (cg_font);
|
||||
if (unlikely (hb_face_is_immutable (face)))
|
||||
return nullptr;
|
||||
|
||||
return face;
|
||||
}
|
||||
|
||||
/**
|
||||
* hb_coretext_face_get_cg_font:
|
||||
* @face: The #hb_face_t to work upon
|
||||
@ -439,7 +498,12 @@ _hb_coretext_shaper_font_data_destroy (hb_coretext_font_data_t *data)
|
||||
* Creates an #hb_font_t font object from the specified
|
||||
* CTFontRef.
|
||||
*
|
||||
* Return value: the new #hb_font_t font object
|
||||
* The created font uses the default font functions implemented
|
||||
* navitely by HarfBuzz. If you want to use the CoreText font functions
|
||||
* instead (rarely needed), you can do so by calling
|
||||
* by hb_coretext_font_set_funcs().
|
||||
*
|
||||
* Return value: (transfer full): The new font object
|
||||
*
|
||||
* Since: 1.7.2
|
||||
**/
|
||||
@ -460,6 +524,9 @@ hb_coretext_font_create (CTFontRef ct_font)
|
||||
/* Let there be dragons here... */
|
||||
font->data.coretext.cmpexch (nullptr, (hb_coretext_font_data_t *) CFRetain (ct_font));
|
||||
|
||||
// https://github.com/harfbuzz/harfbuzz/pull/4895#issuecomment-2408471254
|
||||
//hb_coretext_font_set_funcs (font);
|
||||
|
||||
return font;
|
||||
}
|
||||
|
17
thirdparty/harfbuzz/src/hb-coretext.h
vendored
17
thirdparty/harfbuzz/src/hb-coretext.h
vendored
@ -44,9 +44,9 @@ HB_BEGIN_DECLS
|
||||
* HB_CORETEXT_TAG_MORT:
|
||||
*
|
||||
* The #hb_tag_t tag for the `mort` (glyph metamorphosis) table,
|
||||
* which holds AAT features.
|
||||
* which holds AAT features.
|
||||
*
|
||||
* For more information, see
|
||||
* For more information, see
|
||||
* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6mort.html
|
||||
*
|
||||
**/
|
||||
@ -56,7 +56,7 @@ HB_BEGIN_DECLS
|
||||
* HB_CORETEXT_TAG_MORX:
|
||||
*
|
||||
* The #hb_tag_t tag for the `morx` (extended glyph metamorphosis)
|
||||
* table, which holds AAT features.
|
||||
* table, which holds AAT features.
|
||||
*
|
||||
* For more information, see
|
||||
* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6morx.html
|
||||
@ -68,9 +68,9 @@ HB_BEGIN_DECLS
|
||||
* HB_CORETEXT_TAG_KERX:
|
||||
*
|
||||
* The #hb_tag_t tag for the `kerx` (extended kerning) table, which
|
||||
* holds AAT kerning information.
|
||||
* holds AAT kerning information.
|
||||
*
|
||||
* For more information, see
|
||||
* For more information, see
|
||||
* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6kerx.html
|
||||
*
|
||||
**/
|
||||
@ -80,6 +80,10 @@ HB_BEGIN_DECLS
|
||||
HB_EXTERN hb_face_t *
|
||||
hb_coretext_face_create (CGFontRef cg_font);
|
||||
|
||||
HB_EXTERN hb_face_t *
|
||||
hb_coretext_face_create_from_file_or_fail (const char *file_name,
|
||||
unsigned int index);
|
||||
|
||||
HB_EXTERN hb_font_t *
|
||||
hb_coretext_font_create (CTFontRef ct_font);
|
||||
|
||||
@ -90,6 +94,9 @@ hb_coretext_face_get_cg_font (hb_face_t *face);
|
||||
HB_EXTERN CTFontRef
|
||||
hb_coretext_font_get_ct_font (hb_font_t *font);
|
||||
|
||||
HB_EXTERN void
|
||||
hb_coretext_font_set_funcs (hb_font_t *font);
|
||||
|
||||
|
||||
HB_END_DECLS
|
||||
|
||||
|
2
thirdparty/harfbuzz/src/hb-draw.h
vendored
2
thirdparty/harfbuzz/src/hb-draw.h
vendored
@ -70,7 +70,7 @@ typedef struct hb_draw_state_t {
|
||||
*
|
||||
* The default #hb_draw_state_t at the start of glyph drawing.
|
||||
*/
|
||||
#define HB_DRAW_STATE_DEFAULT {0, 0.f, 0.f, 0.f, 0.f, {0.}, {0.}, {0.}}
|
||||
#define HB_DRAW_STATE_DEFAULT {0, 0.f, 0.f, 0.f, 0.f, {0.}, {0.}, {0.}, {0.}, {0.}, {0.}, {0.}}
|
||||
|
||||
|
||||
/**
|
||||
|
55
thirdparty/harfbuzz/src/hb-face.cc
vendored
55
thirdparty/harfbuzz/src/hb-face.cc
vendored
@ -263,6 +263,61 @@ hb_face_create (hb_blob_t *blob,
|
||||
return face;
|
||||
}
|
||||
|
||||
/**
|
||||
* hb_face_create_or_fail:
|
||||
* @blob: #hb_blob_t to work upon
|
||||
* @index: The index of the face within @blob
|
||||
*
|
||||
* Like hb_face_create(), but returns `NULL` if the blob data
|
||||
* contains no usable font face at the specified index.
|
||||
*
|
||||
* Return value: (transfer full): The new face object, or `NULL` if
|
||||
* no face is found at the specified index.
|
||||
*
|
||||
* Since: 10.1.0
|
||||
**/
|
||||
hb_face_t *
|
||||
hb_face_create_or_fail (hb_blob_t *blob,
|
||||
unsigned int index)
|
||||
{
|
||||
unsigned num_faces = hb_face_count (blob);
|
||||
if (index >= num_faces)
|
||||
return nullptr;
|
||||
|
||||
hb_face_t *face = hb_face_create (blob, index);
|
||||
if (hb_object_is_immutable (face))
|
||||
return nullptr;
|
||||
|
||||
return face;
|
||||
}
|
||||
|
||||
/**
|
||||
* hb_face_create_from_file_or_fail:
|
||||
* @file_name: A font filename
|
||||
* @index: The index of the face within the file
|
||||
*
|
||||
* A thin wrapper around hb_blob_create_from_file_or_fail()
|
||||
* followed by hb_face_create_or_fail().
|
||||
*
|
||||
* Return value: (transfer full): The new face object, or `NULL` if
|
||||
* no face is found at the specified index or the file cannot be read.
|
||||
*
|
||||
* Since: 10.1.0
|
||||
**/
|
||||
HB_EXTERN hb_face_t *
|
||||
hb_face_create_from_file_or_fail (const char *file_name,
|
||||
unsigned int index)
|
||||
{
|
||||
hb_blob_t *blob = hb_blob_create_from_file_or_fail (file_name);
|
||||
if (unlikely (!blob))
|
||||
return nullptr;
|
||||
|
||||
hb_face_t *face = hb_face_create_or_fail (blob, index);
|
||||
hb_blob_destroy (blob);
|
||||
|
||||
return face;
|
||||
}
|
||||
|
||||
/**
|
||||
* hb_face_get_empty:
|
||||
*
|
||||
|
8
thirdparty/harfbuzz/src/hb-face.h
vendored
8
thirdparty/harfbuzz/src/hb-face.h
vendored
@ -59,6 +59,14 @@ HB_EXTERN hb_face_t *
|
||||
hb_face_create (hb_blob_t *blob,
|
||||
unsigned int index);
|
||||
|
||||
HB_EXTERN hb_face_t *
|
||||
hb_face_create_or_fail (hb_blob_t *blob,
|
||||
unsigned int index);
|
||||
|
||||
HB_EXTERN hb_face_t *
|
||||
hb_face_create_from_file_or_fail (const char *file_name,
|
||||
unsigned int index);
|
||||
|
||||
/**
|
||||
* hb_reference_table_func_t:
|
||||
* @face: an #hb_face_t to reference table for
|
||||
|
2
thirdparty/harfbuzz/src/hb-font.cc
vendored
2
thirdparty/harfbuzz/src/hb-font.cc
vendored
@ -231,7 +231,7 @@ hb_font_get_glyph_v_advance_nil (hb_font_t *font,
|
||||
void *user_data HB_UNUSED)
|
||||
{
|
||||
/* TODO use font_extents.ascender+descender */
|
||||
return font->y_scale;
|
||||
return -font->y_scale;
|
||||
}
|
||||
|
||||
static hb_position_t
|
||||
|
127
thirdparty/harfbuzz/src/hb-ft.cc
vendored
127
thirdparty/harfbuzz/src/hb-ft.cc
vendored
@ -41,6 +41,7 @@
|
||||
#include "hb-ot-shaper-arabic-pua.hh"
|
||||
#include "hb-paint.hh"
|
||||
|
||||
#include FT_MODULE_H
|
||||
#include FT_ADVANCES_H
|
||||
#include FT_MULTIPLE_MASTERS_H
|
||||
#include FT_OUTLINE_H
|
||||
@ -1432,6 +1433,24 @@ hb_ft_font_create_referenced (FT_Face ft_face)
|
||||
return hb_ft_font_create (ft_face, _hb_ft_face_destroy);
|
||||
}
|
||||
|
||||
|
||||
static void * _hb_ft_alloc (FT_Memory memory, long size)
|
||||
{ return hb_malloc (size); }
|
||||
|
||||
static void _hb_ft_free (FT_Memory memory, void *block)
|
||||
{ hb_free (block); }
|
||||
|
||||
static void * _hb_ft_realloc (FT_Memory memory, long cur_size, long new_size, void *block)
|
||||
{ return hb_realloc (block, new_size); }
|
||||
|
||||
static FT_MemoryRec_ m =
|
||||
{
|
||||
nullptr,
|
||||
_hb_ft_alloc,
|
||||
_hb_ft_free,
|
||||
_hb_ft_realloc
|
||||
};
|
||||
|
||||
static inline void free_static_ft_library ();
|
||||
|
||||
static struct hb_ft_library_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer<FT_Library>,
|
||||
@ -1440,16 +1459,19 @@ static struct hb_ft_library_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer<F
|
||||
static FT_Library create ()
|
||||
{
|
||||
FT_Library l;
|
||||
if (FT_Init_FreeType (&l))
|
||||
if (FT_New_Library (&m, &l))
|
||||
return nullptr;
|
||||
|
||||
FT_Add_Default_Modules (l);
|
||||
FT_Set_Default_Properties (l);
|
||||
|
||||
hb_atexit (free_static_ft_library);
|
||||
|
||||
return l;
|
||||
}
|
||||
static void destroy (FT_Library l)
|
||||
{
|
||||
FT_Done_FreeType (l);
|
||||
FT_Done_Library (l);
|
||||
}
|
||||
static FT_Library get_null ()
|
||||
{
|
||||
@ -1464,9 +1486,76 @@ void free_static_ft_library ()
|
||||
}
|
||||
|
||||
static FT_Library
|
||||
get_ft_library ()
|
||||
reference_ft_library ()
|
||||
{
|
||||
return static_ft_library.get_unconst ();
|
||||
FT_Library l = static_ft_library.get_unconst ();
|
||||
if (unlikely (FT_Reference_Library (l)))
|
||||
{
|
||||
DEBUG_MSG (FT, l, "FT_Reference_Library() failed");
|
||||
return nullptr;
|
||||
}
|
||||
return l;
|
||||
}
|
||||
|
||||
static hb_user_data_key_t ft_library_key = {0};
|
||||
|
||||
static void
|
||||
finalize_ft_library (void *arg)
|
||||
{
|
||||
FT_Face ft_face = (FT_Face) arg;
|
||||
FT_Done_Library ((FT_Library) ft_face->generic.data);
|
||||
}
|
||||
|
||||
static void
|
||||
destroy_ft_library (void *arg)
|
||||
{
|
||||
FT_Done_Library ((FT_Library) arg);
|
||||
}
|
||||
|
||||
/**
|
||||
* hb_ft_face_create_from_file_or_fail:
|
||||
* @file_name: A font filename
|
||||
* @index: The index of the face within the file
|
||||
*
|
||||
* Creates an #hb_face_t face object from the specified
|
||||
* font file and face index.
|
||||
*
|
||||
* This is similar in functionality to hb_face_create_from_file_or_fail(),
|
||||
* but uses the FreeType library for loading the font file.
|
||||
*
|
||||
* Return value: (transfer full): The new face object, or `NULL` if
|
||||
* no face is found at the specified index or the file cannot be read.
|
||||
*
|
||||
* Since: 10.1.0
|
||||
*/
|
||||
hb_face_t *
|
||||
hb_ft_face_create_from_file_or_fail (const char *file_name,
|
||||
unsigned int index)
|
||||
{
|
||||
FT_Library ft_library = reference_ft_library ();
|
||||
if (unlikely (!ft_library))
|
||||
{
|
||||
DEBUG_MSG (FT, ft_library, "reference_ft_library failed");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
FT_Face ft_face;
|
||||
if (unlikely (FT_New_Face (ft_library,
|
||||
file_name,
|
||||
index,
|
||||
&ft_face)))
|
||||
return nullptr;
|
||||
|
||||
hb_face_t *face = hb_ft_face_create_referenced (ft_face);
|
||||
FT_Done_Face (ft_face);
|
||||
|
||||
ft_face->generic.data = ft_library;
|
||||
ft_face->generic.finalizer = finalize_ft_library;
|
||||
|
||||
if (hb_face_is_immutable (face))
|
||||
return nullptr;
|
||||
|
||||
return face;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1511,26 +1600,36 @@ hb_ft_font_set_funcs (hb_font_t *font)
|
||||
if (unlikely (!blob_length))
|
||||
DEBUG_MSG (FT, font, "Font face has empty blob");
|
||||
|
||||
FT_Face ft_face = nullptr;
|
||||
FT_Error err = FT_New_Memory_Face (get_ft_library (),
|
||||
(const FT_Byte *) blob_data,
|
||||
blob_length,
|
||||
hb_face_get_index (font->face),
|
||||
&ft_face);
|
||||
|
||||
if (unlikely (err)) {
|
||||
FT_Library ft_library = reference_ft_library ();
|
||||
if (unlikely (!ft_library))
|
||||
{
|
||||
hb_blob_destroy (blob);
|
||||
DEBUG_MSG (FT, font, "Font face FT_New_Memory_Face() failed");
|
||||
DEBUG_MSG (FT, font, "reference_ft_library failed");
|
||||
return;
|
||||
}
|
||||
|
||||
FT_Face ft_face = nullptr;
|
||||
if (unlikely (FT_New_Memory_Face (ft_library,
|
||||
(const FT_Byte *) blob_data,
|
||||
blob_length,
|
||||
hb_face_get_index (font->face),
|
||||
&ft_face)))
|
||||
{
|
||||
hb_blob_destroy (blob);
|
||||
DEBUG_MSG (FT, font, "FT_New_Memory_Face() failed");
|
||||
return;
|
||||
}
|
||||
|
||||
if (FT_Select_Charmap (ft_face, FT_ENCODING_MS_SYMBOL))
|
||||
FT_Select_Charmap (ft_face, FT_ENCODING_UNICODE);
|
||||
|
||||
|
||||
// Hook the blob to the FT_Face
|
||||
ft_face->generic.data = blob;
|
||||
ft_face->generic.finalizer = _release_blob;
|
||||
|
||||
// And the FT_Library to the blob
|
||||
hb_blob_set_user_data (blob, &ft_library_key, ft_library, destroy_ft_library, true);
|
||||
|
||||
_hb_ft_font_set_funcs (font, ft_face, true);
|
||||
hb_ft_font_set_load_flags (font, FT_LOAD_DEFAULT | FT_LOAD_NO_HINTING);
|
||||
|
||||
|
3
thirdparty/harfbuzz/src/hb-ft.h
vendored
3
thirdparty/harfbuzz/src/hb-ft.h
vendored
@ -84,6 +84,9 @@ hb_ft_face_create_cached (FT_Face ft_face);
|
||||
HB_EXTERN hb_face_t *
|
||||
hb_ft_face_create_referenced (FT_Face ft_face);
|
||||
|
||||
HB_EXTERN hb_face_t *
|
||||
hb_ft_face_create_from_file_or_fail (const char *file_name,
|
||||
unsigned int index);
|
||||
|
||||
/*
|
||||
* hb-font from ft-face.
|
||||
|
8
thirdparty/harfbuzz/src/hb-icu.cc
vendored
8
thirdparty/harfbuzz/src/hb-icu.cc
vendored
@ -31,6 +31,11 @@
|
||||
|
||||
#ifdef HAVE_ICU
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
|
||||
// https://github.com/harfbuzz/harfbuzz/issues/4915
|
||||
#pragma GCC diagnostic ignored "-Wredundant-decls"
|
||||
|
||||
#include "hb-icu.h"
|
||||
|
||||
#include "hb-machinery.hh"
|
||||
@ -44,7 +49,6 @@
|
||||
/* ICU extra semicolon, fixed since 65, https://github.com/unicode-org/icu/commit/480bec3 */
|
||||
#if U_ICU_VERSION_MAJOR_NUM < 65 && (defined(__GNUC__) || defined(__clang__))
|
||||
#define HB_ICU_EXTRA_SEMI_IGNORED
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wextra-semi-stmt"
|
||||
#endif
|
||||
|
||||
@ -284,8 +288,6 @@ hb_icu_get_unicode_funcs ()
|
||||
return static_icu_funcs.get_unconst ();
|
||||
}
|
||||
|
||||
#ifdef HB_ICU_EXTRA_SEMI_IGNORED
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
2
thirdparty/harfbuzz/src/hb-limits.hh
vendored
2
thirdparty/harfbuzz/src/hb-limits.hh
vendored
@ -101,7 +101,7 @@
|
||||
#endif
|
||||
|
||||
#ifndef HB_CFF_MAX_OPS
|
||||
#define HB_CFF_MAX_OPS 10000
|
||||
#define HB_CFF_MAX_OPS 200000
|
||||
#endif
|
||||
|
||||
#ifndef HB_MAX_COMPOSITE_OPERATIONS_PER_GLYPH
|
||||
|
2
thirdparty/harfbuzz/src/hb-map.hh
vendored
2
thirdparty/harfbuzz/src/hb-map.hh
vendored
@ -307,7 +307,7 @@ struct hb_hashmap_t
|
||||
const V& get_with_hash (const K &key, uint32_t hash) const
|
||||
{
|
||||
if (!items) return item_t::default_value ();
|
||||
auto *item = fetch_item (key, hb_hash (key));
|
||||
auto *item = fetch_item (key, hash);
|
||||
if (item)
|
||||
return item->value;
|
||||
return item_t::default_value ();
|
||||
|
@ -30,7 +30,7 @@
|
||||
|
||||
#include "hb.hh"
|
||||
|
||||
/* Variations of this code exist in hb-coretext.cc as well
|
||||
/* Variations of this code exist in hb-coretext-shape.cc as well
|
||||
* as hb-aat-map.cc... */
|
||||
|
||||
typedef struct hb_ms_feature_t {
|
||||
|
4
thirdparty/harfbuzz/src/hb-ot-font.cc
vendored
4
thirdparty/harfbuzz/src/hb-ot-font.cc
vendored
@ -642,7 +642,9 @@ _hb_ot_get_font_funcs ()
|
||||
* hb_ot_font_set_funcs:
|
||||
* @font: #hb_font_t to work upon
|
||||
*
|
||||
* Sets the font functions to use when working with @font.
|
||||
* Sets the font functions to use when working with @font to
|
||||
* the HarfBuzz's native implementation. This is the default
|
||||
* for fonts newly created.
|
||||
*
|
||||
* Since: 0.9.28
|
||||
**/
|
||||
|
@ -3714,11 +3714,11 @@ struct DeltaSetIndexMap
|
||||
|
||||
struct ItemVarStoreInstancer
|
||||
{
|
||||
ItemVarStoreInstancer (const ItemVariationStore *varStore,
|
||||
ItemVarStoreInstancer (const ItemVariationStore *varStore_,
|
||||
const DeltaSetIndexMap *varIdxMap,
|
||||
hb_array_t<const int> coords,
|
||||
VarRegionList::cache_t *cache = nullptr) :
|
||||
varStore (varStore), varIdxMap (varIdxMap), coords (coords), cache (cache)
|
||||
varStore (varStore_), varIdxMap (varIdxMap), coords (coords), cache (cache)
|
||||
{
|
||||
if (!varStore)
|
||||
varStore = &Null(ItemVariationStore);
|
||||
|
35
thirdparty/harfbuzz/src/hb-ot-layout.hh
vendored
35
thirdparty/harfbuzz/src/hb-ot-layout.hh
vendored
@ -173,7 +173,7 @@ _hb_next_syllable (hb_buffer_t *buffer, unsigned int start)
|
||||
|
||||
/* Design:
|
||||
* unicode_props() is a two-byte number. The low byte includes:
|
||||
* - Extended General_Category: 5 bits.
|
||||
* - Modified General_Category: 5 bits.
|
||||
* - A bit each for:
|
||||
* * Is it Default_Ignorable(); we have a modified Default_Ignorable().
|
||||
* * Whether it's one of the four Mongolian Free Variation Selectors,
|
||||
@ -186,17 +186,23 @@ _hb_next_syllable (hb_buffer_t *buffer, unsigned int start)
|
||||
* - For Cf: whether it's ZWJ, ZWNJ, or something else.
|
||||
* - For Ws: index of which space character this is, if space fallback
|
||||
* is needed, ie. we don't set this by default, only if asked to.
|
||||
*
|
||||
* Above I said "modified" General_Category. This is because we need to
|
||||
* remember Variation Selectors, and we don't have bits left. So we
|
||||
* change their Gen_Cat from Mn to Cf, and use a bit of the high byte to
|
||||
* remember them.
|
||||
*/
|
||||
|
||||
enum hb_unicode_props_flags_t {
|
||||
UPROPS_MASK_GEN_CAT = 0x001Fu,
|
||||
UPROPS_MASK_IGNORABLE = 0x0020u,
|
||||
UPROPS_MASK_HIDDEN = 0x0040u, /* MONGOLIAN FREE VARIATION SELECTOR 1..4, or TAG characters */
|
||||
UPROPS_MASK_HIDDEN = 0x0040u, /* MONGOLIAN FREE VARIATION SELECTOR 1..4, or TAG characters, or CGJ sometimes */
|
||||
UPROPS_MASK_CONTINUATION=0x0080u,
|
||||
|
||||
/* If GEN_CAT=FORMAT, top byte masks: */
|
||||
UPROPS_MASK_Cf_ZWJ = 0x0100u,
|
||||
UPROPS_MASK_Cf_ZWNJ = 0x0200u
|
||||
UPROPS_MASK_Cf_ZWNJ = 0x0200u,
|
||||
UPROPS_MASK_Cf_VS = 0x0400u
|
||||
};
|
||||
HB_MARK_AS_FLAG_T (hb_unicode_props_flags_t);
|
||||
|
||||
@ -229,7 +235,7 @@ _hb_glyph_info_set_unicode_props (hb_glyph_info_t *info, hb_buffer_t *buffer)
|
||||
/* TAG characters need similar treatment. Fixes:
|
||||
* https://github.com/harfbuzz/harfbuzz/issues/463 */
|
||||
else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0xE0020u, 0xE007Fu))) props |= UPROPS_MASK_HIDDEN;
|
||||
/* COMBINING GRAPHEME JOINER should not be skipped; at least some times.
|
||||
/* COMBINING GRAPHEME JOINER should not be skipped during GSUB either.
|
||||
* https://github.com/harfbuzz/harfbuzz/issues/554 */
|
||||
else if (unlikely (u == 0x034Fu))
|
||||
{
|
||||
@ -302,6 +308,27 @@ _hb_glyph_info_get_unicode_space_fallback_type (const hb_glyph_info_t *info)
|
||||
(hb_unicode_funcs_t::space_t) (info->unicode_props()>>8) :
|
||||
hb_unicode_funcs_t::NOT_SPACE;
|
||||
}
|
||||
static inline bool
|
||||
_hb_glyph_info_is_variation_selector (const hb_glyph_info_t *info)
|
||||
{
|
||||
return _hb_glyph_info_get_general_category (info) ==
|
||||
HB_UNICODE_GENERAL_CATEGORY_FORMAT &&
|
||||
(info->unicode_props() & UPROPS_MASK_Cf_VS);
|
||||
}
|
||||
static inline void
|
||||
_hb_glyph_info_set_variation_selector (hb_glyph_info_t *info, bool customize)
|
||||
{
|
||||
if (customize)
|
||||
{
|
||||
_hb_glyph_info_set_general_category (info, HB_UNICODE_GENERAL_CATEGORY_FORMAT);
|
||||
info->unicode_props() |= UPROPS_MASK_Cf_VS;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Reset to their original condition
|
||||
_hb_glyph_info_set_general_category (info, HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK);
|
||||
}
|
||||
}
|
||||
|
||||
static inline bool _hb_glyph_info_substituted (const hb_glyph_info_t *info);
|
||||
|
||||
|
@ -222,8 +222,7 @@ handle_variation_selector_cluster (const hb_ot_shape_normalize_context_t *c,
|
||||
(void) buffer->next_glyph ();
|
||||
|
||||
buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_VARIATION_SELECTOR_FALLBACK;
|
||||
_hb_glyph_info_set_general_category (&buffer->cur(),
|
||||
_HB_UNICODE_GENERAL_CATEGORY_VARIATION_SELECTOR);
|
||||
_hb_glyph_info_set_variation_selector (&buffer->cur(), true);
|
||||
if (buffer->not_found_variation_selector != HB_CODEPOINT_INVALID)
|
||||
_hb_glyph_info_clear_default_ignorable (&buffer->cur());
|
||||
|
||||
|
5
thirdparty/harfbuzz/src/hb-ot-shape.cc
vendored
5
thirdparty/harfbuzz/src/hb-ot-shape.cc
vendored
@ -850,12 +850,11 @@ hb_ot_deal_with_variation_selectors (hb_buffer_t *buffer)
|
||||
|
||||
for (unsigned int i = 0; i < count; i++)
|
||||
{
|
||||
if (_hb_glyph_info_get_general_category (&info[i]) ==
|
||||
_HB_UNICODE_GENERAL_CATEGORY_VARIATION_SELECTOR)
|
||||
if (_hb_glyph_info_is_variation_selector (&info[i]))
|
||||
{
|
||||
info[i].codepoint = buffer->not_found_variation_selector;
|
||||
pos[i].x_advance = pos[i].y_advance = pos[i].x_offset = pos[i].y_offset = 0;
|
||||
_hb_glyph_info_set_general_category (&info[i], HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK);
|
||||
_hb_glyph_info_set_variation_selector (&info[i], false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
1179
thirdparty/harfbuzz/src/hb-ot-shaper-use-machine.hh
vendored
1179
thirdparty/harfbuzz/src/hb-ot-shaper-use-machine.hh
vendored
File diff suppressed because it is too large
Load Diff
293
thirdparty/harfbuzz/src/hb-ot-shaper-use-table.hh
vendored
293
thirdparty/harfbuzz/src/hb-ot-shaper-use-table.hh
vendored
@ -67,6 +67,7 @@
|
||||
#define N USE(N) /* BASE_NUM */
|
||||
#define O USE(O) /* OTHER */
|
||||
#define R USE(R) /* REPHA */
|
||||
#define RK USE(RK) /* REORDERING_KILLER */
|
||||
#define SB USE(SB) /* HIEROGLYPH_SEGMENT_BEGIN */
|
||||
#define SE USE(SE) /* HIEROGLYPH_SEGMENT_END */
|
||||
#define SUB USE(SUB) /* CONS_SUB */
|
||||
@ -101,7 +102,7 @@
|
||||
#ifndef HB_OPTIMIZE_SIZE
|
||||
|
||||
static const uint8_t
|
||||
hb_use_u8[3343] =
|
||||
hb_use_u8[3345] =
|
||||
{
|
||||
16, 50, 51, 51, 51, 52, 51, 83, 118, 131, 57, 58, 59, 195, 211, 62,
|
||||
51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
|
||||
@ -201,89 +202,89 @@ hb_use_u8[3343] =
|
||||
2, 2, 2, 107, 22, 20, 20, 22, 48, 48, 22, 108, 2, 2, 2, 9,
|
||||
0, 0, 0, 0, 0, 0, 109, 110, 110, 110, 110, 0, 0, 0, 0, 0,
|
||||
0, 106, 74, 2, 2, 2, 2, 2, 2, 60, 61, 59, 25, 22, 111, 61,
|
||||
2, 2, 2, 2, 107, 22, 23, 45, 45, 102, 14, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 61, 18, 48, 23, 112, 102, 102, 102, 113, 114, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 0, 30, 2, 11, 46, 115, 115, 115, 11, 115,
|
||||
115, 15, 115, 115, 115, 26, 0, 40, 0, 0, 0, 116, 51, 11, 5, 0,
|
||||
0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 6, 118,
|
||||
119, 42, 42, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 119,
|
||||
120, 119, 119, 119, 119, 119, 119, 119, 119, 0, 0, 121, 0, 0, 0, 0,
|
||||
0, 0, 7, 121, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 122, 122, 0, 0,
|
||||
2, 2, 2, 2, 107, 22, 23, 45, 45, 102, 112, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 61, 18, 48, 23, 113, 102, 102, 102, 114, 115, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 0, 30, 2, 11, 46, 116, 116, 116, 11, 116,
|
||||
116, 15, 116, 116, 116, 26, 0, 40, 0, 0, 0, 117, 51, 11, 5, 0,
|
||||
0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 6, 119,
|
||||
120, 42, 42, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 120,
|
||||
121, 120, 120, 120, 120, 120, 120, 120, 120, 0, 0, 122, 0, 0, 0, 0,
|
||||
0, 0, 7, 122, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 123, 123, 0, 0,
|
||||
0, 2, 2, 2, 2, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0,
|
||||
123, 0, 122, 122, 0, 0, 0, 0, 0, 2, 53, 2, 108, 2, 10, 2,
|
||||
124, 0, 123, 123, 0, 0, 0, 0, 0, 2, 53, 2, 108, 2, 10, 2,
|
||||
2, 2, 65, 19, 16, 0, 0, 31, 0, 2, 2, 0, 0, 0, 0, 0,
|
||||
0, 29, 2, 2, 2, 2, 2, 2, 2, 2, 2, 124, 23, 23, 23, 23,
|
||||
23, 23, 23, 125, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11,
|
||||
11, 11, 2, 0, 0, 0, 0, 0, 52, 2, 2, 2, 22, 22, 126, 115,
|
||||
0, 2, 2, 2, 127, 20, 59, 20, 112, 102, 128, 0, 0, 0, 0, 0,
|
||||
0, 11, 129, 2, 2, 2, 2, 2, 2, 2, 130, 23, 22, 20, 48, 131,
|
||||
132, 133, 0, 0, 0, 0, 0, 0, 0, 2, 2, 52, 30, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 10, 22, 59, 99, 76, 134, 135, 136, 0, 0, 0,
|
||||
0, 2, 137, 2, 2, 2, 2, 138, 0, 30, 2, 42, 5, 0, 79, 15,
|
||||
2, 53, 22, 139, 52, 53, 2, 2, 105, 10, 9, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 140, 21, 25, 0, 0, 141, 142, 0, 0, 0,
|
||||
0, 2, 65, 45, 23, 80, 47, 143, 0, 81, 81, 81, 81, 81, 81, 81,
|
||||
81, 0, 0, 0, 0, 0, 0, 0, 6, 119, 119, 119, 119, 120, 0, 0,
|
||||
0, 29, 2, 2, 2, 2, 2, 2, 2, 2, 2, 125, 23, 23, 23, 23,
|
||||
23, 23, 23, 126, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11,
|
||||
11, 11, 2, 0, 0, 0, 0, 0, 52, 2, 2, 2, 22, 22, 127, 116,
|
||||
0, 2, 2, 2, 128, 20, 59, 20, 113, 102, 129, 0, 0, 0, 0, 0,
|
||||
0, 11, 130, 2, 2, 2, 2, 2, 2, 2, 131, 23, 22, 20, 48, 132,
|
||||
133, 134, 0, 0, 0, 0, 0, 0, 0, 2, 2, 52, 30, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 10, 22, 59, 99, 76, 135, 136, 137, 0, 0, 0,
|
||||
0, 2, 138, 2, 2, 2, 2, 139, 0, 30, 2, 42, 5, 0, 79, 15,
|
||||
2, 53, 22, 140, 52, 53, 2, 2, 105, 10, 9, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 141, 21, 25, 0, 0, 142, 143, 0, 0, 0,
|
||||
0, 2, 65, 45, 23, 80, 47, 144, 0, 81, 81, 81, 81, 81, 81, 81,
|
||||
81, 0, 0, 0, 0, 0, 0, 0, 6, 120, 120, 120, 120, 121, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 9, 2, 2, 2, 9, 2, 30, 2, 2, 2,
|
||||
2, 2, 30, 2, 2, 2, 30, 9, 0, 127, 20, 27, 31, 0, 0, 144,
|
||||
145, 2, 2, 30, 2, 30, 2, 2, 2, 2, 2, 2, 0, 14, 37, 0,
|
||||
146, 2, 2, 13, 37, 0, 30, 2, 2, 2, 0, 0, 0, 0, 0, 0,
|
||||
2, 2, 30, 2, 2, 2, 30, 9, 0, 128, 20, 27, 31, 0, 0, 145,
|
||||
146, 2, 2, 30, 2, 30, 2, 2, 2, 2, 2, 2, 0, 14, 37, 0,
|
||||
147, 2, 2, 13, 37, 0, 30, 2, 2, 2, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 30, 2, 2, 9, 2, 2, 11, 41, 0, 0, 0,
|
||||
0, 2, 2, 2, 0, 27, 22, 22, 30, 2, 2, 2, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 27, 38, 0, 2, 2, 2, 115, 115, 115, 115,
|
||||
115, 147, 2, 9, 0, 0, 0, 0, 0, 2, 14, 14, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 27, 38, 0, 2, 2, 2, 116, 116, 116, 116,
|
||||
116, 148, 2, 9, 0, 0, 0, 0, 0, 2, 14, 14, 0, 0, 0, 0,
|
||||
0, 9, 2, 2, 9, 2, 2, 2, 2, 30, 2, 9, 0, 30, 2, 0,
|
||||
0, 148, 149, 150, 2, 2, 2, 2, 2, 2, 2, 2, 2, 22, 22, 20,
|
||||
20, 20, 22, 22, 133, 0, 0, 0, 0, 0, 151, 151, 151, 151, 151, 151,
|
||||
151, 151, 151, 151, 2, 2, 2, 2, 2, 53, 52, 53, 0, 0, 0, 0,
|
||||
152, 11, 74, 2, 2, 2, 2, 2, 2, 18, 19, 21, 16, 24, 37, 0,
|
||||
0, 149, 150, 151, 2, 2, 2, 2, 2, 2, 2, 2, 2, 22, 22, 20,
|
||||
20, 20, 22, 22, 134, 0, 0, 0, 0, 0, 152, 152, 152, 152, 152, 152,
|
||||
152, 152, 152, 152, 2, 2, 2, 2, 2, 53, 52, 53, 0, 0, 0, 0,
|
||||
153, 11, 74, 2, 2, 2, 2, 2, 2, 18, 19, 21, 16, 24, 37, 0,
|
||||
0, 0, 31, 0, 0, 0, 0, 0, 0, 11, 49, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 127, 20, 22, 153, 22, 21, 154, 155, 2, 2, 2, 2,
|
||||
2, 0, 0, 65, 156, 0, 0, 0, 0, 2, 13, 0, 0, 0, 0, 0,
|
||||
0, 2, 65, 25, 20, 20, 20, 22, 22, 108, 157, 0, 0, 56, 158, 31,
|
||||
159, 30, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 23,
|
||||
19, 22, 22, 160, 44, 0, 0, 0, 49, 127, 0, 0, 0, 0, 0, 0,
|
||||
2, 2, 2, 2, 128, 20, 22, 154, 22, 21, 155, 156, 2, 2, 2, 2,
|
||||
2, 0, 0, 65, 157, 0, 0, 0, 0, 2, 13, 0, 0, 0, 0, 0,
|
||||
0, 2, 65, 25, 20, 20, 20, 22, 22, 108, 158, 0, 0, 56, 159, 31,
|
||||
160, 30, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 23,
|
||||
19, 22, 22, 161, 44, 0, 0, 0, 49, 128, 0, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 9, 9, 2, 2, 30, 2, 2, 2, 2, 2, 2, 2,
|
||||
30, 2, 2, 2, 2, 2, 2, 2, 10, 18, 19, 21, 22, 161, 31, 0,
|
||||
30, 2, 2, 2, 2, 2, 2, 2, 10, 18, 19, 21, 22, 162, 31, 0,
|
||||
0, 11, 11, 30, 2, 2, 2, 9, 30, 9, 2, 30, 2, 2, 58, 17,
|
||||
23, 16, 23, 47, 32, 33, 32, 34, 0, 0, 0, 0, 35, 0, 0, 0,
|
||||
2, 2, 23, 0, 11, 11, 11, 46, 0, 11, 11, 46, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 30, 0, 9, 2, 2, 2, 30, 45, 59, 20,
|
||||
20, 31, 33, 32, 32, 25, 162, 29, 163, 164, 37, 0, 0, 0, 0, 0,
|
||||
20, 31, 33, 32, 32, 25, 163, 29, 164, 165, 37, 0, 0, 0, 0, 0,
|
||||
0, 12, 26, 0, 0, 0, 0, 0, 0, 2, 2, 65, 25, 20, 20, 20,
|
||||
22, 23, 125, 15, 17, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0,
|
||||
165, 166, 0, 0, 0, 0, 0, 0, 0, 18, 19, 20, 20, 66, 99, 25,
|
||||
159, 11, 167, 9, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2,
|
||||
65, 25, 20, 20, 0, 48, 48, 11, 168, 37, 0, 0, 0, 0, 0, 0,
|
||||
22, 23, 126, 15, 17, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0,
|
||||
166, 167, 0, 0, 0, 0, 0, 0, 0, 18, 19, 20, 20, 66, 99, 25,
|
||||
160, 11, 168, 9, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2,
|
||||
65, 25, 20, 20, 0, 48, 48, 11, 169, 37, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 2, 2, 20, 0, 23, 19, 20, 20, 21, 16, 82,
|
||||
168, 38, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 10, 169,
|
||||
25, 20, 22, 22, 167, 9, 0, 0, 0, 2, 2, 2, 2, 2, 9, 43,
|
||||
135, 23, 22, 20, 76, 21, 22, 0, 0, 2, 2, 2, 9, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 2, 18, 19, 20, 21, 22, 105, 168, 37, 0,
|
||||
169, 38, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 10, 170,
|
||||
25, 20, 22, 22, 168, 9, 0, 0, 0, 2, 2, 2, 2, 2, 9, 43,
|
||||
136, 23, 22, 20, 76, 21, 22, 0, 0, 2, 2, 2, 9, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 2, 18, 19, 20, 21, 22, 105, 169, 37, 0,
|
||||
0, 2, 2, 2, 9, 30, 0, 2, 2, 2, 2, 30, 9, 2, 2, 2,
|
||||
2, 23, 23, 18, 32, 33, 12, 170, 164, 171, 172, 0, 0, 0, 0, 0,
|
||||
2, 23, 23, 18, 32, 33, 12, 171, 165, 172, 173, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 0, 2, 2, 2, 65, 25, 20, 20, 0, 22, 23,
|
||||
29, 108, 0, 33, 0, 0, 0, 0, 0, 52, 20, 22, 22, 22, 139, 2,
|
||||
2, 2, 173, 174, 11, 15, 175, 61, 176, 0, 0, 1, 146, 0, 0, 0,
|
||||
0, 52, 20, 22, 16, 19, 20, 2, 2, 2, 2, 157, 157, 157, 177, 177,
|
||||
177, 177, 177, 177, 15, 178, 0, 30, 0, 22, 20, 20, 31, 22, 22, 11,
|
||||
168, 0, 61, 61, 61, 61, 61, 61, 61, 66, 21, 82, 46, 0, 0, 0,
|
||||
29, 108, 0, 33, 0, 0, 0, 0, 0, 52, 20, 22, 22, 22, 140, 2,
|
||||
2, 2, 174, 175, 11, 15, 176, 61, 177, 0, 0, 1, 147, 0, 0, 0,
|
||||
0, 52, 20, 22, 16, 19, 20, 2, 2, 2, 2, 158, 158, 158, 178, 178,
|
||||
178, 178, 178, 178, 15, 179, 0, 30, 0, 22, 20, 20, 31, 22, 22, 11,
|
||||
169, 0, 61, 61, 61, 61, 61, 61, 61, 66, 21, 82, 46, 0, 0, 0,
|
||||
0, 2, 2, 2, 9, 2, 30, 2, 2, 52, 22, 22, 31, 0, 38, 22,
|
||||
27, 11, 158, 179, 180, 0, 0, 0, 0, 2, 2, 2, 30, 9, 2, 2,
|
||||
27, 11, 159, 180, 181, 0, 0, 0, 0, 2, 2, 2, 30, 9, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 23, 23, 47, 22, 35, 82, 68, 0, 0, 0,
|
||||
0, 2, 181, 66, 47, 0, 0, 0, 0, 11, 182, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 23, 22, 20, 31, 0, 48, 16, 142, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 155, 0, 0, 183, 183, 183, 183, 183, 183, 183,
|
||||
183, 184, 184, 184, 185, 186, 184, 183, 183, 187, 183, 183, 188, 189, 189, 189,
|
||||
189, 189, 189, 189, 0, 0, 0, 0, 0, 183, 183, 183, 183, 183, 190, 0,
|
||||
0, 2, 2, 2, 2, 2, 2, 2, 22, 22, 22, 22, 22, 22, 191, 192,
|
||||
193, 11, 11, 11, 46, 0, 0, 0, 0, 29, 74, 2, 2, 2, 2, 2,
|
||||
0, 2, 182, 66, 47, 0, 0, 0, 0, 11, 183, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 23, 22, 20, 31, 0, 48, 16, 143, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 156, 0, 0, 184, 184, 184, 184, 184, 184, 184,
|
||||
184, 185, 185, 185, 186, 187, 185, 184, 184, 188, 184, 184, 189, 190, 190, 190,
|
||||
190, 190, 190, 190, 0, 0, 0, 0, 0, 184, 184, 184, 184, 184, 191, 0,
|
||||
0, 2, 2, 2, 2, 2, 2, 2, 22, 22, 22, 22, 22, 22, 192, 193,
|
||||
194, 11, 11, 11, 46, 0, 0, 0, 0, 29, 74, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 65, 47, 0, 2, 2, 2, 2, 2, 9, 0,
|
||||
58, 194, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||
20, 20, 20, 20, 20, 0, 0, 0, 40, 115, 26, 0, 0, 0, 0, 0,
|
||||
58, 195, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
|
||||
20, 20, 20, 20, 20, 0, 0, 0, 40, 116, 26, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
30, 2, 2, 2, 2, 2, 0, 58, 37, 0, 6, 119, 119, 119, 120, 0,
|
||||
30, 2, 2, 2, 2, 2, 0, 58, 37, 0, 6, 120, 120, 120, 121, 0,
|
||||
0, 11, 11, 11, 49, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0,
|
||||
2, 2, 2, 2, 2, 2, 2, 2, 46, 2, 2, 2, 2, 2, 2, 11,
|
||||
11, 2, 2, 2, 2, 2, 2, 22, 22, 2, 2, 2, 2, 2, 2, 2,
|
||||
@ -301,17 +302,18 @@ hb_use_u8[3343] =
|
||||
FMAbv, FAbv,CMAbv,FMAbv,VMAbv,FMAbv, VAbv, IS,FMAbv, B,FMAbv, B, CGJ, WJ, CGJ, GB,
|
||||
CMAbv,CMAbv, B, GB, B, VAbv, SUB, FPst, FPst,VMBlw, FPst, FPst, FBlw,VMAbv,FMBlw, VAbv,
|
||||
VPre, B, MPre, MBlw, SUB, FAbv, FAbv, MAbv, SUB, Sk, VPst, VAbv,VMAbv,VMAbv, FAbv,CMAbv,
|
||||
VPst, H, B, O,SMAbv,SMAbv,SMAbv, VPst, IS, VBlw, FAbv,VMPre,VMPre,FMAbv,CMBlw,VMBlw,
|
||||
VMBlw,VMAbv, CS, O,FMAbv, ZWNJ, CGJ, WJ, WJ, WJ, O,FMPst, O, SB, SE, O,
|
||||
H, MPst, VPst, H,VMAbv, VAbv,VMBlw, B, VBlw, FPst, VPst, FAbv,VMPst, B,CMAbv, VAbv,
|
||||
MBlw, MPst, MBlw, H, O, VBlw, MPst, MPre, MAbv, MBlw, O, B, FAbv, FAbv, FPst, VBlw,
|
||||
B, B, VPre, O,VMPst, IS, O,VMPst, VBlw, VPst,VMBlw,VMBlw,VMAbv, O, IS,VMBlw,
|
||||
B,VMPst,VMAbv,VMPst, CS, CS, B, N, N, O, HN, VPre, VBlw, VAbv, IS,CMAbv,
|
||||
O, VPst, B, R, R,CMBlw, VAbv, VPre,VMAbv,VMAbv, H, VAbv,CMBlw,VMPst, O,VMAbv,
|
||||
CMBlw, IS, R,FMAbv, B, CS, CS, H,CMBlw,VMPst, H,VMPst, VAbv,VMAbv, VPst, MPst,
|
||||
R, MPst,CMBlw, B,FMBlw, VBlw,VMAbv, CS, SUB, SUB, GB, FBlw, FBlw,CMAbv, IS, VBlw,
|
||||
IS, R, MBlw, GB, VAbv, R,VMPst, G, G, J, J, J, SB, SE, J, HR,
|
||||
G, G, HM, HM, HM, G, O, MPre, MPre, MPst,VMAbv, MBlw, VBlw, O, VBlw,
|
||||
VPst, H, B, O,SMAbv,SMAbv,SMAbv, VPst, IS, RK, RK, VBlw, FAbv,VMPre,VMPre,FMAbv,
|
||||
CMBlw,VMBlw,VMBlw,VMAbv, CS, O,FMAbv, ZWNJ, CGJ, WJ, WJ, WJ, O,FMPst, O, SB,
|
||||
SE, O, H, MPst, VPst, H,VMAbv, VAbv,VMBlw, B, VBlw, FPst, VPst, FAbv,VMPst, B,
|
||||
CMAbv, VAbv, MBlw, MPst, MBlw, H, O, VBlw, MPst, MPre, MAbv, MBlw, O, B, FAbv, FAbv,
|
||||
FPst, VBlw, B, B, VPre, O,VMPst, IS, O,VMPst, VBlw, VPst,VMBlw,VMBlw,VMAbv, O,
|
||||
IS,VMBlw, B,VMPst,VMAbv,VMPst, CS, CS, B, N, N, O, HN, VPre, VBlw, VAbv,
|
||||
IS,CMAbv, O, VPst, B, R, R,CMBlw, VAbv, VPre,VMAbv,VMAbv, H, VAbv,CMBlw,VMPst,
|
||||
O,VMAbv,CMBlw, IS, R,FMAbv, B, CS, CS, H,CMBlw,VMPst, H,VMPst, VAbv,VMAbv,
|
||||
VPst, MPst, R, MPst,CMBlw, B,FMBlw, VBlw,VMAbv, CS, SUB, SUB, GB, FBlw, FBlw,CMAbv,
|
||||
IS, VBlw, IS, R, MBlw, GB, VAbv, R,VMPst, G, G, J, J, J, SB, SE,
|
||||
J, HR, G, G, HM, HM, HM, G, O, MPre, MPre, MPst,VMAbv, MBlw, VBlw, O,
|
||||
VBlw,
|
||||
};
|
||||
static const uint16_t
|
||||
hb_use_u16[856] =
|
||||
@ -387,7 +389,7 @@ hb_use_get_category (unsigned u)
|
||||
#else
|
||||
|
||||
static const uint8_t
|
||||
hb_use_u8[3655] =
|
||||
hb_use_u8[3657] =
|
||||
{
|
||||
16, 50, 51, 51, 51, 52, 51, 83, 118, 131, 57, 58, 59, 195, 211, 62,
|
||||
51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
|
||||
@ -507,89 +509,89 @@ hb_use_u8[3655] =
|
||||
48, 48, 22, 108, 2, 2, 2, 9, 0, 0, 0, 0, 0, 0, 109, 110,
|
||||
110, 110, 110, 0, 0, 0, 0, 0, 0, 106, 74, 2, 2, 2, 2, 2,
|
||||
2, 60, 61, 59, 25, 22, 111, 61, 2, 2, 2, 2, 107, 22, 23, 45,
|
||||
45, 102, 14, 0, 0, 0, 0, 0, 0, 2, 2, 61, 18, 48, 23, 112,
|
||||
102, 102, 102, 113, 114, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 30,
|
||||
2, 11, 46, 115, 115, 115, 11, 115, 115, 15, 115, 115, 115, 26, 0, 40,
|
||||
0, 0, 0, 116, 51, 11, 5, 0, 0, 0, 0, 0, 0, 0, 117, 0,
|
||||
0, 0, 0, 0, 0, 0, 6, 118, 119, 42, 42, 5, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 119, 119, 120, 119, 119, 119, 119, 119, 119, 119,
|
||||
119, 0, 0, 121, 0, 0, 0, 0, 0, 0, 7, 121, 0, 0, 0, 0,
|
||||
45, 102, 112, 0, 0, 0, 0, 0, 0, 2, 2, 61, 18, 48, 23, 113,
|
||||
102, 102, 102, 114, 115, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 30,
|
||||
2, 11, 46, 116, 116, 116, 11, 116, 116, 15, 116, 116, 116, 26, 0, 40,
|
||||
0, 0, 0, 117, 51, 11, 5, 0, 0, 0, 0, 0, 0, 0, 118, 0,
|
||||
0, 0, 0, 0, 0, 0, 6, 119, 120, 42, 42, 5, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 120, 120, 121, 120, 120, 120, 120, 120, 120, 120,
|
||||
120, 0, 0, 122, 0, 0, 0, 0, 0, 0, 7, 122, 0, 0, 0, 0,
|
||||
0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
|
||||
0, 0, 0, 0, 122, 122, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0,
|
||||
30, 0, 0, 0, 0, 0, 0, 0, 123, 0, 122, 122, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 123, 123, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0,
|
||||
30, 0, 0, 0, 0, 0, 0, 0, 124, 0, 123, 123, 0, 0, 0, 0,
|
||||
0, 2, 53, 2, 108, 2, 10, 2, 2, 2, 65, 19, 16, 0, 0, 31,
|
||||
0, 2, 2, 0, 0, 0, 0, 0, 0, 29, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 124, 23, 23, 23, 23, 23, 23, 23, 125, 0, 0, 0, 0,
|
||||
2, 2, 2, 125, 23, 23, 23, 23, 23, 23, 23, 126, 0, 0, 0, 0,
|
||||
0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 2, 0, 0, 0, 0, 0,
|
||||
52, 2, 2, 2, 22, 22, 126, 115, 0, 2, 2, 2, 127, 20, 59, 20,
|
||||
112, 102, 128, 0, 0, 0, 0, 0, 0, 11, 129, 2, 2, 2, 2, 2,
|
||||
2, 2, 130, 23, 22, 20, 48, 131, 132, 133, 0, 0, 0, 0, 0, 0,
|
||||
52, 2, 2, 2, 22, 22, 127, 116, 0, 2, 2, 2, 128, 20, 59, 20,
|
||||
113, 102, 129, 0, 0, 0, 0, 0, 0, 11, 130, 2, 2, 2, 2, 2,
|
||||
2, 2, 131, 23, 22, 20, 48, 132, 133, 134, 0, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 52, 30, 2, 2, 2, 2, 2, 2, 2, 2, 10, 22, 59,
|
||||
99, 76, 134, 135, 136, 0, 0, 0, 0, 2, 137, 2, 2, 2, 2, 138,
|
||||
0, 30, 2, 42, 5, 0, 79, 15, 2, 53, 22, 139, 52, 53, 2, 2,
|
||||
105, 10, 9, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 140, 21,
|
||||
25, 0, 0, 141, 142, 0, 0, 0, 0, 2, 65, 45, 23, 80, 47, 143,
|
||||
99, 76, 135, 136, 137, 0, 0, 0, 0, 2, 138, 2, 2, 2, 2, 139,
|
||||
0, 30, 2, 42, 5, 0, 79, 15, 2, 53, 22, 140, 52, 53, 2, 2,
|
||||
105, 10, 9, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 141, 21,
|
||||
25, 0, 0, 142, 143, 0, 0, 0, 0, 2, 65, 45, 23, 80, 47, 144,
|
||||
0, 81, 81, 81, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0,
|
||||
6, 119, 119, 119, 119, 120, 0, 0, 0, 2, 2, 2, 2, 2, 9, 2,
|
||||
6, 120, 120, 120, 120, 121, 0, 0, 0, 2, 2, 2, 2, 2, 9, 2,
|
||||
2, 2, 9, 2, 30, 2, 2, 2, 2, 2, 30, 2, 2, 2, 30, 9,
|
||||
0, 127, 20, 27, 31, 0, 0, 144, 145, 2, 2, 30, 2, 30, 2, 2,
|
||||
2, 2, 2, 2, 0, 14, 37, 0, 146, 2, 2, 13, 37, 0, 30, 2,
|
||||
0, 128, 20, 27, 31, 0, 0, 145, 146, 2, 2, 30, 2, 30, 2, 2,
|
||||
2, 2, 2, 2, 0, 14, 37, 0, 147, 2, 2, 13, 37, 0, 30, 2,
|
||||
2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 2, 2,
|
||||
9, 2, 2, 11, 41, 0, 0, 0, 0, 2, 2, 2, 0, 27, 22, 22,
|
||||
30, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 27, 38,
|
||||
0, 2, 2, 2, 115, 115, 115, 115, 115, 147, 2, 9, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 116, 116, 116, 116, 116, 148, 2, 9, 0, 0, 0, 0,
|
||||
0, 2, 14, 14, 0, 0, 0, 0, 0, 9, 2, 2, 9, 2, 2, 2,
|
||||
2, 30, 2, 9, 0, 30, 2, 0, 0, 148, 149, 150, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 22, 22, 20, 20, 20, 22, 22, 133, 0, 0, 0,
|
||||
0, 0, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 2, 2, 2, 2,
|
||||
2, 53, 52, 53, 0, 0, 0, 0, 152, 11, 74, 2, 2, 2, 2, 2,
|
||||
2, 30, 2, 9, 0, 30, 2, 0, 0, 149, 150, 151, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 22, 22, 20, 20, 20, 22, 22, 134, 0, 0, 0,
|
||||
0, 0, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 2, 2, 2, 2,
|
||||
2, 53, 52, 53, 0, 0, 0, 0, 153, 11, 74, 2, 2, 2, 2, 2,
|
||||
2, 18, 19, 21, 16, 24, 37, 0, 0, 0, 31, 0, 0, 0, 0, 0,
|
||||
0, 11, 49, 2, 2, 2, 2, 2, 2, 2, 2, 2, 127, 20, 22, 153,
|
||||
22, 21, 154, 155, 2, 2, 2, 2, 2, 0, 0, 65, 156, 0, 0, 0,
|
||||
0, 11, 49, 2, 2, 2, 2, 2, 2, 2, 2, 2, 128, 20, 22, 154,
|
||||
22, 21, 155, 156, 2, 2, 2, 2, 2, 0, 0, 65, 157, 0, 0, 0,
|
||||
0, 2, 13, 0, 0, 0, 0, 0, 0, 2, 65, 25, 20, 20, 20, 22,
|
||||
22, 108, 157, 0, 0, 56, 158, 31, 159, 30, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 23, 19, 22, 22, 160, 44, 0, 0, 0,
|
||||
49, 127, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 9, 9, 2, 2,
|
||||
22, 108, 158, 0, 0, 56, 159, 31, 160, 30, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 23, 19, 22, 22, 161, 44, 0, 0, 0,
|
||||
49, 128, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 9, 9, 2, 2,
|
||||
30, 2, 2, 2, 2, 2, 2, 2, 30, 2, 2, 2, 2, 2, 2, 2,
|
||||
10, 18, 19, 21, 22, 161, 31, 0, 0, 11, 11, 30, 2, 2, 2, 9,
|
||||
10, 18, 19, 21, 22, 162, 31, 0, 0, 11, 11, 30, 2, 2, 2, 9,
|
||||
30, 9, 2, 30, 2, 2, 58, 17, 23, 16, 23, 47, 32, 33, 32, 34,
|
||||
0, 0, 0, 0, 35, 0, 0, 0, 2, 2, 23, 0, 11, 11, 11, 46,
|
||||
0, 11, 11, 46, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 30, 0,
|
||||
9, 2, 2, 2, 30, 45, 59, 20, 20, 31, 33, 32, 32, 25, 162, 29,
|
||||
163, 164, 37, 0, 0, 0, 0, 0, 0, 12, 26, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 65, 25, 20, 20, 20, 22, 23, 125, 15, 17, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 0, 0, 165, 166, 0, 0, 0, 0, 0, 0,
|
||||
0, 18, 19, 20, 20, 66, 99, 25, 159, 11, 167, 9, 0, 0, 0, 0,
|
||||
9, 2, 2, 2, 30, 45, 59, 20, 20, 31, 33, 32, 32, 25, 163, 29,
|
||||
164, 165, 37, 0, 0, 0, 0, 0, 0, 12, 26, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 65, 25, 20, 20, 20, 22, 23, 126, 15, 17, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 0, 0, 166, 167, 0, 0, 0, 0, 0, 0,
|
||||
0, 18, 19, 20, 20, 66, 99, 25, 160, 11, 168, 9, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 2, 2, 65, 25, 20, 20, 0, 48, 48, 11,
|
||||
168, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 20,
|
||||
0, 23, 19, 20, 20, 21, 16, 82, 168, 38, 0, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 10, 169, 25, 20, 22, 22, 167, 9, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 9, 43, 135, 23, 22, 20, 76, 21, 22, 0,
|
||||
169, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 20,
|
||||
0, 23, 19, 20, 20, 21, 16, 82, 169, 38, 0, 0, 0, 0, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 10, 170, 25, 20, 22, 22, 168, 9, 0, 0,
|
||||
0, 2, 2, 2, 2, 2, 9, 43, 136, 23, 22, 20, 76, 21, 22, 0,
|
||||
0, 2, 2, 2, 9, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 18,
|
||||
19, 20, 21, 22, 105, 168, 37, 0, 0, 2, 2, 2, 9, 30, 0, 2,
|
||||
2, 2, 2, 30, 9, 2, 2, 2, 2, 23, 23, 18, 32, 33, 12, 170,
|
||||
164, 171, 172, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 2,
|
||||
19, 20, 21, 22, 105, 169, 37, 0, 0, 2, 2, 2, 9, 30, 0, 2,
|
||||
2, 2, 2, 30, 9, 2, 2, 2, 2, 23, 23, 18, 32, 33, 12, 171,
|
||||
165, 172, 173, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 2,
|
||||
2, 65, 25, 20, 20, 0, 22, 23, 29, 108, 0, 33, 0, 0, 0, 0,
|
||||
0, 52, 20, 22, 22, 22, 139, 2, 2, 2, 173, 174, 11, 15, 175, 61,
|
||||
176, 0, 0, 1, 146, 0, 0, 0, 0, 52, 20, 22, 16, 19, 20, 2,
|
||||
2, 2, 2, 157, 157, 157, 177, 177, 177, 177, 177, 177, 15, 178, 0, 30,
|
||||
0, 22, 20, 20, 31, 22, 22, 11, 168, 0, 61, 61, 61, 61, 61, 61,
|
||||
0, 52, 20, 22, 22, 22, 140, 2, 2, 2, 174, 175, 11, 15, 176, 61,
|
||||
177, 0, 0, 1, 147, 0, 0, 0, 0, 52, 20, 22, 16, 19, 20, 2,
|
||||
2, 2, 2, 158, 158, 158, 178, 178, 178, 178, 178, 178, 15, 179, 0, 30,
|
||||
0, 22, 20, 20, 31, 22, 22, 11, 169, 0, 61, 61, 61, 61, 61, 61,
|
||||
61, 66, 21, 82, 46, 0, 0, 0, 0, 2, 2, 2, 9, 2, 30, 2,
|
||||
2, 52, 22, 22, 31, 0, 38, 22, 27, 11, 158, 179, 180, 0, 0, 0,
|
||||
2, 52, 22, 22, 31, 0, 38, 22, 27, 11, 159, 180, 181, 0, 0, 0,
|
||||
0, 2, 2, 2, 30, 9, 2, 2, 2, 2, 2, 2, 2, 2, 23, 23,
|
||||
47, 22, 35, 82, 68, 0, 0, 0, 0, 2, 181, 66, 47, 0, 0, 0,
|
||||
0, 11, 182, 2, 2, 2, 2, 2, 2, 2, 2, 23, 22, 20, 31, 0,
|
||||
48, 16, 142, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 155, 0,
|
||||
0, 183, 183, 183, 183, 183, 183, 183, 183, 184, 184, 184, 185, 186, 184, 183,
|
||||
183, 187, 183, 183, 188, 189, 189, 189, 189, 189, 189, 189, 0, 0, 0, 0,
|
||||
0, 183, 183, 183, 183, 183, 190, 0, 0, 2, 2, 2, 2, 2, 2, 2,
|
||||
22, 22, 22, 22, 22, 22, 191, 192, 193, 11, 11, 11, 46, 0, 0, 0,
|
||||
47, 22, 35, 82, 68, 0, 0, 0, 0, 2, 182, 66, 47, 0, 0, 0,
|
||||
0, 11, 183, 2, 2, 2, 2, 2, 2, 2, 2, 23, 22, 20, 31, 0,
|
||||
48, 16, 143, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 156, 0,
|
||||
0, 184, 184, 184, 184, 184, 184, 184, 184, 185, 185, 185, 186, 187, 185, 184,
|
||||
184, 188, 184, 184, 189, 190, 190, 190, 190, 190, 190, 190, 0, 0, 0, 0,
|
||||
0, 184, 184, 184, 184, 184, 191, 0, 0, 2, 2, 2, 2, 2, 2, 2,
|
||||
22, 22, 22, 22, 22, 22, 192, 193, 194, 11, 11, 11, 46, 0, 0, 0,
|
||||
0, 29, 74, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 65, 47,
|
||||
0, 2, 2, 2, 2, 2, 9, 0, 58, 194, 20, 20, 20, 20, 20, 20,
|
||||
0, 2, 2, 2, 2, 2, 9, 0, 58, 195, 20, 20, 20, 20, 20, 20,
|
||||
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0,
|
||||
40, 115, 26, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
|
||||
40, 116, 26, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 30, 2, 2, 2, 2, 2, 0, 58,
|
||||
37, 0, 6, 119, 119, 119, 120, 0, 0, 11, 11, 11, 49, 2, 2, 2,
|
||||
37, 0, 6, 120, 120, 120, 121, 0, 0, 11, 11, 11, 49, 2, 2, 2,
|
||||
0, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||
46, 2, 2, 2, 2, 2, 2, 11, 11, 2, 2, 2, 2, 2, 2, 22,
|
||||
22, 2, 2, 2, 2, 2, 2, 2, 20, 2, 2, 44, 44, 44, 92, 0,
|
||||
@ -607,17 +609,17 @@ hb_use_u8[3655] =
|
||||
FMAbv, B,FMAbv, B, CGJ, WJ, CGJ, GB,CMAbv,CMAbv, B, GB, B, VAbv, SUB, FPst,
|
||||
FPst,VMBlw, FPst, FPst, FBlw,VMAbv,FMBlw, VAbv, VPre, B, MPre, MBlw, SUB, FAbv, FAbv, MAbv,
|
||||
SUB, Sk, VPst, VAbv,VMAbv,VMAbv, FAbv,CMAbv, VPst, H, B, O,SMAbv,SMAbv,SMAbv, VPst,
|
||||
IS, VBlw, FAbv,VMPre,VMPre,FMAbv,CMBlw,VMBlw,VMBlw,VMAbv, CS, O,FMAbv, ZWNJ, CGJ, WJ,
|
||||
WJ, WJ, O,FMPst, O, SB, SE, O, H, MPst, VPst, H,VMAbv, VAbv,VMBlw, B,
|
||||
VBlw, FPst, VPst, FAbv,VMPst, B,CMAbv, VAbv, MBlw, MPst, MBlw, H, O, VBlw, MPst, MPre,
|
||||
MAbv, MBlw, O, B, FAbv, FAbv, FPst, VBlw, B, B, VPre, O,VMPst, IS, O,VMPst,
|
||||
VBlw, VPst,VMBlw,VMBlw,VMAbv, O, IS,VMBlw, B,VMPst,VMAbv,VMPst, CS, CS, B, N,
|
||||
N, O, HN, VPre, VBlw, VAbv, IS,CMAbv, O, VPst, B, R, R,CMBlw, VAbv, VPre,
|
||||
VMAbv,VMAbv, H, VAbv,CMBlw,VMPst, O,VMAbv,CMBlw, IS, R,FMAbv, B, CS, CS, H,
|
||||
CMBlw,VMPst, H,VMPst, VAbv,VMAbv, VPst, MPst, R, MPst,CMBlw, B,FMBlw, VBlw,VMAbv, CS,
|
||||
SUB, SUB, GB, FBlw, FBlw,CMAbv, IS, VBlw, IS, R, MBlw, GB, VAbv, R,VMPst, G,
|
||||
G, J, J, J, SB, SE, J, HR, G, G, HM, HM, HM, G, O, MPre,
|
||||
MPre, MPst,VMAbv, MBlw, VBlw, O, VBlw,
|
||||
IS, RK, RK, VBlw, FAbv,VMPre,VMPre,FMAbv,CMBlw,VMBlw,VMBlw,VMAbv, CS, O,FMAbv, ZWNJ,
|
||||
CGJ, WJ, WJ, WJ, O,FMPst, O, SB, SE, O, H, MPst, VPst, H,VMAbv, VAbv,
|
||||
VMBlw, B, VBlw, FPst, VPst, FAbv,VMPst, B,CMAbv, VAbv, MBlw, MPst, MBlw, H, O, VBlw,
|
||||
MPst, MPre, MAbv, MBlw, O, B, FAbv, FAbv, FPst, VBlw, B, B, VPre, O,VMPst, IS,
|
||||
O,VMPst, VBlw, VPst,VMBlw,VMBlw,VMAbv, O, IS,VMBlw, B,VMPst,VMAbv,VMPst, CS, CS,
|
||||
B, N, N, O, HN, VPre, VBlw, VAbv, IS,CMAbv, O, VPst, B, R, R,CMBlw,
|
||||
VAbv, VPre,VMAbv,VMAbv, H, VAbv,CMBlw,VMPst, O,VMAbv,CMBlw, IS, R,FMAbv, B, CS,
|
||||
CS, H,CMBlw,VMPst, H,VMPst, VAbv,VMAbv, VPst, MPst, R, MPst,CMBlw, B,FMBlw, VBlw,
|
||||
VMAbv, CS, SUB, SUB, GB, FBlw, FBlw,CMAbv, IS, VBlw, IS, R, MBlw, GB, VAbv, R,
|
||||
VMPst, G, G, J, J, J, SB, SE, J, HR, G, G, HM, HM, HM, G,
|
||||
O, MPre, MPre, MPst,VMAbv, MBlw, VBlw, O, VBlw,
|
||||
};
|
||||
static const uint16_t
|
||||
hb_use_u16[486] =
|
||||
@ -683,6 +685,7 @@ hb_use_get_category (unsigned u)
|
||||
#undef N
|
||||
#undef O
|
||||
#undef R
|
||||
#undef RK
|
||||
#undef SB
|
||||
#undef SE
|
||||
#undef SUB
|
||||
|
4
thirdparty/harfbuzz/src/hb-ot-tag-table.hh
vendored
4
thirdparty/harfbuzz/src/hb-ot-tag-table.hh
vendored
@ -6,8 +6,8 @@
|
||||
*
|
||||
* on files with these headers:
|
||||
*
|
||||
* <meta name="updated_at" content="2024-05-31 05:41 PM" />
|
||||
* File-Date: 2024-05-16
|
||||
* <meta name="updated_at" content="2024-07-07 12:57 AM" />
|
||||
* File-Date: 2024-06-14
|
||||
*/
|
||||
|
||||
#ifndef HB_OT_TAG_TABLE_HH
|
||||
|
3
thirdparty/harfbuzz/src/hb-unicode.hh
vendored
3
thirdparty/harfbuzz/src/hb-unicode.hh
vendored
@ -34,9 +34,6 @@
|
||||
#include "hb.hh"
|
||||
|
||||
|
||||
// Hack. See: https://github.com/harfbuzz/harfbuzz/pull/4529#discussion_r1769638033
|
||||
#define _HB_UNICODE_GENERAL_CATEGORY_VARIATION_SELECTOR ((hb_unicode_general_category_t) 30)
|
||||
|
||||
extern HB_INTERNAL const uint8_t _hb_modified_combining_class[256];
|
||||
|
||||
/*
|
||||
|
6
thirdparty/harfbuzz/src/hb-version.h
vendored
6
thirdparty/harfbuzz/src/hb-version.h
vendored
@ -47,20 +47,20 @@ HB_BEGIN_DECLS
|
||||
*
|
||||
* The minor component of the library version available at compile-time.
|
||||
*/
|
||||
#define HB_VERSION_MINOR 0
|
||||
#define HB_VERSION_MINOR 1
|
||||
/**
|
||||
* HB_VERSION_MICRO:
|
||||
*
|
||||
* The micro component of the library version available at compile-time.
|
||||
*/
|
||||
#define HB_VERSION_MICRO 1
|
||||
#define HB_VERSION_MICRO 0
|
||||
|
||||
/**
|
||||
* HB_VERSION_STRING:
|
||||
*
|
||||
* A string literal containing the library version available at compile-time.
|
||||
*/
|
||||
#define HB_VERSION_STRING "10.0.1"
|
||||
#define HB_VERSION_STRING "10.1.0"
|
||||
|
||||
/**
|
||||
* HB_VERSION_ATLEAST:
|
||||
|
Loading…
Reference in New Issue
Block a user