fonttools 4.55.3__cp38-cp38-win_amd64.whl → 4.55.5__cp38-cp38-win_amd64.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.3"
6
+ version = __version__ = "4.55.5"
7
7
 
8
8
  __all__ = ["version", "log", "configLogger"]
Binary file
fontTools/feaLib/ast.py CHANGED
@@ -595,8 +595,8 @@ class MarkClassDefinition(Statement):
595
595
  class AlternateSubstStatement(Statement):
596
596
  """A ``sub ... from ...`` statement.
597
597
 
598
- ``prefix``, ``glyph``, ``suffix`` and ``replacement`` should be lists of
599
- `glyph-containing objects`_. ``glyph`` should be a `one element list`."""
598
+ ``glyph`` and ``replacement`` should be `glyph-containing objects`_.
599
+ ``prefix`` and ``suffix`` should be lists of `glyph-containing objects`_."""
600
600
 
601
601
  def __init__(self, prefix, glyph, suffix, replacement, location=None):
602
602
  Statement.__init__(self, location)
@@ -1106,7 +1106,13 @@ class Builder(object):
1106
1106
  if (language == "dflt" or include_default) and lookups:
1107
1107
  self.features_[key] = lookups[:]
1108
1108
  else:
1109
- self.features_[key] = []
1109
+ # if we aren't including default we need to manually remove the
1110
+ # default lookups, which were added to all declared langsystems
1111
+ # as they were encountered (we don't remove all lookups because
1112
+ # we want to allow duplicate script/lang statements;
1113
+ # see https://github.com/fonttools/fonttools/issues/3748
1114
+ cur_lookups = self.features_.get(key, [])
1115
+ self.features_[key] = [x for x in cur_lookups if x not in lookups]
1110
1116
  self.language_systems = frozenset([(self.script_, language)])
1111
1117
 
1112
1118
  if required:
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:
@@ -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
1
  Metadata-Version: 2.1
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
@@ -377,9 +377,21 @@ Have fun!
377
377
  Changelog
378
378
  ~~~~~~~~~
379
379
 
380
- 4.55.3 (released 2024-12-10)
380
+ 4.55.5 (released 2025-01-23)
381
+ ----------------------------
382
+
383
+ - [glyf] Fixed recalcBounds of transformed components with unrounded coordinates (#3750).
384
+ - [feaLib] Allow duplicate script/language statements (#3749).
385
+
386
+ 4.55.4 (released 2025-01-21)
381
387
  ----------------------------
382
388
 
389
+ - [bezierTools] Fixed ``splitCubicAtT`` sometimes not returning identical start/end points as result of numerical precision (#3742, #3743).
390
+ - [feaLib/ast] Fixed docstring of ``AlternateSubstStatement`` (#3735).
391
+ - [transform] Typing fixes (#3734).
392
+
393
+ 4.55.3 (released 2024-12-10)
394
+ ----------------------------
383
395
 
384
396
  - [Docs] fill out ttLib table section [#3716]
385
397
  - [feaLib] More efficient inline format 4 lookups [#3726]
@@ -403,7 +415,6 @@ Changelog
403
415
  4.55.0 (released 2024-11-14)
404
416
  ----------------------------
405
417
 
406
-
407
418
  - [cffLib.specializer] Adjust stack use calculation (#3689)
408
419
  - [varLib] Lets not add mac names if the rest of name doesn't have them (#3688)
409
420
  - [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
@@ -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-win_amd64.pyd,sha256=f5Q2rlOtJ9rUkkDgx7CPRz6AX8MGS60yywS_50GqsyE,104960
27
+ fontTools/cu2qu/cu2qu.cp38-win_amd64.pyd,sha256=MGWKSFERSfwWR0FBzfy0SIjffWVGA6wGQqcW0EpWufw,104960
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
@@ -39,10 +39,10 @@ fontTools/encodings/__init__.py,sha256=QoK6HlOoqtVqX5gOyv0bJiTXsVBbBRreUifdccWNp
39
39
  fontTools/encodings/codecs.py,sha256=bSpO6kuPbEIDsXSVHhzftqsm_FFUiXpLVfPSk410SqE,4856
40
40
  fontTools/feaLib/__init__.py,sha256=RprjP6BKswq4pt0J-9L1XGuZfjIFAGD6HDly_haMAN4,217
41
41
  fontTools/feaLib/__main__.py,sha256=niUAPkiYxeRAJMlJuvVJZism2VFufZrNaQtieA7sNLk,2318
42
- fontTools/feaLib/ast.py,sha256=rjEQSs5fFCCUM03RIEJ1iohPv-VPttlkngE_UzTKOL8,75935
43
- fontTools/feaLib/builder.py,sha256=exK2143ntpp9tCKJJXGldqpSLmMdBwerncD_sFzd_9E,72319
42
+ fontTools/feaLib/ast.py,sha256=3bDOxPIwmxM5tjhnI8K7pheRkgEHYMb_ExJsco0SyDU,75934
43
+ fontTools/feaLib/builder.py,sha256=VBDpD311XvqhzPA9wfyiY06ps14J0-FUWjOEs6fwrHE,72783
44
44
  fontTools/feaLib/error.py,sha256=PSXeclXORb9hkvXh95e6YrNKZpPPWkekXOJZCSEhSjg,665
45
- fontTools/feaLib/lexer.cp38-win_amd64.pyd,sha256=yvGTkZpOklUj3wMRZttjGfeHR7xBk8cYHquQvM2UXcU,142336
45
+ fontTools/feaLib/lexer.cp38-win_amd64.pyd,sha256=31C2QXS620FwAeJKNkW6JxRpdKeEODZ-QsTEvxg6nwY,142336
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,8 +59,8 @@ 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-win_amd64.pyd,sha256=NU0xYMBRZDxMox2yBSXYHHJpfNNgZ6kmoYP4uDl8tm8,381952
63
- fontTools/misc/bezierTools.py,sha256=pGC_2kFPjSftWVm7DJTh9xxfddUw2DkBPFn4779iq1o,46221
62
+ fontTools/misc/bezierTools.cp38-win_amd64.pyd,sha256=Mkd2dOwtjSWLNs_WK6Vc_FMQCBtnLiqu4BFGnTqmoXM,384000
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
66
66
  fontTools/misc/configTools.py,sha256=JNR7HqId8zudAlFcK4lwocHZkwgaTSH4u6BOyFLTujw,11537
@@ -87,7 +87,7 @@ fontTools/misc/symfont.py,sha256=ZxyD-mipj7raOtXDdCakpwoSo0hsKPJXLlp3OBPHraE,723
87
87
  fontTools/misc/testTools.py,sha256=OhWQmnuWrgJWtME_9fHG7Npd1JzVktCPcbHiccxL2wI,7162
88
88
  fontTools/misc/textTools.py,sha256=NIBmM6k9PXIs8DMpio-9ckHS35QxL2EMFwBXP6zG-8w,3531
89
89
  fontTools/misc/timeTools.py,sha256=lmncKUKvxQKO4Kqx2k7UNFkYYpj2n5CwR1lPiLZv3tA,2322
90
- fontTools/misc/transform.py,sha256=WZ9mVAEBqcyhCCUmLLS-hDuiFgppQYvK3e-jESkugGY,16136
90
+ fontTools/misc/transform.py,sha256=pCR0tbKzmhH6crB_rDT5hnAWySztW_XqL0efmKOVsCU,16314
91
91
  fontTools/misc/treeTools.py,sha256=IMopMUcuhelvz8gNra50Zc1w8DSlWywnL6DFaz1ijQs,1314
92
92
  fontTools/misc/vector.py,sha256=yaNixq5pXXpPCD_wRP-LsXYSLr4WPX_y92Po05FeLU0,4209
93
93
  fontTools/misc/visitor.py,sha256=h35A4SWww-MNII7f68bc9pj1-2poTxztvVpKH5EEtEE,5456
@@ -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-win_amd64.pyd,sha256=VS_4HUwRiMw4gHeWJ3M3bL-Kw-Vr5erzzsUTK0678xQ,95232
118
+ fontTools/pens/momentsPen.cp38-win_amd64.pyd,sha256=pcbHiblqbxbwGYjudBS3uUZ_ZXVDaKpXc733hMwYuok,95232
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
@@ -127,7 +127,7 @@ fontTools/pens/recordingPen.py,sha256=hw393TStvhoF1XT7aidpVQ8glASbxZuARnUAyUyZAG
127
127
  fontTools/pens/reportLabPen.py,sha256=vVRG044LvUvFtqrRFYRiMFS_USHAeAvz9y9-7__WbY4,2145
128
128
  fontTools/pens/reverseContourPen.py,sha256=E_Ny86JfiMoQ04VfswMtdpaKCU37wNy9ifOccb0aWKQ,4118
129
129
  fontTools/pens/roundingPen.py,sha256=AHC1J0dgRChtFmkkgeR1D1ZNFUoHZTcHpWRIyL5d1_Q,4779
130
- fontTools/pens/statisticsPen.py,sha256=zVMmaCHxiMnmdghb2yDKPkSSPUxs2JYMjepXP4I_6iA,9947
130
+ fontTools/pens/statisticsPen.py,sha256=F_JjbNtvYmJ0b3Fbv3BA3-LZhecodPr4tJEQZZd4Jxc,10120
131
131
  fontTools/pens/svgPathPen.py,sha256=4aU4iTlnGuzzyXrBgfHvrjMOkC2rdSF8HOkJ_q8tZ38,8882
132
132
  fontTools/pens/t2CharStringPen.py,sha256=vG6gmTe2bWc-bCn4-LQgv1f16p62oNWJUn8FiXTl0EM,2459
133
133
  fontTools/pens/teePen.py,sha256=19N3FEaFm4mGMTZrEn5Qg4YiXGGK61zcXjh2LcRxe_s,1345
@@ -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-win_amd64.pyd,sha256=JlSMonSEm2MxOvgba-8kdi98-klr08fWO7bvkqo-s5Q,115200
141
+ fontTools/qu2cu/qu2cu.cp38-win_amd64.pyd,sha256=jJ0pqP1Y-wH3UT8jWvv6xrqzUhq8jEPOFAaXoyP7WE0,115200
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=XbmhcVgnrla9Fyn5okzrMH3JvI1rra6Ezg6KZpZtYYA,86818
232
+ fontTools/ttLib/tables/_g_l_y_f.py,sha256=zzgU79scLGT4P9bbSqUnE7X2iYcCp3gMBqjHSbftBPY,86957
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
@@ -243,7 +243,7 @@ fontTools/ttLib/tables/_m_a_x_p.py,sha256=9B6lvWo4y42dyLPIvG6CsVOlWCk7bs4DoVJDB8
243
243
  fontTools/ttLib/tables/_m_e_t_a.py,sha256=I8HaZgcIPQZcCxBiSX0rGrfrs-zXRGUfEbJ8eGvZ07A,4025
244
244
  fontTools/ttLib/tables/_m_o_r_t.py,sha256=LU3D9PmV_nFs6hoccGmr1pfUzjJaeB_WRW2OIS0RwPc,501
245
245
  fontTools/ttLib/tables/_m_o_r_x.py,sha256=vLyrtx_O__BwnPi7Qo3oT8WHaANRARtHcqHSdZ5ct0E,563
246
- fontTools/ttLib/tables/_n_a_m_e.py,sha256=eMkpYbxSfXpXhzuo87b9sQ6-KRStAVCeoXi5jrwVyME,42671
246
+ fontTools/ttLib/tables/_n_a_m_e.py,sha256=bvahvBMX21pC6G83D35WZap6F7BDd7Xi2AmhVMBZz00,42300
247
247
  fontTools/ttLib/tables/_o_p_b_d.py,sha256=lfJi6kblt_nGmGmRSupwEaud3Ri_y6ftWNuyrCPpzQ0,462
248
248
  fontTools/ttLib/tables/_p_o_s_t.py,sha256=rgY2-OvgvCK_F6qcBUrPIEcIMpBvWfX1AJEOyxxOGqI,11927
249
249
  fontTools/ttLib/tables/_p_r_e_p.py,sha256=qWDjHiHvHaJCx2hYFmjJeMwpgwvD-cG5zkibMh9TWuk,443
@@ -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-win_amd64.pyd,sha256=z9TmLNm49jK3-16Xe-lYMbmune5Z-m-Zc2CVITd7E0M,138240
296
+ fontTools/varLib/iup.cp38-win_amd64.pyd,sha256=hLSe-3i2pYgPaYkRdqP41Z5DBNS1G2o4qC8WF6mzur4,138240
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.3.data/data/share/man/man1/ttx.1,sha256=E71F9mRNWlttVpzlnP7w_fqkQygPkph5s-AtVa0Js50,5601
318
- fonttools-4.55.3.dist-info/LICENSE,sha256=Ir74Bpfs-qF_l-YrmibfoSggvgVYPo3RKtFpskEnTJk,1093
319
- fonttools-4.55.3.dist-info/METADATA,sha256=8kOwQTyWoEIF5MnedOFTPlQPky66NdsH1C7Qt5ZvaLw,168574
320
- fonttools-4.55.3.dist-info/WHEEL,sha256=rTcqimtzpX3smAWAhGmiRSWAxTY4PqYPNE-p4kscHDQ,99
321
- fonttools-4.55.3.dist-info/entry_points.txt,sha256=8kVHddxfFWA44FSD4mBpmC-4uCynQnkoz_9aNJb227Y,147
322
- fonttools-4.55.3.dist-info/top_level.txt,sha256=rRgRylrXzekqWOsrhygzib12pQ7WILf7UGjqEwkIFDM,10
323
- fonttools-4.55.3.dist-info/RECORD,,
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=rTcqimtzpX3smAWAhGmiRSWAxTY4PqYPNE-p4kscHDQ,99
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,,