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.
- fontTools/__init__.py +1 -1
- fontTools/annotations.py +30 -0
- fontTools/cffLib/CFF2ToCFF.py +65 -10
- fontTools/cffLib/__init__.py +61 -26
- fontTools/cffLib/specializer.py +4 -1
- fontTools/cffLib/transforms.py +11 -6
- fontTools/config/__init__.py +15 -0
- fontTools/cu2qu/cu2qu.c +6567 -5579
- fontTools/cu2qu/cu2qu.cpython-313-aarch64-linux-musl.so +0 -0
- fontTools/cu2qu/cu2qu.py +36 -4
- fontTools/cu2qu/ufo.py +14 -0
- fontTools/designspaceLib/__init__.py +8 -3
- fontTools/designspaceLib/statNames.py +14 -7
- fontTools/feaLib/ast.py +24 -15
- fontTools/feaLib/builder.py +139 -66
- fontTools/feaLib/error.py +1 -1
- fontTools/feaLib/lexer.c +7038 -7995
- fontTools/feaLib/lexer.cpython-313-aarch64-linux-musl.so +0 -0
- fontTools/feaLib/parser.py +75 -40
- fontTools/feaLib/variableScalar.py +6 -1
- fontTools/fontBuilder.py +50 -44
- fontTools/merge/__init__.py +1 -1
- fontTools/merge/cmap.py +33 -1
- fontTools/merge/tables.py +12 -1
- fontTools/misc/bezierTools.c +14913 -17013
- fontTools/misc/bezierTools.cpython-313-aarch64-linux-musl.so +0 -0
- fontTools/misc/bezierTools.py +4 -1
- fontTools/misc/configTools.py +3 -1
- fontTools/misc/enumTools.py +23 -0
- fontTools/misc/etree.py +4 -27
- fontTools/misc/filesystem/__init__.py +68 -0
- fontTools/misc/filesystem/_base.py +134 -0
- fontTools/misc/filesystem/_copy.py +45 -0
- fontTools/misc/filesystem/_errors.py +54 -0
- fontTools/misc/filesystem/_info.py +75 -0
- fontTools/misc/filesystem/_osfs.py +164 -0
- fontTools/misc/filesystem/_path.py +67 -0
- fontTools/misc/filesystem/_subfs.py +92 -0
- fontTools/misc/filesystem/_tempfs.py +34 -0
- fontTools/misc/filesystem/_tools.py +34 -0
- fontTools/misc/filesystem/_walk.py +55 -0
- fontTools/misc/filesystem/_zipfs.py +204 -0
- fontTools/misc/fixedTools.py +1 -1
- fontTools/misc/loggingTools.py +1 -1
- fontTools/misc/psCharStrings.py +17 -2
- fontTools/misc/sstruct.py +2 -6
- fontTools/misc/symfont.py +6 -8
- fontTools/misc/testTools.py +5 -1
- fontTools/misc/textTools.py +4 -2
- fontTools/misc/visitor.py +32 -16
- fontTools/misc/xmlWriter.py +44 -8
- fontTools/mtiLib/__init__.py +1 -3
- fontTools/otlLib/builder.py +402 -155
- fontTools/otlLib/optimize/gpos.py +49 -63
- fontTools/pens/filterPen.py +218 -26
- fontTools/pens/momentsPen.c +5514 -5584
- fontTools/pens/momentsPen.cpython-313-aarch64-linux-musl.so +0 -0
- fontTools/pens/pointPen.py +61 -18
- fontTools/pens/roundingPen.py +2 -2
- fontTools/pens/t2CharStringPen.py +31 -11
- fontTools/qu2cu/qu2cu.c +6581 -6168
- fontTools/qu2cu/qu2cu.cpython-313-aarch64-linux-musl.so +0 -0
- fontTools/subset/__init__.py +283 -25
- fontTools/subset/svg.py +2 -3
- fontTools/ttLib/__init__.py +4 -0
- fontTools/ttLib/__main__.py +47 -8
- fontTools/ttLib/removeOverlaps.py +7 -5
- fontTools/ttLib/reorderGlyphs.py +8 -7
- fontTools/ttLib/sfnt.py +11 -9
- fontTools/ttLib/tables/D__e_b_g.py +20 -2
- fontTools/ttLib/tables/G_V_A_R_.py +5 -0
- fontTools/ttLib/tables/S__i_l_f.py +2 -2
- fontTools/ttLib/tables/T_S_I__0.py +14 -3
- fontTools/ttLib/tables/T_S_I__1.py +2 -5
- fontTools/ttLib/tables/T_S_I__5.py +18 -7
- fontTools/ttLib/tables/__init__.py +1 -0
- fontTools/ttLib/tables/_a_v_a_r.py +12 -3
- fontTools/ttLib/tables/_c_m_a_p.py +20 -7
- fontTools/ttLib/tables/_c_v_t.py +3 -2
- fontTools/ttLib/tables/_f_p_g_m.py +3 -1
- fontTools/ttLib/tables/_g_l_y_f.py +45 -21
- fontTools/ttLib/tables/_g_v_a_r.py +67 -19
- fontTools/ttLib/tables/_h_d_m_x.py +4 -4
- fontTools/ttLib/tables/_h_m_t_x.py +7 -3
- fontTools/ttLib/tables/_l_o_c_a.py +2 -2
- fontTools/ttLib/tables/_n_a_m_e.py +11 -6
- fontTools/ttLib/tables/_p_o_s_t.py +9 -7
- fontTools/ttLib/tables/otBase.py +5 -12
- fontTools/ttLib/tables/otConverters.py +5 -2
- fontTools/ttLib/tables/otData.py +1 -1
- fontTools/ttLib/tables/otTables.py +33 -30
- fontTools/ttLib/tables/otTraverse.py +2 -1
- fontTools/ttLib/tables/sbixStrike.py +3 -3
- fontTools/ttLib/ttFont.py +666 -120
- fontTools/ttLib/ttGlyphSet.py +0 -10
- fontTools/ttLib/woff2.py +10 -13
- fontTools/ttx.py +13 -1
- fontTools/ufoLib/__init__.py +300 -202
- fontTools/ufoLib/converters.py +103 -30
- fontTools/ufoLib/errors.py +8 -0
- fontTools/ufoLib/etree.py +1 -1
- fontTools/ufoLib/filenames.py +171 -106
- fontTools/ufoLib/glifLib.py +303 -205
- fontTools/ufoLib/kerning.py +98 -48
- fontTools/ufoLib/utils.py +46 -15
- fontTools/ufoLib/validators.py +121 -99
- fontTools/unicodedata/Blocks.py +35 -20
- fontTools/unicodedata/Mirrored.py +446 -0
- fontTools/unicodedata/ScriptExtensions.py +63 -37
- fontTools/unicodedata/Scripts.py +173 -152
- fontTools/unicodedata/__init__.py +10 -2
- fontTools/varLib/__init__.py +198 -109
- fontTools/varLib/avar/__init__.py +0 -0
- fontTools/varLib/avar/__main__.py +72 -0
- fontTools/varLib/avar/build.py +79 -0
- fontTools/varLib/avar/map.py +108 -0
- fontTools/varLib/avar/plan.py +1004 -0
- fontTools/varLib/{avar.py → avar/unbuild.py} +70 -59
- fontTools/varLib/avarPlanner.py +3 -999
- fontTools/varLib/featureVars.py +21 -7
- fontTools/varLib/hvar.py +113 -0
- fontTools/varLib/instancer/__init__.py +180 -65
- fontTools/varLib/interpolatableHelpers.py +3 -0
- fontTools/varLib/iup.c +7564 -6903
- fontTools/varLib/iup.cpython-313-aarch64-linux-musl.so +0 -0
- fontTools/varLib/models.py +17 -2
- fontTools/varLib/mutator.py +11 -0
- fontTools/varLib/varStore.py +10 -38
- fontTools/voltLib/__main__.py +206 -0
- fontTools/voltLib/ast.py +4 -0
- fontTools/voltLib/parser.py +16 -8
- fontTools/voltLib/voltToFea.py +347 -166
- {fonttools-4.55.4.dist-info → fonttools-4.61.1.dist-info}/METADATA +269 -1410
- {fonttools-4.55.4.dist-info → fonttools-4.61.1.dist-info}/RECORD +318 -294
- {fonttools-4.55.4.dist-info → fonttools-4.61.1.dist-info}/WHEEL +1 -1
- fonttools-4.61.1.dist-info/licenses/LICENSE.external +388 -0
- {fonttools-4.55.4.data → fonttools-4.61.1.data}/data/share/man/man1/ttx.1 +0 -0
- {fonttools-4.55.4.dist-info → fonttools-4.61.1.dist-info}/entry_points.txt +0 -0
- {fonttools-4.55.4.dist-info → fonttools-4.61.1.dist-info/licenses}/LICENSE +0 -0
- {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
|
|
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
|
-
"""
|
|
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="
|
|
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
|
|
226
|
-
|
|
261
|
+
if "fvar" not in font:
|
|
262
|
+
print("Not a variable font.", file=sys.stderr)
|
|
227
263
|
return 1
|
|
228
264
|
|
|
229
|
-
|
|
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__":
|