fonttools 4.55.5__cp38-cp38-win32.whl → 4.55.6__cp38-cp38-win32.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of fonttools might be problematic. Click here for more details.

fontTools/__init__.py CHANGED
@@ -3,6 +3,6 @@ from fontTools.misc.loggingTools import configLogger
3
3
 
4
4
  log = logging.getLogger(__name__)
5
5
 
6
- version = __version__ = "4.55.5"
6
+ version = __version__ = "4.55.6"
7
7
 
8
8
  __all__ = ["version", "log", "configLogger"]
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1206,9 +1206,7 @@ class Glyph(object):
1206
1206
  Return True if bounds were calculated, False otherwise.
1207
1207
  """
1208
1208
  for compo in self.components:
1209
- if hasattr(compo, "firstPt") or hasattr(compo, "transform"):
1210
- return False
1211
- if not float(compo.x).is_integer() or not float(compo.y).is_integer():
1209
+ if not compo._hasOnlyIntegerTranslate():
1212
1210
  return False
1213
1211
 
1214
1212
  # All components are untransformed and have an integer x/y translate
@@ -1241,7 +1239,7 @@ class Glyph(object):
1241
1239
  else:
1242
1240
  return self.numberOfContours == -1
1243
1241
 
1244
- def getCoordinates(self, glyfTable, round=noRound):
1242
+ def getCoordinates(self, glyfTable, *, round=noRound):
1245
1243
  """Return the coordinates, end points and flags
1246
1244
 
1247
1245
  This method returns three values: A :py:class:`GlyphCoordinates` object,
@@ -1276,7 +1274,18 @@ class Glyph(object):
1276
1274
  % compo.glyphName
1277
1275
  )
1278
1276
  coordinates = GlyphCoordinates(coordinates)
1279
- coordinates.toInt(round=round)
1277
+ # if asked to round e.g. while computing bboxes, it's important we
1278
+ # do it immediately before a component transform is applied to a
1279
+ # simple glyph's coordinates in case these might still contain floats;
1280
+ # however, if the referenced component glyph is another composite, we
1281
+ # must not round here but only at the end, after all the nested
1282
+ # transforms have been applied, or else rounding errors will compound.
1283
+ if (
1284
+ round is not noRound
1285
+ and g.numberOfContours > 0
1286
+ and not compo._hasOnlyIntegerTranslate()
1287
+ ):
1288
+ coordinates.toInt(round=round)
1280
1289
  if hasattr(compo, "firstPt"):
1281
1290
  # component uses two reference points: we apply the transform _before_
1282
1291
  # computing the offset between the points
@@ -1933,6 +1942,18 @@ class GlyphComponent(object):
1933
1942
  result = self.__eq__(other)
1934
1943
  return result if result is NotImplemented else not result
1935
1944
 
1945
+ def _hasOnlyIntegerTranslate(self):
1946
+ """Return True if it's a 'simple' component.
1947
+
1948
+ That is, it has no anchor points and no transform other than integer translate.
1949
+ """
1950
+ return (
1951
+ not hasattr(self, "firstPt")
1952
+ and not hasattr(self, "transform")
1953
+ and float(self.x).is_integer()
1954
+ and float(self.y).is_integer()
1955
+ )
1956
+
1936
1957
 
1937
1958
  class GlyphCoordinates(object):
1938
1959
  """A list of glyph coordinates.
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fonttools
3
- Version: 4.55.5
3
+ Version: 4.55.6
4
4
  Summary: Tools to manipulate font files
5
5
  Home-page: http://github.com/fonttools/fonttools
6
6
  Author: Just van Rossum
@@ -377,6 +377,11 @@ Have fun!
377
377
  Changelog
378
378
  ~~~~~~~~~
379
379
 
380
+ 4.55.6 (released 2025-01-24)
381
+ ----------------------------
382
+
383
+ - [glyf] Fixed regression introduced in 4.55.5 when computing bounds of nested composite glyphs with transformed components (#3752).
384
+
380
385
  4.55.5 (released 2025-01-23)
381
386
  ----------------------------
382
387
 
@@ -1,4 +1,4 @@
1
- fontTools/__init__.py,sha256=JHvYOKFAQJrY1Vshrb7KmtF69Ho5EIi6Wf89cYmuOSY,191
1
+ fontTools/__init__.py,sha256=7x-e0A0SRMGJMgU_gibbCDPraIshzf3b0djOpMsyUG8,191
2
2
  fontTools/__main__.py,sha256=T8Tg8xPKHOCVoYVG82p_zpQXfW7_ERRAphBkZVvhWN8,960
3
3
  fontTools/afmLib.py,sha256=YbmmjT8Du6qFUhFHwnAhOdvsyfXszODVjSJtd18CCjY,13603
4
4
  fontTools/agl.py,sha256=4aKwnbvSVUa39eV5Ka8e5ULwV-IEp4pcfwlMwEH_z3k,118208
@@ -24,7 +24,7 @@ fontTools/cu2qu/__init__.py,sha256=OoM_nBJAleZal6kxeNJn1ESy1pNm5c3DG417yVIE0-Q,6
24
24
  fontTools/cu2qu/__main__.py,sha256=6Vb8Ler3yqJ5w84UwlMJV6cS01uhV4PN10OlXQ6jlqo,98
25
25
  fontTools/cu2qu/benchmark.py,sha256=FwdvNjKfWHo18_CX0CO8AY5c68XSBE4M4TJo_EkB4q8,1350
26
26
  fontTools/cu2qu/cli.py,sha256=CvWzC5a6XF_v5o0yrS4vGI1JXiVVLzSJahTIqpJmiPk,6274
27
- fontTools/cu2qu/cu2qu.cp38-win32.pyd,sha256=lQ2pKVCC_TIGz3e4r47C4SBTuLHKXD862GHEY8NZM-U,95232
27
+ fontTools/cu2qu/cu2qu.cp38-win32.pyd,sha256=cBqKQ0jKR7jTuCJyYX9mx2w8p_VyYZ5JB45CprMmRbU,95232
28
28
  fontTools/cu2qu/cu2qu.py,sha256=XH2bnQ5aG9ic921ZWzQzU1-q3MQU6INCjLk4XjRj5_Y,16970
29
29
  fontTools/cu2qu/errors.py,sha256=uYyPSs_x-EMJKO2S3cLGWyk_KlHoOoh_XEtdB_oKBp0,2518
30
30
  fontTools/cu2qu/ufo.py,sha256=Mpd_7Be9jxNcOKFqkyRp8Oem3CS3R-ZYMMSD03LJL6o,12143
@@ -42,7 +42,7 @@ fontTools/feaLib/__main__.py,sha256=niUAPkiYxeRAJMlJuvVJZism2VFufZrNaQtieA7sNLk,
42
42
  fontTools/feaLib/ast.py,sha256=3bDOxPIwmxM5tjhnI8K7pheRkgEHYMb_ExJsco0SyDU,75934
43
43
  fontTools/feaLib/builder.py,sha256=VBDpD311XvqhzPA9wfyiY06ps14J0-FUWjOEs6fwrHE,72783
44
44
  fontTools/feaLib/error.py,sha256=PSXeclXORb9hkvXh95e6YrNKZpPPWkekXOJZCSEhSjg,665
45
- fontTools/feaLib/lexer.cp38-win32.pyd,sha256=n1Q-g9q3Hn_mxLFRNXNkuBfYaifE0SZFb12kyzC3kDo,131584
45
+ fontTools/feaLib/lexer.cp38-win32.pyd,sha256=nSmuB2zkQvn-jC23KBatopmhRwq1EnNIkAygjbJRI98,131584
46
46
  fontTools/feaLib/lexer.py,sha256=7VZ3NPFH7V1mvRbym111BNKvbB4hLfGLTMS0VV_3Ipw,11408
47
47
  fontTools/feaLib/location.py,sha256=teHrhjT8zzImcGBEJS1J43oaX9onCPu_pynxS8d-tUg,246
48
48
  fontTools/feaLib/lookupDebugInfo.py,sha256=h4Ig8kmEk5WlGf1C9JJAbbOKQK5OwkFLdj8CT7fOkmU,316
@@ -59,7 +59,7 @@ fontTools/merge/unicode.py,sha256=mgqRFhRugda62Xt0r28SduaN7YBzRfHxrpNprjLqoX8,43
59
59
  fontTools/merge/util.py,sha256=3alo4b7mhFNC6h8PjeqNU99dS7EuO8sdZkZpvRsEE6E,3521
60
60
  fontTools/misc/__init__.py,sha256=QoK6HlOoqtVqX5gOyv0bJiTXsVBbBRreUifdccWNp2k,76
61
61
  fontTools/misc/arrayTools.py,sha256=baENNALPvYRUhS4rdx_F3ltOmVIf1PV9G2EaMt7gAHM,11907
62
- fontTools/misc/bezierTools.cp38-win32.pyd,sha256=1KjKTGXZIuLh3wXotGos6Qh0FxcYY4d0MbSjQSnhpFY,355328
62
+ fontTools/misc/bezierTools.cp38-win32.pyd,sha256=yKsW_Nn6bXkKtKSDVQ7HyUvX6f-YQpa8t3zWkdKrL3g,355328
63
63
  fontTools/misc/bezierTools.py,sha256=m4j14ckKYtrKy8NhFFFY_Uv3kuL8g-SWNdEKUzqGjRQ,46535
64
64
  fontTools/misc/classifyTools.py,sha256=wLTjOhLiZaLiwwUTj2Ad5eZ5T_38W0Eo_uzRGWHWYvE,5783
65
65
  fontTools/misc/cliTools.py,sha256=7zKOXczaCKRMW6Yv5jdCZYHco8y0-lfimhIWzQ2IL8A,1915
@@ -115,7 +115,7 @@ fontTools/pens/explicitClosingLinePen.py,sha256=knCXcjSl2iPy6mLCDnsdDYx6J5rV7FH4
115
115
  fontTools/pens/filterPen.py,sha256=tWhgklyaCTUt7oQRTBbFUcOlc702V0NfadCH3X93CYg,8031
116
116
  fontTools/pens/freetypePen.py,sha256=NqNzXrOTDckoH4N6WLnj-KuxGcg6z7DlqSCfmpq8qAE,20370
117
117
  fontTools/pens/hashPointPen.py,sha256=ZAU87uw5ge3Kb4i9kRV28a5VFeZ_TWSsJabyAzwAHrU,3662
118
- fontTools/pens/momentsPen.cp38-win32.pyd,sha256=7tH8_h7F48OdHvKmpAxa_R6RwkEDFgC5b34rhbBANi8,88576
118
+ fontTools/pens/momentsPen.cp38-win32.pyd,sha256=ncJtgStDS8KbU4Juzwog2cLGQaMMeByDU8hQ0YLbzVc,88576
119
119
  fontTools/pens/momentsPen.py,sha256=Z-V5CjQBSj3qPxg3C_DBFKExqno89nOe3jWwHT9_xsM,26537
120
120
  fontTools/pens/perimeterPen.py,sha256=Zy5F8QzaNJAkkQQSb2QJCp-wZTvDAjBn-B099t2ABds,2222
121
121
  fontTools/pens/pointInsidePen.py,sha256=Hy48iR5NWV3x_wWoos-UC7GMtwvvUhd_q_ykiwaWdzQ,6547
@@ -138,7 +138,7 @@ fontTools/qu2cu/__init__.py,sha256=MpdE0XsHSDo9M3hyHLkPPLxB3FKr3aiT0dPW5qHCuSo,6
138
138
  fontTools/qu2cu/__main__.py,sha256=leKpToUNNyHf0nobr1I19vus2ziA1pO7rRKkreat-Xw,100
139
139
  fontTools/qu2cu/benchmark.py,sha256=PFxx2Bfu7-KuNrzdOIBXHPZvyNphqqcTVy4CneaCo3M,1456
140
140
  fontTools/qu2cu/cli.py,sha256=1QLBTSZW7e_VATJN9vjszRxIk_-Xjxu1KP53yX4T7q8,3839
141
- fontTools/qu2cu/qu2cu.cp38-win32.pyd,sha256=ueMBsswvfpBOcR2RLrw0-cxMYpOiIGTuSUcHw-WLheY,104448
141
+ fontTools/qu2cu/qu2cu.cp38-win32.pyd,sha256=AJ7tbZLNwYPY2KtJYdI74D4F7GjHTfglBRSW42Ay41k,104448
142
142
  fontTools/qu2cu/qu2cu.py,sha256=dtp5Zqhcs_NePwA2U5fgG2LtWleRwmBilTurau8sLL0,12693
143
143
  fontTools/subset/__init__.py,sha256=a0OHXLf9m8qlXRFA7Gxp5qxe8ImUQ5ziK3bD-4fm618,137743
144
144
  fontTools/subset/__main__.py,sha256=cEIC52EtGOJvFDfHXzi0M2EAYmyHAcI-ZZ0lb2y4r7s,101
@@ -229,7 +229,7 @@ fontTools/ttLib/tables/_f_p_g_m.py,sha256=MiDyOiSyn4iA92G8YDZytJMqTFgNix03oiX5xM
229
229
  fontTools/ttLib/tables/_f_v_a_r.py,sha256=hpxU0-u7_pZYDmQdKpmd_7c6BjVpXHdoQ97jKk9Kz5U,9098
230
230
  fontTools/ttLib/tables/_g_a_s_p.py,sha256=Pr4X2CEg3a_nYAZrKSWT0auQ5HU2WutP1Shxxg7ALPw,2266
231
231
  fontTools/ttLib/tables/_g_c_i_d.py,sha256=diZlew4U8nFK5vimh-GMOjwHw8ccZtIEl9cPq0PrNdA,375
232
- fontTools/ttLib/tables/_g_l_y_f.py,sha256=zzgU79scLGT4P9bbSqUnE7X2iYcCp3gMBqjHSbftBPY,86957
232
+ fontTools/ttLib/tables/_g_l_y_f.py,sha256=7nGKdrSZ7yz2k-o1pKNlVM-RZ0fuYCtvuUhoCD2lGKE,87942
233
233
  fontTools/ttLib/tables/_g_v_a_r.py,sha256=etECZEoWa1KEimNg2hqNFqPqr85OFsfj3odDIU-0lRI,11065
234
234
  fontTools/ttLib/tables/_h_d_m_x.py,sha256=Da8Og1KFmOLJGkBlLDlcgdvrIeCTx1USGwnmlg93r3E,4398
235
235
  fontTools/ttLib/tables/_h_e_a_d.py,sha256=ft9ghTA1NZsGBvB0yElFFCqVHecuCKGjT2m2GfYB3Yc,5056
@@ -293,7 +293,7 @@ fontTools/varLib/interpolatablePlot.py,sha256=tUKFd8H9B2eD_GE6jV13J-dZkkIeLmk3oj
293
293
  fontTools/varLib/interpolatableTestContourOrder.py,sha256=Pbt0jW0LoVggIwrtADZ7HWK6Ftdoo1bjuWz0ost0HD0,3103
294
294
  fontTools/varLib/interpolatableTestStartingPoint.py,sha256=f5MJ3mj8MctJCvDJwqmW1fIVOgovUMYAOela9HweaRU,4403
295
295
  fontTools/varLib/interpolate_layout.py,sha256=tTPUes_K7MwooUO_wac9AeFEVgL1uGSz4ITYiOizaME,3813
296
- fontTools/varLib/iup.cp38-win32.pyd,sha256=PTgeuFJKmnK7KMhrADaHQIVlvGrHzHBneX8Cff5Bwew,123392
296
+ fontTools/varLib/iup.cp38-win32.pyd,sha256=tDB8SPd9dZdhwlcGMnu6dXoVfpfHF6lf6bxnP05zWLI,123392
297
297
  fontTools/varLib/iup.py,sha256=O_xPJOBECrNDbQqCC3e5xf9KsWXUd1i3BAp9Fl6Hv2Y,15474
298
298
  fontTools/varLib/merger.py,sha256=V-B17poOYbbrRsfUYJbdqt46GtRfG833MKwtv9NOB3Q,62519
299
299
  fontTools/varLib/models.py,sha256=ZqQb1Lapj5dCO8dwa3UTx1LsIpF0-GiDte32t_TMJJQ,23040
@@ -314,10 +314,10 @@ fontTools/voltLib/error.py,sha256=3TsaZBA82acFd2j5Beq3WUQTURTKM0zxOnUFGZovSNA,40
314
314
  fontTools/voltLib/lexer.py,sha256=v9V4zdBO2VqVJG__IWrL8fv_CRURmh2eD_1UpbIJn9g,3467
315
315
  fontTools/voltLib/parser.py,sha256=xAQPwO8uyYHKi-v9yMtz2RGE3lj75V4lanUGgIL9AC4,25572
316
316
  fontTools/voltLib/voltToFea.py,sha256=iJ7mJa9q-vWpmQgfCJC_ZrzNop_mgC1pazr1DhPJleE,29235
317
- fonttools-4.55.5.data/data/share/man/man1/ttx.1,sha256=E71F9mRNWlttVpzlnP7w_fqkQygPkph5s-AtVa0Js50,5601
318
- fonttools-4.55.5.dist-info/LICENSE,sha256=Ir74Bpfs-qF_l-YrmibfoSggvgVYPo3RKtFpskEnTJk,1093
319
- fonttools-4.55.5.dist-info/METADATA,sha256=MGRP3ch8nZ2ppkpnUjPptGFNpbPkhZLcB7Ymh5tpMbQ,169103
320
- fonttools-4.55.5.dist-info/WHEEL,sha256=vBXc8Yz61rk4PXr558q4bsp34y-RMVJ3b9QU_ECAK-o,95
321
- fonttools-4.55.5.dist-info/entry_points.txt,sha256=8kVHddxfFWA44FSD4mBpmC-4uCynQnkoz_9aNJb227Y,147
322
- fonttools-4.55.5.dist-info/top_level.txt,sha256=rRgRylrXzekqWOsrhygzib12pQ7WILf7UGjqEwkIFDM,10
323
- fonttools-4.55.5.dist-info/RECORD,,
317
+ fonttools-4.55.6.data/data/share/man/man1/ttx.1,sha256=E71F9mRNWlttVpzlnP7w_fqkQygPkph5s-AtVa0Js50,5601
318
+ fonttools-4.55.6.dist-info/LICENSE,sha256=Ir74Bpfs-qF_l-YrmibfoSggvgVYPo3RKtFpskEnTJk,1093
319
+ fonttools-4.55.6.dist-info/METADATA,sha256=Rf4SrwgdcsJ8L2rcFSZ7rtQWDUkB8i16ABkyIMf73MQ,169302
320
+ fonttools-4.55.6.dist-info/WHEEL,sha256=vBXc8Yz61rk4PXr558q4bsp34y-RMVJ3b9QU_ECAK-o,95
321
+ fonttools-4.55.6.dist-info/entry_points.txt,sha256=8kVHddxfFWA44FSD4mBpmC-4uCynQnkoz_9aNJb227Y,147
322
+ fonttools-4.55.6.dist-info/top_level.txt,sha256=rRgRylrXzekqWOsrhygzib12pQ7WILf7UGjqEwkIFDM,10
323
+ fonttools-4.55.6.dist-info/RECORD,,