Merge branch 'master' into cff-subset
This commit is contained in:
commit
1ecbf4d3e3
|
@ -11,7 +11,7 @@ env:
|
||||||
- CONFIGURE_OPTS="--with-freetype --with-glib --with-gobject --with-cairo --with-icu --with-graphite2"
|
- CONFIGURE_OPTS="--with-freetype --with-glib --with-gobject --with-cairo --with-icu --with-graphite2"
|
||||||
- NOCONFIGURE=1
|
- NOCONFIGURE=1
|
||||||
# COVERITY_SCAN_TOKEN
|
# COVERITY_SCAN_TOKEN
|
||||||
- secure: "MRJtVu/fQoWNwMAamvIJBCX/1SMvEuEUk/ljAif/y2/3syyWgxFGp17UGnDILdoZYyCqTM+jQciY2P0nVqbjjOAUlML4QOAalqw8kPp8iTsnHUe+KOMVrOVP6p6qAQxk1im1O41cCMkmVKvk+NXe/on5euz6LGF2laHZaOAMoes="
|
- secure: "k6l/18dpsoPAf0E5RQWCr+rgjbHns0H3k0WzSYovCoVg0B7RVlV8x8OjyEOBzEvXI4aaHRdH6MHCPDFnX4fa7ysImlT6LxxIG8YhDdLkJWyS0hHbcJiGxko9AhAGzOZcDl8fZi13d697wagMqqXpjN5v2T/AQm8t4X9z2otJosY="
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
|
@ -28,7 +28,8 @@ matrix:
|
||||||
- make check || .ci/fail.sh
|
- make check || .ci/fail.sh
|
||||||
- rm -rf freetype-2.9
|
- rm -rf freetype-2.9
|
||||||
after_success:
|
after_success:
|
||||||
- bash .ci/run-coveralls.sh # for coveralls.io code coverage tracking
|
- bash .ci/run-coveralls.sh # coveralls.io code coverage
|
||||||
|
- bash <(curl -s https://codecov.io/bash) # codecov.io code coverage
|
||||||
- bash .ci/deploy-docs.sh
|
- bash .ci/deploy-docs.sh
|
||||||
- bash .ci/trigger-coverity.sh
|
- bash .ci/trigger-coverity.sh
|
||||||
|
|
||||||
|
|
13
README
13
README
|
@ -1,9 +1,10 @@
|
||||||
[![Build Status](https://travis-ci.org/harfbuzz/harfbuzz.svg)](https://travis-ci.org/harfbuzz/harfbuzz)
|
[![Travis Build Status](https://travis-ci.org/harfbuzz/harfbuzz.svg)](https://travis-ci.org/harfbuzz/harfbuzz)
|
||||||
[![Build status](https://ci.appveyor.com/api/projects/status/0t0flrxpstj9lb9w?svg=true)](https://ci.appveyor.com/project/harfbuzz/harfbuzz)
|
[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/0t0flrxpstj9lb9w?svg=true)](https://ci.appveyor.com/project/harfbuzz/harfbuzz)
|
||||||
[![CircleCI](https://circleci.com/gh/harfbuzz/harfbuzz.svg?style=svg)](https://circleci.com/gh/harfbuzz/harfbuzz)
|
[![CircleCI Build Status](https://circleci.com/gh/harfbuzz/harfbuzz.svg?style=svg)](https://circleci.com/gh/harfbuzz/harfbuzz)
|
||||||
[![Coverity](https://img.shields.io/coverity/scan/5450.svg)](https://scan.coverity.com/projects/behdad-harfbuzz)
|
[![Coverity Code Health](https://img.shields.io/coverity/scan/5450.svg)](https://scan.coverity.com/projects/behdad-harfbuzz)
|
||||||
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/f17f1708783c447488bc8dd317150eaa)](https://app.codacy.com/app/behdad/harfbuzz)
|
[![Codacy Code Health](https://api.codacy.com/project/badge/Grade/f17f1708783c447488bc8dd317150eaa)](https://app.codacy.com/app/behdad/harfbuzz)
|
||||||
[![Coverage Status](https://img.shields.io/coveralls/harfbuzz/harfbuzz.svg)](https://coveralls.io/r/harfbuzz/harfbuzz)
|
[![Codecov Code Coverage](https://codecov.io/gh/harfbuzz/harfbuzz/branch/master/graph/badge.svg)](https://codecov.io/gh/harfbuzz/harfbuzz)
|
||||||
|
[![Coverals Code Coverage](https://img.shields.io/coveralls/harfbuzz/harfbuzz.svg)](https://coveralls.io/r/harfbuzz/harfbuzz)
|
||||||
[ABI Tracker](http://abi-laboratory.pro/tracker/timeline/harfbuzz/)
|
[ABI Tracker](http://abi-laboratory.pro/tracker/timeline/harfbuzz/)
|
||||||
|
|
||||||
This is HarfBuzz, a text shaping library.
|
This is HarfBuzz, a text shaping library.
|
||||||
|
|
|
@ -587,6 +587,12 @@ hb_ot_var_has_data
|
||||||
hb_ot_var_find_axis
|
hb_ot_var_find_axis
|
||||||
hb_ot_var_get_axis_count
|
hb_ot_var_get_axis_count
|
||||||
hb_ot_var_get_axes
|
hb_ot_var_get_axes
|
||||||
|
hb_ot_var_axis_flags_t
|
||||||
|
hb_ot_var_axis_get_flags
|
||||||
|
hb_ot_var_get_named_instance_count
|
||||||
|
hb_ot_var_named_instance_get_subfamily_name_id
|
||||||
|
hb_ot_var_named_instance_get_postscript_name_id
|
||||||
|
hb_ot_var_named_instance_get_design_coords
|
||||||
hb_ot_var_normalize_variations
|
hb_ot_var_normalize_variations
|
||||||
hb_ot_var_normalize_coords
|
hb_ot_var_normalize_coords
|
||||||
</SECTION>
|
</SECTION>
|
||||||
|
|
|
@ -12,7 +12,7 @@ if len (sys.argv) != 2:
|
||||||
f = open(sys.argv[1])
|
f = open(sys.argv[1])
|
||||||
header = [f.readline () for _ in range(10)]
|
header = [f.readline () for _ in range(10)]
|
||||||
|
|
||||||
sets = OrderedDict()
|
ranges = OrderedDict()
|
||||||
for line in f.readlines():
|
for line in f.readlines():
|
||||||
line = line.strip()
|
line = line.strip()
|
||||||
if not line or line[0] == '#':
|
if not line or line[0] == '#':
|
||||||
|
@ -25,9 +25,12 @@ for line in f.readlines():
|
||||||
else:
|
else:
|
||||||
start = end = rang[0]
|
start = end = rang[0]
|
||||||
|
|
||||||
if typ not in sets:
|
if typ not in ranges:
|
||||||
sets[typ] = set()
|
ranges[typ] = []
|
||||||
sets[typ].add((start, end))
|
if ranges[typ] and ranges[typ][-1][1] == start - 1:
|
||||||
|
ranges[typ][-1] = (ranges[typ][-1][0], end)
|
||||||
|
else:
|
||||||
|
ranges[typ].append((start, end))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -49,7 +52,7 @@ print ()
|
||||||
print ('#include "hb-unicode.hh"')
|
print ('#include "hb-unicode.hh"')
|
||||||
print ()
|
print ()
|
||||||
|
|
||||||
for typ,s in sets.items():
|
for typ,s in ranges.items():
|
||||||
if typ != "Extended_Pictographic": continue
|
if typ != "Extended_Pictographic": continue
|
||||||
print()
|
print()
|
||||||
print("static const struct hb_unicode_range_t _hb_unicode_emoji_%s_table[] =" % typ)
|
print("static const struct hb_unicode_range_t _hb_unicode_emoji_%s_table[] =" % typ)
|
||||||
|
|
|
@ -90,6 +90,8 @@ typedef struct hb_glyph_info_t
|
||||||
* the reshaping to a small piece around the
|
* the reshaping to a small piece around the
|
||||||
* breaking point only.
|
* breaking point only.
|
||||||
* @HB_GLYPH_FLAG_DEFINED: All the currently defined flags.
|
* @HB_GLYPH_FLAG_DEFINED: All the currently defined flags.
|
||||||
|
*
|
||||||
|
* Since: 1.5.0
|
||||||
*/
|
*/
|
||||||
typedef enum { /*< flags >*/
|
typedef enum { /*< flags >*/
|
||||||
HB_GLYPH_FLAG_UNSAFE_TO_BREAK = 0x00000001,
|
HB_GLYPH_FLAG_UNSAFE_TO_BREAK = 0x00000001,
|
||||||
|
|
|
@ -573,6 +573,10 @@ struct hb_array_t
|
||||||
|
|
||||||
inline unsigned int get_size (void) const { return len * sizeof (Type); }
|
inline unsigned int get_size (void) const { return len * sizeof (Type); }
|
||||||
|
|
||||||
|
template <typename hb_sanitize_context_t>
|
||||||
|
inline bool sanitize (hb_sanitize_context_t *c) const
|
||||||
|
{ return c->check_array (arrayZ, len); }
|
||||||
|
|
||||||
template <typename T> inline operator T * (void) const { return arrayZ; }
|
template <typename T> inline operator T * (void) const { return arrayZ; }
|
||||||
|
|
||||||
inline Type * operator & (void) const { return arrayZ; }
|
inline Type * operator & (void) const { return arrayZ; }
|
||||||
|
@ -598,6 +602,8 @@ struct hb_array_t
|
||||||
Type *arrayZ;
|
Type *arrayZ;
|
||||||
unsigned int len;
|
unsigned int len;
|
||||||
};
|
};
|
||||||
|
template <typename T>
|
||||||
|
inline hb_array_t<T> hb_array (T *array, unsigned int len) { return hb_array_t<T> (array, len); }
|
||||||
|
|
||||||
|
|
||||||
struct HbOpOr
|
struct HbOpOr
|
||||||
|
|
|
@ -42,6 +42,11 @@ namespace OT {
|
||||||
|
|
||||||
struct InstanceRecord
|
struct InstanceRecord
|
||||||
{
|
{
|
||||||
|
friend struct fvar;
|
||||||
|
|
||||||
|
inline hb_array_t<const Fixed> get_coordinates (unsigned int axis_count) const
|
||||||
|
{ return coordinatesZ.as_array (axis_count); }
|
||||||
|
|
||||||
inline bool sanitize (hb_sanitize_context_t *c, unsigned int axis_count) const
|
inline bool sanitize (hb_sanitize_context_t *c, unsigned int axis_count) const
|
||||||
{
|
{
|
||||||
TRACE_SANITIZE (this);
|
TRACE_SANITIZE (this);
|
||||||
|
@ -52,7 +57,7 @@ struct InstanceRecord
|
||||||
protected:
|
protected:
|
||||||
NameID subfamilyNameID;/* The name ID for entries in the 'name' table
|
NameID subfamilyNameID;/* The name ID for entries in the 'name' table
|
||||||
* that provide subfamily names for this instance. */
|
* that provide subfamily names for this instance. */
|
||||||
HBUINT16 reserved; /* Reserved for future use — set to 0. */
|
HBUINT16 flags; /* Reserved for future use — set to 0. */
|
||||||
UnsizedArrayOf<Fixed>
|
UnsizedArrayOf<Fixed>
|
||||||
coordinatesZ; /* The coordinates array for this instance. */
|
coordinatesZ; /* The coordinates array for this instance. */
|
||||||
//NameID postScriptNameIDX;/*Optional. The name ID for entries in the 'name'
|
//NameID postScriptNameIDX;/*Optional. The name ID for entries in the 'name'
|
||||||
|
@ -65,6 +70,11 @@ struct InstanceRecord
|
||||||
|
|
||||||
struct AxisRecord
|
struct AxisRecord
|
||||||
{
|
{
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
AXIS_FLAG_HIDDEN = 0x0001,
|
||||||
|
};
|
||||||
|
|
||||||
inline bool sanitize (hb_sanitize_context_t *c) const
|
inline bool sanitize (hb_sanitize_context_t *c) const
|
||||||
{
|
{
|
||||||
TRACE_SANITIZE (this);
|
TRACE_SANITIZE (this);
|
||||||
|
@ -76,7 +86,7 @@ struct AxisRecord
|
||||||
Fixed minValue; /* The minimum coordinate value for the axis. */
|
Fixed minValue; /* The minimum coordinate value for the axis. */
|
||||||
Fixed defaultValue; /* The default coordinate value for the axis. */
|
Fixed defaultValue; /* The default coordinate value for the axis. */
|
||||||
Fixed maxValue; /* The maximum coordinate value for the axis. */
|
Fixed maxValue; /* The maximum coordinate value for the axis. */
|
||||||
HBUINT16 reserved; /* Reserved for future use — set to 0. */
|
HBUINT16 flags; /* Axis flags. */
|
||||||
NameID axisNameID; /* The name ID for entries in the 'name' table that
|
NameID axisNameID; /* The name ID for entries in the 'name' table that
|
||||||
* provide a display name for this axis. */
|
* provide a display name for this axis. */
|
||||||
|
|
||||||
|
@ -96,12 +106,10 @@ struct fvar
|
||||||
return_trace (version.sanitize (c) &&
|
return_trace (version.sanitize (c) &&
|
||||||
likely (version.major == 1) &&
|
likely (version.major == 1) &&
|
||||||
c->check_struct (this) &&
|
c->check_struct (this) &&
|
||||||
|
axisSize == 20 && /* Assumed in our code. */
|
||||||
instanceSize >= axisCount * 4 + 4 &&
|
instanceSize >= axisCount * 4 + 4 &&
|
||||||
axisSize <= 1024 && /* Arbitrary, just to simplify overflow checks. */
|
get_axes ().sanitize (c) &&
|
||||||
instanceSize <= 1024 && /* Arbitrary, just to simplify overflow checks. */
|
c->check_range (&get_instance (0), instanceCount, instanceSize));
|
||||||
c->check_range (this, things) &&
|
|
||||||
c->check_range (&StructAtOffset<char> (this, things),
|
|
||||||
axisCount * axisSize + instanceCount * instanceSize));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline unsigned int get_axis_count (void) const
|
inline unsigned int get_axis_count (void) const
|
||||||
|
@ -109,9 +117,6 @@ struct fvar
|
||||||
|
|
||||||
inline bool get_axis (unsigned int index, hb_ot_var_axis_t *info) const
|
inline bool get_axis (unsigned int index, hb_ot_var_axis_t *info) const
|
||||||
{
|
{
|
||||||
if (unlikely (index >= axisCount))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (info)
|
if (info)
|
||||||
{
|
{
|
||||||
const AxisRecord &axis = get_axes ()[index];
|
const AxisRecord &axis = get_axes ()[index];
|
||||||
|
@ -126,6 +131,12 @@ struct fvar
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline hb_ot_var_axis_flags_t get_axis_flags (unsigned int index) const
|
||||||
|
{
|
||||||
|
const AxisRecord &axis = get_axes ()[index];
|
||||||
|
return (hb_ot_var_axis_flags_t) (unsigned int) axis.flags;
|
||||||
|
}
|
||||||
|
|
||||||
inline unsigned int get_axis_infos (unsigned int start_offset,
|
inline unsigned int get_axis_infos (unsigned int start_offset,
|
||||||
unsigned int *axes_count /* IN/OUT */,
|
unsigned int *axes_count /* IN/OUT */,
|
||||||
hb_ot_var_axis_t *axes_array /* OUT */) const
|
hb_ot_var_axis_t *axes_array /* OUT */) const
|
||||||
|
@ -180,17 +191,62 @@ struct fvar
|
||||||
return (int) (v * 16384.f + (v >= 0.f ? .5f : -.5f));
|
return (int) (v * 16384.f + (v >= 0.f ? .5f : -.5f));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
inline unsigned int get_instance_count (void) const
|
||||||
inline const AxisRecord * get_axes (void) const
|
{ return instanceCount; }
|
||||||
{ return &StructAtOffset<AxisRecord> (this, things); }
|
|
||||||
|
|
||||||
inline const InstanceRecord * get_instances (void) const
|
inline hb_ot_name_id_t get_instance_subfamily_name_id (unsigned int index) const
|
||||||
{ return &StructAtOffset<InstanceRecord> (get_axes () + axisCount, 0); }
|
{
|
||||||
|
const InstanceRecord &instance = get_instance (index);
|
||||||
|
return instance.subfamilyNameID;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline hb_ot_name_id_t get_instance_postscript_name_id (unsigned int index) const
|
||||||
|
{
|
||||||
|
const InstanceRecord &instance = get_instance (index);
|
||||||
|
if (instanceSize >= axisCount * 4 + 6)
|
||||||
|
return StructAfter<NameID> (instance.get_coordinates (axisCount));
|
||||||
|
return HB_OT_NAME_ID_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline unsigned int get_instance_coords (unsigned int index,
|
||||||
|
unsigned int *coords_length, /* IN/OUT */
|
||||||
|
float *coords /* OUT */) const
|
||||||
|
{
|
||||||
|
if (unlikely (index >= instanceCount))
|
||||||
|
{
|
||||||
|
if (coords_length)
|
||||||
|
*coords_length = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (coords_length && *coords_length)
|
||||||
|
{
|
||||||
|
const InstanceRecord &instance = get_instance (index);
|
||||||
|
hb_array_t<const Fixed> instanceCoords = instance.get_coordinates (axisCount)
|
||||||
|
.sub_array (0, *coords_length);
|
||||||
|
for (unsigned int i = 0; i < instanceCoords.len; i++)
|
||||||
|
coords[i] = instanceCoords.arrayZ[i].to_float ();
|
||||||
|
}
|
||||||
|
return axisCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
inline hb_array_t<const AxisRecord> get_axes (void) const
|
||||||
|
{ return hb_array (&(this+firstAxis), axisCount); }
|
||||||
|
|
||||||
|
inline const InstanceRecord &get_instance (unsigned int i) const
|
||||||
|
{
|
||||||
|
if (unlikely (i >= instanceCount)) return Null (InstanceRecord);
|
||||||
|
|
||||||
|
return StructAtOffset<InstanceRecord> (&StructAfter<InstanceRecord> (get_axes ()),
|
||||||
|
i * instanceSize);
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
FixedVersion<>version; /* Version of the fvar table
|
FixedVersion<>version; /* Version of the fvar table
|
||||||
* initially set to 0x00010000u */
|
* initially set to 0x00010000u */
|
||||||
Offset16 things; /* Offset in bytes from the beginning of the table
|
OffsetTo<AxisRecord>
|
||||||
|
firstAxis; /* Offset in bytes from the beginning of the table
|
||||||
* to the start of the AxisRecord array. */
|
* to the start of the AxisRecord array. */
|
||||||
HBUINT16 reserved; /* This field is permanently reserved. Set to 2. */
|
HBUINT16 reserved; /* This field is permanently reserved. Set to 2. */
|
||||||
HBUINT16 axisCount; /* The number of variation axes in the font (the
|
HBUINT16 axisCount; /* The number of variation axes in the font (the
|
||||||
|
|
|
@ -104,6 +104,51 @@ hb_ot_var_find_axis (hb_face_t *face,
|
||||||
return face->table.fvar->find_axis (axis_tag, axis_index, axis_info);
|
return face->table.fvar->find_axis (axis_tag, axis_index, axis_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hb_ot_var_axis_get_flags:
|
||||||
|
*
|
||||||
|
* Since: REPLACEME
|
||||||
|
**/
|
||||||
|
hb_ot_var_axis_flags_t
|
||||||
|
hb_ot_var_axis_get_flags (hb_face_t *face,
|
||||||
|
unsigned int axis_index)
|
||||||
|
{
|
||||||
|
return face->table.fvar->get_axis_flags (axis_index);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Named instances.
|
||||||
|
*/
|
||||||
|
|
||||||
|
unsigned int
|
||||||
|
hb_ot_var_get_named_instance_count (hb_face_t *face)
|
||||||
|
{
|
||||||
|
return face->table.fvar->get_instance_count ();
|
||||||
|
}
|
||||||
|
|
||||||
|
hb_ot_name_id_t
|
||||||
|
hb_ot_var_named_instance_get_subfamily_name_id (hb_face_t *face,
|
||||||
|
unsigned int instance_index)
|
||||||
|
{
|
||||||
|
return face->table.fvar->get_instance_subfamily_name_id (instance_index);
|
||||||
|
}
|
||||||
|
|
||||||
|
hb_ot_name_id_t
|
||||||
|
hb_ot_var_named_instance_get_postscript_name_id (hb_face_t *face,
|
||||||
|
unsigned int instance_index)
|
||||||
|
{
|
||||||
|
return face->table.fvar->get_instance_postscript_name_id (instance_index);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int
|
||||||
|
hb_ot_var_named_instance_get_design_coords (hb_face_t *face,
|
||||||
|
unsigned int instance_index,
|
||||||
|
unsigned int *coords_length, /* IN/OUT */
|
||||||
|
float *coords /* OUT */)
|
||||||
|
{
|
||||||
|
return face->table.fvar->get_instance_coords (instance_index, coords_length, coords);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* hb_ot_var_normalize_variations:
|
* hb_ot_var_normalize_variations:
|
||||||
|
|
|
@ -54,7 +54,7 @@ HB_BEGIN_DECLS
|
||||||
*/
|
*/
|
||||||
typedef struct hb_ot_var_axis_t {
|
typedef struct hb_ot_var_axis_t {
|
||||||
hb_tag_t tag;
|
hb_tag_t tag;
|
||||||
unsigned int name_id;
|
hb_ot_name_id_t name_id;
|
||||||
float min_value;
|
float min_value;
|
||||||
float default_value;
|
float default_value;
|
||||||
float max_value;
|
float max_value;
|
||||||
|
@ -63,6 +63,11 @@ typedef struct hb_ot_var_axis_t {
|
||||||
HB_EXTERN hb_bool_t
|
HB_EXTERN hb_bool_t
|
||||||
hb_ot_var_has_data (hb_face_t *face);
|
hb_ot_var_has_data (hb_face_t *face);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Variation axes.
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* HB_OT_VAR_NO_AXIS_INDEX:
|
* HB_OT_VAR_NO_AXIS_INDEX:
|
||||||
*
|
*
|
||||||
|
@ -85,6 +90,46 @@ hb_ot_var_find_axis (hb_face_t *face,
|
||||||
unsigned int *axis_index,
|
unsigned int *axis_index,
|
||||||
hb_ot_var_axis_t *axis_info);
|
hb_ot_var_axis_t *axis_info);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hb_ot_var_axis_flags_t:
|
||||||
|
* @HB_OT_VAR_AXIS_FLAG_HIDDEN: The axis should not be exposed directly in user interfaces.
|
||||||
|
*
|
||||||
|
* Since: REPLACEME
|
||||||
|
*/
|
||||||
|
typedef enum { /*< flags >*/
|
||||||
|
HB_OT_VAR_AXIS_FLAG_HIDDEN = 0x0001u,
|
||||||
|
} hb_ot_var_axis_flags_t;
|
||||||
|
|
||||||
|
HB_EXTERN hb_ot_var_axis_flags_t
|
||||||
|
hb_ot_var_axis_get_flags (hb_face_t *face,
|
||||||
|
unsigned int axis_index);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Named instances.
|
||||||
|
*/
|
||||||
|
|
||||||
|
HB_EXTERN unsigned int
|
||||||
|
hb_ot_var_get_named_instance_count (hb_face_t *face);
|
||||||
|
|
||||||
|
HB_EXTERN hb_ot_name_id_t
|
||||||
|
hb_ot_var_named_instance_get_subfamily_name_id (hb_face_t *face,
|
||||||
|
unsigned int instance_index);
|
||||||
|
|
||||||
|
HB_EXTERN hb_ot_name_id_t
|
||||||
|
hb_ot_var_named_instance_get_postscript_name_id (hb_face_t *face,
|
||||||
|
unsigned int instance_index);
|
||||||
|
|
||||||
|
HB_EXTERN unsigned int
|
||||||
|
hb_ot_var_named_instance_get_design_coords (hb_face_t *face,
|
||||||
|
unsigned int instance_index,
|
||||||
|
unsigned int *coords_length, /* IN/OUT */
|
||||||
|
float *coords /* OUT */);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Conversions.
|
||||||
|
*/
|
||||||
|
|
||||||
HB_EXTERN void
|
HB_EXTERN void
|
||||||
hb_ot_var_normalize_variations (hb_face_t *face,
|
hb_ot_var_normalize_variations (hb_face_t *face,
|
||||||
|
|
|
@ -47,38 +47,9 @@ static const struct hb_unicode_range_t _hb_unicode_emoji_Extended_Pictographic_t
|
||||||
{0x25FB, 0x25FE},
|
{0x25FB, 0x25FE},
|
||||||
{0x2600, 0x2605},
|
{0x2600, 0x2605},
|
||||||
{0x2607, 0x2612},
|
{0x2607, 0x2612},
|
||||||
{0x2614, 0x2615},
|
{0x2614, 0x2685},
|
||||||
{0x2616, 0x2617},
|
{0x2690, 0x2705},
|
||||||
{0x2618, 0x2618},
|
{0x2708, 0x2712},
|
||||||
{0x2619, 0x2619},
|
|
||||||
{0x261A, 0x266F},
|
|
||||||
{0x2670, 0x2671},
|
|
||||||
{0x2672, 0x267D},
|
|
||||||
{0x267E, 0x267F},
|
|
||||||
{0x2680, 0x2685},
|
|
||||||
{0x2690, 0x2691},
|
|
||||||
{0x2692, 0x269C},
|
|
||||||
{0x269D, 0x269D},
|
|
||||||
{0x269E, 0x269F},
|
|
||||||
{0x26A0, 0x26A1},
|
|
||||||
{0x26A2, 0x26B1},
|
|
||||||
{0x26B2, 0x26B2},
|
|
||||||
{0x26B3, 0x26BC},
|
|
||||||
{0x26BD, 0x26BF},
|
|
||||||
{0x26C0, 0x26C3},
|
|
||||||
{0x26C4, 0x26CD},
|
|
||||||
{0x26CE, 0x26CE},
|
|
||||||
{0x26CF, 0x26E1},
|
|
||||||
{0x26E2, 0x26E2},
|
|
||||||
{0x26E3, 0x26E3},
|
|
||||||
{0x26E4, 0x26E7},
|
|
||||||
{0x26E8, 0x26FF},
|
|
||||||
{0x2700, 0x2700},
|
|
||||||
{0x2701, 0x2704},
|
|
||||||
{0x2705, 0x2705},
|
|
||||||
{0x2708, 0x2709},
|
|
||||||
{0x270A, 0x270B},
|
|
||||||
{0x270C, 0x2712},
|
|
||||||
{0x2714, 0x2714},
|
{0x2714, 0x2714},
|
||||||
{0x2716, 0x2716},
|
{0x2716, 0x2716},
|
||||||
{0x271D, 0x271D},
|
{0x271D, 0x271D},
|
||||||
|
@ -105,163 +76,33 @@ static const struct hb_unicode_range_t _hb_unicode_emoji_Extended_Pictographic_t
|
||||||
{0x303D, 0x303D},
|
{0x303D, 0x303D},
|
||||||
{0x3297, 0x3297},
|
{0x3297, 0x3297},
|
||||||
{0x3299, 0x3299},
|
{0x3299, 0x3299},
|
||||||
{0x1F000, 0x1F02B},
|
{0x1F000, 0x1F0FF},
|
||||||
{0x1F02C, 0x1F02F},
|
|
||||||
{0x1F030, 0x1F093},
|
|
||||||
{0x1F094, 0x1F09F},
|
|
||||||
{0x1F0A0, 0x1F0AE},
|
|
||||||
{0x1F0AF, 0x1F0B0},
|
|
||||||
{0x1F0B1, 0x1F0BE},
|
|
||||||
{0x1F0BF, 0x1F0BF},
|
|
||||||
{0x1F0C0, 0x1F0C0},
|
|
||||||
{0x1F0C1, 0x1F0CF},
|
|
||||||
{0x1F0D0, 0x1F0D0},
|
|
||||||
{0x1F0D1, 0x1F0DF},
|
|
||||||
{0x1F0E0, 0x1F0F5},
|
|
||||||
{0x1F0F6, 0x1F0FF},
|
|
||||||
{0x1F10D, 0x1F10F},
|
{0x1F10D, 0x1F10F},
|
||||||
{0x1F12F, 0x1F12F},
|
{0x1F12F, 0x1F12F},
|
||||||
{0x1F16C, 0x1F16F},
|
{0x1F16C, 0x1F171},
|
||||||
{0x1F170, 0x1F171},
|
{0x1F17E, 0x1F17F},
|
||||||
{0x1F17E, 0x1F17E},
|
|
||||||
{0x1F17F, 0x1F17F},
|
|
||||||
{0x1F18E, 0x1F18E},
|
{0x1F18E, 0x1F18E},
|
||||||
{0x1F191, 0x1F19A},
|
{0x1F191, 0x1F19A},
|
||||||
{0x1F1AD, 0x1F1E5},
|
{0x1F1AD, 0x1F1E5},
|
||||||
{0x1F201, 0x1F202},
|
{0x1F201, 0x1F20F},
|
||||||
{0x1F203, 0x1F20F},
|
|
||||||
{0x1F21A, 0x1F21A},
|
{0x1F21A, 0x1F21A},
|
||||||
{0x1F22F, 0x1F22F},
|
{0x1F22F, 0x1F22F},
|
||||||
{0x1F232, 0x1F23A},
|
{0x1F232, 0x1F23A},
|
||||||
{0x1F23C, 0x1F23F},
|
{0x1F23C, 0x1F23F},
|
||||||
{0x1F249, 0x1F24F},
|
{0x1F249, 0x1F3FA},
|
||||||
{0x1F250, 0x1F251},
|
{0x1F400, 0x1F53D},
|
||||||
{0x1F252, 0x1F25F},
|
{0x1F546, 0x1F64F},
|
||||||
{0x1F260, 0x1F265},
|
{0x1F680, 0x1F6FF},
|
||||||
{0x1F266, 0x1F2FF},
|
|
||||||
{0x1F300, 0x1F320},
|
|
||||||
{0x1F321, 0x1F32C},
|
|
||||||
{0x1F32D, 0x1F32F},
|
|
||||||
{0x1F330, 0x1F335},
|
|
||||||
{0x1F336, 0x1F336},
|
|
||||||
{0x1F337, 0x1F37C},
|
|
||||||
{0x1F37D, 0x1F37D},
|
|
||||||
{0x1F37E, 0x1F37F},
|
|
||||||
{0x1F380, 0x1F393},
|
|
||||||
{0x1F394, 0x1F39F},
|
|
||||||
{0x1F3A0, 0x1F3C4},
|
|
||||||
{0x1F3C5, 0x1F3C5},
|
|
||||||
{0x1F3C6, 0x1F3CA},
|
|
||||||
{0x1F3CB, 0x1F3CE},
|
|
||||||
{0x1F3CF, 0x1F3D3},
|
|
||||||
{0x1F3D4, 0x1F3DF},
|
|
||||||
{0x1F3E0, 0x1F3F0},
|
|
||||||
{0x1F3F1, 0x1F3F7},
|
|
||||||
{0x1F3F8, 0x1F3FA},
|
|
||||||
{0x1F400, 0x1F43E},
|
|
||||||
{0x1F43F, 0x1F43F},
|
|
||||||
{0x1F440, 0x1F440},
|
|
||||||
{0x1F441, 0x1F441},
|
|
||||||
{0x1F442, 0x1F4F7},
|
|
||||||
{0x1F4F8, 0x1F4F8},
|
|
||||||
{0x1F4F9, 0x1F4FC},
|
|
||||||
{0x1F4FD, 0x1F4FE},
|
|
||||||
{0x1F4FF, 0x1F4FF},
|
|
||||||
{0x1F500, 0x1F53D},
|
|
||||||
{0x1F546, 0x1F54A},
|
|
||||||
{0x1F54B, 0x1F54F},
|
|
||||||
{0x1F550, 0x1F567},
|
|
||||||
{0x1F568, 0x1F579},
|
|
||||||
{0x1F57A, 0x1F57A},
|
|
||||||
{0x1F57B, 0x1F5A3},
|
|
||||||
{0x1F5A4, 0x1F5A4},
|
|
||||||
{0x1F5A5, 0x1F5FA},
|
|
||||||
{0x1F5FB, 0x1F5FF},
|
|
||||||
{0x1F600, 0x1F600},
|
|
||||||
{0x1F601, 0x1F610},
|
|
||||||
{0x1F611, 0x1F611},
|
|
||||||
{0x1F612, 0x1F614},
|
|
||||||
{0x1F615, 0x1F615},
|
|
||||||
{0x1F616, 0x1F616},
|
|
||||||
{0x1F617, 0x1F617},
|
|
||||||
{0x1F618, 0x1F618},
|
|
||||||
{0x1F619, 0x1F619},
|
|
||||||
{0x1F61A, 0x1F61A},
|
|
||||||
{0x1F61B, 0x1F61B},
|
|
||||||
{0x1F61C, 0x1F61E},
|
|
||||||
{0x1F61F, 0x1F61F},
|
|
||||||
{0x1F620, 0x1F625},
|
|
||||||
{0x1F626, 0x1F627},
|
|
||||||
{0x1F628, 0x1F62B},
|
|
||||||
{0x1F62C, 0x1F62C},
|
|
||||||
{0x1F62D, 0x1F62D},
|
|
||||||
{0x1F62E, 0x1F62F},
|
|
||||||
{0x1F630, 0x1F633},
|
|
||||||
{0x1F634, 0x1F634},
|
|
||||||
{0x1F635, 0x1F640},
|
|
||||||
{0x1F641, 0x1F642},
|
|
||||||
{0x1F643, 0x1F644},
|
|
||||||
{0x1F645, 0x1F64F},
|
|
||||||
{0x1F680, 0x1F6C5},
|
|
||||||
{0x1F6C6, 0x1F6CF},
|
|
||||||
{0x1F6D0, 0x1F6D0},
|
|
||||||
{0x1F6D1, 0x1F6D2},
|
|
||||||
{0x1F6D3, 0x1F6D4},
|
|
||||||
{0x1F6D5, 0x1F6DF},
|
|
||||||
{0x1F6E0, 0x1F6EC},
|
|
||||||
{0x1F6ED, 0x1F6EF},
|
|
||||||
{0x1F6F0, 0x1F6F3},
|
|
||||||
{0x1F6F4, 0x1F6F6},
|
|
||||||
{0x1F6F7, 0x1F6F8},
|
|
||||||
{0x1F6F9, 0x1F6F9},
|
|
||||||
{0x1F6FA, 0x1F6FF},
|
|
||||||
{0x1F774, 0x1F77F},
|
{0x1F774, 0x1F77F},
|
||||||
{0x1F7D5, 0x1F7D8},
|
{0x1F7D5, 0x1F7FF},
|
||||||
{0x1F7D9, 0x1F7FF},
|
|
||||||
{0x1F80C, 0x1F80F},
|
{0x1F80C, 0x1F80F},
|
||||||
{0x1F848, 0x1F84F},
|
{0x1F848, 0x1F84F},
|
||||||
{0x1F85A, 0x1F85F},
|
{0x1F85A, 0x1F85F},
|
||||||
{0x1F888, 0x1F88F},
|
{0x1F888, 0x1F88F},
|
||||||
{0x1F8AE, 0x1F8FF},
|
{0x1F8AE, 0x1F8FF},
|
||||||
{0x1F90C, 0x1F90F},
|
{0x1F90C, 0x1F93A},
|
||||||
{0x1F910, 0x1F918},
|
{0x1F93C, 0x1F945},
|
||||||
{0x1F919, 0x1F91E},
|
{0x1F947, 0x1FFFD},
|
||||||
{0x1F91F, 0x1F91F},
|
|
||||||
{0x1F920, 0x1F927},
|
|
||||||
{0x1F928, 0x1F92F},
|
|
||||||
{0x1F930, 0x1F930},
|
|
||||||
{0x1F931, 0x1F932},
|
|
||||||
{0x1F933, 0x1F93A},
|
|
||||||
{0x1F93C, 0x1F93E},
|
|
||||||
{0x1F93F, 0x1F93F},
|
|
||||||
{0x1F940, 0x1F945},
|
|
||||||
{0x1F947, 0x1F94B},
|
|
||||||
{0x1F94C, 0x1F94C},
|
|
||||||
{0x1F94D, 0x1F94F},
|
|
||||||
{0x1F950, 0x1F95E},
|
|
||||||
{0x1F95F, 0x1F96B},
|
|
||||||
{0x1F96C, 0x1F970},
|
|
||||||
{0x1F971, 0x1F972},
|
|
||||||
{0x1F973, 0x1F976},
|
|
||||||
{0x1F977, 0x1F979},
|
|
||||||
{0x1F97A, 0x1F97A},
|
|
||||||
{0x1F97B, 0x1F97B},
|
|
||||||
{0x1F97C, 0x1F97F},
|
|
||||||
{0x1F980, 0x1F984},
|
|
||||||
{0x1F985, 0x1F991},
|
|
||||||
{0x1F992, 0x1F997},
|
|
||||||
{0x1F998, 0x1F9A2},
|
|
||||||
{0x1F9A3, 0x1F9AF},
|
|
||||||
{0x1F9B0, 0x1F9B9},
|
|
||||||
{0x1F9BA, 0x1F9BF},
|
|
||||||
{0x1F9C0, 0x1F9C0},
|
|
||||||
{0x1F9C1, 0x1F9C2},
|
|
||||||
{0x1F9C3, 0x1F9CF},
|
|
||||||
{0x1F9D0, 0x1F9E6},
|
|
||||||
{0x1F9E7, 0x1F9FF},
|
|
||||||
{0x1FA00, 0x1FA5F},
|
|
||||||
{0x1FA60, 0x1FA6D},
|
|
||||||
{0x1FA6E, 0x1FFFD},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* HB_UNICODE_EMOJI_TABLE_HH */
|
#endif /* HB_UNICODE_EMOJI_TABLE_HH */
|
||||||
|
|
|
@ -48,7 +48,7 @@ main (int argc, char **argv)
|
||||||
|
|
||||||
for (unsigned int i = 0; i < count; i++)
|
for (unsigned int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
printf ("%d %s ",
|
printf ("%u %s ",
|
||||||
entries[i].name_id,
|
entries[i].name_id,
|
||||||
hb_language_to_string (entries[i].language));
|
hb_language_to_string (entries[i].language));
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ svg_dump (hb_face_t *face, unsigned int face_index)
|
||||||
const char *data = hb_blob_get_data (blob, &length);
|
const char *data = hb_blob_get_data (blob, &length);
|
||||||
|
|
||||||
char output_path[255];
|
char output_path[255];
|
||||||
sprintf (output_path, "out/svg-%d-%d.svg%s",
|
sprintf (output_path, "out/svg-%u-%u.svg%s",
|
||||||
glyph_id,
|
glyph_id,
|
||||||
face_index,
|
face_index,
|
||||||
// append "z" if the content is gzipped, https://stackoverflow.com/a/6059405
|
// append "z" if the content is gzipped, https://stackoverflow.com/a/6059405
|
||||||
|
@ -108,7 +108,7 @@ png_dump (hb_face_t *face, unsigned int face_index)
|
||||||
const char *data = hb_blob_get_data (blob, &length);
|
const char *data = hb_blob_get_data (blob, &length);
|
||||||
|
|
||||||
char output_path[255];
|
char output_path[255];
|
||||||
sprintf (output_path, "out/png-%d-%d-%d.png", glyph_id, strike, face_index);
|
sprintf (output_path, "out/png-%u-%u-%u.png", glyph_id, strike, face_index);
|
||||||
|
|
||||||
FILE *f = fopen (output_path, "wb");
|
FILE *f = fopen (output_path, "wb");
|
||||||
fwrite (data, 1, length, f);
|
fwrite (data, 1, length, f);
|
||||||
|
@ -167,9 +167,8 @@ layered_glyph_dump (hb_face_t *face, cairo_font_face_t *cairo_face, unsigned int
|
||||||
|
|
||||||
// Render
|
// Render
|
||||||
unsigned int palette_count = hb_ot_color_palette_get_count (face);
|
unsigned int palette_count = hb_ot_color_palette_get_count (face);
|
||||||
for (unsigned int palette = 0; palette < palette_count; palette++) {
|
for (unsigned int palette = 0; palette < palette_count; palette++)
|
||||||
char output_path[255];
|
{
|
||||||
|
|
||||||
unsigned int num_colors = hb_ot_color_palette_get_colors (face, palette, 0, NULL, NULL);
|
unsigned int num_colors = hb_ot_color_palette_get_colors (face, palette, 0, NULL, NULL);
|
||||||
if (!num_colors)
|
if (!num_colors)
|
||||||
continue;
|
continue;
|
||||||
|
@ -178,7 +177,8 @@ layered_glyph_dump (hb_face_t *face, cairo_font_face_t *cairo_face, unsigned int
|
||||||
hb_ot_color_palette_get_colors (face, palette, 0, &num_colors, colors);
|
hb_ot_color_palette_get_colors (face, palette, 0, &num_colors, colors);
|
||||||
if (num_colors)
|
if (num_colors)
|
||||||
{
|
{
|
||||||
sprintf (output_path, "out/colr-%d-%d-%d.svg", gid, palette, face_index);
|
char output_path[255];
|
||||||
|
sprintf (output_path, "out/colr-%u-%u-%u.svg", gid, palette, face_index);
|
||||||
|
|
||||||
cairo_surface_t *surface = cairo_svg_surface_create (output_path, extents.width, extents.height);
|
cairo_surface_t *surface = cairo_svg_surface_create (output_path, extents.width, extents.height);
|
||||||
cairo_t *cr = cairo_create (surface);
|
cairo_t *cr = cairo_create (surface);
|
||||||
|
@ -245,7 +245,7 @@ dump_glyphs (cairo_font_face_t *cairo_face, unsigned int upem,
|
||||||
// Render
|
// Render
|
||||||
{
|
{
|
||||||
char output_path[255];
|
char output_path[255];
|
||||||
sprintf (output_path, "out/%d-%d.svg", face_index, i);
|
sprintf (output_path, "out/%u-%u.svg", face_index, i);
|
||||||
cairo_surface_t *surface = cairo_svg_surface_create (output_path, extents.width, extents.height);
|
cairo_surface_t *surface = cairo_svg_surface_create (output_path, extents.width, extents.height);
|
||||||
cairo_t *cr = cairo_create (surface);
|
cairo_t *cr = cairo_create (surface);
|
||||||
cairo_set_font_face (cr, cairo_face);
|
cairo_set_font_face (cr, cairo_face);
|
||||||
|
|
|
@ -379,14 +379,15 @@ static void
|
||||||
test_buffer_utf8_conversion (void)
|
test_buffer_utf8_conversion (void)
|
||||||
{
|
{
|
||||||
hb_buffer_t *b;
|
hb_buffer_t *b;
|
||||||
hb_glyph_info_t *glyphs;
|
unsigned int chars, i, j, len;
|
||||||
unsigned int bytes, chars, i, j, len;
|
|
||||||
|
|
||||||
b = hb_buffer_create ();
|
b = hb_buffer_create ();
|
||||||
hb_buffer_set_replacement_codepoint (b, (hb_codepoint_t) -1);
|
hb_buffer_set_replacement_codepoint (b, (hb_codepoint_t) -1);
|
||||||
|
|
||||||
for (i = 0; i < G_N_ELEMENTS (utf8_conversion_tests); i++)
|
for (i = 0; i < G_N_ELEMENTS (utf8_conversion_tests); i++)
|
||||||
{
|
{
|
||||||
|
unsigned int bytes;
|
||||||
|
hb_glyph_info_t *glyphs;
|
||||||
const utf8_conversion_test_t *test = &utf8_conversion_tests[i];
|
const utf8_conversion_test_t *test = &utf8_conversion_tests[i];
|
||||||
char *escaped;
|
char *escaped;
|
||||||
|
|
||||||
|
|
|
@ -235,7 +235,7 @@ test_object (void)
|
||||||
|
|
||||||
{
|
{
|
||||||
unsigned int j;
|
unsigned int j;
|
||||||
data_t data[2] = {{MAGIC0, FALSE}, {MAGIC1, FALSE}};
|
data_t data[1000] = {{MAGIC0, FALSE}, {MAGIC1, FALSE}};
|
||||||
deadlock_test_t deadlock_test;
|
deadlock_test_t deadlock_test;
|
||||||
|
|
||||||
g_test_message ("Testing object %s", o->name);
|
g_test_message ("Testing object %s", o->name);
|
||||||
|
|
|
@ -81,7 +81,7 @@ test_ot_name (void)
|
||||||
hb_ot_name_id_t name_id = entries[3].name_id;
|
hb_ot_name_id_t name_id = entries[3].name_id;
|
||||||
g_assert_cmpuint (3, ==, name_id);
|
g_assert_cmpuint (3, ==, name_id);
|
||||||
hb_language_t lang = entries[3].language;
|
hb_language_t lang = entries[3].language;
|
||||||
g_assert_cmpstr ("en", ==, hb_language_to_string (lang));
|
g_assert_cmpstr (hb_language_to_string (lang), ==, "en");
|
||||||
char text[10];
|
char text[10];
|
||||||
unsigned int text_size = 10;
|
unsigned int text_size = 10;
|
||||||
g_assert_cmpuint (27, ==, hb_ot_name_get_utf8 (face, name_id, lang, &text_size, text));
|
g_assert_cmpuint (27, ==, hb_ot_name_get_utf8 (face, name_id, lang, &text_size, text));
|
||||||
|
|
Loading…
Reference in New Issue