fonttools 4.55.3__cp312-cp312-win32.whl → 4.55.5__cp312-cp312-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.

Binary file
@@ -631,7 +631,14 @@ def splitCubicAtT(pt1, pt2, pt3, pt4, *ts):
631
631
  ((77.3438, 56.25), (85.9375, 43.75), (93.75, 25), (100, 0))
632
632
  """
633
633
  a, b, c, d = calcCubicParameters(pt1, pt2, pt3, pt4)
634
- return _splitCubicAtT(a, b, c, d, *ts)
634
+ split = _splitCubicAtT(a, b, c, d, *ts)
635
+
636
+ # the split impl can introduce floating point errors; we know the first
637
+ # segment should always start at pt1 and the last segment should end at pt4,
638
+ # so we set those values directly before returning.
639
+ split[0] = (pt1, *split[0][1:])
640
+ split[-1] = (*split[-1][:-1], pt4)
641
+ return split
635
642
 
636
643
 
637
644
  @cython.locals(
@@ -52,6 +52,8 @@ translate, rotation, scale, skew, and transformation-center components.
52
52
  >>>
53
53
  """
54
54
 
55
+ from __future__ import annotations
56
+
55
57
  import math
56
58
  from typing import NamedTuple
57
59
  from dataclasses import dataclass
@@ -65,7 +67,7 @@ _ONE_EPSILON = 1 - _EPSILON
65
67
  _MINUS_ONE_EPSILON = -1 + _EPSILON
66
68
 
67
69
 
68
- def _normSinCos(v):
70
+ def _normSinCos(v: float) -> float:
69
71
  if abs(v) < _EPSILON:
70
72
  v = 0
71
73
  elif v > _ONE_EPSILON:
@@ -214,7 +216,7 @@ class Transform(NamedTuple):
214
216
  xx, xy, yx, yy = self[:4]
215
217
  return [(xx * dx + yx * dy, xy * dx + yy * dy) for dx, dy in vectors]
216
218
 
217
- def translate(self, x=0, y=0):
219
+ def translate(self, x: float = 0, y: float = 0):
218
220
  """Return a new transformation, translated (offset) by x, y.
219
221
 
220
222
  :Example:
@@ -225,7 +227,7 @@ class Transform(NamedTuple):
225
227
  """
226
228
  return self.transform((1, 0, 0, 1, x, y))
227
229
 
228
- def scale(self, x=1, y=None):
230
+ def scale(self, x: float = 1, y: float | None = None):
229
231
  """Return a new transformation, scaled by x, y. The 'y' argument
230
232
  may be None, which implies to use the x value for y as well.
231
233
 
@@ -241,7 +243,7 @@ class Transform(NamedTuple):
241
243
  y = x
242
244
  return self.transform((x, 0, 0, y, 0, 0))
243
245
 
244
- def rotate(self, angle):
246
+ def rotate(self, angle: float):
245
247
  """Return a new transformation, rotated by 'angle' (radians).
246
248
 
247
249
  :Example:
@@ -251,13 +253,11 @@ class Transform(NamedTuple):
251
253
  <Transform [0 1 -1 0 0 0]>
252
254
  >>>
253
255
  """
254
- import math
255
-
256
256
  c = _normSinCos(math.cos(angle))
257
257
  s = _normSinCos(math.sin(angle))
258
258
  return self.transform((c, s, -s, c, 0, 0))
259
259
 
260
- def skew(self, x=0, y=0):
260
+ def skew(self, x: float = 0, y: float = 0):
261
261
  """Return a new transformation, skewed by x and y.
262
262
 
263
263
  :Example:
@@ -267,8 +267,6 @@ class Transform(NamedTuple):
267
267
  <Transform [1 0 1 1 0 0]>
268
268
  >>>
269
269
  """
270
- import math
271
-
272
270
  return self.transform((1, math.tan(y), math.tan(x), 1, 0, 0))
273
271
 
274
272
  def transform(self, other):
@@ -336,7 +334,7 @@ class Transform(NamedTuple):
336
334
  dx, dy = -xx * dx - yx * dy, -xy * dx - yy * dy
337
335
  return self.__class__(xx, xy, yx, yy, dx, dy)
338
336
 
339
- def toPS(self):
337
+ def toPS(self) -> str:
340
338
  """Return a PostScript representation
341
339
 
342
340
  :Example:
@@ -352,7 +350,7 @@ class Transform(NamedTuple):
352
350
  """Decompose into a DecomposedTransform."""
353
351
  return DecomposedTransform.fromTransform(self)
354
352
 
355
- def __bool__(self):
353
+ def __bool__(self) -> bool:
356
354
  """Returns True if transform is not identity, False otherwise.
357
355
 
358
356
  :Example:
@@ -374,14 +372,14 @@ class Transform(NamedTuple):
374
372
  """
375
373
  return self != Identity
376
374
 
377
- def __repr__(self):
375
+ def __repr__(self) -> str:
378
376
  return "<%s [%g %g %g %g %g %g]>" % ((self.__class__.__name__,) + self)
379
377
 
380
378
 
381
379
  Identity = Transform()
382
380
 
383
381
 
384
- def Offset(x=0, y=0):
382
+ def Offset(x: float = 0, y: float = 0) -> Transform:
385
383
  """Return the identity transformation offset by x, y.
386
384
 
387
385
  :Example:
@@ -392,7 +390,7 @@ def Offset(x=0, y=0):
392
390
  return Transform(1, 0, 0, 1, x, y)
393
391
 
394
392
 
395
- def Scale(x, y=None):
393
+ def Scale(x: float, y: float | None = None) -> Transform:
396
394
  """Return the identity transformation scaled by x, y. The 'y' argument
397
395
  may be None, which implies to use the x value for y as well.
398
396
 
@@ -492,7 +490,7 @@ class DecomposedTransform:
492
490
  0,
493
491
  )
494
492
 
495
- def toTransform(self):
493
+ def toTransform(self) -> Transform:
496
494
  """Return the Transform() equivalent of this transformation.
497
495
 
498
496
  :Example:
Binary file
@@ -106,6 +106,7 @@ class StatisticsControlPen(StatisticsBase, BasePen):
106
106
 
107
107
  def _moveTo(self, pt):
108
108
  self._nodes.append(complex(*pt))
109
+ self._startPoint = pt
109
110
 
110
111
  def _lineTo(self, pt):
111
112
  self._nodes.append(complex(*pt))
@@ -119,12 +120,16 @@ class StatisticsControlPen(StatisticsBase, BasePen):
119
120
  self._nodes.append(complex(*pt))
120
121
 
121
122
  def _closePath(self):
123
+ p0 = self._getCurrentPoint()
124
+ if p0 != self._startPoint:
125
+ self._lineTo(self._startPoint)
122
126
  self._update()
123
127
 
124
128
  def _endPath(self):
125
129
  p0 = self._getCurrentPoint()
126
130
  if p0 != self._startPoint:
127
131
  raise OpenContourError("Glyph statistics not defined on open contours.")
132
+ self._update()
128
133
 
129
134
  def _update(self):
130
135
  nodes = self._nodes
Binary file
@@ -1187,7 +1187,7 @@ class Glyph(object):
1187
1187
  ):
1188
1188
  return
1189
1189
  try:
1190
- coords, endPts, flags = self.getCoordinates(glyfTable)
1190
+ coords, endPts, flags = self.getCoordinates(glyfTable, round=otRound)
1191
1191
  self.xMin, self.yMin, self.xMax, self.yMax = coords.calcIntBounds()
1192
1192
  except NotImplementedError:
1193
1193
  pass
@@ -1241,7 +1241,7 @@ class Glyph(object):
1241
1241
  else:
1242
1242
  return self.numberOfContours == -1
1243
1243
 
1244
- def getCoordinates(self, glyfTable):
1244
+ def getCoordinates(self, glyfTable, round=noRound):
1245
1245
  """Return the coordinates, end points and flags
1246
1246
 
1247
1247
  This method returns three values: A :py:class:`GlyphCoordinates` object,
@@ -1267,13 +1267,16 @@ class Glyph(object):
1267
1267
  for compo in self.components:
1268
1268
  g = glyfTable[compo.glyphName]
1269
1269
  try:
1270
- coordinates, endPts, flags = g.getCoordinates(glyfTable)
1270
+ coordinates, endPts, flags = g.getCoordinates(
1271
+ glyfTable, round=round
1272
+ )
1271
1273
  except RecursionError:
1272
1274
  raise ttLib.TTLibError(
1273
1275
  "glyph '%s' contains a recursive component reference"
1274
1276
  % compo.glyphName
1275
1277
  )
1276
1278
  coordinates = GlyphCoordinates(coordinates)
1279
+ coordinates.toInt(round=round)
1277
1280
  if hasattr(compo, "firstPt"):
1278
1281
  # component uses two reference points: we apply the transform _before_
1279
1282
  # computing the offset between the points
@@ -48,6 +48,10 @@ class table__n_a_m_e(DefaultTable.DefaultTable):
48
48
 
49
49
  dependencies = ["ltag"]
50
50
 
51
+ def __init__(self, tag=None):
52
+ super().__init__(tag)
53
+ self.names = []
54
+
51
55
  def decompile(self, data, ttFont):
52
56
  format, n, stringOffset = struct.unpack(b">HHH", data[:6])
53
57
  expectedStringOffset = 6 + n * nameRecordSize
@@ -78,10 +82,6 @@ class table__n_a_m_e(DefaultTable.DefaultTable):
78
82
  self.names.append(name)
79
83
 
80
84
  def compile(self, ttFont):
81
- if not hasattr(self, "names"):
82
- # only happens when there are NO name table entries read
83
- # from the TTX file
84
- self.names = []
85
85
  names = self.names
86
86
  names.sort() # sort according to the spec; see NameRecord.__lt__()
87
87
  stringData = b""
@@ -108,8 +108,6 @@ class table__n_a_m_e(DefaultTable.DefaultTable):
108
108
  def fromXML(self, name, attrs, content, ttFont):
109
109
  if name != "namerecord":
110
110
  return # ignore unknown tags
111
- if not hasattr(self, "names"):
112
- self.names = []
113
111
  name = NameRecord()
114
112
  self.names.append(name)
115
113
  name.fromXML(name, attrs, content, ttFont)
@@ -194,8 +192,6 @@ class table__n_a_m_e(DefaultTable.DefaultTable):
194
192
  identified by the (platformID, platEncID, langID) triplet. A warning is issued
195
193
  to prevent unexpected results.
196
194
  """
197
- if not hasattr(self, "names"):
198
- self.names = []
199
195
  if not isinstance(string, str):
200
196
  if isinstance(string, bytes):
201
197
  log.warning(
@@ -262,7 +258,7 @@ class table__n_a_m_e(DefaultTable.DefaultTable):
262
258
  The nameID is assigned in the range between 'minNameID' and 32767 (inclusive),
263
259
  following the last nameID in the name table.
264
260
  """
265
- names = getattr(self, "names", [])
261
+ names = self.names
266
262
  nameID = 1 + max([n.nameID for n in names] + [minNameID - 1])
267
263
  if nameID > 32767:
268
264
  raise ValueError("nameID must be less than 32768")
@@ -359,8 +355,6 @@ class table__n_a_m_e(DefaultTable.DefaultTable):
359
355
  If the 'nameID' argument is None, the created nameID will not
360
356
  be less than the 'minNameID' argument.
361
357
  """
362
- if not hasattr(self, "names"):
363
- self.names = []
364
358
  if nameID is None:
365
359
  # Reuse nameID if possible
366
360
  nameID = self.findMultilingualName(
@@ -404,8 +398,6 @@ class table__n_a_m_e(DefaultTable.DefaultTable):
404
398
  assert (
405
399
  len(platforms) > 0
406
400
  ), "'platforms' must contain at least one (platformID, platEncID, langID) tuple"
407
- if not hasattr(self, "names"):
408
- self.names = []
409
401
  if not isinstance(string, str):
410
402
  raise TypeError(
411
403
  "expected str, found %s: %r" % (type(string).__name__, string)
Binary file
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: fonttools
3
- Version: 4.55.3
3
+ Version: 4.55.5
4
4
  Summary: Tools to manipulate font files
5
5
  Home-page: http://github.com/fonttools/fonttools
6
6
  Author: Just van Rossum
@@ -72,6 +72,18 @@ Requires-Dist: sympy; extra == "all"
72
72
  Requires-Dist: xattr; sys_platform == "darwin" and extra == "all"
73
73
  Requires-Dist: skia-pathops>=0.5.0; extra == "all"
74
74
  Requires-Dist: uharfbuzz>=0.23.0; extra == "all"
75
+ Dynamic: author
76
+ Dynamic: author-email
77
+ Dynamic: classifier
78
+ Dynamic: description
79
+ Dynamic: home-page
80
+ Dynamic: license
81
+ Dynamic: maintainer
82
+ Dynamic: maintainer-email
83
+ Dynamic: platform
84
+ Dynamic: provides-extra
85
+ Dynamic: requires-python
86
+ Dynamic: summary
75
87
 
76
88
  |CI Build Status| |Coverage Status| |PyPI| |Gitter Chat|
77
89
 
@@ -377,9 +389,21 @@ Have fun!
377
389
  Changelog
378
390
  ~~~~~~~~~
379
391
 
380
- 4.55.3 (released 2024-12-10)
392
+ 4.55.5 (released 2025-01-23)
393
+ ----------------------------
394
+
395
+ - [glyf] Fixed recalcBounds of transformed components with unrounded coordinates (#3750).
396
+ - [feaLib] Allow duplicate script/language statements (#3749).
397
+
398
+ 4.55.4 (released 2025-01-21)
381
399
  ----------------------------
382
400
 
401
+ - [bezierTools] Fixed ``splitCubicAtT`` sometimes not returning identical start/end points as result of numerical precision (#3742, #3743).
402
+ - [feaLib/ast] Fixed docstring of ``AlternateSubstStatement`` (#3735).
403
+ - [transform] Typing fixes (#3734).
404
+
405
+ 4.55.3 (released 2024-12-10)
406
+ ----------------------------
383
407
 
384
408
  - [Docs] fill out ttLib table section [#3716]
385
409
  - [feaLib] More efficient inline format 4 lookups [#3726]
@@ -403,7 +427,6 @@ Changelog
403
427
  4.55.0 (released 2024-11-14)
404
428
  ----------------------------
405
429
 
406
-
407
430
  - [cffLib.specializer] Adjust stack use calculation (#3689)
408
431
  - [varLib] Lets not add mac names if the rest of name doesn't have them (#3688)
409
432
  - [ttLib.reorderGlyphs] Update CFF table charstrings and charset (#3682)
@@ -1,4 +1,4 @@
1
- fontTools/__init__.py,sha256=MP_1iTN0EFf0VaKmXbVsbAsJ-QgvrRYdnaPmVQUc-JQ,191
1
+ fontTools/__init__.py,sha256=JHvYOKFAQJrY1Vshrb7KmtF69Ho5EIi6Wf89cYmuOSY,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
@@ -25,7 +25,7 @@ fontTools/cu2qu/__main__.py,sha256=6Vb8Ler3yqJ5w84UwlMJV6cS01uhV4PN10OlXQ6jlqo,9
25
25
  fontTools/cu2qu/benchmark.py,sha256=FwdvNjKfWHo18_CX0CO8AY5c68XSBE4M4TJo_EkB4q8,1350
26
26
  fontTools/cu2qu/cli.py,sha256=CvWzC5a6XF_v5o0yrS4vGI1JXiVVLzSJahTIqpJmiPk,6274
27
27
  fontTools/cu2qu/cu2qu.c,sha256=DGeaocDDXSlWL0vHL553KLiFwXVQ550C5SM5OgimUiU,589442
28
- fontTools/cu2qu/cu2qu.cp312-win32.pyd,sha256=xRxvxt3BtKyuSZT4EWvHgNt97vaN6MTFCH5l9H-jNSc,97280
28
+ fontTools/cu2qu/cu2qu.cp312-win32.pyd,sha256=GTCaaaDa1okSNjcBGBCtqeyo8EmK6bHlK-OZULw8vlU,97280
29
29
  fontTools/cu2qu/cu2qu.py,sha256=XH2bnQ5aG9ic921ZWzQzU1-q3MQU6INCjLk4XjRj5_Y,16970
30
30
  fontTools/cu2qu/errors.py,sha256=uYyPSs_x-EMJKO2S3cLGWyk_KlHoOoh_XEtdB_oKBp0,2518
31
31
  fontTools/cu2qu/ufo.py,sha256=Mpd_7Be9jxNcOKFqkyRp8Oem3CS3R-ZYMMSD03LJL6o,12143
@@ -40,11 +40,11 @@ fontTools/encodings/__init__.py,sha256=QoK6HlOoqtVqX5gOyv0bJiTXsVBbBRreUifdccWNp
40
40
  fontTools/encodings/codecs.py,sha256=bSpO6kuPbEIDsXSVHhzftqsm_FFUiXpLVfPSk410SqE,4856
41
41
  fontTools/feaLib/__init__.py,sha256=RprjP6BKswq4pt0J-9L1XGuZfjIFAGD6HDly_haMAN4,217
42
42
  fontTools/feaLib/__main__.py,sha256=niUAPkiYxeRAJMlJuvVJZism2VFufZrNaQtieA7sNLk,2318
43
- fontTools/feaLib/ast.py,sha256=rjEQSs5fFCCUM03RIEJ1iohPv-VPttlkngE_UzTKOL8,75935
44
- fontTools/feaLib/builder.py,sha256=exK2143ntpp9tCKJJXGldqpSLmMdBwerncD_sFzd_9E,72319
43
+ fontTools/feaLib/ast.py,sha256=3bDOxPIwmxM5tjhnI8K7pheRkgEHYMb_ExJsco0SyDU,75934
44
+ fontTools/feaLib/builder.py,sha256=VBDpD311XvqhzPA9wfyiY06ps14J0-FUWjOEs6fwrHE,72783
45
45
  fontTools/feaLib/error.py,sha256=PSXeclXORb9hkvXh95e6YrNKZpPPWkekXOJZCSEhSjg,665
46
46
  fontTools/feaLib/lexer.c,sha256=yKf2WoKLiJJcrI35TuqUxIQYLOLoyr5D2MhcxY8vFF8,750768
47
- fontTools/feaLib/lexer.cp312-win32.pyd,sha256=2GetYeDLvUfNdpvTj_6HV6hIQhPP70ipxoZEsQRu62o,132608
47
+ fontTools/feaLib/lexer.cp312-win32.pyd,sha256=cFOqHxGhsSsGM0u5kJBy9BVbNdgpNINeUJj60D3Lc-E,132608
48
48
  fontTools/feaLib/lexer.py,sha256=7VZ3NPFH7V1mvRbym111BNKvbB4hLfGLTMS0VV_3Ipw,11408
49
49
  fontTools/feaLib/location.py,sha256=teHrhjT8zzImcGBEJS1J43oaX9onCPu_pynxS8d-tUg,246
50
50
  fontTools/feaLib/lookupDebugInfo.py,sha256=h4Ig8kmEk5WlGf1C9JJAbbOKQK5OwkFLdj8CT7fOkmU,316
@@ -61,9 +61,9 @@ fontTools/merge/unicode.py,sha256=mgqRFhRugda62Xt0r28SduaN7YBzRfHxrpNprjLqoX8,43
61
61
  fontTools/merge/util.py,sha256=3alo4b7mhFNC6h8PjeqNU99dS7EuO8sdZkZpvRsEE6E,3521
62
62
  fontTools/misc/__init__.py,sha256=QoK6HlOoqtVqX5gOyv0bJiTXsVBbBRreUifdccWNp2k,76
63
63
  fontTools/misc/arrayTools.py,sha256=baENNALPvYRUhS4rdx_F3ltOmVIf1PV9G2EaMt7gAHM,11907
64
- fontTools/misc/bezierTools.c,sha256=6GXbwsUuu68dBOek0XIdZTM4S3qI35B-0v80SPHBXmo,1802154
65
- fontTools/misc/bezierTools.cp312-win32.pyd,sha256=kq44iwOjiWDM7y_okrrRdcEfgCdVKJaU4LLAYw4J9R4,360448
66
- fontTools/misc/bezierTools.py,sha256=pGC_2kFPjSftWVm7DJTh9xxfddUw2DkBPFn4779iq1o,46221
64
+ fontTools/misc/bezierTools.c,sha256=IpsvlD6PupyRJ0mNv6-fEeN9ubSaLCKFsa_pTjTO-Kg,1814064
65
+ fontTools/misc/bezierTools.cp312-win32.pyd,sha256=94MEZbgnPZof8W4Gb2wv-6aKAj5UoBgMXsq-aVpaMrs,363008
66
+ fontTools/misc/bezierTools.py,sha256=m4j14ckKYtrKy8NhFFFY_Uv3kuL8g-SWNdEKUzqGjRQ,46535
67
67
  fontTools/misc/classifyTools.py,sha256=wLTjOhLiZaLiwwUTj2Ad5eZ5T_38W0Eo_uzRGWHWYvE,5783
68
68
  fontTools/misc/cliTools.py,sha256=7zKOXczaCKRMW6Yv5jdCZYHco8y0-lfimhIWzQ2IL8A,1915
69
69
  fontTools/misc/configTools.py,sha256=JNR7HqId8zudAlFcK4lwocHZkwgaTSH4u6BOyFLTujw,11537
@@ -90,7 +90,7 @@ fontTools/misc/symfont.py,sha256=ZxyD-mipj7raOtXDdCakpwoSo0hsKPJXLlp3OBPHraE,723
90
90
  fontTools/misc/testTools.py,sha256=OhWQmnuWrgJWtME_9fHG7Npd1JzVktCPcbHiccxL2wI,7162
91
91
  fontTools/misc/textTools.py,sha256=NIBmM6k9PXIs8DMpio-9ckHS35QxL2EMFwBXP6zG-8w,3531
92
92
  fontTools/misc/timeTools.py,sha256=lmncKUKvxQKO4Kqx2k7UNFkYYpj2n5CwR1lPiLZv3tA,2322
93
- fontTools/misc/transform.py,sha256=WZ9mVAEBqcyhCCUmLLS-hDuiFgppQYvK3e-jESkugGY,16136
93
+ fontTools/misc/transform.py,sha256=pCR0tbKzmhH6crB_rDT5hnAWySztW_XqL0efmKOVsCU,16314
94
94
  fontTools/misc/treeTools.py,sha256=IMopMUcuhelvz8gNra50Zc1w8DSlWywnL6DFaz1ijQs,1314
95
95
  fontTools/misc/vector.py,sha256=yaNixq5pXXpPCD_wRP-LsXYSLr4WPX_y92Po05FeLU0,4209
96
96
  fontTools/misc/visitor.py,sha256=h35A4SWww-MNII7f68bc9pj1-2poTxztvVpKH5EEtEE,5456
@@ -119,7 +119,7 @@ fontTools/pens/filterPen.py,sha256=tWhgklyaCTUt7oQRTBbFUcOlc702V0NfadCH3X93CYg,8
119
119
  fontTools/pens/freetypePen.py,sha256=NqNzXrOTDckoH4N6WLnj-KuxGcg6z7DlqSCfmpq8qAE,20370
120
120
  fontTools/pens/hashPointPen.py,sha256=ZAU87uw5ge3Kb4i9kRV28a5VFeZ_TWSsJabyAzwAHrU,3662
121
121
  fontTools/pens/momentsPen.c,sha256=ajNsDnHtKVFHde329jgP1R_dCoAhd_lJF3oFrtSlaX8,530428
122
- fontTools/pens/momentsPen.cp312-win32.pyd,sha256=SpvzNVxXqiq3q134Md1442jhUFV-umPZj2bLY1b0q0U,91136
122
+ fontTools/pens/momentsPen.cp312-win32.pyd,sha256=9mcMz6F8f9hHMAx-P7L3DLo9F6dvmiGraCFSlBbZ2tM,91136
123
123
  fontTools/pens/momentsPen.py,sha256=Z-V5CjQBSj3qPxg3C_DBFKExqno89nOe3jWwHT9_xsM,26537
124
124
  fontTools/pens/perimeterPen.py,sha256=Zy5F8QzaNJAkkQQSb2QJCp-wZTvDAjBn-B099t2ABds,2222
125
125
  fontTools/pens/pointInsidePen.py,sha256=Hy48iR5NWV3x_wWoos-UC7GMtwvvUhd_q_ykiwaWdzQ,6547
@@ -131,7 +131,7 @@ fontTools/pens/recordingPen.py,sha256=hw393TStvhoF1XT7aidpVQ8glASbxZuARnUAyUyZAG
131
131
  fontTools/pens/reportLabPen.py,sha256=vVRG044LvUvFtqrRFYRiMFS_USHAeAvz9y9-7__WbY4,2145
132
132
  fontTools/pens/reverseContourPen.py,sha256=E_Ny86JfiMoQ04VfswMtdpaKCU37wNy9ifOccb0aWKQ,4118
133
133
  fontTools/pens/roundingPen.py,sha256=AHC1J0dgRChtFmkkgeR1D1ZNFUoHZTcHpWRIyL5d1_Q,4779
134
- fontTools/pens/statisticsPen.py,sha256=zVMmaCHxiMnmdghb2yDKPkSSPUxs2JYMjepXP4I_6iA,9947
134
+ fontTools/pens/statisticsPen.py,sha256=F_JjbNtvYmJ0b3Fbv3BA3-LZhecodPr4tJEQZZd4Jxc,10120
135
135
  fontTools/pens/svgPathPen.py,sha256=4aU4iTlnGuzzyXrBgfHvrjMOkC2rdSF8HOkJ_q8tZ38,8882
136
136
  fontTools/pens/t2CharStringPen.py,sha256=vG6gmTe2bWc-bCn4-LQgv1f16p62oNWJUn8FiXTl0EM,2459
137
137
  fontTools/pens/teePen.py,sha256=19N3FEaFm4mGMTZrEn5Qg4YiXGGK61zcXjh2LcRxe_s,1345
@@ -143,7 +143,7 @@ fontTools/qu2cu/__main__.py,sha256=leKpToUNNyHf0nobr1I19vus2ziA1pO7rRKkreat-Xw,1
143
143
  fontTools/qu2cu/benchmark.py,sha256=PFxx2Bfu7-KuNrzdOIBXHPZvyNphqqcTVy4CneaCo3M,1456
144
144
  fontTools/qu2cu/cli.py,sha256=1QLBTSZW7e_VATJN9vjszRxIk_-Xjxu1KP53yX4T7q8,3839
145
145
  fontTools/qu2cu/qu2cu.c,sha256=xLksDndkY4iCqLrFx9a6XOFL3mWNdDw1kdpiu16sidg,654946
146
- fontTools/qu2cu/qu2cu.cp312-win32.pyd,sha256=do0sSbbnJTfOp2GhacFVbwaCpuWs4EDjepup8AS_nZw,107008
146
+ fontTools/qu2cu/qu2cu.cp312-win32.pyd,sha256=EIXgGoQJTlWznzOMT386D3tQjuDhupkg-zCKJR-hm2I,107008
147
147
  fontTools/qu2cu/qu2cu.py,sha256=dtp5Zqhcs_NePwA2U5fgG2LtWleRwmBilTurau8sLL0,12693
148
148
  fontTools/subset/__init__.py,sha256=a0OHXLf9m8qlXRFA7Gxp5qxe8ImUQ5ziK3bD-4fm618,137743
149
149
  fontTools/subset/__main__.py,sha256=cEIC52EtGOJvFDfHXzi0M2EAYmyHAcI-ZZ0lb2y4r7s,101
@@ -234,7 +234,7 @@ fontTools/ttLib/tables/_f_p_g_m.py,sha256=MiDyOiSyn4iA92G8YDZytJMqTFgNix03oiX5xM
234
234
  fontTools/ttLib/tables/_f_v_a_r.py,sha256=hpxU0-u7_pZYDmQdKpmd_7c6BjVpXHdoQ97jKk9Kz5U,9098
235
235
  fontTools/ttLib/tables/_g_a_s_p.py,sha256=Pr4X2CEg3a_nYAZrKSWT0auQ5HU2WutP1Shxxg7ALPw,2266
236
236
  fontTools/ttLib/tables/_g_c_i_d.py,sha256=diZlew4U8nFK5vimh-GMOjwHw8ccZtIEl9cPq0PrNdA,375
237
- fontTools/ttLib/tables/_g_l_y_f.py,sha256=XbmhcVgnrla9Fyn5okzrMH3JvI1rra6Ezg6KZpZtYYA,86818
237
+ fontTools/ttLib/tables/_g_l_y_f.py,sha256=zzgU79scLGT4P9bbSqUnE7X2iYcCp3gMBqjHSbftBPY,86957
238
238
  fontTools/ttLib/tables/_g_v_a_r.py,sha256=etECZEoWa1KEimNg2hqNFqPqr85OFsfj3odDIU-0lRI,11065
239
239
  fontTools/ttLib/tables/_h_d_m_x.py,sha256=Da8Og1KFmOLJGkBlLDlcgdvrIeCTx1USGwnmlg93r3E,4398
240
240
  fontTools/ttLib/tables/_h_e_a_d.py,sha256=ft9ghTA1NZsGBvB0yElFFCqVHecuCKGjT2m2GfYB3Yc,5056
@@ -248,7 +248,7 @@ fontTools/ttLib/tables/_m_a_x_p.py,sha256=9B6lvWo4y42dyLPIvG6CsVOlWCk7bs4DoVJDB8
248
248
  fontTools/ttLib/tables/_m_e_t_a.py,sha256=I8HaZgcIPQZcCxBiSX0rGrfrs-zXRGUfEbJ8eGvZ07A,4025
249
249
  fontTools/ttLib/tables/_m_o_r_t.py,sha256=LU3D9PmV_nFs6hoccGmr1pfUzjJaeB_WRW2OIS0RwPc,501
250
250
  fontTools/ttLib/tables/_m_o_r_x.py,sha256=vLyrtx_O__BwnPi7Qo3oT8WHaANRARtHcqHSdZ5ct0E,563
251
- fontTools/ttLib/tables/_n_a_m_e.py,sha256=eMkpYbxSfXpXhzuo87b9sQ6-KRStAVCeoXi5jrwVyME,42671
251
+ fontTools/ttLib/tables/_n_a_m_e.py,sha256=bvahvBMX21pC6G83D35WZap6F7BDd7Xi2AmhVMBZz00,42300
252
252
  fontTools/ttLib/tables/_o_p_b_d.py,sha256=lfJi6kblt_nGmGmRSupwEaud3Ri_y6ftWNuyrCPpzQ0,462
253
253
  fontTools/ttLib/tables/_p_o_s_t.py,sha256=rgY2-OvgvCK_F6qcBUrPIEcIMpBvWfX1AJEOyxxOGqI,11927
254
254
  fontTools/ttLib/tables/_p_r_e_p.py,sha256=qWDjHiHvHaJCx2hYFmjJeMwpgwvD-cG5zkibMh9TWuk,443
@@ -299,7 +299,7 @@ fontTools/varLib/interpolatableTestContourOrder.py,sha256=Pbt0jW0LoVggIwrtADZ7HW
299
299
  fontTools/varLib/interpolatableTestStartingPoint.py,sha256=f5MJ3mj8MctJCvDJwqmW1fIVOgovUMYAOela9HweaRU,4403
300
300
  fontTools/varLib/interpolate_layout.py,sha256=tTPUes_K7MwooUO_wac9AeFEVgL1uGSz4ITYiOizaME,3813
301
301
  fontTools/varLib/iup.c,sha256=DLuKtbG8sRuBAZXN0blJBfPYEUjsuImoF1Rnnn_f-Os,776376
302
- fontTools/varLib/iup.cp312-win32.pyd,sha256=uiANxS4tGvU3YsiZZTFpDUyTsO7UP-tg2A1YPAhieRw,128000
302
+ fontTools/varLib/iup.cp312-win32.pyd,sha256=Iuqn2Fvb3Xkm30LzLLt-SNg9oRVytSLgb28Q2y6wsEs,128000
303
303
  fontTools/varLib/iup.py,sha256=O_xPJOBECrNDbQqCC3e5xf9KsWXUd1i3BAp9Fl6Hv2Y,15474
304
304
  fontTools/varLib/merger.py,sha256=V-B17poOYbbrRsfUYJbdqt46GtRfG833MKwtv9NOB3Q,62519
305
305
  fontTools/varLib/models.py,sha256=ZqQb1Lapj5dCO8dwa3UTx1LsIpF0-GiDte32t_TMJJQ,23040
@@ -320,10 +320,10 @@ fontTools/voltLib/error.py,sha256=3TsaZBA82acFd2j5Beq3WUQTURTKM0zxOnUFGZovSNA,40
320
320
  fontTools/voltLib/lexer.py,sha256=v9V4zdBO2VqVJG__IWrL8fv_CRURmh2eD_1UpbIJn9g,3467
321
321
  fontTools/voltLib/parser.py,sha256=xAQPwO8uyYHKi-v9yMtz2RGE3lj75V4lanUGgIL9AC4,25572
322
322
  fontTools/voltLib/voltToFea.py,sha256=iJ7mJa9q-vWpmQgfCJC_ZrzNop_mgC1pazr1DhPJleE,29235
323
- fonttools-4.55.3.data/data/share/man/man1/ttx.1,sha256=E71F9mRNWlttVpzlnP7w_fqkQygPkph5s-AtVa0Js50,5601
324
- fonttools-4.55.3.dist-info/LICENSE,sha256=Ir74Bpfs-qF_l-YrmibfoSggvgVYPo3RKtFpskEnTJk,1093
325
- fonttools-4.55.3.dist-info/METADATA,sha256=XVEqqqeWctr-6KmXfMHa2x5rdO-01XnMOD-OeK_nOdI,168502
326
- fonttools-4.55.3.dist-info/WHEEL,sha256=g5-qmPrSxPrkXeiIwM1TQ2WZk4g7DcF4iOaJ-Sr2QiU,97
327
- fonttools-4.55.3.dist-info/entry_points.txt,sha256=8kVHddxfFWA44FSD4mBpmC-4uCynQnkoz_9aNJb227Y,147
328
- fonttools-4.55.3.dist-info/top_level.txt,sha256=rRgRylrXzekqWOsrhygzib12pQ7WILf7UGjqEwkIFDM,10
329
- fonttools-4.55.3.dist-info/RECORD,,
323
+ fonttools-4.55.5.data/data/share/man/man1/ttx.1,sha256=E71F9mRNWlttVpzlnP7w_fqkQygPkph5s-AtVa0Js50,5601
324
+ fonttools-4.55.5.dist-info/LICENSE,sha256=Ir74Bpfs-qF_l-YrmibfoSggvgVYPo3RKtFpskEnTJk,1093
325
+ fonttools-4.55.5.dist-info/METADATA,sha256=VtrisJZRDxfqSxHUQugWsPTPfp0vt1E8se2AEHKj45I,169288
326
+ fonttools-4.55.5.dist-info/WHEEL,sha256=kSb2J6Von4lLLVW8fdgHRm80iNil-_AEqojXon4CRKY,97
327
+ fonttools-4.55.5.dist-info/entry_points.txt,sha256=8kVHddxfFWA44FSD4mBpmC-4uCynQnkoz_9aNJb227Y,147
328
+ fonttools-4.55.5.dist-info/top_level.txt,sha256=rRgRylrXzekqWOsrhygzib12pQ7WILf7UGjqEwkIFDM,10
329
+ fonttools-4.55.5.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp312-cp312-win32
5
5