[CONFIG] Add HB_NO_VERTICAL
This commit is contained in:
parent
9bc5d2903a
commit
53eebc7cd2
|
@ -67,9 +67,11 @@ HB_OT_ACCELERATOR (OT, meta)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Vertical layout. */
|
/* Vertical layout. */
|
||||||
|
#ifndef HB_NO_VERTICAL
|
||||||
HB_OT_TABLE (OT, vhea)
|
HB_OT_TABLE (OT, vhea)
|
||||||
HB_OT_ACCELERATOR (OT, vmtx)
|
HB_OT_ACCELERATOR (OT, vmtx)
|
||||||
HB_OT_TABLE (OT, VORG)
|
HB_OT_TABLE (OT, VORG)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* TrueType outlines. */
|
/* TrueType outlines. */
|
||||||
HB_OT_ACCELERATOR (OT, glyf)
|
HB_OT_ACCELERATOR (OT, glyf)
|
||||||
|
|
|
@ -118,6 +118,7 @@ hb_ot_get_glyph_h_advances (hb_font_t* font, void* font_data,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef HB_NO_VERTICAL
|
||||||
static void
|
static void
|
||||||
hb_ot_get_glyph_v_advances (hb_font_t* font, void* font_data,
|
hb_ot_get_glyph_v_advances (hb_font_t* font, void* font_data,
|
||||||
unsigned count,
|
unsigned count,
|
||||||
|
@ -137,7 +138,9 @@ hb_ot_get_glyph_v_advances (hb_font_t* font, void* font_data,
|
||||||
first_advance = &StructAtOffsetUnaligned<hb_position_t> (first_advance, advance_stride);
|
first_advance = &StructAtOffsetUnaligned<hb_position_t> (first_advance, advance_stride);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HB_NO_VERTICAL
|
||||||
static hb_bool_t
|
static hb_bool_t
|
||||||
hb_ot_get_glyph_v_origin (hb_font_t *font,
|
hb_ot_get_glyph_v_origin (hb_font_t *font,
|
||||||
void *font_data,
|
void *font_data,
|
||||||
|
@ -172,6 +175,7 @@ hb_ot_get_glyph_v_origin (hb_font_t *font,
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static hb_bool_t
|
static hb_bool_t
|
||||||
hb_ot_get_glyph_extents (hb_font_t *font,
|
hb_ot_get_glyph_extents (hb_font_t *font,
|
||||||
|
@ -240,6 +244,7 @@ hb_ot_get_font_h_extents (hb_font_t *font,
|
||||||
_hb_ot_metrics_get_position_common (font, HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP, &metrics->line_gap);
|
_hb_ot_metrics_get_position_common (font, HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP, &metrics->line_gap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef HB_NO_VERTICAL
|
||||||
static hb_bool_t
|
static hb_bool_t
|
||||||
hb_ot_get_font_v_extents (hb_font_t *font,
|
hb_ot_get_font_v_extents (hb_font_t *font,
|
||||||
void *font_data HB_UNUSED,
|
void *font_data HB_UNUSED,
|
||||||
|
@ -250,6 +255,7 @@ hb_ot_get_font_v_extents (hb_font_t *font,
|
||||||
_hb_ot_metrics_get_position_common (font, HB_OT_METRICS_TAG_VERTICAL_DESCENDER, &metrics->descender) &&
|
_hb_ot_metrics_get_position_common (font, HB_OT_METRICS_TAG_VERTICAL_DESCENDER, &metrics->descender) &&
|
||||||
_hb_ot_metrics_get_position_common (font, HB_OT_METRICS_TAG_VERTICAL_LINE_GAP, &metrics->line_gap);
|
_hb_ot_metrics_get_position_common (font, HB_OT_METRICS_TAG_VERTICAL_LINE_GAP, &metrics->line_gap);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static inline void free_static_ot_funcs ();
|
static inline void free_static_ot_funcs ();
|
||||||
|
|
||||||
|
@ -259,17 +265,23 @@ static struct hb_ot_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ot
|
||||||
{
|
{
|
||||||
hb_font_funcs_t *funcs = hb_font_funcs_create ();
|
hb_font_funcs_t *funcs = hb_font_funcs_create ();
|
||||||
|
|
||||||
hb_font_funcs_set_font_h_extents_func (funcs, hb_ot_get_font_h_extents, nullptr, nullptr);
|
|
||||||
hb_font_funcs_set_font_v_extents_func (funcs, hb_ot_get_font_v_extents, nullptr, nullptr);
|
|
||||||
hb_font_funcs_set_nominal_glyph_func (funcs, hb_ot_get_nominal_glyph, nullptr, nullptr);
|
hb_font_funcs_set_nominal_glyph_func (funcs, hb_ot_get_nominal_glyph, nullptr, nullptr);
|
||||||
hb_font_funcs_set_nominal_glyphs_func (funcs, hb_ot_get_nominal_glyphs, nullptr, nullptr);
|
hb_font_funcs_set_nominal_glyphs_func (funcs, hb_ot_get_nominal_glyphs, nullptr, nullptr);
|
||||||
hb_font_funcs_set_variation_glyph_func (funcs, hb_ot_get_variation_glyph, nullptr, nullptr);
|
hb_font_funcs_set_variation_glyph_func (funcs, hb_ot_get_variation_glyph, nullptr, nullptr);
|
||||||
|
|
||||||
|
hb_font_funcs_set_font_h_extents_func (funcs, hb_ot_get_font_h_extents, nullptr, nullptr);
|
||||||
hb_font_funcs_set_glyph_h_advances_func (funcs, hb_ot_get_glyph_h_advances, nullptr, nullptr);
|
hb_font_funcs_set_glyph_h_advances_func (funcs, hb_ot_get_glyph_h_advances, nullptr, nullptr);
|
||||||
hb_font_funcs_set_glyph_v_advances_func (funcs, hb_ot_get_glyph_v_advances, nullptr, nullptr);
|
|
||||||
//hb_font_funcs_set_glyph_h_origin_func (funcs, hb_ot_get_glyph_h_origin, nullptr, nullptr);
|
//hb_font_funcs_set_glyph_h_origin_func (funcs, hb_ot_get_glyph_h_origin, nullptr, nullptr);
|
||||||
|
|
||||||
|
#ifndef HB_NO_VERTICAL
|
||||||
|
hb_font_funcs_set_font_v_extents_func (funcs, hb_ot_get_font_v_extents, nullptr, nullptr);
|
||||||
|
hb_font_funcs_set_glyph_v_advances_func (funcs, hb_ot_get_glyph_v_advances, nullptr, nullptr);
|
||||||
hb_font_funcs_set_glyph_v_origin_func (funcs, hb_ot_get_glyph_v_origin, nullptr, nullptr);
|
hb_font_funcs_set_glyph_v_origin_func (funcs, hb_ot_get_glyph_v_origin, nullptr, nullptr);
|
||||||
|
#endif
|
||||||
|
|
||||||
hb_font_funcs_set_glyph_extents_func (funcs, hb_ot_get_glyph_extents, nullptr, nullptr);
|
hb_font_funcs_set_glyph_extents_func (funcs, hb_ot_get_glyph_extents, nullptr, nullptr);
|
||||||
//hb_font_funcs_set_glyph_contour_point_func (funcs, hb_ot_get_glyph_contour_point, nullptr, nullptr);
|
//hb_font_funcs_set_glyph_contour_point_func (funcs, hb_ot_get_glyph_contour_point, nullptr, nullptr);
|
||||||
|
|
||||||
#ifndef HB_NO_OT_FONT_GLYPH_NAMES
|
#ifndef HB_NO_OT_FONT_GLYPH_NAMES
|
||||||
hb_font_funcs_set_glyph_name_func (funcs, hb_ot_get_glyph_name, nullptr, nullptr);
|
hb_font_funcs_set_glyph_name_func (funcs, hb_ot_get_glyph_name, nullptr, nullptr);
|
||||||
hb_font_funcs_set_glyph_from_name_func (funcs, hb_ot_get_glyph_from_name, nullptr, nullptr);
|
hb_font_funcs_set_glyph_from_name_func (funcs, hb_ot_get_glyph_from_name, nullptr, nullptr);
|
||||||
|
|
|
@ -799,10 +799,23 @@ struct glyf
|
||||||
hb_array_t<contour_point_t> phantoms = points.sub_array (points.length - PHANTOM_COUNT, PHANTOM_COUNT);
|
hb_array_t<contour_point_t> phantoms = points.sub_array (points.length - PHANTOM_COUNT, PHANTOM_COUNT);
|
||||||
{
|
{
|
||||||
for (unsigned i = 0; i < PHANTOM_COUNT; ++i) phantoms[i].init ();
|
for (unsigned i = 0; i < PHANTOM_COUNT; ++i) phantoms[i].init ();
|
||||||
int h_delta = (int) header->xMin - glyf_accelerator.hmtx->get_side_bearing (gid);
|
int h_delta = (int) header->xMin -
|
||||||
int v_orig = (int) header->yMax + glyf_accelerator.vmtx->get_side_bearing (gid);
|
glyf_accelerator.hmtx->get_side_bearing (gid);
|
||||||
|
int v_orig = (int) header->yMax +
|
||||||
|
#ifndef HB_NO_VERTICAL
|
||||||
|
glyf_accelerator.vmtx->get_side_bearing (gid)
|
||||||
|
#else
|
||||||
|
0
|
||||||
|
#endif
|
||||||
|
;
|
||||||
unsigned h_adv = glyf_accelerator.hmtx->get_advance (gid);
|
unsigned h_adv = glyf_accelerator.hmtx->get_advance (gid);
|
||||||
unsigned v_adv = glyf_accelerator.vmtx->get_advance (gid);
|
unsigned v_adv =
|
||||||
|
#ifndef HB_NO_VERTICAL
|
||||||
|
glyf_accelerator.vmtx->get_advance (gid)
|
||||||
|
#else
|
||||||
|
- font->face->get_upem ()
|
||||||
|
#endif
|
||||||
|
;
|
||||||
phantoms[PHANTOM_LEFT].x = h_delta;
|
phantoms[PHANTOM_LEFT].x = h_delta;
|
||||||
phantoms[PHANTOM_RIGHT].x = h_adv + h_delta;
|
phantoms[PHANTOM_RIGHT].x = h_adv + h_delta;
|
||||||
phantoms[PHANTOM_TOP].y = v_orig;
|
phantoms[PHANTOM_TOP].y = v_orig;
|
||||||
|
@ -917,7 +930,9 @@ struct glyf
|
||||||
gvar = nullptr;
|
gvar = nullptr;
|
||||||
#endif
|
#endif
|
||||||
hmtx = nullptr;
|
hmtx = nullptr;
|
||||||
|
#ifndef HB_NO_VERTICAL
|
||||||
vmtx = nullptr;
|
vmtx = nullptr;
|
||||||
|
#endif
|
||||||
face = face_;
|
face = face_;
|
||||||
const OT::head &head = *face->table.head;
|
const OT::head &head = *face->table.head;
|
||||||
if (head.indexToLocFormat > 1 || head.glyphDataFormat > 0)
|
if (head.indexToLocFormat > 1 || head.glyphDataFormat > 0)
|
||||||
|
@ -931,7 +946,9 @@ struct glyf
|
||||||
gvar = face->table.gvar;
|
gvar = face->table.gvar;
|
||||||
#endif
|
#endif
|
||||||
hmtx = face->table.hmtx;
|
hmtx = face->table.hmtx;
|
||||||
|
#ifndef HB_NO_VERTICAL
|
||||||
vmtx = face->table.vmtx;
|
vmtx = face->table.vmtx;
|
||||||
|
#endif
|
||||||
|
|
||||||
num_glyphs = hb_max (1u, loca_table.get_length () / (short_offset ? 2 : 4)) - 1;
|
num_glyphs = hb_max (1u, loca_table.get_length () / (short_offset ? 2 : 4)) - 1;
|
||||||
num_glyphs = hb_min (num_glyphs, face->get_num_glyphs ());
|
num_glyphs = hb_min (num_glyphs, face->get_num_glyphs ());
|
||||||
|
@ -1257,7 +1274,9 @@ struct glyf
|
||||||
const gvar_accelerator_t *gvar;
|
const gvar_accelerator_t *gvar;
|
||||||
#endif
|
#endif
|
||||||
const hmtx_accelerator_t *hmtx;
|
const hmtx_accelerator_t *hmtx;
|
||||||
|
#ifndef HB_NO_VERTICAL
|
||||||
const vmtx_accelerator_t *vmtx;
|
const vmtx_accelerator_t *vmtx;
|
||||||
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool short_offset;
|
bool short_offset;
|
||||||
|
|
|
@ -165,7 +165,14 @@ struct hmtxvmtx
|
||||||
{
|
{
|
||||||
default_advance = default_advance_ ? default_advance_ : hb_face_get_upem (face);
|
default_advance = default_advance_ ? default_advance_ : hb_face_get_upem (face);
|
||||||
|
|
||||||
num_advances = T::is_horizontal ? face->table.hhea->numberOfLongMetrics : face->table.vhea->numberOfLongMetrics;
|
num_advances = T::is_horizontal ?
|
||||||
|
face->table.hhea->numberOfLongMetrics :
|
||||||
|
#ifndef HB_NO_VERTICAL
|
||||||
|
face->table.vhea->numberOfLongMetrics
|
||||||
|
#else
|
||||||
|
0
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
|
||||||
table = hb_sanitize_context_t ().reference_table<hmtxvmtx> (face, T::tableTag);
|
table = hb_sanitize_context_t ().reference_table<hmtxvmtx> (face, T::tableTag);
|
||||||
|
|
||||||
|
|
|
@ -77,6 +77,7 @@ _hb_ot_metrics_get_position_common (hb_font_t *font,
|
||||||
(face->table.TABLE->has_data () && \
|
(face->table.TABLE->has_data () && \
|
||||||
(position && (*position = font->em_scalef_y (_fix_ascender_descender ( \
|
(position && (*position = font->em_scalef_y (_fix_ascender_descender ( \
|
||||||
face->table.TABLE->ATTR + GET_VAR, metrics_tag))), true))
|
face->table.TABLE->ATTR + GET_VAR, metrics_tag))), true))
|
||||||
|
|
||||||
case HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER:
|
case HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER:
|
||||||
return (face->table.OS2->use_typo_metrics () && GET_METRIC_Y (OS2, sTypoAscender)) ||
|
return (face->table.OS2->use_typo_metrics () && GET_METRIC_Y (OS2, sTypoAscender)) ||
|
||||||
GET_METRIC_Y (hhea, ascender);
|
GET_METRIC_Y (hhea, ascender);
|
||||||
|
@ -86,9 +87,13 @@ _hb_ot_metrics_get_position_common (hb_font_t *font,
|
||||||
case HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP:
|
case HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP:
|
||||||
return (face->table.OS2->use_typo_metrics () && GET_METRIC_Y (OS2, sTypoLineGap)) ||
|
return (face->table.OS2->use_typo_metrics () && GET_METRIC_Y (OS2, sTypoLineGap)) ||
|
||||||
GET_METRIC_Y (hhea, lineGap);
|
GET_METRIC_Y (hhea, lineGap);
|
||||||
|
|
||||||
|
#ifndef HB_NO_VERTICAL
|
||||||
case HB_OT_METRICS_TAG_VERTICAL_ASCENDER: return GET_METRIC_X (vhea, ascender);
|
case HB_OT_METRICS_TAG_VERTICAL_ASCENDER: return GET_METRIC_X (vhea, ascender);
|
||||||
case HB_OT_METRICS_TAG_VERTICAL_DESCENDER: return GET_METRIC_X (vhea, descender);
|
case HB_OT_METRICS_TAG_VERTICAL_DESCENDER: return GET_METRIC_X (vhea, descender);
|
||||||
case HB_OT_METRICS_TAG_VERTICAL_LINE_GAP: return GET_METRIC_X (vhea, lineGap);
|
case HB_OT_METRICS_TAG_VERTICAL_LINE_GAP: return GET_METRIC_X (vhea, lineGap);
|
||||||
|
#endif
|
||||||
|
|
||||||
#undef GET_METRIC_Y
|
#undef GET_METRIC_Y
|
||||||
#undef GET_METRIC_X
|
#undef GET_METRIC_X
|
||||||
#undef GET_VAR
|
#undef GET_VAR
|
||||||
|
|
|
@ -651,6 +651,7 @@ hb_ensure_native_direction (hb_buffer_t *buffer)
|
||||||
* Substitute
|
* Substitute
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef HB_NO_VERTICAL
|
||||||
static hb_codepoint_t
|
static hb_codepoint_t
|
||||||
hb_vert_char_for (hb_codepoint_t u)
|
hb_vert_char_for (hb_codepoint_t u)
|
||||||
{
|
{
|
||||||
|
@ -701,6 +702,7 @@ hb_vert_char_for (hb_codepoint_t u)
|
||||||
|
|
||||||
return u;
|
return u;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
hb_ot_rotate_chars (const hb_ot_shape_context_t *c)
|
hb_ot_rotate_chars (const hb_ot_shape_context_t *c)
|
||||||
|
@ -723,6 +725,7 @@ hb_ot_rotate_chars (const hb_ot_shape_context_t *c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef HB_NO_VERTICAL
|
||||||
if (HB_DIRECTION_IS_VERTICAL (c->target_direction) && !c->plan->has_vert)
|
if (HB_DIRECTION_IS_VERTICAL (c->target_direction) && !c->plan->has_vert)
|
||||||
{
|
{
|
||||||
for (unsigned int i = 0; i < count; i++) {
|
for (unsigned int i = 0; i < count; i++) {
|
||||||
|
@ -731,6 +734,7 @@ hb_ot_rotate_chars (const hb_ot_shape_context_t *c)
|
||||||
info[i].codepoint = codepoint;
|
info[i].codepoint = codepoint;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
|
|
Loading…
Reference in New Issue