Rename hb_ot_glyph_* to hb_outline_*

This commit is contained in:
Ebrahim Byagowi 2020-01-25 21:31:36 +03:30
parent 30857089a5
commit 981125aa2a
19 changed files with 252 additions and 252 deletions

View File

@ -520,25 +520,6 @@ hb_ot_color_palette_get_name_id
hb_ot_font_set_funcs
</SECTION>
<SECTION>
<FILE>hb-ot-glyph</FILE>
hb_ot_glyph_decompose_funcs_t
hb_ot_glyph_decompose_close_path_func_t
hb_ot_glyph_decompose_conic_to_func_t
hb_ot_glyph_decompose_cubic_to_func_t
hb_ot_glyph_decompose_line_to_func_t
hb_ot_glyph_decompose_move_to_func_t
hb_ot_glyph_decompose
hb_ot_glyph_decompose_funcs_create
hb_ot_glyph_decompose_funcs_destroy
hb_ot_glyph_decompose_funcs_reference
hb_ot_glyph_decompose_funcs_set_close_path_func
hb_ot_glyph_decompose_funcs_set_conic_to_func
hb_ot_glyph_decompose_funcs_set_cubic_to_func
hb_ot_glyph_decompose_funcs_set_line_to_func
hb_ot_glyph_decompose_funcs_set_move_to_func
</SECTION>
<SECTION>
<FILE>hb-ot-name</FILE>
hb_ot_name_id_t
@ -675,6 +656,25 @@ hb_ot_var_normalize_variations
hb_ot_var_normalize_coords
</SECTION>
<SECTION>
<FILE>hb-outline</FILE>
hb_outline_decompose_funcs_t
hb_outline_decompose_close_path_func_t
hb_outline_decompose_conic_to_func_t
hb_outline_decompose_cubic_to_func_t
hb_outline_decompose_line_to_func_t
hb_outline_decompose_move_to_func_t
hb_outline_decompose
hb_outline_decompose_funcs_create
hb_outline_decompose_funcs_destroy
hb_outline_decompose_funcs_reference
hb_outline_decompose_funcs_set_close_path_func
hb_outline_decompose_funcs_set_conic_to_func
hb_outline_decompose_funcs_set_cubic_to_func
hb_outline_decompose_funcs_set_line_to_func
hb_outline_decompose_funcs_set_move_to_func
</SECTION>
<SECTION>
<FILE>hb-set</FILE>
HB_SET_VALUE_INVALID

View File

@ -40,6 +40,8 @@ HB_BASE_sources = \
hb-fallback-shape.cc \
hb-font.cc \
hb-font.hh \
hb-outline.cc \
hb-outline.hh \
hb-iter.hh \
hb-kern.hh \
hb-machinery.hh \
@ -73,8 +75,6 @@ HB_BASE_sources = \
hb-ot-font.cc \
hb-ot-gasp-table.hh \
hb-ot-glyf-table.hh \
hb-ot-glyph.cc \
hb-ot-glyph.hh \
hb-ot-hdmx-table.hh \
hb-ot-head-table.hh \
hb-ot-hhea-table.hh \
@ -197,11 +197,11 @@ HB_BASE_headers = \
hb-deprecated.h \
hb-face.h \
hb-font.h \
hb-outline.h \
hb-map.h \
hb-ot-color.h \
hb-ot-deprecated.h \
hb-ot-font.h \
hb-ot-glyph.h \
hb-ot-layout.h \
hb-ot-math.h \
hb-ot-meta.h \

View File

@ -7,6 +7,7 @@
#include "hb-face.cc"
#include "hb-fallback-shape.cc"
#include "hb-font.cc"
#include "hb-outline.cc"
#include "hb-map.cc"
#include "hb-number.cc"
#include "hb-ot-cff1-table.cc"
@ -14,7 +15,6 @@
#include "hb-ot-color.cc"
#include "hb-ot-face.cc"
#include "hb-ot-font.cc"
#include "hb-ot-glyph.cc"
#include "hb-ot-layout.cc"
#include "hb-ot-map.cc"
#include "hb-ot-math.cc"

View File

@ -61,7 +61,6 @@
#define HB_NO_ERRNO
#define HB_NO_FACE_COLLECT_UNICODES
#define HB_NO_GETENV
#define HB_NO_GLYPH
#define HB_NO_HINTING
#define HB_NO_LANGUAGE_PRIVATE_SUBTAG
#define HB_NO_LAYOUT_FEATURE_PARAMS
@ -73,6 +72,7 @@
#define HB_NO_MMAP
#define HB_NO_NAME
#define HB_NO_OPEN
#define HB_NO_OUTLINE
#define HB_NO_SETLOCALE
#define HB_NO_OT_FONT_GLYPH_NAMES
#define HB_NO_OT_SHAPE_FRACTIONS

View File

@ -28,9 +28,9 @@
#ifndef HB_NO_CFF
#include "hb-outline.hh"
#include "hb-ot-cff1-table.hh"
#include "hb-cff1-interp-cs.hh"
#include "hb-ot-glyph.hh"
using namespace CFF;
@ -346,7 +346,7 @@ bool OT::cff1::accelerator_t::get_extents (hb_font_t *font, hb_codepoint_t glyph
struct cff1_path_param_t
{
cff1_path_param_t (const OT::cff1::accelerator_t *cff_, hb_font_t *font_,
const hb_ot_glyph_decompose_funcs_t *funcs_, void *user_data_,
const hb_outline_decompose_funcs_t *funcs_, void *user_data_,
point_t *delta_)
{
path_open = false;
@ -395,7 +395,7 @@ struct cff1_path_param_t
bool path_open;
hb_font_t *font;
const hb_ot_glyph_decompose_funcs_t *funcs;
const hb_outline_decompose_funcs_t *funcs;
void *user_data;
point_t *delta;
@ -427,7 +427,7 @@ struct cff1_path_procs_path_t : path_procs_t<cff1_path_procs_path_t, cff1_cs_int
};
static bool _get_path (const OT::cff1::accelerator_t *cff, hb_font_t *font, hb_codepoint_t glyph,
const hb_ot_glyph_decompose_funcs_t *funcs, void *user_data,
const hb_outline_decompose_funcs_t *funcs, void *user_data,
bool in_seac = false, point_t *delta = nullptr);
struct cff1_cs_opset_path_t : cff1_cs_opset_t<cff1_cs_opset_path_t, cff1_path_param_t, cff1_path_procs_path_t>
@ -449,7 +449,7 @@ struct cff1_cs_opset_path_t : cff1_cs_opset_t<cff1_cs_opset_path_t, cff1_path_pa
};
bool _get_path (const OT::cff1::accelerator_t *cff, hb_font_t *font, hb_codepoint_t glyph,
const hb_ot_glyph_decompose_funcs_t *funcs, void *user_data, bool in_seac, point_t *delta)
const hb_outline_decompose_funcs_t *funcs, void *user_data, bool in_seac, point_t *delta)
{
if (unlikely (!cff->is_valid () || (glyph >= cff->num_glyphs))) return false;
@ -464,7 +464,7 @@ bool _get_path (const OT::cff1::accelerator_t *cff, hb_font_t *font, hb_codepoin
}
bool OT::cff1::accelerator_t::get_path (hb_font_t *font, hb_codepoint_t glyph,
const hb_ot_glyph_decompose_funcs_t *funcs, void *user_data) const
const hb_outline_decompose_funcs_t *funcs, void *user_data) const
{
#ifdef HB_NO_OT_FONT_CFF
/* XXX Remove check when this code moves to .hh file. */

View File

@ -1348,7 +1348,7 @@ struct cff1
HB_INTERNAL bool get_extents (hb_font_t *font, hb_codepoint_t glyph, hb_glyph_extents_t *extents) const;
HB_INTERNAL bool get_seac_components (hb_codepoint_t glyph, hb_codepoint_t *base, hb_codepoint_t *accent) const;
HB_INTERNAL bool get_path (hb_font_t *font, hb_codepoint_t glyph,
const hb_ot_glyph_decompose_funcs_t *funcs, void *user_data) const;
const hb_outline_decompose_funcs_t *funcs, void *user_data) const;
private:
struct gname_t

View File

@ -30,7 +30,7 @@
#include "hb-ot-cff2-table.hh"
#include "hb-cff2-interp-cs.hh"
#include "hb-ot-glyph.hh"
#include "hb-outline.hh"
using namespace CFF;
@ -145,7 +145,7 @@ bool OT::cff2::accelerator_t::get_extents (hb_font_t *font,
struct cff2_path_param_t
{
cff2_path_param_t (hb_font_t *font_, const hb_ot_glyph_decompose_funcs_t *funcs_, void *user_data_)
cff2_path_param_t (hb_font_t *font_, const hb_outline_decompose_funcs_t *funcs_, void *user_data_)
{
path_open = false;
font = font_;
@ -180,7 +180,7 @@ struct cff2_path_param_t
bool path_open;
hb_font_t *font;
const hb_ot_glyph_decompose_funcs_t *funcs;
const hb_outline_decompose_funcs_t *funcs;
void *user_data;
};
@ -211,7 +211,7 @@ struct cff2_path_procs_path_t : path_procs_t<cff2_path_procs_path_t, cff2_cs_int
struct cff2_cs_opset_path_t : cff2_cs_opset_t<cff2_cs_opset_path_t, cff2_path_param_t, cff2_path_procs_path_t> {};
bool OT::cff2::accelerator_t::get_path (hb_font_t *font, hb_codepoint_t glyph,
const hb_ot_glyph_decompose_funcs_t *funcs, void *user_data) const
const hb_outline_decompose_funcs_t *funcs, void *user_data) const
{
#ifdef HB_NO_OT_FONT_CFF
/* XXX Remove check when this code moves to .hh file. */

View File

@ -534,7 +534,7 @@ struct cff2
hb_codepoint_t glyph,
hb_glyph_extents_t *extents) const;
HB_INTERNAL bool get_path (hb_font_t *font, hb_codepoint_t glyph,
const hb_ot_glyph_decompose_funcs_t *funcs, void *user_data) const;
const hb_outline_decompose_funcs_t *funcs, void *user_data) const;
};
typedef accelerator_templ_t<cff2_private_dict_opset_subset_t, cff2_private_dict_values_subset_t> accelerator_subset_t;

View File

@ -34,7 +34,7 @@
#include "hb-ot-head-table.hh"
#include "hb-ot-hmtx-table.hh"
#include "hb-ot-var-gvar-table.hh"
#include "hb-ot-glyph.hh"
#include "hb-outline.hh"
#include <float.h>
@ -1045,7 +1045,7 @@ struct glyf
bool
get_path (hb_font_t *font, hb_codepoint_t gid,
const hb_ot_glyph_decompose_funcs_t *funcs, void *user_data) const
const hb_outline_decompose_funcs_t *funcs, void *user_data) const
{
/* Making this completely alloc free is not that easy
https://github.com/harfbuzz/harfbuzz/issues/2095

View File

@ -1,92 +0,0 @@
/*
* Copyright © 2019-2020 Ebrahim Byagowi
*
* This is part of HarfBuzz, a text shaping library.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*/
#ifndef HB_OT_H_IN
#error "Include <hb-ot.h> instead."
#endif
#ifndef HB_OT_GLYPH_H
#define HB_OT_GLYPH_H
#include "hb.h"
HB_BEGIN_DECLS
typedef void (*hb_ot_glyph_decompose_move_to_func_t) (hb_position_t to_x, hb_position_t to_y, void *user_data);
typedef void (*hb_ot_glyph_decompose_line_to_func_t) (hb_position_t to_x, hb_position_t to_y, void *user_data);
typedef void (*hb_ot_glyph_decompose_conic_to_func_t) (hb_position_t control_x, hb_position_t control_y,
hb_position_t to_x, hb_position_t to_y,
void *user_data);
typedef void (*hb_ot_glyph_decompose_cubic_to_func_t) (hb_position_t control1_x, hb_position_t control1_y,
hb_position_t control2_x, hb_position_t control2_y,
hb_position_t to_x, hb_position_t to_y,
void *user_data);
typedef void (*hb_ot_glyph_decompose_close_path_func_t) (void *user_data);
/**
* hb_ot_glyph_decompose_funcs_t:
*
* Glyph decompose callbacks.
*
* Since: REPLACEME
**/
typedef struct hb_ot_glyph_decompose_funcs_t hb_ot_glyph_decompose_funcs_t;
HB_EXTERN void
hb_ot_glyph_decompose_funcs_set_move_to_func (hb_ot_glyph_decompose_funcs_t *funcs,
hb_ot_glyph_decompose_move_to_func_t move_to);
HB_EXTERN void
hb_ot_glyph_decompose_funcs_set_line_to_func (hb_ot_glyph_decompose_funcs_t *funcs,
hb_ot_glyph_decompose_move_to_func_t line_to);
HB_EXTERN void
hb_ot_glyph_decompose_funcs_set_conic_to_func (hb_ot_glyph_decompose_funcs_t *funcs,
hb_ot_glyph_decompose_conic_to_func_t conic_to);
HB_EXTERN void
hb_ot_glyph_decompose_funcs_set_cubic_to_func (hb_ot_glyph_decompose_funcs_t *funcs,
hb_ot_glyph_decompose_cubic_to_func_t cubic_to);
HB_EXTERN void
hb_ot_glyph_decompose_funcs_set_close_path_func (hb_ot_glyph_decompose_funcs_t *funcs,
hb_ot_glyph_decompose_close_path_func_t close_path);
HB_EXTERN hb_ot_glyph_decompose_funcs_t *
hb_ot_glyph_decompose_funcs_create (void);
HB_EXTERN hb_ot_glyph_decompose_funcs_t *
hb_ot_glyph_decompose_funcs_reference (hb_ot_glyph_decompose_funcs_t *funcs);
HB_EXTERN void
hb_ot_glyph_decompose_funcs_destroy (hb_ot_glyph_decompose_funcs_t *funcs);
HB_EXTERN hb_bool_t
hb_ot_glyph_decompose (hb_font_t *font, hb_codepoint_t glyph,
const hb_ot_glyph_decompose_funcs_t *funcs,
void *user_data);
HB_END_DECLS
#endif /* HB_OT_GLYPH_H */

View File

@ -33,7 +33,6 @@
#include "hb-ot-color.h"
#include "hb-ot-deprecated.h"
#include "hb-ot-font.h"
#include "hb-ot-glyph.h"
#include "hb-ot-layout.h"
#include "hb-ot-math.h"
#include "hb-ot-meta.h"

View File

@ -24,16 +24,16 @@
#include "hb.hh"
#ifndef HB_NO_GLYPH
#ifndef HB_NO_OUTLINE
#include "hb-ot.h"
#include "hb-ot-glyf-table.hh"
#include "hb-ot-cff1-table.hh"
#include "hb-ot-cff2-table.hh"
#include "hb-ot-glyph.hh"
#include "hb-outline.hh"
/**
* hb_ot_glyph_decompose_funcs_set_move_to_func:
* hb_outline_decompose_funcs_set_move_to_func:
* @funcs: decompose functions object
* @move_to: move-to callback
*
@ -42,15 +42,15 @@
* Since: REPLACEME
**/
void
hb_ot_glyph_decompose_funcs_set_move_to_func (hb_ot_glyph_decompose_funcs_t *funcs,
hb_ot_glyph_decompose_move_to_func_t move_to)
hb_outline_decompose_funcs_set_move_to_func (hb_outline_decompose_funcs_t *funcs,
hb_outline_decompose_move_to_func_t move_to)
{
if (unlikely (funcs == &Null (hb_ot_glyph_decompose_funcs_t))) return;
if (unlikely (funcs == &Null (hb_outline_decompose_funcs_t))) return;
funcs->move_to = move_to;
}
/**
* hb_ot_glyph_decompose_funcs_set_line_to_func:
* hb_outline_decompose_funcs_set_line_to_func:
* @funcs: decompose functions object
* @line_to: line-to callback
*
@ -59,15 +59,15 @@ hb_ot_glyph_decompose_funcs_set_move_to_func (hb_ot_glyph_decompose_funcs_t
* Since: REPLACEME
**/
void
hb_ot_glyph_decompose_funcs_set_line_to_func (hb_ot_glyph_decompose_funcs_t *funcs,
hb_ot_glyph_decompose_line_to_func_t line_to)
hb_outline_decompose_funcs_set_line_to_func (hb_outline_decompose_funcs_t *funcs,
hb_outline_decompose_line_to_func_t line_to)
{
if (unlikely (funcs == &Null (hb_ot_glyph_decompose_funcs_t))) return;
if (unlikely (funcs == &Null (hb_outline_decompose_funcs_t))) return;
funcs->line_to = line_to;
}
/**
* hb_ot_glyph_decompose_funcs_set_conic_to_func:
* hb_outline_decompose_funcs_set_conic_to_func:
* @funcs: decompose functions object
* @move_to: conic-to callback
*
@ -76,15 +76,15 @@ hb_ot_glyph_decompose_funcs_set_line_to_func (hb_ot_glyph_decompose_funcs_t
* Since: REPLACEME
**/
void
hb_ot_glyph_decompose_funcs_set_conic_to_func (hb_ot_glyph_decompose_funcs_t *funcs,
hb_ot_glyph_decompose_conic_to_func_t conic_to)
hb_outline_decompose_funcs_set_conic_to_func (hb_outline_decompose_funcs_t *funcs,
hb_outline_decompose_conic_to_func_t conic_to)
{
if (unlikely (funcs == &Null (hb_ot_glyph_decompose_funcs_t))) return;
if (unlikely (funcs == &Null (hb_outline_decompose_funcs_t))) return;
funcs->conic_to = conic_to;
}
/**
* hb_ot_glyph_decompose_funcs_set_cubic_to_func:
* hb_outline_decompose_funcs_set_cubic_to_func:
* @funcs: decompose functions
* @cubic_to: cubic-to callback
*
@ -93,15 +93,15 @@ hb_ot_glyph_decompose_funcs_set_conic_to_func (hb_ot_glyph_decompose_funcs_t
* Since: REPLACEME
**/
void
hb_ot_glyph_decompose_funcs_set_cubic_to_func (hb_ot_glyph_decompose_funcs_t *funcs,
hb_ot_glyph_decompose_cubic_to_func_t cubic_to)
hb_outline_decompose_funcs_set_cubic_to_func (hb_outline_decompose_funcs_t *funcs,
hb_outline_decompose_cubic_to_func_t cubic_to)
{
if (unlikely (funcs == &Null (hb_ot_glyph_decompose_funcs_t))) return;
if (unlikely (funcs == &Null (hb_outline_decompose_funcs_t))) return;
funcs->cubic_to = cubic_to;
}
/**
* hb_ot_glyph_decompose_funcs_set_close_path_func:
* hb_outline_decompose_funcs_set_close_path_func:
* @funcs: decompose functions object
* @close_path: close-path callback
*
@ -110,10 +110,10 @@ hb_ot_glyph_decompose_funcs_set_cubic_to_func (hb_ot_glyph_decompose_funcs_t
* Since: REPLACEME
**/
void
hb_ot_glyph_decompose_funcs_set_close_path_func (hb_ot_glyph_decompose_funcs_t *funcs,
hb_ot_glyph_decompose_close_path_func_t close_path)
hb_outline_decompose_funcs_set_close_path_func (hb_outline_decompose_funcs_t *funcs,
hb_outline_decompose_close_path_func_t close_path)
{
if (unlikely (funcs == &Null (hb_ot_glyph_decompose_funcs_t))) return;
if (unlikely (funcs == &Null (hb_outline_decompose_funcs_t))) return;
funcs->close_path = close_path;
}
@ -137,29 +137,29 @@ static void
_close_path_nil (void *user_data HB_UNUSED) {}
/**
* hb_ot_glyph_decompose_funcs_create:
* hb_outline_decompose_funcs_create:
*
* Creates a new decompose callbacks object.
*
* Since: REPLACEME
**/
hb_ot_glyph_decompose_funcs_t *
hb_ot_glyph_decompose_funcs_create ()
hb_outline_decompose_funcs_t *
hb_outline_decompose_funcs_create ()
{
hb_ot_glyph_decompose_funcs_t *funcs;
if (unlikely (!(funcs = hb_object_create<hb_ot_glyph_decompose_funcs_t> ())))
return const_cast<hb_ot_glyph_decompose_funcs_t *> (&Null (hb_ot_glyph_decompose_funcs_t));
hb_outline_decompose_funcs_t *funcs;
if (unlikely (!(funcs = hb_object_create<hb_outline_decompose_funcs_t> ())))
return const_cast<hb_outline_decompose_funcs_t *> (&Null (hb_outline_decompose_funcs_t));
funcs->move_to = (hb_ot_glyph_decompose_move_to_func_t) _move_to_nil;
funcs->line_to = (hb_ot_glyph_decompose_line_to_func_t) _line_to_nil;
funcs->conic_to = (hb_ot_glyph_decompose_conic_to_func_t) _conic_to_nil;
funcs->cubic_to = (hb_ot_glyph_decompose_cubic_to_func_t) _cubic_to_nil;
funcs->close_path = (hb_ot_glyph_decompose_close_path_func_t) _close_path_nil;
funcs->move_to = (hb_outline_decompose_move_to_func_t) _move_to_nil;
funcs->line_to = (hb_outline_decompose_line_to_func_t) _line_to_nil;
funcs->conic_to = (hb_outline_decompose_conic_to_func_t) _conic_to_nil;
funcs->cubic_to = (hb_outline_decompose_cubic_to_func_t) _cubic_to_nil;
funcs->close_path = (hb_outline_decompose_close_path_func_t) _close_path_nil;
return funcs;
}
/**
* hb_ot_glyph_decompose_funcs_reference:
* hb_outline_decompose_funcs_reference:
* @funcs: decompose functions
*
* Add to callbacks object refcount.
@ -167,14 +167,14 @@ hb_ot_glyph_decompose_funcs_create ()
* Returns: The same object.
* Since: REPLACEME
**/
hb_ot_glyph_decompose_funcs_t *
hb_ot_glyph_decompose_funcs_reference (hb_ot_glyph_decompose_funcs_t *funcs)
hb_outline_decompose_funcs_t *
hb_outline_decompose_funcs_reference (hb_outline_decompose_funcs_t *funcs)
{
return hb_object_reference (funcs);
}
/**
* hb_ot_glyph_decompose_funcs_destroy:
* hb_outline_decompose_funcs_destroy:
* @funcs: decompose functions
*
* Decreases refcount of callbacks object and deletes the object if it reaches
@ -183,7 +183,7 @@ hb_ot_glyph_decompose_funcs_reference (hb_ot_glyph_decompose_funcs_t *funcs)
* Since: REPLACEME
**/
void
hb_ot_glyph_decompose_funcs_destroy (hb_ot_glyph_decompose_funcs_t *funcs)
hb_outline_decompose_funcs_destroy (hb_outline_decompose_funcs_t *funcs)
{
if (!hb_object_destroy (funcs)) return;
@ -191,7 +191,7 @@ hb_ot_glyph_decompose_funcs_destroy (hb_ot_glyph_decompose_funcs_t *funcs)
}
/**
* hb_ot_glyph_decompose:
* hb_outline_decompose:
* @font: a font object
* @glyph: a glyph id
* @funcs: decompose callbacks object
@ -203,11 +203,11 @@ hb_ot_glyph_decompose_funcs_destroy (hb_ot_glyph_decompose_funcs_t *funcs)
* Since: REPLACEME
**/
hb_bool_t
hb_ot_glyph_decompose (hb_font_t *font, hb_codepoint_t glyph,
const hb_ot_glyph_decompose_funcs_t *funcs,
void *user_data)
hb_outline_decompose (hb_font_t *font, hb_codepoint_t glyph,
const hb_outline_decompose_funcs_t *funcs,
void *user_data)
{
if (unlikely (!funcs || funcs == &Null (hb_ot_glyph_decompose_funcs_t) ||
if (unlikely (funcs == &Null (hb_outline_decompose_funcs_t) ||
glyph >= font->face->get_num_glyphs ()))
return false;

92
src/hb-outline.h Normal file
View File

@ -0,0 +1,92 @@
/*
* Copyright © 2019-2020 Ebrahim Byagowi
*
* This is part of HarfBuzz, a text shaping library.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*/
#ifndef HB_H_IN
#error "Include <hb.h> instead."
#endif
#ifndef HB_OUTLINE_H
#define HB_OUTLINE_H
#include "hb.h"
HB_BEGIN_DECLS
typedef void (*hb_outline_decompose_move_to_func_t) (hb_position_t to_x, hb_position_t to_y, void *user_data);
typedef void (*hb_outline_decompose_line_to_func_t) (hb_position_t to_x, hb_position_t to_y, void *user_data);
typedef void (*hb_outline_decompose_conic_to_func_t) (hb_position_t control_x, hb_position_t control_y,
hb_position_t to_x, hb_position_t to_y,
void *user_data);
typedef void (*hb_outline_decompose_cubic_to_func_t) (hb_position_t control1_x, hb_position_t control1_y,
hb_position_t control2_x, hb_position_t control2_y,
hb_position_t to_x, hb_position_t to_y,
void *user_data);
typedef void (*hb_outline_decompose_close_path_func_t) (void *user_data);
/**
* hb_outline_decompose_funcs_t:
*
* Glyph decompose callbacks.
*
* Since: REPLACEME
**/
typedef struct hb_outline_decompose_funcs_t hb_outline_decompose_funcs_t;
HB_EXTERN void
hb_outline_decompose_funcs_set_move_to_func (hb_outline_decompose_funcs_t *funcs,
hb_outline_decompose_move_to_func_t move_to);
HB_EXTERN void
hb_outline_decompose_funcs_set_line_to_func (hb_outline_decompose_funcs_t *funcs,
hb_outline_decompose_move_to_func_t line_to);
HB_EXTERN void
hb_outline_decompose_funcs_set_conic_to_func (hb_outline_decompose_funcs_t *funcs,
hb_outline_decompose_conic_to_func_t conic_to);
HB_EXTERN void
hb_outline_decompose_funcs_set_cubic_to_func (hb_outline_decompose_funcs_t *funcs,
hb_outline_decompose_cubic_to_func_t cubic_to);
HB_EXTERN void
hb_outline_decompose_funcs_set_close_path_func (hb_outline_decompose_funcs_t *funcs,
hb_outline_decompose_close_path_func_t close_path);
HB_EXTERN hb_outline_decompose_funcs_t *
hb_outline_decompose_funcs_create (void);
HB_EXTERN hb_outline_decompose_funcs_t *
hb_outline_decompose_funcs_reference (hb_outline_decompose_funcs_t *funcs);
HB_EXTERN void
hb_outline_decompose_funcs_destroy (hb_outline_decompose_funcs_t *funcs);
HB_EXTERN hb_bool_t
hb_outline_decompose (hb_font_t *font, hb_codepoint_t glyph,
const hb_outline_decompose_funcs_t *funcs,
void *user_data);
HB_END_DECLS
#endif /* HB_OUTLINE_H */

View File

@ -22,21 +22,21 @@
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*/
#ifndef HB_OT_GLYPH_HH
#define HB_OT_GLYPH_HH
#ifndef HB_OUTLINE_HH
#define HB_OUTLINE_HH
#include "hb.hh"
struct hb_ot_glyph_decompose_funcs_t
struct hb_outline_decompose_funcs_t
{
hb_object_header_t header;
hb_ot_glyph_decompose_move_to_func_t move_to;
hb_ot_glyph_decompose_line_to_func_t line_to;
hb_ot_glyph_decompose_conic_to_func_t conic_to;
hb_ot_glyph_decompose_cubic_to_func_t cubic_to;
hb_ot_glyph_decompose_close_path_func_t close_path;
hb_outline_decompose_move_to_func_t move_to;
hb_outline_decompose_line_to_func_t line_to;
hb_outline_decompose_conic_to_func_t conic_to;
hb_outline_decompose_cubic_to_func_t cubic_to;
hb_outline_decompose_close_path_func_t close_path;
};
#endif /* HB_OT_GLYPH_HH */
#endif /* HB_OUTLINE_HH */

View File

@ -34,6 +34,7 @@
#include "hb-deprecated.h"
#include "hb-face.h"
#include "hb-font.h"
#include "hb-outline.h"
#include "hb-map.h"
#include "hb-set.h"
#include "hb-shape.h"

View File

@ -37,7 +37,7 @@
#define hb_blob_create_from_file(x) hb_blob_get_empty ()
#endif
#if !defined(HB_NO_COLOR) && !defined(HB_NO_GLYPH)
#if !defined(HB_NO_COLOR) && !defined(HB_NO_OUTLINE)
static void
svg_dump (hb_face_t *face, unsigned face_index)
{
@ -169,7 +169,7 @@ close_path (user_data_t &user_data)
}
static void
layered_glyph_dump (hb_font_t *font, hb_ot_glyph_decompose_funcs_t *funcs, unsigned face_index)
layered_glyph_dump (hb_font_t *font, hb_outline_decompose_funcs_t *funcs, unsigned face_index)
{
hb_face_t *face = hb_font_get_face (font);
unsigned num_glyphs = hb_face_get_glyph_count (face);
@ -224,7 +224,7 @@ layered_glyph_dump (hb_font_t *font, hb_ot_glyph_decompose_funcs_t *funcs, unsig
if (hb_color_get_alpha (color) != 255)
fprintf (f, "fill-opacity=\"%.3f\"", (double) hb_color_get_alpha (color) / 255.);
fprintf (f, "d=\"");
if (!hb_ot_glyph_decompose (font, layers[layer].glyph, funcs, &user_data))
if (!hb_outline_decompose (font, layers[layer].glyph, funcs, &user_data))
printf ("Failed to decompose layer %d while %d\n", layers[layer].glyph, gid);
fprintf (f, "\"/>\n");
}
@ -242,7 +242,7 @@ layered_glyph_dump (hb_font_t *font, hb_ot_glyph_decompose_funcs_t *funcs, unsig
}
static void
dump_glyphs (hb_font_t *font, hb_ot_glyph_decompose_funcs_t *funcs, unsigned face_index)
dump_glyphs (hb_font_t *font, hb_outline_decompose_funcs_t *funcs, unsigned face_index)
{
unsigned num_glyphs = hb_face_get_glyph_count (hb_font_get_face (font));
for (unsigned gid = 0; gid < num_glyphs; ++gid)
@ -266,7 +266,7 @@ dump_glyphs (hb_font_t *font, hb_ot_glyph_decompose_funcs_t *funcs, unsigned fac
user_data_t user_data;
user_data.ascender = font_extents.ascender;
user_data.f = f;
if (!hb_ot_glyph_decompose (font, gid, funcs, &user_data))
if (!hb_outline_decompose (font, gid, funcs, &user_data))
printf ("Failed to decompose gid: %d\n", gid);
fprintf (f, "\"/></svg>");
fclose (f);
@ -293,12 +293,12 @@ dump_glyphs (hb_blob_t *blob, const char *font_name)
fwrite (font_name, 1, strlen (font_name), font_name_file);
fclose (font_name_file);
hb_ot_glyph_decompose_funcs_t *funcs = hb_ot_glyph_decompose_funcs_create ();
hb_ot_glyph_decompose_funcs_set_move_to_func (funcs, (hb_ot_glyph_decompose_move_to_func_t) move_to);
hb_ot_glyph_decompose_funcs_set_line_to_func (funcs, (hb_ot_glyph_decompose_line_to_func_t) line_to);
hb_ot_glyph_decompose_funcs_set_conic_to_func (funcs, (hb_ot_glyph_decompose_conic_to_func_t) conic_to);
hb_ot_glyph_decompose_funcs_set_cubic_to_func (funcs, (hb_ot_glyph_decompose_cubic_to_func_t) cubic_to);
hb_ot_glyph_decompose_funcs_set_close_path_func (funcs, (hb_ot_glyph_decompose_close_path_func_t) close_path);
hb_outline_decompose_funcs_t *funcs = hb_outline_decompose_funcs_create ();
hb_outline_decompose_funcs_set_move_to_func (funcs, (hb_outline_decompose_move_to_func_t) move_to);
hb_outline_decompose_funcs_set_line_to_func (funcs, (hb_outline_decompose_line_to_func_t) line_to);
hb_outline_decompose_funcs_set_conic_to_func (funcs, (hb_outline_decompose_conic_to_func_t) conic_to);
hb_outline_decompose_funcs_set_cubic_to_func (funcs, (hb_outline_decompose_cubic_to_func_t) cubic_to);
hb_outline_decompose_funcs_set_close_path_func (funcs, (hb_outline_decompose_close_path_func_t) close_path);
unsigned num_faces = hb_face_count (blob);
for (unsigned face_index = 0; face_index < num_faces; ++face_index)
@ -324,7 +324,7 @@ dump_glyphs (hb_blob_t *blob, const char *font_name)
hb_face_destroy (face);
}
hb_ot_glyph_decompose_funcs_destroy (funcs);
hb_outline_decompose_funcs_destroy (funcs);
}
#endif
@ -501,7 +501,7 @@ main (int argc, char **argv)
hb_blob_t *blob = hb_blob_create_from_file (argv[1]);
printf ("Opened font file %s: %d bytes long\n", argv[1], hb_blob_get_length (blob));
print_layout_info_using_private_api (blob);
#if !defined(HB_NO_COLOR) && !defined(HB_NO_GLYPH)
#if !defined(HB_NO_COLOR) && !defined(HB_NO_OUTLINE)
dump_glyphs (blob, argv[1]);
#endif
hb_blob_destroy (blob);

View File

@ -38,8 +38,8 @@ TEST_PROGS = \
test-map \
test-object \
test-ot-face \
test-ot-glyph \
test-ot-glyphname \
test-outline \
test-set \
test-shape \
test-subset \

View File

@ -121,10 +121,10 @@ test_face (hb_face_t *face,
hb_ot_var_normalize_variations (face, NULL, 0, NULL, 0);
hb_ot_var_normalize_coords (face, 0, NULL, NULL);
hb_ot_glyph_decompose_funcs_t *funcs = hb_ot_glyph_decompose_funcs_create ();
hb_outline_decompose_funcs_t *funcs = hb_outline_decompose_funcs_create ();
for (unsigned gid = 0; gid < 10; ++gid)
hb_ot_glyph_decompose (font, gid, funcs, NULL);
hb_ot_glyph_decompose_funcs_destroy (funcs);
hb_outline_decompose (font, gid, funcs, NULL);
hb_outline_decompose_funcs_destroy (funcs);
hb_set_destroy (set);
hb_font_destroy (font);

View File

@ -24,7 +24,7 @@
#include "hb-test.h"
#include <hb-ot.h>
#include <hb.h>
typedef struct user_data_t
{
@ -159,16 +159,16 @@ close_path (user_data_t *user_data)
user_data->str[user_data->consumed++] = 'Z';
}
static hb_ot_glyph_decompose_funcs_t *funcs;
static hb_outline_decompose_funcs_t *funcs;
static void
test_hb_ot_glyph_empty (void)
test_hb_glyph_empty (void)
{
g_assert (!hb_ot_glyph_decompose (hb_font_get_empty (), 3, funcs, NULL));
g_assert (!hb_outline_decompose (hb_font_get_empty (), 3, funcs, NULL));
}
static void
test_hb_ot_glyph_glyf (void)
test_hb_glyph_glyf (void)
{
hb_face_t *face = hb_test_open_font_file ("fonts/SourceSerifVariable-Roman-VVAR.abc.ttf");
hb_font_t *font = hb_font_create (face);
@ -182,9 +182,9 @@ test_hb_ot_glyph_glyf (void)
};
user_data.consumed = 0;
g_assert (!hb_ot_glyph_decompose (font, 4, funcs, &user_data));
g_assert (!hb_outline_decompose (font, 4, funcs, &user_data));
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, 3, funcs, &user_data));
g_assert (hb_outline_decompose (font, 3, funcs, &user_data));
char expected[] = "M275,442L275,442Q232,442 198,420Q164,397 145,353Q126,309 126,245L126,245"
"Q126,182 147,139Q167,95 204,73Q240,50 287,50L287,50Q330,50 367,70"
"Q404,90 427,128L427,128L451,116Q431,54 384,21Q336,-13 266,-13L266,-13Q198,-13 148,18"
@ -199,7 +199,7 @@ test_hb_ot_glyph_glyf (void)
hb_font_set_variations (font, &var, 1);
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, 3, funcs, &user_data));
g_assert (hb_outline_decompose (font, 3, funcs, &user_data));
char expected2[] = "M323,448L323,448Q297,448 271,430Q244,412 227,371"
"Q209,330 209,261L209,261Q209,204 226,166Q242,127 273,107Q303,86 344,86L344,86Q378,86 404,101"
"Q430,115 451,137L451,137L488,103Q458,42 404,13Q350,-16 279,-16L279,-16Q211,-16 153,13Q95,41 60,99"
@ -212,7 +212,7 @@ test_hb_ot_glyph_glyf (void)
}
static void
test_hb_ot_glyph_cff1 (void)
test_hb_glyph_cff1 (void)
{
hb_face_t *face = hb_test_open_font_file ("fonts/cff1_seac.otf");
hb_font_t *font = hb_font_create (face);
@ -224,7 +224,7 @@ test_hb_ot_glyph_cff1 (void)
.size = sizeof (str),
.consumed = 0
};
g_assert (hb_ot_glyph_decompose (font, 3, funcs, &user_data));
g_assert (hb_outline_decompose (font, 3, funcs, &user_data));
char expected[] = "M203,367C227,440 248,512 268,588L272,588C293,512 314,440 338,367L369,267L172,267Z"
"M3,0L88,0L151,200L390,200L452,0L541,0L319,656L225,656Z"
"M300,653L342,694L201,861L143,806Z";
@ -234,7 +234,7 @@ test_hb_ot_glyph_cff1 (void)
}
static void
test_hb_ot_glyph_cff1_rline (void)
test_hb_glyph_cff1_rline (void)
{
/* https://github.com/harfbuzz/harfbuzz/pull/2053 */
hb_face_t *face = hb_test_open_font_file ("fonts/RanaKufi-Regular.subset.otf");
@ -247,7 +247,7 @@ test_hb_ot_glyph_cff1_rline (void)
.size = sizeof (str),
.consumed = 0
};
g_assert (hb_ot_glyph_decompose (font, 1, funcs, &user_data));
g_assert (hb_outline_decompose (font, 1, funcs, &user_data));
char expected[] = "M775,400C705,400 650,343 650,274L650,250L391,250L713,572L392,893"
"L287,1000C311,942 296,869 250,823C250,823 286,858 321,823L571,572"
"L150,150L750,150L750,276C750,289 761,300 775,300C789,300 800,289 800,276"
@ -259,7 +259,7 @@ test_hb_ot_glyph_cff1_rline (void)
}
static void
test_hb_ot_glyph_cff2 (void)
test_hb_glyph_cff2 (void)
{
hb_face_t *face = hb_test_open_font_file ("fonts/AdobeVFPrototype.abc.otf");
hb_font_t *font = hb_font_create (face);
@ -272,7 +272,7 @@ test_hb_ot_glyph_cff2 (void)
};
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, 3, funcs, &user_data));
g_assert (hb_outline_decompose (font, 3, funcs, &user_data));
char expected[] = "M275,442C303,442 337,435 371,417L325,454L350,366"
"C357,341 370,321 403,321C428,321 443,333 448,358"
"C435,432 361,487 272,487C153,487 43,393 43,236"
@ -286,7 +286,7 @@ test_hb_ot_glyph_cff2 (void)
hb_font_set_variations (font, &var, 1);
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, 3, funcs, &user_data));
g_assert (hb_outline_decompose (font, 3, funcs, &user_data));
char expected2[] = "M323,448C356,448 380,441 411,427L333,469L339,401"
"C343,322 379,297 420,297C458,297 480,314 492,352"
"C486,433 412,501 303,501C148,501 25,406 25,241"
@ -298,7 +298,7 @@ test_hb_ot_glyph_cff2 (void)
}
static void
test_hb_ot_glyph_ttf_parser_tests (void)
test_hb_glyph_ttf_parser_tests (void)
{
/* https://github.com/RazrFalcon/ttf-parser/blob/337e7d1c/tests/tests.rs#L50-L133 */
char str[1024] = {0};
@ -313,19 +313,19 @@ test_hb_ot_glyph_ttf_parser_tests (void)
{
/* We aren't identical on paths points for glyf with ttf-parser but visually, investigate */
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, 0, funcs, &user_data));
g_assert (hb_outline_decompose (font, 0, funcs, &user_data));
char expected[] = "M450,0L50,0L50,750L450,750L450,0Z";
g_assert_cmpmem (str, user_data.consumed, expected, sizeof (expected) - 1);
}
{
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, 1, funcs, &user_data));
g_assert (hb_outline_decompose (font, 1, funcs, &user_data));
char expected[] = "M514,416L56,416L56,487L514,487L514,416ZM514,217L56,217L56,288L514,288L514,217Z";
g_assert_cmpmem (str, user_data.consumed, expected, sizeof (expected) - 1);
}
{
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, 4, funcs, &user_data));
g_assert (hb_outline_decompose (font, 4, funcs, &user_data));
char expected[] = "M332,536L332,468L197,468L197,0L109,0L109,468L15,468L15,509L109,539L109,570"
"Q109,674 155,720Q201,765 283,765L283,765Q315,765 342,760Q368,754 387,747"
"L387,747L364,678Q348,683 327,688Q306,693 284,693L284,693Q240,693 219,664"
@ -338,13 +338,13 @@ test_hb_ot_glyph_ttf_parser_tests (void)
{
/* According to tests on tts-parser we should return an empty on single point but we aren't */
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, 5, funcs, &user_data));
g_assert (hb_outline_decompose (font, 5, funcs, &user_data));
char expected[] = "M15,0Q15,0 15,0Z";
g_assert_cmpmem (str, user_data.consumed, expected, sizeof (expected) - 1);
}
{
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, 6, funcs, &user_data));
g_assert (hb_outline_decompose (font, 6, funcs, &user_data));
char expected[] = "M346,536L346,468L211,468L211,0L123,0L123,468L29,468"
"L29,509L123,539L123,570Q123,674 169,720Q215,765 297,765"
"L297,765Q329,765 356,760Q382,754 401,747L401,747L378,678"
@ -361,7 +361,7 @@ test_hb_ot_glyph_ttf_parser_tests (void)
hb_face_destroy (face);
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, 1, funcs, &user_data));
g_assert (hb_outline_decompose (font, 1, funcs, &user_data));
char expected[] = "M0,0C100,0 150,-20 250,-20C350,-20 400,0 500,0C500,100 520,150 520,250"
"C520,350 500,400 500,500C400,500 350,520 250,520C150,520 100,500 0,500"
"C0,400 -20,350 -20,250C-20,150 0,100 0,0ZM50,50C50,130 34,170 34,250"
@ -378,7 +378,7 @@ test_hb_ot_glyph_ttf_parser_tests (void)
hb_face_destroy (face);
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, 1, funcs, &user_data));
g_assert (hb_outline_decompose (font, 1, funcs, &user_data));
char expected[] = "M82,0L164,0L164,486L82,486ZM124,586C156,586 181,608 181,639"
"C181,671 156,692 124,692C92,692 67,671 67,639C67,608 92,586 124,586Z";
g_assert_cmpmem (str, user_data.consumed, expected, sizeof (expected) - 1);
@ -388,7 +388,7 @@ test_hb_ot_glyph_ttf_parser_tests (void)
}
static void
test_hb_ot_glyph_font_kit_glyphs_tests (void)
test_hb_glyph_font_kit_glyphs_tests (void)
{
/* https://github.com/foliojs/fontkit/blob/master/test/glyphs.js */
char str[2048];
@ -404,7 +404,7 @@ test_hb_ot_glyph_font_kit_glyphs_tests (void)
/* should get a path for the glyph */
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, 37, funcs, &user_data));
g_assert (hb_outline_decompose (font, 37, funcs, &user_data));
char expected[] = "M201,0L201,1462L614,1462Q905,1462 1035,1375Q1165,1288 1165,1100"
"L1165,1100Q1165,970 1093,886Q1020,801 881,776L881,776L881,766"
"Q1214,709 1214,416L1214,416Q1214,220 1082,110Q949,0 711,0L711,0L201,0Z"
@ -416,7 +416,7 @@ test_hb_ot_glyph_font_kit_glyphs_tests (void)
/* should get a path for the glyph */
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, 171, funcs, &user_data));
g_assert (hb_outline_decompose (font, 171, funcs, &user_data));
char expected2[] = "M639,-20L639,-20Q396,-20 256,128Q115,276 115,539L115,539"
"Q115,804 246,960Q376,1116 596,1116L596,1116Q802,1116 922,981"
"Q1042,845 1042,623L1042,623L1042,518L287,518Q292,325 385,225"
@ -445,7 +445,7 @@ test_hb_ot_glyph_font_kit_glyphs_tests (void)
/* should resolve composite glyphs recursively */
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, codepoint, funcs, &user_data));
g_assert (hb_outline_decompose (font, codepoint, funcs, &user_data));
char expected[] = "M581,170L581,274L443,274Q409,274 384,259Q359,243 348,219"
"Q336,194 340,166Q343,138 365,111L365,111L468,-13Q470,-10 473,-7"
"Q475,-3 477,0L477,0L253,0Q225,0 203,8Q180,15 168,32Q155,48 155,73"
@ -463,7 +463,7 @@ test_hb_ot_glyph_font_kit_glyphs_tests (void)
/* should transform points of a composite glyph */
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, 2, funcs, &user_data)); /* 2 == arAlef.fina */
g_assert (hb_outline_decompose (font, 2, funcs, &user_data)); /* 2 == arAlef.fina */
char expected2[] = "M50,624L155,624L155,84Q150,90 146,95Q141,99 136,105L136,105"
"L292,105L292,0L156,0Q128,0 104,14Q79,27 65,51Q50,74 50,104"
"L50,104L50,624ZM282,0L282,105L312,105L312,0L282,0Z";
@ -478,7 +478,7 @@ test_hb_ot_glyph_font_kit_glyphs_tests (void)
hb_face_destroy (face);
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, 5, funcs, &user_data));
g_assert (hb_outline_decompose (font, 5, funcs, &user_data));
char expected[] = "M90,0L258,0C456,0 564,122 564,331C564,539 456,656 254,656L90,656ZM173,68"
"L173,588L248,588C401,588 478,496 478,331C478,165 401,68 248,68Z";
g_assert_cmpmem (str, user_data.consumed, expected, sizeof (expected) - 1);
@ -493,7 +493,7 @@ test_hb_ot_glyph_font_kit_glyphs_tests (void)
hb_face_destroy (face);
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, 1, funcs, &user_data));
g_assert (hb_outline_decompose (font, 1, funcs, &user_data));
char expected[] = "M139,390C175,390 205,419 205,459C205,501 175,530 139,530C103,530 73,501 73,459"
"C73,419 103,390 139,390ZM139,-13C175,-13 205,15 205,56C205,97 175,127 139,127"
"C103,127 73,97 73,56C73,15 103,-13 139,-13Z";
@ -505,7 +505,7 @@ test_hb_ot_glyph_font_kit_glyphs_tests (void)
}
static void
test_hb_ot_glyph_font_kit_variations_tests (void)
test_hb_glyph_font_kit_variations_tests (void)
{
/* https://github.com/foliojs/fontkit/blob/b310db5/test/variations.js */
char str[2048];
@ -538,7 +538,7 @@ test_hb_ot_glyph_font_kit_variations_tests (void)
hb_buffer_destroy (buffer);
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, codepoint, funcs, &user_data));
g_assert (hb_outline_decompose (font, codepoint, funcs, &user_data));
char expected[] = "M414,-102L371,-102L371,539L914,539L914,-27Q914,-102 840,-102L840,-102Q796,-102 755,-98"
"L755,-98L742,-59Q790,-66 836,-66L836,-66Q871,-66 871,-31L871,-31L871,504L414,504L414,-102Z"
"M203,-94L203,-94Q138,-94 86,-90L86,-90L74,-52Q137,-59 188,-59L188,-59Q211,-59 222,-47"
@ -584,7 +584,7 @@ test_hb_ot_glyph_font_kit_variations_tests (void)
hb_buffer_destroy (buffer);
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, codepoint, funcs, &user_data));
g_assert (hb_outline_decompose (font, codepoint, funcs, &user_data));
char expected[] = "M414,-102L371,-102L371,539L914,539L914,-27Q914,-102 840,-102L840,-102Q796,-102 755,-98"
"L755,-98L742,-59Q790,-66 836,-66L836,-66Q871,-66 871,-31L871,-31L871,504L414,504"
"L414,-102ZM203,-94L203,-94Q138,-94 86,-90L86,-90L74,-52Q137,-59 188,-59L188,-59"
@ -630,7 +630,7 @@ test_hb_ot_glyph_font_kit_variations_tests (void)
hb_buffer_destroy (buffer);
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, codepoint, funcs, &user_data));
g_assert (hb_outline_decompose (font, codepoint, funcs, &user_data));
char expected[] = "M414,-102L371,-102L371,539L914,539L914,-27Q914,-102 840,-102L840,-102"
"Q796,-102 755,-98L755,-98L742,-59Q790,-66 836,-66L836,-66Q871,-66 871,-31"
"L871,-31L871,504L414,504L414,-102ZM203,-94L203,-94Q138,-94 86,-90"
@ -680,7 +680,7 @@ test_hb_ot_glyph_font_kit_variations_tests (void)
hb_buffer_destroy (buffer);
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, codepoint, funcs, &user_data));
g_assert (hb_outline_decompose (font, codepoint, funcs, &user_data));
char expected[] = "M246,15C188,15 147,27 101,68L142,23L117,117C111,143 96,149 81,149"
"C65,149 56,141 52,126C71,40 137,-13 244,-13C348,-13 436,46 436,156"
"C436,229 405,295 271,349L247,359C160,393 119,439 119,506"
@ -704,7 +704,7 @@ test_hb_ot_glyph_font_kit_variations_tests (void)
hb_buffer_destroy (buffer);
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, codepoint, funcs, &user_data));
g_assert (hb_outline_decompose (font, codepoint, funcs, &user_data));
char expected[] = "M251,36C206,36 165,42 118,61L176,21L161,99C151,152 129,167 101,167"
"C78,167 61,155 51,131C54,43 133,-14 247,-14C388,-14 474,64 474,171"
"C474,258 430,321 294,370L257,383C188,406 150,438 150,499"
@ -729,7 +729,7 @@ test_hb_ot_glyph_font_kit_variations_tests (void)
hb_buffer_destroy (buffer);
user_data.consumed = 0;
g_assert (hb_ot_glyph_decompose (font, codepoint, funcs, &user_data));
g_assert (hb_outline_decompose (font, codepoint, funcs, &user_data));
char expected[] = "M258,38C197,38 167,48 118,71L192,19L183,103C177,155 155,174 115,174"
"C89,174 64,161 51,125C52,36 124,-16 258,-16C417,-16 513,67 513,175"
"C513,278 457,328 322,388L289,403C232,429 203,452 203,500C203,562 244,589 301,589"
@ -747,25 +747,25 @@ test_hb_ot_glyph_font_kit_variations_tests (void)
int
main (int argc, char **argv)
{
funcs = hb_ot_glyph_decompose_funcs_create ();
hb_ot_glyph_decompose_funcs_set_move_to_func (funcs, (hb_ot_glyph_decompose_move_to_func_t) move_to);
hb_ot_glyph_decompose_funcs_set_line_to_func (funcs, (hb_ot_glyph_decompose_line_to_func_t) line_to);
hb_ot_glyph_decompose_funcs_set_conic_to_func (funcs, (hb_ot_glyph_decompose_conic_to_func_t) conic_to);
hb_ot_glyph_decompose_funcs_set_cubic_to_func (funcs, (hb_ot_glyph_decompose_cubic_to_func_t) cubic_to);
hb_ot_glyph_decompose_funcs_set_close_path_func (funcs, (hb_ot_glyph_decompose_close_path_func_t) close_path);
funcs = hb_outline_decompose_funcs_create ();
hb_outline_decompose_funcs_set_move_to_func (funcs, (hb_outline_decompose_move_to_func_t) move_to);
hb_outline_decompose_funcs_set_line_to_func (funcs, (hb_outline_decompose_line_to_func_t) line_to);
hb_outline_decompose_funcs_set_conic_to_func (funcs, (hb_outline_decompose_conic_to_func_t) conic_to);
hb_outline_decompose_funcs_set_cubic_to_func (funcs, (hb_outline_decompose_cubic_to_func_t) cubic_to);
hb_outline_decompose_funcs_set_close_path_func (funcs, (hb_outline_decompose_close_path_func_t) close_path);
hb_test_init (&argc, &argv);
hb_test_add (test_itoa);
hb_test_add (test_hb_ot_glyph_empty);
hb_test_add (test_hb_ot_glyph_glyf);
hb_test_add (test_hb_ot_glyph_cff1);
hb_test_add (test_hb_ot_glyph_cff1_rline);
hb_test_add (test_hb_ot_glyph_cff2);
hb_test_add (test_hb_ot_glyph_ttf_parser_tests);
hb_test_add (test_hb_ot_glyph_font_kit_glyphs_tests);
hb_test_add (test_hb_ot_glyph_font_kit_variations_tests);
hb_test_add (test_hb_glyph_empty);
hb_test_add (test_hb_glyph_glyf);
hb_test_add (test_hb_glyph_cff1);
hb_test_add (test_hb_glyph_cff1_rline);
hb_test_add (test_hb_glyph_cff2);
hb_test_add (test_hb_glyph_ttf_parser_tests);
hb_test_add (test_hb_glyph_font_kit_glyphs_tests);
hb_test_add (test_hb_glyph_font_kit_variations_tests);
unsigned result = hb_test_run ();
hb_ot_glyph_decompose_funcs_destroy (funcs);
hb_outline_decompose_funcs_destroy (funcs);
return result;
}