print/py-uharfbuzz: Update to 0.21.0

- Fix build with harfbuzz 4.0.0 [1][2]

Changes:	https://github.com/harfbuzz/uharfbuzz/releases
Obtained from:	6a926ca774 [1]
		5d9150cc26 [2]
This commit is contained in:
Po-Chuan Hsieh 2022-03-08 01:56:18 +08:00
parent c827b2fa85
commit 825d908295
No known key found for this signature in database
GPG Key ID: 9A4BD10F002DD04B
4 changed files with 448 additions and 12 deletions

View File

@ -1,7 +1,7 @@
# Created by: Po-Chuan Hsieh <sunpoet@FreeBSD.org>
PORTNAME= uharfbuzz
PORTVERSION= 0.19.0
PORTVERSION= 0.21.0
CATEGORIES= print python
MASTER_SITES= CHEESESHOP
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
@ -12,8 +12,6 @@ COMMENT= Streamlined Cython bindings for the harfbuzz shaping engine
LICENSE= APACHE20
LICENSE_FILE= ${WRKSRC}/LICENSE
BROKEN= requires https://github.com/harfbuzz/uharfbuzz/pull/110
BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}setuptools_scm>=0:devel/py-setuptools_scm@${PY_FLAVOR}
LIB_DEPENDS= libharfbuzz.so:print/harfbuzz
@ -22,6 +20,7 @@ USE_PYTHON= autoplist concurrent cython distutils
post-patch:
@${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|' ${WRKSRC}/setup.py ${WRKSRC}/src/uharfbuzz/_harfbuzz.cpp
@${RM} ${WRKSRC}/src/uharfbuzz/_harfbuzz.cpp
# Clean up bundled libraries
@${RM} -r ${WRKSRC}/harfbuzz/

View File

@ -1,3 +1,3 @@
TIMESTAMP = 1641045992
SHA256 (uharfbuzz-0.19.0.zip) = 0807c4f14f40e20ca8fcc554ed4460d311fb91d9a8e3e2f8012acc7e9e6f0425
SIZE (uharfbuzz-0.19.0.zip) = 1174012
TIMESTAMP = 1646058106
SHA256 (uharfbuzz-0.21.0.zip) = 01b9c463f876f426fdc6dffc8e7eef60d46546502d5ebc121e81dd6e003089e3
SIZE (uharfbuzz-0.21.0.zip) = 1184982

View File

@ -0,0 +1,440 @@
Obtained from: https://github.com/harfbuzz/uharfbuzz/pull/110/commits/6a926ca7746a35a98ed8d719c870e340d1733e63
https://github.com/harfbuzz/uharfbuzz/pull/110/commits/5d9150cc267b16401f98d0f0effd656dcc0d6c38
--- src/uharfbuzz/_harfbuzz.pyx.orig 2022-02-08 07:41:12 UTC
+++ src/uharfbuzz/_harfbuzz.pyx
@@ -1,5 +1,6 @@
#cython: language_level=3
import os
+import warnings
from enum import IntEnum
from .charfbuzz cimport *
from libc.stdlib cimport free, malloc
@@ -529,12 +530,12 @@ cdef class Font:
def close_path(c):
c.closePath()
- funcs.set_move_to_func(move_to)
- funcs.set_line_to_func(line_to)
- funcs.set_cubic_to_func(cubic_to)
- funcs.set_quadratic_to_func(quadratic_to)
- funcs.set_close_path_func(close_path)
- funcs.draw_glyph(self, gid, pen)
+ funcs.set_move_to_func(move_to, pen)
+ funcs.set_line_to_func(line_to, pen)
+ funcs.set_cubic_to_func(cubic_to, pen)
+ funcs.set_quadratic_to_func(quadratic_to, pen)
+ funcs.set_close_path_func(close_path, pen)
+ funcs.get_glyph_shape(self, gid)
cdef hb_position_t _glyph_h_advance_func(hb_font_t* font, void* font_data,
@@ -888,39 +889,69 @@ def ot_layout_get_baseline(font: Font,
def ot_font_set_funcs(Font font):
hb_ot_font_set_funcs(font._hb_font)
-cdef void _move_to_func(hb_position_t to_x,
- hb_position_t to_y,
+cdef void _move_to_func(hb_draw_funcs_t *dfuncs,
+ void *draw_data,
+ hb_draw_state_t *st,
+ float to_x,
+ float to_y,
void *user_data):
- m = (<object>user_data).move_to_func()
- m(to_x, to_y, (<object>user_data).user_data())
+ m = (<object>draw_data).move_to_func()
+ userdata = <object>user_data
+ if userdata is None:
+ userdata = (<object>draw_data).user_data()
+ m(to_x, to_y, userdata)
-cdef void _line_to_func(hb_position_t to_x,
- hb_position_t to_y,
+cdef void _line_to_func(hb_draw_funcs_t *dfuncs,
+ void *draw_data,
+ hb_draw_state_t *st,
+ float to_x,
+ float to_y,
void *user_data):
- l = (<object>user_data).line_to_func()
- l(to_x, to_y, (<object>user_data).user_data())
+ l = (<object>draw_data).line_to_func()
+ userdata = <object>user_data
+ if userdata is None:
+ userdata = (<object>draw_data).user_data()
+ l(to_x, to_y, userdata)
-cdef void _close_path_func(void *user_data):
- cl = (<object>user_data).close_path_func()
- cl((<object>user_data).user_data())
+cdef void _close_path_func(hb_draw_funcs_t *dfuncs,
+ void *draw_data,
+ hb_draw_state_t *st,
+ void *user_data):
+ cl = (<object>draw_data).close_path_func()
+ userdata = <object>user_data
+ if userdata is None:
+ userdata = (<object>draw_data).user_data()
+ cl(userdata)
-cdef void _quadratic_to_func(hb_position_t c1_x,
- hb_position_t c1_y,
- hb_position_t to_x,
- hb_position_t to_y,
- void *user_data):
- q = (<object>user_data).quadratic_to_func()
- q(c1_x, c1_y, to_x, to_y, (<object>user_data).user_data())
+cdef void _quadratic_to_func(hb_draw_funcs_t *dfuncs,
+ void *draw_data,
+ hb_draw_state_t *st,
+ float c1_x,
+ float c1_y,
+ float to_x,
+ float to_y,
+ void *user_data):
+ q = (<object>draw_data).quadratic_to_func()
+ userdata = <object>user_data
+ if userdata is None:
+ userdata = (<object>draw_data).user_data()
+ q(c1_x, c1_y, to_x, to_y, userdata)
-cdef void _cubic_to_func(hb_position_t c1_x,
- hb_position_t c1_y,
- hb_position_t c2_x,
- hb_position_t c2_y,
- hb_position_t to_x,
- hb_position_t to_y,
- void *user_data):
- c = (<object>user_data).cubic_to_func()
- c(c1_x, c1_y, c2_x, c2_y, to_x, to_y, (<object>user_data).user_data())
+cdef void _cubic_to_func(hb_draw_funcs_t *dfuncs,
+ void *draw_data,
+ hb_draw_state_t *st,
+ float c1_x,
+ float c1_y,
+ float c2_x,
+ float c2_y,
+ float to_x,
+ float to_y,
+ void *user_data):
+ c = (<object>draw_data).cubic_to_func()
+ userdata = <object>user_data
+ if userdata is None:
+ userdata = (<object>draw_data).user_data()
+ c(c1_x, c1_y, c2_x, c2_y, to_x, to_y, userdata)
cdef class DrawFuncs:
@@ -939,9 +970,16 @@ cdef class DrawFuncs:
def __dealloc__(self):
hb_draw_funcs_destroy(self._hb_drawfuncs)
+ def get_glyph_shape(self, font: Font, gid: int):
+ hb_font_get_glyph_shape(font._hb_font, gid, self._hb_drawfuncs, <void*>self);
+
def draw_glyph(self, font: Font, gid: int, user_data: object):
+ warnings.warn(
+ "draw_glyph() is deprecated, use get_glyph_shape() instead",
+ DeprecationWarning,
+ )
self._user_data = user_data
- hb_font_draw_glyph(font._hb_font, gid, self._hb_drawfuncs, <void*>self);
+ self.get_glyph_shape(font, gid)
def move_to_func(self):
return self._move_to_func
@@ -963,54 +1001,59 @@ cdef class DrawFuncs:
def set_move_to_func(self,
func: Callable[[
- int,
- int,
+ float,
+ float,
object, # user_data
- ], None]) -> None:
+ ], None],
+ user_data: object = None) -> None:
self._move_to_func = func
hb_draw_funcs_set_move_to_func(
- self._hb_drawfuncs, _move_to_func)
+ self._hb_drawfuncs, _move_to_func, <void*>user_data, NULL)
def set_line_to_func(self,
func: Callable[[
- int,
- int,
+ float,
+ float,
object, # user_data
- ], None]) -> None:
+ ], None],
+ user_data: object = None) -> None:
self._line_to_func = func
hb_draw_funcs_set_line_to_func(
- self._hb_drawfuncs, _line_to_func)
+ self._hb_drawfuncs, _line_to_func, <void*>user_data, NULL)
def set_cubic_to_func(self,
func: Callable[[
- int,
- int,
- int,
- int,
- int,
- int,
+ float,
+ float,
+ float,
+ float,
+ float,
+ float,
object, # user_data
- ], None]) -> None:
+ ], None],
+ user_data: object = None) -> None:
self._cubic_to_func = func
hb_draw_funcs_set_cubic_to_func(
- self._hb_drawfuncs, _cubic_to_func)
+ self._hb_drawfuncs, _cubic_to_func, <void*>user_data, NULL)
def set_quadratic_to_func(self,
func: Callable[[
- int,
- int,
- int,
- int,
+ float,
+ float,
+ float,
+ float,
object, # user_data
- ], None]) -> None:
+ ], None],
+ user_data: object = None) -> None:
self._quadratic_to_func = func
hb_draw_funcs_set_quadratic_to_func(
- self._hb_drawfuncs, _quadratic_to_func)
+ self._hb_drawfuncs, _quadratic_to_func, <void*>user_data, NULL)
def set_close_path_func(self,
func: Callable[[
object
- ], None]) -> None:
+ ], None],
+ user_data: object = None) -> None:
self._close_path_func = func
hb_draw_funcs_set_close_path_func(
- self._hb_drawfuncs, _close_path_func)
+ self._hb_drawfuncs, _close_path_func, <void*>user_data, NULL)
--- src/uharfbuzz/charfbuzz.pxd.orig 2022-02-08 07:41:12 UTC
+++ src/uharfbuzz/charfbuzz.pxd
@@ -59,6 +59,15 @@ cdef extern from "hb.h":
unsigned short u8[4]
short i8[4]
+ ctypedef union hb_var_num_t:
+ float f
+ unsigned long u32
+ long i32
+ unsigned int u16[2]
+ int i16[2]
+ unsigned short u8[4]
+ short i8[4]
+
# hb-blob.h
ctypedef struct hb_blob_t:
pass
@@ -300,63 +309,106 @@ cdef extern from "hb.h":
unsigned int size)
void hb_font_destroy(hb_font_t* font)
+ ctypedef struct hb_draw_state_t:
+ hb_bool_t path_open
+ float path_start_x
+ float path_start_y
+ float current_x
+ float current_y
+ hb_var_num_t reserved1
+ hb_var_num_t reserved2
+ hb_var_num_t reserved3
+ hb_var_num_t reserved4
+ hb_var_num_t reserved5
+ hb_var_num_t reserved6
+ hb_var_num_t reserved7
+
ctypedef struct hb_draw_funcs_t:
pass
ctypedef void (*hb_draw_move_to_func_t) (
- hb_position_t to_x,
- hb_position_t to_y,
+ hb_draw_funcs_t *dfuncs,
+ void *draw_data,
+ hb_draw_state_t *st,
+ float to_x,
+ float to_y,
void *user_data);
+
ctypedef void (*hb_draw_line_to_func_t) (
- hb_position_t to_x,
- hb_position_t to_y,
+ hb_draw_funcs_t *dfuncs,
+ void *draw_data,
+ hb_draw_state_t *st,
+ float to_x,
+ float to_y,
void *user_data);
+
ctypedef void (*hb_draw_quadratic_to_func_t) (
- hb_position_t control_x,
- hb_position_t control_y,
- hb_position_t to_x,
- hb_position_t to_y,
+ hb_draw_funcs_t *dfuncs,
+ void *draw_data,
+ hb_draw_state_t *st,
+ float control_x,
+ float control_y,
+ float to_x,
+ float to_y,
void *user_data);
+
ctypedef void (*hb_draw_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,
+ hb_draw_funcs_t *dfuncs,
+ void *draw_data,
+ hb_draw_state_t *st,
+ float control1_x,
+ float control1_y,
+ float control2_x,
+ float control2_y,
+ float to_x,
+ float to_y,
void *user_data);
+
ctypedef void (*hb_draw_close_path_func_t) (
+ hb_draw_funcs_t *dfuncs,
+ void *draw_data,
+ hb_draw_state_t *st,
void *user_data);
void hb_draw_funcs_set_move_to_func (
- hb_draw_funcs_t* funcs,
- hb_draw_move_to_func_t move_to)
+ hb_draw_funcs_t* dfuncs,
+ hb_draw_move_to_func_t func,
+ void *user_data,
+ hb_destroy_func_t destroy)
void hb_draw_funcs_set_line_to_func (
- hb_draw_funcs_t* funcs,
- hb_draw_line_to_func_t line_to)
+ hb_draw_funcs_t* dfuncs,
+ hb_draw_line_to_func_t func,
+ void *user_data,
+ hb_destroy_func_t destroy)
void hb_draw_funcs_set_quadratic_to_func (
- hb_draw_funcs_t* funcs,
- hb_draw_quadratic_to_func_t quadratic_to)
+ hb_draw_funcs_t* dfuncs,
+ hb_draw_quadratic_to_func_t func,
+ void *user_data,
+ hb_destroy_func_t destroy)
void hb_draw_funcs_set_cubic_to_func (
- hb_draw_funcs_t* funcs,
- hb_draw_cubic_to_func_t cubic_to)
+ hb_draw_funcs_t* dfuncs,
+ hb_draw_cubic_to_func_t func,
+ void *user_data,
+ hb_destroy_func_t destroy)
void hb_draw_funcs_set_close_path_func(
- hb_draw_funcs_t* funcs,
- hb_draw_close_path_func_t close_path)
+ hb_draw_funcs_t* dfuncs,
+ hb_draw_close_path_func_t func,
+ void *user_data,
+ hb_destroy_func_t destroy)
hb_draw_funcs_t* hb_draw_funcs_create()
void hb_draw_funcs_destroy(hb_draw_funcs_t* funcs)
- hb_bool_t hb_font_draw_glyph(
+ void hb_font_get_glyph_shape(
hb_font_t *font,
hb_codepoint_t glyph,
- const hb_draw_funcs_t *funcs,
- void *user_data)
+ const hb_draw_funcs_t *dfuncs,
+ void *draw_data)
# hb-shape.h
void hb_shape(
--- tests/test_uharfbuzz.py.orig 2022-02-08 07:41:12 UTC
+++ tests/test_uharfbuzz.py
@@ -495,27 +495,49 @@ class TestCallbacks:
buf.set_message_func(message_collector.message)
hb.shape(blankfont, buf)
-
def test_draw_funcs(self, opensans):
funcs = hb.DrawFuncs()
container = []
def move_to(x,y,c):
- c.append(f"M{x},{y}")
+ c.append(f"M{x:g},{y:g}")
def line_to(x,y,c):
- c.append(f"L{x},{y}")
+ c.append(f"L{x:g},{y:g}")
def cubic_to(c1x,c1y,c2x,c2y,x,y,c):
- c.append(f"C{c1x},{c1y} {c2x},{c2y} {x},{y}")
+ c.append(f"C{c1x:g},{c1y:g} {c2x:g},{c2y:g} {x:g},{y:g}")
def quadratic_to(c1x,c1y,x,y,c):
- c.append(f"Q{c1x},{c1y} {x},{y}")
+ c.append(f"Q{c1x:g},{c1y:g} {x:g},{y:g}")
def close_path(c):
c.append("Z")
+ funcs.set_move_to_func(move_to, container)
+ funcs.set_line_to_func(line_to, container)
+ funcs.set_cubic_to_func(cubic_to, container)
+ funcs.set_quadratic_to_func(quadratic_to, container)
+ funcs.set_close_path_func(close_path, container)
+ funcs.get_glyph_shape(opensans, 1)
+ assert "".join(container) == "M1120,0L938,465L352,465L172,0L0,0L578,1468L721,1468L1296,0L1120,0ZM885,618L715,1071Q682,1157 647,1282Q625,1186 584,1071L412,618L885,618Z"
+
+ def test_draw_funcs_deprecated(self, opensans):
+ funcs = hb.DrawFuncs()
+ container = []
+ def move_to(x,y,c):
+ c.append(f"M{x:g},{y:g}")
+ def line_to(x,y,c):
+ c.append(f"L{x:g},{y:g}")
+ def cubic_to(c1x,c1y,c2x,c2y,x,y,c):
+ c.append(f"C{c1x:g},{c1y:g} {c2x:g},{c2y:g} {x:g},{y:g}")
+ def quadratic_to(c1x,c1y,x,y,c):
+ c.append(f"Q{c1x:g},{c1y:g} {x:g},{y:g}")
+ def close_path(c):
+ c.append("Z")
+
funcs.set_move_to_func(move_to)
funcs.set_line_to_func(line_to)
funcs.set_cubic_to_func(cubic_to)
funcs.set_quadratic_to_func(quadratic_to)
funcs.set_close_path_func(close_path)
- funcs.draw_glyph(opensans, 1, container)
+ with pytest.warns(DeprecationWarning):
+ funcs.draw_glyph(opensans, 1, container)
assert "".join(container) == "M1120,0L938,465L352,465L172,0L0,0L578,1468L721,1468L1296,0L1120,0ZM885,618L715,1071Q682,1157 647,1282Q625,1186 584,1071L412,618L885,618Z"
def test_draw_pen(self, opensans):

View File

@ -1,11 +1,8 @@
--- setup.py.orig 2021-07-24 15:45:38 UTC
--- setup.py.orig 2022-02-08 07:41:12 UTC
+++ setup.py
@@ -34,10 +34,10 @@ if platform.system() == 'Darwin':
extra_link_args.extend(['-framework', 'ApplicationServices'])
@@ -39,8 +39,8 @@ if platform.system() == 'Darwin':
extension = Extension(
- 'uharfbuzz._harfbuzz',
+ 'uharfbuzz',
'uharfbuzz._harfbuzz',
define_macros=define_macros,
- include_dirs=['harfbuzz/src'],
- sources=['src/uharfbuzz/_harfbuzz.pyx', 'harfbuzz/src/harfbuzz.cc'],