diff --git a/backports/py3-svgpath/105_use-better-than-nothing-font.patch b/backports/py3-svgpath/105_use-better-than-nothing-font.patch new file mode 100644 index 0000000..7e3d18d --- /dev/null +++ b/backports/py3-svgpath/105_use-better-than-nothing-font.patch @@ -0,0 +1,300 @@ +From a17ed35e490a99a7dfab9833f6f3be86f004f699 Mon Sep 17 00:00:00 2001 +From: Benjamin Drung +Date: Fri, 15 Dec 2023 15:32:16 +0100 +Subject: [PATCH] tests: Use better than nothing font +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Pillow 10.1.0 uses a version of Aileron Regular instead of the previous +“better than nothing” default font (in case FreeType support is +available). This font change changes the resulting bitmap. + +Use the "better than nothing" font to keep the expected result +identical. The proper solution is either to use one specific font in +svg.path or make pillow support loading the “better than nothing” +default font. + +Bug-Debian: https://bugs.debian.org/1055159 +--- + tests/font.py | 145 ++++++++++++++++++++++++++++++++ + tests/test_boundingbox_image.py | 18 ++-- + tests/test_image.py | 18 +++- + 3 files changed, 170 insertions(+), 11 deletions(-) + create mode 100644 tests/font.py + +diff --git a/tests/font.py b/tests/font.py +new file mode 100644 +index 0000000..d375f49 +--- /dev/null ++++ b/tests/font.py +@@ -0,0 +1,145 @@ ++# Code taken from https://github.com/python-pillow/Pillow/blob/main/src/PIL/ImageFont.py ++# ++# License: the open source HPND License ++# Copyright (c) 1997-2003 by Secret Labs AB ++# Copyright (c) 1996-2003 by Fredrik Lundh ++ ++from PIL import Image, ImageFont ++from io import BytesIO ++import base64 ++ ++ ++def get_better_than_nothing_font(): ++ font = ImageFont.ImageFont() ++ font._load_pilfont_data( ++ # courB08 ++ BytesIO( ++ base64.b64decode( ++ b""" ++UElMZm9udAo7Ozs7OzsxMDsKREFUQQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAA//8AAQAAAAAAAAABAAEA ++BgAAAAH/+gADAAAAAQAAAAMABgAGAAAAAf/6AAT//QADAAAABgADAAYAAAAA//kABQABAAYAAAAL ++AAgABgAAAAD/+AAFAAEACwAAABAACQAGAAAAAP/5AAUAAAAQAAAAFQAHAAYAAP////oABQAAABUA ++AAAbAAYABgAAAAH/+QAE//wAGwAAAB4AAwAGAAAAAf/5AAQAAQAeAAAAIQAIAAYAAAAB//kABAAB ++ACEAAAAkAAgABgAAAAD/+QAE//0AJAAAACgABAAGAAAAAP/6AAX//wAoAAAALQAFAAYAAAAB//8A ++BAACAC0AAAAwAAMABgAAAAD//AAF//0AMAAAADUAAQAGAAAAAf//AAMAAAA1AAAANwABAAYAAAAB ++//kABQABADcAAAA7AAgABgAAAAD/+QAFAAAAOwAAAEAABwAGAAAAAP/5AAYAAABAAAAARgAHAAYA ++AAAA//kABQAAAEYAAABLAAcABgAAAAD/+QAFAAAASwAAAFAABwAGAAAAAP/5AAYAAABQAAAAVgAH ++AAYAAAAA//kABQAAAFYAAABbAAcABgAAAAD/+QAFAAAAWwAAAGAABwAGAAAAAP/5AAUAAABgAAAA ++ZQAHAAYAAAAA//kABQAAAGUAAABqAAcABgAAAAD/+QAFAAAAagAAAG8ABwAGAAAAAf/8AAMAAABv ++AAAAcQAEAAYAAAAA//wAAwACAHEAAAB0AAYABgAAAAD/+gAE//8AdAAAAHgABQAGAAAAAP/7AAT/ ++/gB4AAAAfAADAAYAAAAB//oABf//AHwAAACAAAUABgAAAAD/+gAFAAAAgAAAAIUABgAGAAAAAP/5 ++AAYAAQCFAAAAiwAIAAYAAP////oABgAAAIsAAACSAAYABgAA////+gAFAAAAkgAAAJgABgAGAAAA ++AP/6AAUAAACYAAAAnQAGAAYAAP////oABQAAAJ0AAACjAAYABgAA////+gAFAAAAowAAAKkABgAG ++AAD////6AAUAAACpAAAArwAGAAYAAAAA//oABQAAAK8AAAC0AAYABgAA////+gAGAAAAtAAAALsA ++BgAGAAAAAP/6AAQAAAC7AAAAvwAGAAYAAP////oABQAAAL8AAADFAAYABgAA////+gAGAAAAxQAA ++AMwABgAGAAD////6AAUAAADMAAAA0gAGAAYAAP////oABQAAANIAAADYAAYABgAA////+gAGAAAA ++2AAAAN8ABgAGAAAAAP/6AAUAAADfAAAA5AAGAAYAAP////oABQAAAOQAAADqAAYABgAAAAD/+gAF ++AAEA6gAAAO8ABwAGAAD////6AAYAAADvAAAA9gAGAAYAAAAA//oABQAAAPYAAAD7AAYABgAA//// +++gAFAAAA+wAAAQEABgAGAAD////6AAYAAAEBAAABCAAGAAYAAP////oABgAAAQgAAAEPAAYABgAA ++////+gAGAAABDwAAARYABgAGAAAAAP/6AAYAAAEWAAABHAAGAAYAAP////oABgAAARwAAAEjAAYA ++BgAAAAD/+gAFAAABIwAAASgABgAGAAAAAf/5AAQAAQEoAAABKwAIAAYAAAAA//kABAABASsAAAEv ++AAgABgAAAAH/+QAEAAEBLwAAATIACAAGAAAAAP/5AAX//AEyAAABNwADAAYAAAAAAAEABgACATcA ++AAE9AAEABgAAAAH/+QAE//wBPQAAAUAAAwAGAAAAAP/7AAYAAAFAAAABRgAFAAYAAP////kABQAA ++AUYAAAFMAAcABgAAAAD/+wAFAAABTAAAAVEABQAGAAAAAP/5AAYAAAFRAAABVwAHAAYAAAAA//sA ++BQAAAVcAAAFcAAUABgAAAAD/+QAFAAABXAAAAWEABwAGAAAAAP/7AAYAAgFhAAABZwAHAAYAAP// ++//kABQAAAWcAAAFtAAcABgAAAAD/+QAGAAABbQAAAXMABwAGAAAAAP/5AAQAAgFzAAABdwAJAAYA ++AP////kABgAAAXcAAAF+AAcABgAAAAD/+QAGAAABfgAAAYQABwAGAAD////7AAUAAAGEAAABigAF ++AAYAAP////sABQAAAYoAAAGQAAUABgAAAAD/+wAFAAABkAAAAZUABQAGAAD////7AAUAAgGVAAAB ++mwAHAAYAAAAA//sABgACAZsAAAGhAAcABgAAAAD/+wAGAAABoQAAAacABQAGAAAAAP/7AAYAAAGn ++AAABrQAFAAYAAAAA//kABgAAAa0AAAGzAAcABgAA////+wAGAAABswAAAboABQAGAAD////7AAUA ++AAG6AAABwAAFAAYAAP////sABgAAAcAAAAHHAAUABgAAAAD/+wAGAAABxwAAAc0ABQAGAAD////7 ++AAYAAgHNAAAB1AAHAAYAAAAA//sABQAAAdQAAAHZAAUABgAAAAH/+QAFAAEB2QAAAd0ACAAGAAAA ++Av/6AAMAAQHdAAAB3gAHAAYAAAAA//kABAABAd4AAAHiAAgABgAAAAD/+wAF//0B4gAAAecAAgAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAB ++//sAAwACAecAAAHpAAcABgAAAAD/+QAFAAEB6QAAAe4ACAAGAAAAAP/5AAYAAAHuAAAB9AAHAAYA ++AAAA//oABf//AfQAAAH5AAUABgAAAAD/+QAGAAAB+QAAAf8ABwAGAAAAAv/5AAMAAgH/AAACAAAJ ++AAYAAAAA//kABQABAgAAAAIFAAgABgAAAAH/+gAE//sCBQAAAggAAQAGAAAAAP/5AAYAAAIIAAAC ++DgAHAAYAAAAB//kABf/+Ag4AAAISAAUABgAA////+wAGAAACEgAAAhkABQAGAAAAAP/7AAX//gIZ ++AAACHgADAAYAAAAA//wABf/9Ah4AAAIjAAEABgAAAAD/+QAHAAACIwAAAioABwAGAAAAAP/6AAT/ +++wIqAAACLgABAAYAAAAA//kABP/8Ai4AAAIyAAMABgAAAAD/+gAFAAACMgAAAjcABgAGAAAAAf/5 ++AAT//QI3AAACOgAEAAYAAAAB//kABP/9AjoAAAI9AAQABgAAAAL/+QAE//sCPQAAAj8AAgAGAAD/ ++///7AAYAAgI/AAACRgAHAAYAAAAA//kABgABAkYAAAJMAAgABgAAAAH//AAD//0CTAAAAk4AAQAG ++AAAAAf//AAQAAgJOAAACUQADAAYAAAAB//kABP/9AlEAAAJUAAQABgAAAAH/+QAF//4CVAAAAlgA ++BQAGAAD////7AAYAAAJYAAACXwAFAAYAAP////kABgAAAl8AAAJmAAcABgAA////+QAGAAACZgAA ++Am0ABwAGAAD////5AAYAAAJtAAACdAAHAAYAAAAA//sABQACAnQAAAJ5AAcABgAA////9wAGAAAC ++eQAAAoAACQAGAAD////3AAYAAAKAAAAChwAJAAYAAP////cABgAAAocAAAKOAAkABgAA////9wAG ++AAACjgAAApUACQAGAAD////4AAYAAAKVAAACnAAIAAYAAP////cABgAAApwAAAKjAAkABgAA//// +++gAGAAACowAAAqoABgAGAAAAAP/6AAUAAgKqAAACrwAIAAYAAP////cABQAAAq8AAAK1AAkABgAA ++////9wAFAAACtQAAArsACQAGAAD////3AAUAAAK7AAACwQAJAAYAAP////gABQAAAsEAAALHAAgA ++BgAAAAD/9wAEAAACxwAAAssACQAGAAAAAP/3AAQAAALLAAACzwAJAAYAAAAA//cABAAAAs8AAALT ++AAkABgAAAAD/+AAEAAAC0wAAAtcACAAGAAD////6AAUAAALXAAAC3QAGAAYAAP////cABgAAAt0A ++AALkAAkABgAAAAD/9wAFAAAC5AAAAukACQAGAAAAAP/3AAUAAALpAAAC7gAJAAYAAAAA//cABQAA ++Au4AAALzAAkABgAAAAD/9wAFAAAC8wAAAvgACQAGAAAAAP/4AAUAAAL4AAAC/QAIAAYAAAAA//oA ++Bf//Av0AAAMCAAUABgAA////+gAGAAADAgAAAwkABgAGAAD////3AAYAAAMJAAADEAAJAAYAAP// ++//cABgAAAxAAAAMXAAkABgAA////9wAGAAADFwAAAx4ACQAGAAD////4AAYAAAAAAAoABwASAAYA ++AP////cABgAAAAcACgAOABMABgAA////+gAFAAAADgAKABQAEAAGAAD////6AAYAAAAUAAoAGwAQ ++AAYAAAAA//gABgAAABsACgAhABIABgAAAAD/+AAGAAAAIQAKACcAEgAGAAAAAP/4AAYAAAAnAAoA ++LQASAAYAAAAA//gABgAAAC0ACgAzABIABgAAAAD/+QAGAAAAMwAKADkAEQAGAAAAAP/3AAYAAAA5 ++AAoAPwATAAYAAP////sABQAAAD8ACgBFAA8ABgAAAAD/+wAFAAIARQAKAEoAEQAGAAAAAP/4AAUA ++AABKAAoATwASAAYAAAAA//gABQAAAE8ACgBUABIABgAAAAD/+AAFAAAAVAAKAFkAEgAGAAAAAP/5 ++AAUAAABZAAoAXgARAAYAAAAA//gABgAAAF4ACgBkABIABgAAAAD/+AAGAAAAZAAKAGoAEgAGAAAA ++AP/4AAYAAABqAAoAcAASAAYAAAAA//kABgAAAHAACgB2ABEABgAAAAD/+AAFAAAAdgAKAHsAEgAG ++AAD////4AAYAAAB7AAoAggASAAYAAAAA//gABQAAAIIACgCHABIABgAAAAD/+AAFAAAAhwAKAIwA ++EgAGAAAAAP/4AAUAAACMAAoAkQASAAYAAAAA//gABQAAAJEACgCWABIABgAAAAD/+QAFAAAAlgAK ++AJsAEQAGAAAAAP/6AAX//wCbAAoAoAAPAAYAAAAA//oABQABAKAACgClABEABgAA////+AAGAAAA ++pQAKAKwAEgAGAAD////4AAYAAACsAAoAswASAAYAAP////gABgAAALMACgC6ABIABgAA////+QAG ++AAAAugAKAMEAEQAGAAD////4AAYAAgDBAAoAyAAUAAYAAP////kABQACAMgACgDOABMABgAA//// +++QAGAAIAzgAKANUAEw== ++""" ++ ) ++ ), ++ Image.open( ++ BytesIO( ++ base64.b64decode( ++ b""" ++iVBORw0KGgoAAAANSUhEUgAAAx4AAAAUAQAAAAArMtZoAAAEwElEQVR4nABlAJr/AHVE4czCI/4u ++Mc4b7vuds/xzjz5/3/7u/n9vMe7vnfH/9++vPn/xyf5zhxzjt8GHw8+2d83u8x27199/nxuQ6Od9 ++M43/5z2I+9n9ZtmDBwMQECDRQw/eQIQohJXxpBCNVE6QCCAAAAD//wBlAJr/AgALyj1t/wINwq0g ++LeNZUworuN1cjTPIzrTX6ofHWeo3v336qPzfEwRmBnHTtf95/fglZK5N0PDgfRTslpGBvz7LFc4F ++IUXBWQGjQ5MGCx34EDFPwXiY4YbYxavpnhHFrk14CDAAAAD//wBlAJr/AgKqRooH2gAgPeggvUAA ++Bu2WfgPoAwzRAABAAAAAAACQgLz/3Uv4Gv+gX7BJgDeeGP6AAAD1NMDzKHD7ANWr3loYbxsAD791 ++NAADfcoIDyP44K/jv4Y63/Z+t98Ovt+ub4T48LAAAAD//wBlAJr/AuplMlADJAAAAGuAphWpqhMx ++in0A/fRvAYBABPgBwBUgABBQ/sYAyv9g0bCHgOLoGAAAAAAAREAAwI7nr0ArYpow7aX8//9LaP/9 ++SjdavWA8ePHeBIKB//81/83ndznOaXx379wAAAD//wBlAJr/AqDxW+D3AABAAbUh/QMnbQag/gAY ++AYDAAACgtgD/gOqAAAB5IA/8AAAk+n9w0AAA8AAAmFRJuPo27ciC0cD5oeW4E7KA/wD3ECMAn2tt ++y8PgwH8AfAxFzC0JzeAMtratAsC/ffwAAAD//wBlAJr/BGKAyCAA4AAAAvgeYTAwHd1kmQF5chkG ++ABoMIHcL5xVpTfQbUqzlAAAErwAQBgAAEOClA5D9il08AEh/tUzdCBsXkbgACED+woQg8Si9VeqY ++lODCn7lmF6NhnAEYgAAA/NMIAAAAAAD//2JgjLZgVGBg5Pv/Tvpc8hwGBjYGJADjHDrAwPzAjv/H ++/Wf3PzCwtzcwHmBgYGcwbZz8wHaCAQMDOwMDQ8MCBgYOC3W7mp+f0w+wHOYxO3OG+e376hsMZjk3 ++AAAAAP//YmCMY2A4wMAIN5e5gQETPD6AZisDAwMDgzSDAAPjByiHcQMDAwMDg1nOze1lByRu5/47 ++c4859311AYNZzg0AAAAA//9iYGDBYihOIIMuwIjGL39/fwffA8b//xv/P2BPtzzHwCBjUQAAAAD/ ++/yLFBrIBAAAA//9i1HhcwdhizX7u8NZNzyLbvT97bfrMf/QHI8evOwcSqGUJAAAA//9iYBB81iSw ++pEE170Qrg5MIYydHqwdDQRMrAwcVrQAAAAD//2J4x7j9AAMDn8Q/BgYLBoaiAwwMjPdvMDBYM1Tv ++oJodAAAAAP//Yqo/83+dxePWlxl3npsel9lvLfPcqlE9725C+acfVLMEAAAA//9i+s9gwCoaaGMR ++evta/58PTEWzr21hufPjA8N+qlnBwAAAAAD//2JiWLci5v1+HmFXDqcnULE/MxgYGBj+f6CaJQAA ++AAD//2Ji2FrkY3iYpYC5qDeGgeEMAwPDvwQBBoYvcTwOVLMEAAAA//9isDBgkP///0EOg9z35v// ++Gc/eeW7BwPj5+QGZhANUswMAAAD//2JgqGBgYGBgqEMXlvhMPUsAAAAA//8iYDd1AAAAAP//AwDR ++w7IkEbzhVQAAAABJRU5ErkJggg== ++""" ++ ) ++ ) ++ ), ++ ) ++ return font +diff --git a/tests/test_boundingbox_image.py b/tests/test_boundingbox_image.py +index 21f19a7..414f0b1 100644 +--- a/tests/test_boundingbox_image.py ++++ b/tests/test_boundingbox_image.py +@@ -5,6 +5,7 @@ + + from PIL import Image, ImageDraw, ImageColor, ImageChops + from svg.path.path import CubicBezier, QuadraticBezier, Line, Arc ++from .font import get_better_than_nothing_font + + + RED = ImageColor.getcolor("red", mode="RGB") +@@ -57,17 +58,15 @@ def draw_boundingbox(self, path): + sys.platform != "linux", reason="Different platforms have different fonts" + ) + def test_image(self): +- self.draw.text((10, 10), "This is an SVG line:") +- self.draw.text( +- (10, 100), +- "The red line is a bounding box.", +- ) ++ font = get_better_than_nothing_font() ++ self.draw.text((10, 10), "This is an SVG line:", font=font) ++ self.draw.text((10, 100), "The red line is a bounding box.", font=font) + + line1 = Line(40 + 60j, 200 + 80j) + self.draw_path(line1) + self.draw_boundingbox(line1) + +- self.draw.text((10, 140), "These are Arc segments:") ++ self.draw.text((10, 140), "These are Arc segments:", font=font) + arc1 = Arc(260 + 320j, 100 + 100j, 0, 1, 1, 260 + 319j) + self.draw_path(arc1) + self.draw_boundingbox(arc1) +@@ -83,6 +82,7 @@ def test_image(self): + self.draw.text( + (10, 500), + "Next we have a quadratic bezier curve, with one tangent:", ++ font=font, + ) + start = 30 + 600j + control = 400 + 540j +@@ -95,12 +95,16 @@ def test_image(self): + self.draw.text( + (10, 670), + "The white dot is the control point, and the cyan lines are ", ++ font=font, ++ ) ++ self.draw.text( ++ (10, 690), "illustrating the how the control point works.", font=font + ) +- self.draw.text((10, 690), "illustrating the how the control point works.") + + self.draw.text( + (10, 730), + "Lastly is a cubic bezier, with 2 tangents, and 2 control points:", ++ font=font, + ) + + start = 200 + 800j +diff --git a/tests/test_image.py b/tests/test_image.py +index 49967ea..ae3a357 100644 +--- a/tests/test_image.py ++++ b/tests/test_image.py +@@ -4,6 +4,7 @@ + from math import sqrt + + from svg.path.path import CubicBezier, QuadraticBezier, Line, Arc ++from .font import get_better_than_nothing_font + + + RED = ImageColor.getcolor("red", mode="RGB") +@@ -57,25 +58,30 @@ def draw_tangents(self, path, count): + self.draw.line([c2t(p), c2t(tt + p)], fill=YELLOW, width=1) + + def test_image(self): +- self.draw.text((10, 10), "This is an SVG line:") ++ font = get_better_than_nothing_font() ++ self.draw.text((10, 10), "This is an SVG line:", font=font) + self.draw.text( + (10, 100), + "The red line is a tangent, and the yellow is 90 degrees from that.", ++ font=font, + ) + + line1 = Line(40 + 60j, 200 + 80j) + self.draw_path(line1) + self.draw_tangents(line1, 1) + +- self.draw.text((10, 140), "This is an Arc segment, almost a whole circle:") ++ self.draw.text( ++ (10, 140), "This is an Arc segment, almost a whole circle:", font=font ++ ) + arc1 = Arc(260 + 320j, 100 + 100j, 0, 1, 1, 260 + 319j) + self.draw_path(arc1) + self.draw_tangents(arc1, 5) +- self.draw.text((10, 460), "With five tangents.") ++ self.draw.text((10, 460), "With five tangents.", font=font) + + self.draw.text( + (10, 500), + "Next we have a quadratic bezier curve, with one tangent:", ++ font=font, + ) + start = 30 + 600j + control = 400 + 540j +@@ -88,12 +94,16 @@ def test_image(self): + self.draw.text( + (10, 670), + "The white dot is the control point, and the cyan lines are ", ++ font=font, ++ ) ++ self.draw.text( ++ (10, 690), "illustrating the how the control point works.", font=font + ) +- self.draw.text((10, 690), "illustrating the how the control point works.") + + self.draw.text( + (10, 730), + "Lastly is a cubic bezier, with 2 tangents, and 2 control points:", ++ font=font, + ) + + start = 30 + 800j diff --git a/backports/py3-svgpath/APKBUILD b/backports/py3-svgpath/APKBUILD new file mode 100644 index 0000000..e0d19f4 --- /dev/null +++ b/backports/py3-svgpath/APKBUILD @@ -0,0 +1,35 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-svgpath +pkgver=6.3 +pkgrel=0 +pkgdesc="SVG path and object parser" +url="https://github.com/regebro/svg.path" +arch="noarch" +license="MIT" +depends="python3" +makedepends="py3-setuptools" +checkdepends="py3-pytest py3-pillow" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/regebro/svg.path/archive/refs/tags/$pkgver.tar.gz + 105_use-better-than-nothing-font.patch + no-install-tests.patch" +builddir="$srcdir/svg.path-$pkgver" + +build() { + python3 setup.py build +} + +check() { + PYTHONPATH=build/lib pytest +} + +package() { + python3 setup.py install --skip-build --root="$pkgdir" +} + +sha512sums=" +fd9dd9e1e603be5e212e3eb247c9f3778203f5285397a4cdde4c038c3f31f7bc2b8904491c208256996e2fbd39b4e5f7ea58d964bd5d22bc09c57e4bc2c70317 py3-svgpath-6.3.tar.gz +d12d32b0f6b075ee8602a7eee5dd1ddaa8f097fe3d471f2941fac0bba335641111eb2c0e2819dffea822f895833ffafa35baac80085cf759ca1ed8f7a6b92773 105_use-better-than-nothing-font.patch +62ab1e0980c7fb797f74b81c937a68b6af1112fff293e6ddec6389a8e490a08e181c37217408b58ce3a2ae2afda7813bb3bbe57d5414cfc18e4e53e6d2f2ea5a no-install-tests.patch +" diff --git a/backports/py3-svgpath/no-install-tests.patch b/backports/py3-svgpath/no-install-tests.patch new file mode 100644 index 0000000..994ce3c --- /dev/null +++ b/backports/py3-svgpath/no-install-tests.patch @@ -0,0 +1,15 @@ +--- ./setup.py.orig ++++ ./setup.py +@@ -1,3 +1,3 @@ +-from setuptools import setup ++from setuptools import setup, find_packages + +-setup() ++setup(packages=find_packages("src", exclude=["*tests"])) +--- ./MANIFEST.in.orig ++++ ./MANIFEST.in +@@ -3,3 +3,4 @@ + + recursive-include src *.png + ++global-exclude tests/*