fonttools 4.55.4__cp313-cp313-musllinux_1_2_aarch64.whl → 4.61.1__cp313-cp313-musllinux_1_2_aarch64.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.
Files changed (140) hide show
  1. fontTools/__init__.py +1 -1
  2. fontTools/annotations.py +30 -0
  3. fontTools/cffLib/CFF2ToCFF.py +65 -10
  4. fontTools/cffLib/__init__.py +61 -26
  5. fontTools/cffLib/specializer.py +4 -1
  6. fontTools/cffLib/transforms.py +11 -6
  7. fontTools/config/__init__.py +15 -0
  8. fontTools/cu2qu/cu2qu.c +6567 -5579
  9. fontTools/cu2qu/cu2qu.cpython-313-aarch64-linux-musl.so +0 -0
  10. fontTools/cu2qu/cu2qu.py +36 -4
  11. fontTools/cu2qu/ufo.py +14 -0
  12. fontTools/designspaceLib/__init__.py +8 -3
  13. fontTools/designspaceLib/statNames.py +14 -7
  14. fontTools/feaLib/ast.py +24 -15
  15. fontTools/feaLib/builder.py +139 -66
  16. fontTools/feaLib/error.py +1 -1
  17. fontTools/feaLib/lexer.c +7038 -7995
  18. fontTools/feaLib/lexer.cpython-313-aarch64-linux-musl.so +0 -0
  19. fontTools/feaLib/parser.py +75 -40
  20. fontTools/feaLib/variableScalar.py +6 -1
  21. fontTools/fontBuilder.py +50 -44
  22. fontTools/merge/__init__.py +1 -1
  23. fontTools/merge/cmap.py +33 -1
  24. fontTools/merge/tables.py +12 -1
  25. fontTools/misc/bezierTools.c +14913 -17013
  26. fontTools/misc/bezierTools.cpython-313-aarch64-linux-musl.so +0 -0
  27. fontTools/misc/bezierTools.py +4 -1
  28. fontTools/misc/configTools.py +3 -1
  29. fontTools/misc/enumTools.py +23 -0
  30. fontTools/misc/etree.py +4 -27
  31. fontTools/misc/filesystem/__init__.py +68 -0
  32. fontTools/misc/filesystem/_base.py +134 -0
  33. fontTools/misc/filesystem/_copy.py +45 -0
  34. fontTools/misc/filesystem/_errors.py +54 -0
  35. fontTools/misc/filesystem/_info.py +75 -0
  36. fontTools/misc/filesystem/_osfs.py +164 -0
  37. fontTools/misc/filesystem/_path.py +67 -0
  38. fontTools/misc/filesystem/_subfs.py +92 -0
  39. fontTools/misc/filesystem/_tempfs.py +34 -0
  40. fontTools/misc/filesystem/_tools.py +34 -0
  41. fontTools/misc/filesystem/_walk.py +55 -0
  42. fontTools/misc/filesystem/_zipfs.py +204 -0
  43. fontTools/misc/fixedTools.py +1 -1
  44. fontTools/misc/loggingTools.py +1 -1
  45. fontTools/misc/psCharStrings.py +17 -2
  46. fontTools/misc/sstruct.py +2 -6
  47. fontTools/misc/symfont.py +6 -8
  48. fontTools/misc/testTools.py +5 -1
  49. fontTools/misc/textTools.py +4 -2
  50. fontTools/misc/visitor.py +32 -16
  51. fontTools/misc/xmlWriter.py +44 -8
  52. fontTools/mtiLib/__init__.py +1 -3
  53. fontTools/otlLib/builder.py +402 -155
  54. fontTools/otlLib/optimize/gpos.py +49 -63
  55. fontTools/pens/filterPen.py +218 -26
  56. fontTools/pens/momentsPen.c +5514 -5584
  57. fontTools/pens/momentsPen.cpython-313-aarch64-linux-musl.so +0 -0
  58. fontTools/pens/pointPen.py +61 -18
  59. fontTools/pens/roundingPen.py +2 -2
  60. fontTools/pens/t2CharStringPen.py +31 -11
  61. fontTools/qu2cu/qu2cu.c +6581 -6168
  62. fontTools/qu2cu/qu2cu.cpython-313-aarch64-linux-musl.so +0 -0
  63. fontTools/subset/__init__.py +283 -25
  64. fontTools/subset/svg.py +2 -3
  65. fontTools/ttLib/__init__.py +4 -0
  66. fontTools/ttLib/__main__.py +47 -8
  67. fontTools/ttLib/removeOverlaps.py +7 -5
  68. fontTools/ttLib/reorderGlyphs.py +8 -7
  69. fontTools/ttLib/sfnt.py +11 -9
  70. fontTools/ttLib/tables/D__e_b_g.py +20 -2
  71. fontTools/ttLib/tables/G_V_A_R_.py +5 -0
  72. fontTools/ttLib/tables/S__i_l_f.py +2 -2
  73. fontTools/ttLib/tables/T_S_I__0.py +14 -3
  74. fontTools/ttLib/tables/T_S_I__1.py +2 -5
  75. fontTools/ttLib/tables/T_S_I__5.py +18 -7
  76. fontTools/ttLib/tables/__init__.py +1 -0
  77. fontTools/ttLib/tables/_a_v_a_r.py +12 -3
  78. fontTools/ttLib/tables/_c_m_a_p.py +20 -7
  79. fontTools/ttLib/tables/_c_v_t.py +3 -2
  80. fontTools/ttLib/tables/_f_p_g_m.py +3 -1
  81. fontTools/ttLib/tables/_g_l_y_f.py +45 -21
  82. fontTools/ttLib/tables/_g_v_a_r.py +67 -19
  83. fontTools/ttLib/tables/_h_d_m_x.py +4 -4
  84. fontTools/ttLib/tables/_h_m_t_x.py +7 -3
  85. fontTools/ttLib/tables/_l_o_c_a.py +2 -2
  86. fontTools/ttLib/tables/_n_a_m_e.py +11 -6
  87. fontTools/ttLib/tables/_p_o_s_t.py +9 -7
  88. fontTools/ttLib/tables/otBase.py +5 -12
  89. fontTools/ttLib/tables/otConverters.py +5 -2
  90. fontTools/ttLib/tables/otData.py +1 -1
  91. fontTools/ttLib/tables/otTables.py +33 -30
  92. fontTools/ttLib/tables/otTraverse.py +2 -1
  93. fontTools/ttLib/tables/sbixStrike.py +3 -3
  94. fontTools/ttLib/ttFont.py +666 -120
  95. fontTools/ttLib/ttGlyphSet.py +0 -10
  96. fontTools/ttLib/woff2.py +10 -13
  97. fontTools/ttx.py +13 -1
  98. fontTools/ufoLib/__init__.py +300 -202
  99. fontTools/ufoLib/converters.py +103 -30
  100. fontTools/ufoLib/errors.py +8 -0
  101. fontTools/ufoLib/etree.py +1 -1
  102. fontTools/ufoLib/filenames.py +171 -106
  103. fontTools/ufoLib/glifLib.py +303 -205
  104. fontTools/ufoLib/kerning.py +98 -48
  105. fontTools/ufoLib/utils.py +46 -15
  106. fontTools/ufoLib/validators.py +121 -99
  107. fontTools/unicodedata/Blocks.py +35 -20
  108. fontTools/unicodedata/Mirrored.py +446 -0
  109. fontTools/unicodedata/ScriptExtensions.py +63 -37
  110. fontTools/unicodedata/Scripts.py +173 -152
  111. fontTools/unicodedata/__init__.py +10 -2
  112. fontTools/varLib/__init__.py +198 -109
  113. fontTools/varLib/avar/__init__.py +0 -0
  114. fontTools/varLib/avar/__main__.py +72 -0
  115. fontTools/varLib/avar/build.py +79 -0
  116. fontTools/varLib/avar/map.py +108 -0
  117. fontTools/varLib/avar/plan.py +1004 -0
  118. fontTools/varLib/{avar.py → avar/unbuild.py} +70 -59
  119. fontTools/varLib/avarPlanner.py +3 -999
  120. fontTools/varLib/featureVars.py +21 -7
  121. fontTools/varLib/hvar.py +113 -0
  122. fontTools/varLib/instancer/__init__.py +180 -65
  123. fontTools/varLib/interpolatableHelpers.py +3 -0
  124. fontTools/varLib/iup.c +7564 -6903
  125. fontTools/varLib/iup.cpython-313-aarch64-linux-musl.so +0 -0
  126. fontTools/varLib/models.py +17 -2
  127. fontTools/varLib/mutator.py +11 -0
  128. fontTools/varLib/varStore.py +10 -38
  129. fontTools/voltLib/__main__.py +206 -0
  130. fontTools/voltLib/ast.py +4 -0
  131. fontTools/voltLib/parser.py +16 -8
  132. fontTools/voltLib/voltToFea.py +347 -166
  133. {fonttools-4.55.4.dist-info → fonttools-4.61.1.dist-info}/METADATA +269 -1410
  134. {fonttools-4.55.4.dist-info → fonttools-4.61.1.dist-info}/RECORD +318 -294
  135. {fonttools-4.55.4.dist-info → fonttools-4.61.1.dist-info}/WHEEL +1 -1
  136. fonttools-4.61.1.dist-info/licenses/LICENSE.external +388 -0
  137. {fonttools-4.55.4.data → fonttools-4.61.1.data}/data/share/man/man1/ttx.1 +0 -0
  138. {fonttools-4.55.4.dist-info → fonttools-4.61.1.dist-info}/entry_points.txt +0 -0
  139. {fonttools-4.55.4.dist-info → fonttools-4.61.1.dist-info/licenses}/LICENSE +0 -0
  140. {fonttools-4.55.4.dist-info → fonttools-4.61.1.dist-info}/top_level.txt +0 -0
@@ -1,12 +1,8 @@
1
- from fontTools.varLib import _add_avar, load_designspace
2
1
  from fontTools.varLib.models import VariationModel
3
2
  from fontTools.varLib.varStore import VarStoreInstancer
4
3
  from fontTools.misc.fixedTools import fixedToFloat as fi2fl
5
- from fontTools.misc.cliTools import makeOutputFileName
6
4
  from itertools import product
7
- import logging
8
-
9
- log = logging.getLogger("fontTools.varLib.avar")
5
+ import sys
10
6
 
11
7
 
12
8
  def _denormalize(v, axis):
@@ -182,76 +178,91 @@ def mappings_from_avar(font, denormalize=True):
182
178
  return axisMaps, mappings
183
179
 
184
180
 
181
+ def unbuild(font, f=sys.stdout):
182
+ fvar = font["fvar"]
183
+ axes = fvar.axes
184
+ segments, mappings = mappings_from_avar(font)
185
+
186
+ if "name" in font:
187
+ name = font["name"]
188
+ axisNames = {axis.axisTag: name.getDebugName(axis.axisNameID) for axis in axes}
189
+ else:
190
+ axisNames = {a.axisTag: a.axisTag for a in axes}
191
+
192
+ print("<?xml version='1.0' encoding='UTF-8'?>", file=f)
193
+ print('<designspace format="5.1">', file=f)
194
+ print(" <axes>", file=f)
195
+ for axis in axes:
196
+
197
+ axisName = axisNames[axis.axisTag]
198
+
199
+ triplet = (axis.minValue, axis.defaultValue, axis.maxValue)
200
+ triplet = [int(v) if v == int(v) else v for v in triplet]
201
+
202
+ axisMap = segments.get(axis.axisTag)
203
+ closing = "/>" if axisMap is None else ">"
204
+
205
+ print(
206
+ f' <axis tag="{axis.axisTag}" name="{axisName}" minimum="{triplet[0]}" maximum="{triplet[2]}" default="{triplet[1]}"{closing}',
207
+ file=f,
208
+ )
209
+ if axisMap is not None:
210
+ for k in sorted(axisMap.keys()):
211
+ v = axisMap[k]
212
+ k = int(k) if k == int(k) else k
213
+ v = int(v) if v == int(v) else v
214
+ print(f' <map input="{k}" output="{v}"/>', file=f)
215
+ print(" </axis>", file=f)
216
+ if mappings:
217
+ print(" <mappings>", file=f)
218
+ for inputLoc, outputLoc in mappings:
219
+ print(" <mapping>", file=f)
220
+ print(" <input>", file=f)
221
+ for tag in sorted(inputLoc.keys()):
222
+ v = inputLoc[tag]
223
+ v = int(v) if v == int(v) else v
224
+ print(
225
+ f' <dimension name="{axisNames[tag]}" xvalue="{v}"/>',
226
+ file=f,
227
+ )
228
+ print(" </input>", file=f)
229
+ print(" <output>", file=f)
230
+ for tag in sorted(outputLoc.keys()):
231
+ v = outputLoc[tag]
232
+ v = int(v) if v == int(v) else v
233
+ print(
234
+ f' <dimension name="{axisNames[tag]}" xvalue="{v}"/>',
235
+ file=f,
236
+ )
237
+ print(" </output>", file=f)
238
+ print(" </mapping>", file=f)
239
+ print(" </mappings>", file=f)
240
+ print(" </axes>", file=f)
241
+ print("</designspace>", file=f)
242
+
243
+
185
244
  def main(args=None):
186
- """Add `avar` table from designspace file to variable font."""
245
+ """Print `avar` table as a designspace snippet."""
187
246
 
188
247
  if args is None:
189
- import sys
190
-
191
248
  args = sys.argv[1:]
192
249
 
193
- from fontTools import configLogger
194
250
  from fontTools.ttLib import TTFont
195
- from fontTools.designspaceLib import DesignSpaceDocument
196
251
  import argparse
197
252
 
198
253
  parser = argparse.ArgumentParser(
199
- "fonttools varLib.avar",
200
- description="Add `avar` table from designspace file to variable font.",
254
+ "fonttools varLib.avar.unbuild",
255
+ description="Print `avar` table as a designspace snippet.",
201
256
  )
202
257
  parser.add_argument("font", metavar="varfont.ttf", help="Variable-font file.")
203
- parser.add_argument(
204
- "designspace",
205
- metavar="family.designspace",
206
- help="Designspace file.",
207
- nargs="?",
208
- default=None,
209
- )
210
- parser.add_argument(
211
- "-o",
212
- "--output-file",
213
- type=str,
214
- help="Output font file name.",
215
- )
216
- parser.add_argument(
217
- "-v", "--verbose", action="store_true", help="Run more verbosely."
218
- )
219
-
220
258
  options = parser.parse_args(args)
221
259
 
222
- configLogger(level=("INFO" if options.verbose else "WARNING"))
223
-
224
260
  font = TTFont(options.font)
225
- if not "fvar" in font:
226
- log.error("Not a variable font.")
261
+ if "fvar" not in font:
262
+ print("Not a variable font.", file=sys.stderr)
227
263
  return 1
228
264
 
229
- if options.designspace is None:
230
- from pprint import pprint
231
-
232
- segments, mappings = mappings_from_avar(font)
233
- pprint(segments)
234
- pprint(mappings)
235
- print(len(mappings), "mappings")
236
- return
237
-
238
- axisTags = [a.axisTag for a in font["fvar"].axes]
239
-
240
- ds = load_designspace(options.designspace, require_sources=False)
241
-
242
- if "avar" in font:
243
- log.warning("avar table already present, overwriting.")
244
- del font["avar"]
245
-
246
- _add_avar(font, ds.axes, ds.axisMappings, axisTags)
247
-
248
- if options.output_file is None:
249
- outfile = makeOutputFileName(options.font, overWrite=True, suffix=".avar")
250
- else:
251
- outfile = options.output_file
252
- if outfile:
253
- log.info("Saving %s", outfile)
254
- font.save(outfile)
265
+ unbuild(font)
255
266
 
256
267
 
257
268
  if __name__ == "__main__":