fonttools 4.55.5__cp312-cp312-macosx_10_13_x86_64.whl → 4.55.6__cp312-cp312-macosx_10_13_x86_64.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
@@ -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.2
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
@@ -389,6 +389,11 @@ Have fun!
389
389
  Changelog
390
390
  ~~~~~~~~~
391
391
 
392
+ 4.55.6 (released 2025-01-24)
393
+ ----------------------------
394
+
395
+ - [glyf] Fixed regression introduced in 4.55.5 when computing bounds of nested composite glyphs with transformed components (#3752).
396
+
392
397
  4.55.5 (released 2025-01-23)
393
398
  ----------------------------
394
399
 
@@ -1,13 +1,8 @@
1
- fonttools-4.55.5.dist-info/RECORD,,
2
- fonttools-4.55.5.dist-info/LICENSE,sha256=Z4cgj4P2Wcy8IiOy_elS_6b36KymLxqKK_W8UbsbI4M,1072
3
- fonttools-4.55.5.dist-info/WHEEL,sha256=FBd6an5AFoPq_6i7rX7RY9hnbsVzpIPkc8xRof4mLK4,111
4
- fonttools-4.55.5.dist-info/entry_points.txt,sha256=8kVHddxfFWA44FSD4mBpmC-4uCynQnkoz_9aNJb227Y,147
5
- fonttools-4.55.5.dist-info/top_level.txt,sha256=rRgRylrXzekqWOsrhygzib12pQ7WILf7UGjqEwkIFDM,10
6
- fonttools-4.55.5.dist-info/METADATA,sha256=LTpr4fuHsoSAtkaG68Uuij-9NQNhB8V_Ra8J14m7u1M,165880
1
+ fonttools-4.55.6.data/data/share/man/man1/ttx.1,sha256=cLbm_pOOj1C76T2QXvDxzwDj9gk-GTd5RztvTMsouFw,5377
7
2
  fontTools/ttx.py,sha256=XCerBn2ySMc5Bn54io4j5U5cW228GFREYvEeuvp0ZfM,16652
8
3
  fontTools/fontBuilder.py,sha256=ntG0lXnhXNcHK-C7bp0nGNQ68OutFA-84TNNpzntTcE,33952
9
4
  fontTools/unicode.py,sha256=ZZ7OMmWvIyV1IL1k6ioTzaRAh3tUvm6gvK7QgFbOIHY,1237
10
- fontTools/__init__.py,sha256=OYDPTWCWOw88Y0Ovnd6VAvxaE753VM7PqOK6uaMfM6s,183
5
+ fontTools/__init__.py,sha256=DxxZT_7Dukh-9b99tImAS_ifGPG3Gxr_h3DKNFZ58a4,183
11
6
  fontTools/tfmLib.py,sha256=UMbkM73JXRJVS9t2B-BJc13rSjImaWBuzCoehLwHFhs,14270
12
7
  fontTools/afmLib.py,sha256=1MagIItOzRV4vV5kKPxeDZbPJsfxLB3wdHLFkQvl0uk,13164
13
8
  fontTools/agl.py,sha256=05bm8Uq45uVWW8nPbP6xbNgmFyxQr8sWhYAiP0VSjnI,112975
@@ -22,9 +17,9 @@ fontTools/qu2cu/__init__.py,sha256=Jfm1JljXbt91w4gyvZn6jzEmVnhRx50sh2fDongrOsE,6
22
17
  fontTools/qu2cu/qu2cu.py,sha256=IYtpkwHdfKOXJr65Y_pJ9Lrt_MgJaISAKGMAs5ilFSM,12288
23
18
  fontTools/qu2cu/cli.py,sha256=U2rooYnVVEalGRAWGFHk-Kp6Okys8wtzdaWLjw1bngY,3714
24
19
  fontTools/qu2cu/qu2cu.c,sha256=D7PGICR2s0JVhpLKrsS8siKXR_MAiCMIQErp-54RcLU,654934
25
- fontTools/qu2cu/qu2cu.cpython-312-darwin.so,sha256=itBEW1EZoe30J1OaLtw92e0Rvne-fH-Carmq_YEN3rw,165336
20
+ fontTools/qu2cu/qu2cu.cpython-312-darwin.so,sha256=HpWUQUiRD3jnHioYguzo_rpt0N5AKbaE5t0xql6sE2o,165336
26
21
  fontTools/qu2cu/__main__.py,sha256=9FWf6SIZaRaC8SiL0LhjAWC2yIdY9N_9wlRko8m1l2Q,93
27
- fontTools/misc/bezierTools.cpython-312-darwin.so,sha256=nu8SAZqbGvBTUf3ILiMDvHp5yV6h6R-nlxFxJaDZoCg,573200
22
+ fontTools/misc/bezierTools.cpython-312-darwin.so,sha256=4m4ifLI1cTGgMnUuF-NHbmVEFATu805q0rpw6SE8mns,573200
28
23
  fontTools/misc/arrayTools.py,sha256=jZk__GE-K9VViZE_H-LPPj0smWbKng-yfPE8BfGp8HI,11483
29
24
  fontTools/misc/cython.py,sha256=eyLcL2Bw-SSToYro8f44dkkYRlQfiFbhcza0afS-qHE,682
30
25
  fontTools/misc/cliTools.py,sha256=qCznJMLCQu3ZHQD_4ctUnr3TkfAUdkGl-UuxZUrppy0,1862
@@ -71,7 +66,7 @@ fontTools/cu2qu/cli.py,sha256=MbAQnOpZwrUFe_tjAP3Tgf6uLdOgHlONUcPNeTXwH0Y,6076
71
66
  fontTools/cu2qu/errors.py,sha256=PyJNMy8lHDtKpfFkc0nkM8F4jNLZAC4lPQCN1Km4bpg,2441
72
67
  fontTools/cu2qu/cu2qu.py,sha256=GGNdNWT4xgrvxeZTczIj9Nxi6vN-5lb90KyVmB95W0Y,16439
73
68
  fontTools/cu2qu/__main__.py,sha256=kTUI-jczsHeelULLlory74QEeFjZWp9zigCc7PrdVQY,92
74
- fontTools/cu2qu/cu2qu.cpython-312-darwin.so,sha256=n5jA2mBCJX0YFWOzeq18WxhldsjfebICrOLSlD7fDSg,159696
69
+ fontTools/cu2qu/cu2qu.cpython-312-darwin.so,sha256=tyYxb9NyBQxfLai5UZAXxv1BGOUgLnc3UIXl7c-Wkrs,159696
75
70
  fontTools/subset/cff.py,sha256=rqMRJOlX5FacV1LW8aDlVOglgEM87TkMA9bdsYenask,6145
76
71
  fontTools/subset/util.py,sha256=9SXFYb5Ef9Z58uXmYPCQil8B2i3Q7aFB_1fFDFSppdU,754
77
72
  fontTools/subset/__init__.py,sha256=rCtpLcDkGAlfOKgo-TkyiynmK_BrXxit82IFfWWOOVs,133905
@@ -109,7 +104,7 @@ fontTools/varLib/__init__.py,sha256=RGQ1bNPr9UcGeJ3mSAwctZbJJ-avZL1brjeAukRljEA,
109
104
  fontTools/varLib/mutator.py,sha256=YJkKFFWjwpYZ1MrC7UZYJ1BuYTGiwgi7jHnpqNpKfKg,19278
110
105
  fontTools/varLib/interpolatablePlot.py,sha256=w393P6mGLRhYkIjSxMww3qyoYxAUZzCXlmPBbI_84C0,44375
111
106
  fontTools/varLib/builder.py,sha256=mSKOCcnnw-WzmZs15FayoqCDh77Ts7o9Tre9psh8CUc,6609
112
- fontTools/varLib/iup.cpython-312-darwin.so,sha256=1ac0lU5UoIZTmiNgI2YCk0MCmRtWT4ReKZzF3vrrDMA,201064
107
+ fontTools/varLib/iup.cpython-312-darwin.so,sha256=zkyBDoiWn16K1JQoub6XLfLRMcYcJJGjvTMMTIWqk2s,201064
113
108
  fontTools/varLib/stat.py,sha256=XuNKKZxGlBrl4OGFDAwVXhpBwJi23U3BdHmNTKoJnvE,4811
114
109
  fontTools/varLib/interpolatableHelpers.py,sha256=lXd7kwfIVl-4opd-vxCDhf48RnJ7IQKv_uuFQM_6vaU,11496
115
110
  fontTools/varLib/interpolatableTestStartingPoint.py,sha256=K6OYKBspim6BXc91pfLTbGLyi5XZukfMuBc6hRpENG8,4296
@@ -136,7 +131,7 @@ fontTools/pens/cocoaPen.py,sha256=IJRQcAxRuVOTQ90bB_Bgjnmz7px_ST5uLF9CW-Y0KPY,61
136
131
  fontTools/pens/t2CharStringPen.py,sha256=uq9KCOxrk5TEZGYpcOG-pgkWHYCe4dMwb2hx5uYOmWA,2391
137
132
  fontTools/pens/pointPen.py,sha256=IA0JVDaf8_aAvjRQv3asXItxxfzhv4gEEFvrlDlCx_k,22296
138
133
  fontTools/pens/transformPen.py,sha256=s0kUyQdnemUwHvYr2SFboFmh4WY1S9OHBL8L4PJKRwE,4056
139
- fontTools/pens/momentsPen.cpython-312-darwin.so,sha256=qSn0m7AEkYAvLPdBiCdb56CClXRgnk_hcBFb0oZJe94,141640
134
+ fontTools/pens/momentsPen.cpython-312-darwin.so,sha256=uvixULoZiP4Zr5oSJ44lRXUWw_Ur5Xnv3fKAmt7u6js,141640
140
135
  fontTools/pens/reportLabPen.py,sha256=kpfMfOLXt2vOQ5smPsU82ft80FpCPWJzQLl7ENOH8Ew,2066
141
136
  fontTools/pens/filterPen.py,sha256=kKSvLmWCW4MkCF0ciJhjTj-LdUGOQL593PFkpm5PhP8,7790
142
137
  fontTools/pens/areaPen.py,sha256=Y1WkmqzcC4z_bpGAR0IZUKrtHFtxKUQBmr5-64_zCOk,1472
@@ -200,7 +195,7 @@ fontTools/feaLib/location.py,sha256=JXzHqGV56EHdcq823AwA5oaK05hf_1ySWpScbo3zGC0,
200
195
  fontTools/feaLib/lexer.py,sha256=emyMPmRoqNZkzxnJyI6JRCCtXrbCOFofwa9O6ABGLiw,11121
201
196
  fontTools/feaLib/ast.py,sha256=3DU5NKXesyNCVu5wcebGlnvwdMf0_NKrPgOvS0FrWSg,73800
202
197
  fontTools/feaLib/__main__.py,sha256=Df2PA6LXwna98lSXiL7R4as_ZEdWCIk3egSM5w7GpvM,2240
203
- fontTools/feaLib/lexer.cpython-312-darwin.so,sha256=SeOAEtHe_hrTU7DaPZxto-rWzR_1CzGraP5KFs0Zp3k,199048
198
+ fontTools/feaLib/lexer.cpython-312-darwin.so,sha256=AAyiWzkEmyMTMqnioL_EZ6g47R6aiJd3xVlVxQtfyyY,199048
204
199
  fontTools/ttLib/sfnt.py,sha256=rkznKfteU_Rn9P65WSjFaiwQgpEAoh-TrQpvkQhdIlo,22832
205
200
  fontTools/ttLib/macUtils.py,sha256=lj3oeFpyjV7ko_JqnluneITmAtlc119J-vwTTg2s73A,1737
206
201
  fontTools/ttLib/standardGlyphOrder.py,sha256=7AY_fVWdtwZ4iv5uWdyKAUcbEQiSDt1lN4sqx9xXwE0,5785
@@ -256,7 +251,7 @@ fontTools/ttLib/tables/otTraverse.py,sha256=oTr7nA7u7kEltLAhl4Kfl1RPD8O2_bKaoXa5
256
251
  fontTools/ttLib/tables/_m_o_r_x.py,sha256=OwamVpIO7REDnFr95HuFPoY_0U6i9zQPb11K1sFTvDY,548
257
252
  fontTools/ttLib/tables/_l_t_a_g.py,sha256=9YpApjI-rZ4e3HeT8Pj-osiHl3uALD9JXg5O7pqk9L0,2552
258
253
  fontTools/ttLib/tables/D_S_I_G_.py,sha256=AgQPM9Cdro1P-ehJjTfsC9mRTTtSc16At0nnpb1XOGI,5517
259
- fontTools/ttLib/tables/_g_l_y_f.py,sha256=FOUV04tS3lxwecbmlPwkYbbmI9tjTndrrPQKedbC4lA,84667
254
+ fontTools/ttLib/tables/_g_l_y_f.py,sha256=R0WuModxptcPfoBTZxvs5xDTnA9olAVf67blh-k-tmM,85631
260
255
  fontTools/ttLib/tables/T_S_I_S_.py,sha256=tVBnl63vyZUIq93oM6dEjHCXvPn9vt5vvL3jG59b0Lg,341
261
256
  fontTools/ttLib/tables/T_S_I_D_.py,sha256=TsdX-G2xxVQO9sSE1wE_xDRx-gor5YiXTHeUthMwCPY,341
262
257
  fontTools/ttLib/tables/B_A_S_E_.py,sha256=H71A9pJ850mvjbrWHqy8iFI2Dxg7102YRtAkfdCooig,369
@@ -326,4 +321,9 @@ fontTools/colorLib/builder.py,sha256=kmO7OuudQQb3fEOS7aLzgTDVjqS9i2xIQmk9p1uBe8A
326
321
  fontTools/colorLib/geometry.py,sha256=3ScySrR2YDJa7d5K5_xM5Yt1-3NCV-ry8ikYA5VwVbI,5518
327
322
  fontTools/colorLib/errors.py,sha256=CsaviiRxxrpgVX4blm7KCyK8553ljwL44xkJOeC5U7U,41
328
323
  fontTools/colorLib/unbuilder.py,sha256=iW-E5I39WsV82K3NgCO4Cjzwm1WqzGrtypHt8epwbHM,2142
329
- fonttools-4.55.5.data/data/share/man/man1/ttx.1,sha256=cLbm_pOOj1C76T2QXvDxzwDj9gk-GTd5RztvTMsouFw,5377
324
+ fonttools-4.55.6.dist-info/RECORD,,
325
+ fonttools-4.55.6.dist-info/LICENSE,sha256=Z4cgj4P2Wcy8IiOy_elS_6b36KymLxqKK_W8UbsbI4M,1072
326
+ fonttools-4.55.6.dist-info/WHEEL,sha256=FBd6an5AFoPq_6i7rX7RY9hnbsVzpIPkc8xRof4mLK4,111
327
+ fonttools-4.55.6.dist-info/entry_points.txt,sha256=8kVHddxfFWA44FSD4mBpmC-4uCynQnkoz_9aNJb227Y,147
328
+ fonttools-4.55.6.dist-info/top_level.txt,sha256=rRgRylrXzekqWOsrhygzib12pQ7WILf7UGjqEwkIFDM,10
329
+ fonttools-4.55.6.dist-info/METADATA,sha256=GcD2y8KE7yKQbFGQyPNPCQVQHvYSGs07zMFLQUrW3n8,166074