fonttools 4.55.0__cp38-cp38-win32.whl → 4.55.2__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.0"
6
+ version = __version__ = "4.55.2"
7
7
 
8
8
  __all__ = ["version", "log", "configLogger"]
@@ -457,7 +457,12 @@ def remove_unused_subroutines(cff):
457
457
  if subrs == font.GlobalSubrs:
458
458
  if not hasattr(font, "FDArray") and hasattr(font.Private, "Subrs"):
459
459
  local_subrs = font.Private.Subrs
460
- elif hasattr(font, "FDArray") and len(font.FDArray) == 1:
460
+ elif (
461
+ hasattr(font, "FDArray")
462
+ and len(font.FDArray) == 1
463
+ and hasattr(font.FDArray[0].Private, "Subrs")
464
+ ):
465
+ # Technically we shouldn't do this. But I've run into fonts that do it.
461
466
  local_subrs = font.FDArray[0].Private.Subrs
462
467
  else:
463
468
  local_subrs = None
Binary file
fontTools/cu2qu/cu2qu.py CHANGED
@@ -17,13 +17,10 @@
17
17
 
18
18
  try:
19
19
  import cython
20
-
21
- COMPILED = cython.compiled
22
20
  except (AttributeError, ImportError):
23
21
  # if cython not installed, use mock module with no-op decorators and types
24
22
  from fontTools.misc import cython
25
-
26
- COMPILED = False
23
+ COMPILED = cython.compiled
27
24
 
28
25
  import math
29
26
 
@@ -1596,7 +1596,7 @@ class BaseDocWriter(object):
1596
1596
  mapElement.attrib["input"] = self.intOrFloat(inputValue)
1597
1597
  mapElement.attrib["output"] = self.intOrFloat(outputValue)
1598
1598
  axisElement.append(mapElement)
1599
- if axisObject.axisOrdering or axisObject.axisLabels:
1599
+ if axisObject.axisOrdering is not None or axisObject.axisLabels:
1600
1600
  labelsElement = ET.Element("labels")
1601
1601
  if axisObject.axisOrdering is not None:
1602
1602
  labelsElement.attrib["ordering"] = str(axisObject.axisOrdering)
@@ -1658,38 +1658,31 @@ class Builder(object):
1658
1658
 
1659
1659
  return default, device
1660
1660
 
1661
+ def makeAnchorPos(self, varscalar, deviceTable, location):
1662
+ device = None
1663
+ if not isinstance(varscalar, VariableScalar):
1664
+ if deviceTable is not None:
1665
+ device = otl.buildDevice(dict(deviceTable))
1666
+ return varscalar, device
1667
+ default, device = self.makeVariablePos(location, varscalar)
1668
+ if device is not None and deviceTable is not None:
1669
+ raise FeatureLibError(
1670
+ "Can't define a device coordinate and variable scalar", location
1671
+ )
1672
+ return default, device
1673
+
1661
1674
  def makeOpenTypeAnchor(self, location, anchor):
1662
1675
  """ast.Anchor --> otTables.Anchor"""
1663
1676
  if anchor is None:
1664
1677
  return None
1665
- variable = False
1666
1678
  deviceX, deviceY = None, None
1667
1679
  if anchor.xDeviceTable is not None:
1668
1680
  deviceX = otl.buildDevice(dict(anchor.xDeviceTable))
1669
1681
  if anchor.yDeviceTable is not None:
1670
1682
  deviceY = otl.buildDevice(dict(anchor.yDeviceTable))
1671
- for dim in ("x", "y"):
1672
- varscalar = getattr(anchor, dim)
1673
- if not isinstance(varscalar, VariableScalar):
1674
- continue
1675
- if getattr(anchor, dim + "DeviceTable") is not None:
1676
- raise FeatureLibError(
1677
- "Can't define a device coordinate and variable scalar", location
1678
- )
1679
- default, device = self.makeVariablePos(location, varscalar)
1680
- setattr(anchor, dim, default)
1681
- if device is not None:
1682
- if dim == "x":
1683
- deviceX = device
1684
- else:
1685
- deviceY = device
1686
- variable = True
1687
-
1688
- otlanchor = otl.buildAnchor(
1689
- anchor.x, anchor.y, anchor.contourpoint, deviceX, deviceY
1690
- )
1691
- if variable:
1692
- otlanchor.Format = 3
1683
+ x, deviceX = self.makeAnchorPos(anchor.x, anchor.xDeviceTable, location)
1684
+ y, deviceY = self.makeAnchorPos(anchor.y, anchor.yDeviceTable, location)
1685
+ otlanchor = otl.buildAnchor(x, y, anchor.contourpoint, deviceX, deviceY)
1693
1686
  return otlanchor
1694
1687
 
1695
1688
  _VALUEREC_ATTRS = {
Binary file
Binary file
@@ -9,13 +9,10 @@ from collections import namedtuple
9
9
 
10
10
  try:
11
11
  import cython
12
-
13
- COMPILED = cython.compiled
14
12
  except (AttributeError, ImportError):
15
13
  # if cython not installed, use mock module with no-op decorators and types
16
14
  from fontTools.misc import cython
17
-
18
- COMPILED = False
15
+ COMPILED = cython.compiled
19
16
 
20
17
 
21
18
  EPSILON = 1e-9
fontTools/misc/symfont.py CHANGED
@@ -121,13 +121,10 @@ def printGreenPen(penName, funcs, file=sys.stdout, docstring=None):
121
121
  """from fontTools.pens.basePen import BasePen, OpenContourError
122
122
  try:
123
123
  import cython
124
-
125
- COMPILED = cython.compiled
126
124
  except (AttributeError, ImportError):
127
125
  # if cython not installed, use mock module with no-op decorators and types
128
126
  from fontTools.misc import cython
129
-
130
- COMPILED = False
127
+ COMPILED = cython.compiled
131
128
 
132
129
 
133
130
  __all__ = ["%s"]
@@ -437,8 +437,20 @@ class DecomposedTransform:
437
437
 
438
438
  @classmethod
439
439
  def fromTransform(self, transform):
440
+ """Return a DecomposedTransform() equivalent of this transformation.
441
+ The returned solution always has skewY = 0, and angle in the (-180, 180].
442
+
443
+ :Example:
444
+ >>> DecomposedTransform.fromTransform(Transform(3, 0, 0, 2, 0, 0))
445
+ DecomposedTransform(translateX=0, translateY=0, rotation=0.0, scaleX=3.0, scaleY=2.0, skewX=0.0, skewY=0.0, tCenterX=0, tCenterY=0)
446
+ >>> DecomposedTransform.fromTransform(Transform(0, 0, 0, 1, 0, 0))
447
+ DecomposedTransform(translateX=0, translateY=0, rotation=0.0, scaleX=0.0, scaleY=1.0, skewX=0.0, skewY=0.0, tCenterX=0, tCenterY=0)
448
+ >>> DecomposedTransform.fromTransform(Transform(0, 0, 1, 1, 0, 0))
449
+ DecomposedTransform(translateX=0, translateY=0, rotation=-45.0, scaleX=0.0, scaleY=1.4142135623730951, skewX=0.0, skewY=0.0, tCenterX=0, tCenterY=0)
450
+ """
440
451
  # Adapted from an answer on
441
452
  # https://math.stackexchange.com/questions/13150/extracting-rotation-scale-values-from-2d-transformation-matrix
453
+
442
454
  a, b, c, d, x, y = transform
443
455
 
444
456
  sx = math.copysign(1, a)
@@ -450,21 +462,20 @@ class DecomposedTransform:
450
462
 
451
463
  rotation = 0
452
464
  scaleX = scaleY = 0
453
- skewX = skewY = 0
465
+ skewX = 0
454
466
 
455
467
  # Apply the QR-like decomposition.
456
468
  if a != 0 or b != 0:
457
469
  r = math.sqrt(a * a + b * b)
458
470
  rotation = math.acos(a / r) if b >= 0 else -math.acos(a / r)
459
471
  scaleX, scaleY = (r, delta / r)
460
- skewX, skewY = (math.atan((a * c + b * d) / (r * r)), 0)
472
+ skewX = math.atan((a * c + b * d) / (r * r))
461
473
  elif c != 0 or d != 0:
462
474
  s = math.sqrt(c * c + d * d)
463
475
  rotation = math.pi / 2 - (
464
476
  math.acos(-c / s) if d >= 0 else -math.acos(c / s)
465
477
  )
466
478
  scaleX, scaleY = (delta / s, s)
467
- skewX, skewY = (0, math.atan((a * c + b * d) / (s * s)))
468
479
  else:
469
480
  # a = b = c = d = 0
470
481
  pass
@@ -476,7 +487,7 @@ class DecomposedTransform:
476
487
  scaleX * sx,
477
488
  scaleY,
478
489
  math.degrees(skewX) * sx,
479
- math.degrees(skewY),
490
+ 0.0,
480
491
  0,
481
492
  0,
482
493
  )
Binary file
@@ -2,13 +2,10 @@ from fontTools.pens.basePen import BasePen, OpenContourError
2
2
 
3
3
  try:
4
4
  import cython
5
-
6
- COMPILED = cython.compiled
7
5
  except (AttributeError, ImportError):
8
6
  # if cython not installed, use mock module with no-op decorators and types
9
7
  from fontTools.misc import cython
10
-
11
- COMPILED = False
8
+ COMPILED = cython.compiled
12
9
 
13
10
 
14
11
  __all__ = ["MomentsPen"]
Binary file
fontTools/qu2cu/qu2cu.py CHANGED
@@ -18,13 +18,10 @@
18
18
 
19
19
  try:
20
20
  import cython
21
-
22
- COMPILED = cython.compiled
23
21
  except (AttributeError, ImportError):
24
22
  # if cython not installed, use mock module with no-op decorators and types
25
23
  from fontTools.misc import cython
26
-
27
- COMPILED = False
24
+ COMPILED = cython.compiled
28
25
 
29
26
  from fontTools.misc.bezierTools import splitCubicAtTC
30
27
  from collections import namedtuple
@@ -119,19 +119,35 @@ class _TTGlyphSetCFF(_TTGlyphSet):
119
119
  tableTag = "CFF2" if "CFF2" in font else "CFF "
120
120
  self.charStrings = list(font[tableTag].cff.values())[0].CharStrings
121
121
  super().__init__(font, location, self.charStrings)
122
+ self.setLocation(location)
123
+
124
+ def __getitem__(self, glyphName):
125
+ return _TTGlyphCFF(self, glyphName)
126
+
127
+ def setLocation(self, location):
122
128
  self.blender = None
123
129
  if location:
130
+ # TODO Optimize by using instancer.setLocation()
131
+
124
132
  from fontTools.varLib.varStore import VarStoreInstancer
125
133
 
126
134
  varStore = getattr(self.charStrings, "varStore", None)
127
135
  if varStore is not None:
128
136
  instancer = VarStoreInstancer(
129
- varStore.otVarStore, font["fvar"].axes, location
137
+ varStore.otVarStore, self.font["fvar"].axes, location
130
138
  )
131
139
  self.blender = instancer.interpolateFromDeltas
140
+ else:
141
+ self.blender = None
132
142
 
133
- def __getitem__(self, glyphName):
134
- return _TTGlyphCFF(self, glyphName)
143
+ @contextmanager
144
+ def pushLocation(self, location, reset: bool):
145
+ self.setLocation(location)
146
+ with _TTGlyphSet.pushLocation(self, location, reset) as value:
147
+ try:
148
+ yield value
149
+ finally:
150
+ self.setLocation(self.location)
135
151
 
136
152
 
137
153
  class _TTGlyphSetVARC(_TTGlyphSet):
@@ -335,7 +351,6 @@ class _TTGlyphVARC(_TTGlyph):
335
351
  )
336
352
 
337
353
  for comp in glyph.components:
338
-
339
354
  if comp.flags & VarComponentFlags.HAVE_CONDITION:
340
355
  condition = varc.ConditionList.ConditionTable[comp.conditionIndex]
341
356
  if not _evaluateCondition(
Binary file
fontTools/varLib/iup.py CHANGED
@@ -1,12 +1,9 @@
1
1
  try:
2
2
  import cython
3
-
4
- COMPILED = cython.compiled
5
3
  except (AttributeError, ImportError):
6
4
  # if cython not installed, use mock module with no-op decorators and types
7
5
  from fontTools.misc import cython
8
-
9
- COMPILED = False
6
+ COMPILED = cython.compiled
10
7
 
11
8
  from typing import (
12
9
  Sequence,
@@ -77,7 +74,14 @@ def iup_segment(
77
74
  d = d2
78
75
  else:
79
76
  # Interpolate
80
- d = d1 + (x - x1) * scale
77
+ #
78
+ # NOTE: we assign an explicit intermediate variable here in
79
+ # order to disable a fused mul-add optimization. See:
80
+ #
81
+ # - https://godbolt.org/z/YsP4T3TqK,
82
+ # - https://github.com/fonttools/fonttools/issues/3703
83
+ nudge = (x - x1) * scale
84
+ d = d1 + nudge
81
85
 
82
86
  out.append(d)
83
87
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fonttools
3
- Version: 4.55.0
3
+ Version: 4.55.2
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,22 @@ Have fun!
377
377
  Changelog
378
378
  ~~~~~~~~~
379
379
 
380
+ 4.55.2 (released 2024-12-05)
381
+ ----------------------------
382
+
383
+ - [Docs] update Sphinx config (#3712)
384
+ - [designspaceLib] Allow axisOrdering to be set to zero (#3715)
385
+ - [feaLib] Don’t modify variable anchors in place (#3717)
386
+
387
+ 4.55.1 (released 2024-12-02)
388
+ ----------------------------
389
+
390
+ - [ttGlyphSet] Support VARC CFF2 fonts (#3683)
391
+ - [DecomposedTransform] Document and implement always skewY == 0 (#3697)
392
+ - [varLib] "Fix" cython iup issue? (#3704)
393
+ - Cython minor refactor (#3705)
394
+
395
+
380
396
  4.55.0 (released 2024-11-14)
381
397
  ----------------------------
382
398
 
@@ -1,4 +1,4 @@
1
- fontTools/__init__.py,sha256=_H7trQEqnAnlmke1wPaC7liMvIqFTMkF5DeC-SIqd94,191
1
+ fontTools/__init__.py,sha256=h__fmsn3dGnZMojhMWR1Z0XYsIgfhZ8NB1v8GoaNku8,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
@@ -11,7 +11,7 @@ fontTools/cffLib/CFF2ToCFF.py,sha256=5uPKDFwoJvH0KVDrCjpf3MdOpqbyvdZMe0jZ3emjdsQ
11
11
  fontTools/cffLib/CFFToCFF2.py,sha256=0dCYSSozptUC9BVUre49e6LgjSxJRtVyMl8vDB6i3r4,10424
12
12
  fontTools/cffLib/__init__.py,sha256=dts9y-OM8u0-MRsLqQ6WoL2kcDQSNLiYOrQVkd88T8g,110745
13
13
  fontTools/cffLib/specializer.py,sha256=TTPFdTmtpirYFpTCTbaL-wFL0a3GXwRmjSEbPIWltV0,33468
14
- fontTools/cffLib/transforms.py,sha256=s82LAWPhUINcIRbW6HOYy7KmIQsHmSPzPrThG_m2X7k,17638
14
+ fontTools/cffLib/transforms.py,sha256=8hffhsWRhBhVukNSL-7ieuygTVV5Ta3Cz9s4s8Awvgg,17861
15
15
  fontTools/cffLib/width.py,sha256=3L9NWI0uQrJHvHF_IvC_tbW1cq94zgDEPSjubdug8qM,6284
16
16
  fontTools/colorLib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
17
  fontTools/colorLib/builder.py,sha256=S8z4Qzw2FAE-d1Zm1eHyqDBYh6FW4W_hQJWjVeVicOk,23672
@@ -24,11 +24,11 @@ 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=UEwn4TG6vQRjqmmjNNN0Fp2aMpFIO2qdydBes9edxz8,96768
28
- fontTools/cu2qu/cu2qu.py,sha256=OmV12gCwlORjZmoId4gPrsGV3VaeXcbfKd2iIfsxnTQ,17000
27
+ fontTools/cu2qu/cu2qu.cp38-win32.pyd,sha256=OxagQ9brNGCQeB1XZoerOJEjEPPR6z3hYje8byNEVQM,95232
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
31
- fontTools/designspaceLib/__init__.py,sha256=yWdf4IVfEms1vWghn_FcMK8orJLrQ0zYBZPxwoxfJgU,132589
31
+ fontTools/designspaceLib/__init__.py,sha256=80fzbsWaoTMaXsPGMnevXAxR4eqvZeYCwV_GYpBvlkM,132601
32
32
  fontTools/designspaceLib/__main__.py,sha256=QOn1SNf8xmw-zQ5EJN0JnrHllu9rbRm8kTpWF9b3jlo,109
33
33
  fontTools/designspaceLib/split.py,sha256=MjgyVDfhLEdb844nioL3xIN6VinHqY4jcdOlwmvr03M,19714
34
34
  fontTools/designspaceLib/statNames.py,sha256=n9EyVpvFfISQbejzs45AHj6kSBHHgFr-8xl9jVmcHng,9322
@@ -40,9 +40,9 @@ fontTools/encodings/codecs.py,sha256=bSpO6kuPbEIDsXSVHhzftqsm_FFUiXpLVfPSk410SqE
40
40
  fontTools/feaLib/__init__.py,sha256=RprjP6BKswq4pt0J-9L1XGuZfjIFAGD6HDly_haMAN4,217
41
41
  fontTools/feaLib/__main__.py,sha256=niUAPkiYxeRAJMlJuvVJZism2VFufZrNaQtieA7sNLk,2318
42
42
  fontTools/feaLib/ast.py,sha256=rjEQSs5fFCCUM03RIEJ1iohPv-VPttlkngE_UzTKOL8,75935
43
- fontTools/feaLib/builder.py,sha256=MfZEHr7yvtaAiXd5uj_650FaF9WnjgmowyE0vKBj_9U,71723
43
+ fontTools/feaLib/builder.py,sha256=FBdQP5Eq2UFKQE95zey3LBoCI6TlEObyf3w0qzcYtfA,71653
44
44
  fontTools/feaLib/error.py,sha256=PSXeclXORb9hkvXh95e6YrNKZpPPWkekXOJZCSEhSjg,665
45
- fontTools/feaLib/lexer.cp38-win32.pyd,sha256=JB2M6vk-yLVqfdRfgcjHhTnGwreNF5a94yvU_LXvC3c,131584
45
+ fontTools/feaLib/lexer.cp38-win32.pyd,sha256=mjverNstzV2oxr1kBki9Y7OH1v7uKtZczTqa0kQV_QY,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,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-win32.pyd,sha256=8sb66l-hr8x8jnUqEZgmngPvwl8EggomCwHsZD2kBbk,356864
63
- fontTools/misc/bezierTools.py,sha256=1jkT_QlzxvGzd0B7P-ti0CKWVc3CAz8E23-SC5PJjqQ,46251
62
+ fontTools/misc/bezierTools.cp38-win32.pyd,sha256=QV5qBmO-fM1HQaf6j32OD99xkGTfBrmIkF78ml1h_cg,353792
63
+ fontTools/misc/bezierTools.py,sha256=pGC_2kFPjSftWVm7DJTh9xxfddUw2DkBPFn4779iq1o,46221
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
@@ -83,11 +83,11 @@ fontTools/misc/psOperators.py,sha256=9nZ4ymbiiCApY9V8OARpYqvO73OEcJgGyTtCuGzD-rw
83
83
  fontTools/misc/py23.py,sha256=BhByQabxZis6fDvK3ZVeI-YRj_1rMQeBZCFzGWIac0U,2334
84
84
  fontTools/misc/roundTools.py,sha256=2rmbuk73NYGPmJqP58FQCFioSLilvNffd0WbL5znKUg,3283
85
85
  fontTools/misc/sstruct.py,sha256=RG8qOzTkp9LIN5bis5XkbA-6amnuv2Pi-foZTzIQRRE,7389
86
- fontTools/misc/symfont.py,sha256=AwAiY-JUhCCbLCkETrR5rZvk3033WUUokHHC_NdinxM,7259
86
+ fontTools/misc/symfont.py,sha256=ZxyD-mipj7raOtXDdCakpwoSo0hsKPJXLlp3OBPHraE,7235
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=1fYby85xvRbRKluz9oziD0ojR5FBFclK3DOQKFm3t0c,15329
90
+ fontTools/misc/transform.py,sha256=WZ9mVAEBqcyhCCUmLLS-hDuiFgppQYvK3e-jESkugGY,16136
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,8 +115,8 @@ 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=_QS1JlDEEpLVuHpaJBJG6nR1wcPt6V1jRDgyET2hs3E,90624
119
- fontTools/pens/momentsPen.py,sha256=lP63AFBgwg4rdbps2fezgGvDh0sC22FPn25vwSghRJc,26567
118
+ fontTools/pens/momentsPen.cp38-win32.pyd,sha256=bOBNMRzC9Z9ZYqc9JPpHBqpCjKJ_8WkVYUCbk4NDURw,88576
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
122
122
  fontTools/pens/pointPen.py,sha256=iB5vNauqHSeCPHKVBHXg6RAyC_e8Rmuaeldjwb-hpG8,22896
@@ -138,8 +138,8 @@ 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=KuMoSUcLvxjhTI5kNxLHVlCvvg4jjfKTNnMSAC0Sb30,105984
142
- fontTools/qu2cu/qu2cu.py,sha256=_pFavQGUGyzZTaE7kpQtRW8FMInzUkcjvM1MTxBaezM,12723
141
+ fontTools/qu2cu/qu2cu.cp38-win32.pyd,sha256=Dot0mvQF9BZd_6WgKDUB-i__rhDZn8XtK30Ll7TqrMs,104448
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
145
145
  fontTools/subset/cff.py,sha256=GSmxdsokxuFKvJJQVcAIOhd5hYQq8KkzxnXE_dgm8yo,6329
@@ -161,7 +161,7 @@ fontTools/ttLib/sfnt.py,sha256=7X9xujgV0Za4nOEfUD3mSrrRb-f9NuzEqgJ-IFLNVQU,23494
161
161
  fontTools/ttLib/standardGlyphOrder.py,sha256=VG-8hW1VgQIro7cDJusSXThILIr4pQgmU37t85SQ65Y,6056
162
162
  fontTools/ttLib/ttCollection.py,sha256=1_wMr_ONgwPZh6wfbS_a7lNeE2IxUqd029TGObOsWs0,4088
163
163
  fontTools/ttLib/ttFont.py,sha256=zyTL_lOCvJye5gzc1zvcqph2uEbR69AH79VclrLOftc,42131
164
- fontTools/ttLib/ttGlyphSet.py,sha256=1Ycs9OVuM-6CMLPA5F0jvvTkb85LfvgxD7QXhCkM_00,17861
164
+ fontTools/ttLib/ttGlyphSet.py,sha256=FvznrgEaD-Rz0737kfQGRFD6jX4uGpGqbu5ZCQtVuyI,18353
165
165
  fontTools/ttLib/ttVisitor.py,sha256=_Dkmz0tDs-5AFUR46kyg3Ku6BMPifrZzRU8-9UvXdz4,1057
166
166
  fontTools/ttLib/woff2.py,sha256=LuX5SHMlhuhNRI0W5J2UnDua7_3NCnGaoofXhmjkf3g,62741
167
167
  fontTools/ttLib/tables/B_A_S_E_.py,sha256=4UZNhdCuaS5mPHQiatgtTBh73TIUyRxmNVQd7zMLagk,93
@@ -293,8 +293,8 @@ 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=GIcupTzwO5WqkxXlfAwdU_MwXJg3YuHA-TF5SDaZtrY,124416
297
- fontTools/varLib/iup.py,sha256=euAgVDv1_7TtZWisNPXi1l0K2XNjgRlkc-rLOLTnT3U,15161
296
+ fontTools/varLib/iup.cp38-win32.pyd,sha256=OXH4vkC1U2RAneHspoR-dp6zhZnaucCaFDz7L6-zNYs,123392
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
300
300
  fontTools/varLib/multiVarStore.py,sha256=OvrrTaKrCZCXP40Rrv-2w416P-dNz3xE6gPOEyS3PrY,8558
@@ -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.0.data/data/share/man/man1/ttx.1,sha256=E71F9mRNWlttVpzlnP7w_fqkQygPkph5s-AtVa0Js50,5601
318
- fonttools-4.55.0.dist-info/LICENSE,sha256=Ir74Bpfs-qF_l-YrmibfoSggvgVYPo3RKtFpskEnTJk,1093
319
- fonttools-4.55.0.dist-info/METADATA,sha256=_QIsUchPlQAYpNbJl7JdFgE1V7pURiwrL0S2pvGjZ4c,167908
320
- fonttools-4.55.0.dist-info/WHEEL,sha256=vBXc8Yz61rk4PXr558q4bsp34y-RMVJ3b9QU_ECAK-o,95
321
- fonttools-4.55.0.dist-info/entry_points.txt,sha256=8kVHddxfFWA44FSD4mBpmC-4uCynQnkoz_9aNJb227Y,147
322
- fonttools-4.55.0.dist-info/top_level.txt,sha256=rRgRylrXzekqWOsrhygzib12pQ7WILf7UGjqEwkIFDM,10
323
- fonttools-4.55.0.dist-info/RECORD,,
317
+ fonttools-4.55.2.data/data/share/man/man1/ttx.1,sha256=E71F9mRNWlttVpzlnP7w_fqkQygPkph5s-AtVa0Js50,5601
318
+ fonttools-4.55.2.dist-info/LICENSE,sha256=Ir74Bpfs-qF_l-YrmibfoSggvgVYPo3RKtFpskEnTJk,1093
319
+ fonttools-4.55.2.dist-info/METADATA,sha256=5oKBi0XO-t-ka9vsxHUUNA_FC2M53mkpVN3EaHUFT74,168402
320
+ fonttools-4.55.2.dist-info/WHEEL,sha256=vBXc8Yz61rk4PXr558q4bsp34y-RMVJ3b9QU_ECAK-o,95
321
+ fonttools-4.55.2.dist-info/entry_points.txt,sha256=8kVHddxfFWA44FSD4mBpmC-4uCynQnkoz_9aNJb227Y,147
322
+ fonttools-4.55.2.dist-info/top_level.txt,sha256=rRgRylrXzekqWOsrhygzib12pQ7WILf7UGjqEwkIFDM,10
323
+ fonttools-4.55.2.dist-info/RECORD,,