fonttools 4.60.2__cp311-cp311-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.
- fontTools/__init__.py +8 -0
- fontTools/__main__.py +35 -0
- fontTools/afmLib.py +439 -0
- fontTools/agl.py +5233 -0
- fontTools/annotations.py +30 -0
- fontTools/cffLib/CFF2ToCFF.py +258 -0
- fontTools/cffLib/CFFToCFF2.py +305 -0
- fontTools/cffLib/__init__.py +3694 -0
- fontTools/cffLib/specializer.py +927 -0
- fontTools/cffLib/transforms.py +495 -0
- fontTools/cffLib/width.py +210 -0
- fontTools/colorLib/__init__.py +0 -0
- fontTools/colorLib/builder.py +664 -0
- fontTools/colorLib/errors.py +2 -0
- fontTools/colorLib/geometry.py +143 -0
- fontTools/colorLib/table_builder.py +223 -0
- fontTools/colorLib/unbuilder.py +81 -0
- fontTools/config/__init__.py +90 -0
- fontTools/cu2qu/__init__.py +15 -0
- fontTools/cu2qu/__main__.py +6 -0
- fontTools/cu2qu/benchmark.py +54 -0
- fontTools/cu2qu/cli.py +198 -0
- fontTools/cu2qu/cu2qu.c +15817 -0
- fontTools/cu2qu/cu2qu.cp311-win32.pyd +0 -0
- fontTools/cu2qu/cu2qu.py +563 -0
- fontTools/cu2qu/errors.py +77 -0
- fontTools/cu2qu/ufo.py +363 -0
- fontTools/designspaceLib/__init__.py +3343 -0
- fontTools/designspaceLib/__main__.py +6 -0
- fontTools/designspaceLib/split.py +475 -0
- fontTools/designspaceLib/statNames.py +260 -0
- fontTools/designspaceLib/types.py +147 -0
- fontTools/encodings/MacRoman.py +258 -0
- fontTools/encodings/StandardEncoding.py +258 -0
- fontTools/encodings/__init__.py +1 -0
- fontTools/encodings/codecs.py +135 -0
- fontTools/feaLib/__init__.py +4 -0
- fontTools/feaLib/__main__.py +78 -0
- fontTools/feaLib/ast.py +2143 -0
- fontTools/feaLib/builder.py +1814 -0
- fontTools/feaLib/error.py +22 -0
- fontTools/feaLib/lexer.c +17029 -0
- fontTools/feaLib/lexer.cp311-win32.pyd +0 -0
- fontTools/feaLib/lexer.py +287 -0
- fontTools/feaLib/location.py +12 -0
- fontTools/feaLib/lookupDebugInfo.py +12 -0
- fontTools/feaLib/parser.py +2394 -0
- fontTools/feaLib/variableScalar.py +118 -0
- fontTools/fontBuilder.py +1014 -0
- fontTools/help.py +36 -0
- fontTools/merge/__init__.py +248 -0
- fontTools/merge/__main__.py +6 -0
- fontTools/merge/base.py +81 -0
- fontTools/merge/cmap.py +173 -0
- fontTools/merge/layout.py +526 -0
- fontTools/merge/options.py +85 -0
- fontTools/merge/tables.py +352 -0
- fontTools/merge/unicode.py +78 -0
- fontTools/merge/util.py +143 -0
- fontTools/misc/__init__.py +1 -0
- fontTools/misc/arrayTools.py +424 -0
- fontTools/misc/bezierTools.c +39731 -0
- fontTools/misc/bezierTools.cp311-win32.pyd +0 -0
- fontTools/misc/bezierTools.py +1500 -0
- fontTools/misc/classifyTools.py +170 -0
- fontTools/misc/cliTools.py +53 -0
- fontTools/misc/configTools.py +349 -0
- fontTools/misc/cython.py +27 -0
- fontTools/misc/dictTools.py +83 -0
- fontTools/misc/eexec.py +119 -0
- fontTools/misc/encodingTools.py +72 -0
- fontTools/misc/enumTools.py +23 -0
- fontTools/misc/etree.py +456 -0
- fontTools/misc/filenames.py +245 -0
- 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 +253 -0
- fontTools/misc/intTools.py +25 -0
- fontTools/misc/iterTools.py +12 -0
- fontTools/misc/lazyTools.py +42 -0
- fontTools/misc/loggingTools.py +543 -0
- fontTools/misc/macCreatorType.py +56 -0
- fontTools/misc/macRes.py +261 -0
- fontTools/misc/plistlib/__init__.py +681 -0
- fontTools/misc/plistlib/py.typed +0 -0
- fontTools/misc/psCharStrings.py +1511 -0
- fontTools/misc/psLib.py +398 -0
- fontTools/misc/psOperators.py +572 -0
- fontTools/misc/py23.py +96 -0
- fontTools/misc/roundTools.py +110 -0
- fontTools/misc/sstruct.py +227 -0
- fontTools/misc/symfont.py +242 -0
- fontTools/misc/testTools.py +233 -0
- fontTools/misc/textTools.py +156 -0
- fontTools/misc/timeTools.py +88 -0
- fontTools/misc/transform.py +516 -0
- fontTools/misc/treeTools.py +45 -0
- fontTools/misc/vector.py +147 -0
- fontTools/misc/visitor.py +158 -0
- fontTools/misc/xmlReader.py +188 -0
- fontTools/misc/xmlWriter.py +231 -0
- fontTools/mtiLib/__init__.py +1400 -0
- fontTools/mtiLib/__main__.py +5 -0
- fontTools/otlLib/__init__.py +1 -0
- fontTools/otlLib/builder.py +3465 -0
- fontTools/otlLib/error.py +11 -0
- fontTools/otlLib/maxContextCalc.py +96 -0
- fontTools/otlLib/optimize/__init__.py +53 -0
- fontTools/otlLib/optimize/__main__.py +6 -0
- fontTools/otlLib/optimize/gpos.py +439 -0
- fontTools/pens/__init__.py +1 -0
- fontTools/pens/areaPen.py +52 -0
- fontTools/pens/basePen.py +475 -0
- fontTools/pens/boundsPen.py +98 -0
- fontTools/pens/cairoPen.py +26 -0
- fontTools/pens/cocoaPen.py +26 -0
- fontTools/pens/cu2quPen.py +325 -0
- fontTools/pens/explicitClosingLinePen.py +101 -0
- fontTools/pens/filterPen.py +433 -0
- fontTools/pens/freetypePen.py +462 -0
- fontTools/pens/hashPointPen.py +89 -0
- fontTools/pens/momentsPen.c +13378 -0
- fontTools/pens/momentsPen.cp311-win32.pyd +0 -0
- fontTools/pens/momentsPen.py +879 -0
- fontTools/pens/perimeterPen.py +69 -0
- fontTools/pens/pointInsidePen.py +192 -0
- fontTools/pens/pointPen.py +643 -0
- fontTools/pens/qtPen.py +29 -0
- fontTools/pens/qu2cuPen.py +105 -0
- fontTools/pens/quartzPen.py +43 -0
- fontTools/pens/recordingPen.py +335 -0
- fontTools/pens/reportLabPen.py +79 -0
- fontTools/pens/reverseContourPen.py +96 -0
- fontTools/pens/roundingPen.py +130 -0
- fontTools/pens/statisticsPen.py +312 -0
- fontTools/pens/svgPathPen.py +310 -0
- fontTools/pens/t2CharStringPen.py +88 -0
- fontTools/pens/teePen.py +55 -0
- fontTools/pens/transformPen.py +115 -0
- fontTools/pens/ttGlyphPen.py +335 -0
- fontTools/pens/wxPen.py +29 -0
- fontTools/qu2cu/__init__.py +15 -0
- fontTools/qu2cu/__main__.py +7 -0
- fontTools/qu2cu/benchmark.py +56 -0
- fontTools/qu2cu/cli.py +125 -0
- fontTools/qu2cu/qu2cu.c +16682 -0
- fontTools/qu2cu/qu2cu.cp311-win32.pyd +0 -0
- fontTools/qu2cu/qu2cu.py +405 -0
- fontTools/subset/__init__.py +4096 -0
- fontTools/subset/__main__.py +6 -0
- fontTools/subset/cff.py +184 -0
- fontTools/subset/svg.py +253 -0
- fontTools/subset/util.py +25 -0
- fontTools/svgLib/__init__.py +3 -0
- fontTools/svgLib/path/__init__.py +65 -0
- fontTools/svgLib/path/arc.py +154 -0
- fontTools/svgLib/path/parser.py +322 -0
- fontTools/svgLib/path/shapes.py +183 -0
- fontTools/t1Lib/__init__.py +648 -0
- fontTools/tfmLib.py +460 -0
- fontTools/ttLib/__init__.py +30 -0
- fontTools/ttLib/__main__.py +148 -0
- fontTools/ttLib/macUtils.py +54 -0
- fontTools/ttLib/removeOverlaps.py +395 -0
- fontTools/ttLib/reorderGlyphs.py +285 -0
- fontTools/ttLib/scaleUpem.py +436 -0
- fontTools/ttLib/sfnt.py +661 -0
- fontTools/ttLib/standardGlyphOrder.py +271 -0
- fontTools/ttLib/tables/B_A_S_E_.py +14 -0
- fontTools/ttLib/tables/BitmapGlyphMetrics.py +64 -0
- fontTools/ttLib/tables/C_B_D_T_.py +113 -0
- fontTools/ttLib/tables/C_B_L_C_.py +19 -0
- fontTools/ttLib/tables/C_F_F_.py +61 -0
- fontTools/ttLib/tables/C_F_F__2.py +26 -0
- fontTools/ttLib/tables/C_O_L_R_.py +165 -0
- fontTools/ttLib/tables/C_P_A_L_.py +305 -0
- fontTools/ttLib/tables/D_S_I_G_.py +158 -0
- fontTools/ttLib/tables/D__e_b_g.py +35 -0
- fontTools/ttLib/tables/DefaultTable.py +49 -0
- fontTools/ttLib/tables/E_B_D_T_.py +835 -0
- fontTools/ttLib/tables/E_B_L_C_.py +718 -0
- fontTools/ttLib/tables/F_F_T_M_.py +52 -0
- fontTools/ttLib/tables/F__e_a_t.py +149 -0
- fontTools/ttLib/tables/G_D_E_F_.py +13 -0
- fontTools/ttLib/tables/G_M_A_P_.py +148 -0
- fontTools/ttLib/tables/G_P_K_G_.py +133 -0
- fontTools/ttLib/tables/G_P_O_S_.py +14 -0
- fontTools/ttLib/tables/G_S_U_B_.py +13 -0
- fontTools/ttLib/tables/G_V_A_R_.py +5 -0
- fontTools/ttLib/tables/G__l_a_t.py +235 -0
- fontTools/ttLib/tables/G__l_o_c.py +85 -0
- fontTools/ttLib/tables/H_V_A_R_.py +13 -0
- fontTools/ttLib/tables/J_S_T_F_.py +13 -0
- fontTools/ttLib/tables/L_T_S_H_.py +58 -0
- fontTools/ttLib/tables/M_A_T_H_.py +13 -0
- fontTools/ttLib/tables/M_E_T_A_.py +352 -0
- fontTools/ttLib/tables/M_V_A_R_.py +13 -0
- fontTools/ttLib/tables/O_S_2f_2.py +752 -0
- fontTools/ttLib/tables/S_I_N_G_.py +99 -0
- fontTools/ttLib/tables/S_T_A_T_.py +15 -0
- fontTools/ttLib/tables/S_V_G_.py +223 -0
- fontTools/ttLib/tables/S__i_l_f.py +1040 -0
- fontTools/ttLib/tables/S__i_l_l.py +92 -0
- fontTools/ttLib/tables/T_S_I_B_.py +13 -0
- fontTools/ttLib/tables/T_S_I_C_.py +14 -0
- fontTools/ttLib/tables/T_S_I_D_.py +13 -0
- fontTools/ttLib/tables/T_S_I_J_.py +13 -0
- fontTools/ttLib/tables/T_S_I_P_.py +13 -0
- fontTools/ttLib/tables/T_S_I_S_.py +13 -0
- fontTools/ttLib/tables/T_S_I_V_.py +26 -0
- fontTools/ttLib/tables/T_S_I__0.py +70 -0
- fontTools/ttLib/tables/T_S_I__1.py +163 -0
- fontTools/ttLib/tables/T_S_I__2.py +17 -0
- fontTools/ttLib/tables/T_S_I__3.py +22 -0
- fontTools/ttLib/tables/T_S_I__5.py +60 -0
- fontTools/ttLib/tables/T_T_F_A_.py +14 -0
- fontTools/ttLib/tables/TupleVariation.py +884 -0
- fontTools/ttLib/tables/V_A_R_C_.py +12 -0
- fontTools/ttLib/tables/V_D_M_X_.py +249 -0
- fontTools/ttLib/tables/V_O_R_G_.py +165 -0
- fontTools/ttLib/tables/V_V_A_R_.py +13 -0
- fontTools/ttLib/tables/__init__.py +98 -0
- fontTools/ttLib/tables/_a_n_k_r.py +15 -0
- fontTools/ttLib/tables/_a_v_a_r.py +193 -0
- fontTools/ttLib/tables/_b_s_l_n.py +15 -0
- fontTools/ttLib/tables/_c_i_d_g.py +24 -0
- fontTools/ttLib/tables/_c_m_a_p.py +1591 -0
- fontTools/ttLib/tables/_c_v_a_r.py +94 -0
- fontTools/ttLib/tables/_c_v_t.py +56 -0
- fontTools/ttLib/tables/_f_e_a_t.py +15 -0
- fontTools/ttLib/tables/_f_p_g_m.py +62 -0
- fontTools/ttLib/tables/_f_v_a_r.py +261 -0
- fontTools/ttLib/tables/_g_a_s_p.py +63 -0
- fontTools/ttLib/tables/_g_c_i_d.py +13 -0
- fontTools/ttLib/tables/_g_l_y_f.py +2311 -0
- fontTools/ttLib/tables/_g_v_a_r.py +340 -0
- fontTools/ttLib/tables/_h_d_m_x.py +127 -0
- fontTools/ttLib/tables/_h_e_a_d.py +130 -0
- fontTools/ttLib/tables/_h_h_e_a.py +147 -0
- fontTools/ttLib/tables/_h_m_t_x.py +164 -0
- fontTools/ttLib/tables/_k_e_r_n.py +289 -0
- fontTools/ttLib/tables/_l_c_a_r.py +13 -0
- fontTools/ttLib/tables/_l_o_c_a.py +70 -0
- fontTools/ttLib/tables/_l_t_a_g.py +72 -0
- fontTools/ttLib/tables/_m_a_x_p.py +147 -0
- fontTools/ttLib/tables/_m_e_t_a.py +112 -0
- fontTools/ttLib/tables/_m_o_r_t.py +14 -0
- fontTools/ttLib/tables/_m_o_r_x.py +15 -0
- fontTools/ttLib/tables/_n_a_m_e.py +1242 -0
- fontTools/ttLib/tables/_o_p_b_d.py +14 -0
- fontTools/ttLib/tables/_p_o_s_t.py +319 -0
- fontTools/ttLib/tables/_p_r_e_p.py +16 -0
- fontTools/ttLib/tables/_p_r_o_p.py +12 -0
- fontTools/ttLib/tables/_s_b_i_x.py +129 -0
- fontTools/ttLib/tables/_t_r_a_k.py +332 -0
- fontTools/ttLib/tables/_v_h_e_a.py +139 -0
- fontTools/ttLib/tables/_v_m_t_x.py +19 -0
- fontTools/ttLib/tables/asciiTable.py +20 -0
- fontTools/ttLib/tables/grUtils.py +92 -0
- fontTools/ttLib/tables/otBase.py +1458 -0
- fontTools/ttLib/tables/otConverters.py +2068 -0
- fontTools/ttLib/tables/otData.py +6400 -0
- fontTools/ttLib/tables/otTables.py +2703 -0
- fontTools/ttLib/tables/otTraverse.py +163 -0
- fontTools/ttLib/tables/sbixGlyph.py +149 -0
- fontTools/ttLib/tables/sbixStrike.py +177 -0
- fontTools/ttLib/tables/table_API_readme.txt +91 -0
- fontTools/ttLib/tables/ttProgram.py +594 -0
- fontTools/ttLib/ttCollection.py +125 -0
- fontTools/ttLib/ttFont.py +1148 -0
- fontTools/ttLib/ttGlyphSet.py +490 -0
- fontTools/ttLib/ttVisitor.py +32 -0
- fontTools/ttLib/woff2.py +1680 -0
- fontTools/ttx.py +479 -0
- fontTools/ufoLib/__init__.py +2575 -0
- fontTools/ufoLib/converters.py +407 -0
- fontTools/ufoLib/errors.py +30 -0
- fontTools/ufoLib/etree.py +6 -0
- fontTools/ufoLib/filenames.py +356 -0
- fontTools/ufoLib/glifLib.py +2120 -0
- fontTools/ufoLib/kerning.py +141 -0
- fontTools/ufoLib/plistlib.py +47 -0
- fontTools/ufoLib/pointPen.py +6 -0
- fontTools/ufoLib/utils.py +107 -0
- fontTools/ufoLib/validators.py +1208 -0
- fontTools/unicode.py +50 -0
- fontTools/unicodedata/Blocks.py +817 -0
- fontTools/unicodedata/Mirrored.py +446 -0
- fontTools/unicodedata/OTTags.py +50 -0
- fontTools/unicodedata/ScriptExtensions.py +832 -0
- fontTools/unicodedata/Scripts.py +3639 -0
- fontTools/unicodedata/__init__.py +306 -0
- fontTools/varLib/__init__.py +1600 -0
- fontTools/varLib/__main__.py +6 -0
- 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/unbuild.py +271 -0
- fontTools/varLib/avarPlanner.py +8 -0
- fontTools/varLib/builder.py +215 -0
- fontTools/varLib/cff.py +631 -0
- fontTools/varLib/errors.py +219 -0
- fontTools/varLib/featureVars.py +703 -0
- fontTools/varLib/hvar.py +113 -0
- fontTools/varLib/instancer/__init__.py +2052 -0
- fontTools/varLib/instancer/__main__.py +5 -0
- fontTools/varLib/instancer/featureVars.py +190 -0
- fontTools/varLib/instancer/names.py +388 -0
- fontTools/varLib/instancer/solver.py +309 -0
- fontTools/varLib/interpolatable.py +1209 -0
- fontTools/varLib/interpolatableHelpers.py +399 -0
- fontTools/varLib/interpolatablePlot.py +1269 -0
- fontTools/varLib/interpolatableTestContourOrder.py +82 -0
- fontTools/varLib/interpolatableTestStartingPoint.py +107 -0
- fontTools/varLib/interpolate_layout.py +124 -0
- fontTools/varLib/iup.c +19815 -0
- fontTools/varLib/iup.cp311-win32.pyd +0 -0
- fontTools/varLib/iup.py +490 -0
- fontTools/varLib/merger.py +1717 -0
- fontTools/varLib/models.py +642 -0
- fontTools/varLib/multiVarStore.py +253 -0
- fontTools/varLib/mutator.py +529 -0
- fontTools/varLib/mvar.py +40 -0
- fontTools/varLib/plot.py +238 -0
- fontTools/varLib/stat.py +149 -0
- fontTools/varLib/varStore.py +739 -0
- fontTools/voltLib/__init__.py +5 -0
- fontTools/voltLib/__main__.py +206 -0
- fontTools/voltLib/ast.py +452 -0
- fontTools/voltLib/error.py +12 -0
- fontTools/voltLib/lexer.py +99 -0
- fontTools/voltLib/parser.py +664 -0
- fontTools/voltLib/voltToFea.py +911 -0
- fonttools-4.60.2.data/data/share/man/man1/ttx.1 +225 -0
- fonttools-4.60.2.dist-info/METADATA +2250 -0
- fonttools-4.60.2.dist-info/RECORD +353 -0
- fonttools-4.60.2.dist-info/WHEEL +5 -0
- fonttools-4.60.2.dist-info/entry_points.txt +5 -0
- fonttools-4.60.2.dist-info/licenses/LICENSE +21 -0
- fonttools-4.60.2.dist-info/licenses/LICENSE.external +388 -0
- fonttools-4.60.2.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
from fontTools.misc import sstruct
|
|
2
|
+
from fontTools.misc.fixedTools import (
|
|
3
|
+
fixedToFloat as fi2fl,
|
|
4
|
+
floatToFixed as fl2fi,
|
|
5
|
+
floatToFixedToStr as fl2str,
|
|
6
|
+
strToFixedToFloat as str2fl,
|
|
7
|
+
)
|
|
8
|
+
from fontTools.misc.textTools import bytesjoin, safeEval
|
|
9
|
+
from fontTools.misc.roundTools import otRound
|
|
10
|
+
from fontTools.varLib.models import piecewiseLinearMap
|
|
11
|
+
from fontTools.varLib.varStore import VarStoreInstancer, NO_VARIATION_INDEX
|
|
12
|
+
from fontTools.ttLib import TTLibError
|
|
13
|
+
from . import DefaultTable
|
|
14
|
+
from . import otTables
|
|
15
|
+
import struct
|
|
16
|
+
import logging
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
log = logging.getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
from .otBase import BaseTTXConverter
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class table__a_v_a_r(BaseTTXConverter):
|
|
25
|
+
"""Axis Variations table
|
|
26
|
+
|
|
27
|
+
This class represents the ``avar`` table of a variable font. The object has one
|
|
28
|
+
substantive attribute, ``segments``, which maps axis tags to a segments dictionary::
|
|
29
|
+
|
|
30
|
+
>>> font["avar"].segments # doctest: +SKIP
|
|
31
|
+
{'wght': {-1.0: -1.0,
|
|
32
|
+
0.0: 0.0,
|
|
33
|
+
0.125: 0.11444091796875,
|
|
34
|
+
0.25: 0.23492431640625,
|
|
35
|
+
0.5: 0.35540771484375,
|
|
36
|
+
0.625: 0.5,
|
|
37
|
+
0.75: 0.6566162109375,
|
|
38
|
+
0.875: 0.81927490234375,
|
|
39
|
+
1.0: 1.0},
|
|
40
|
+
'ital': {-1.0: -1.0, 0.0: 0.0, 1.0: 1.0}}
|
|
41
|
+
|
|
42
|
+
Notice that the segments dictionary is made up of normalized values. A valid
|
|
43
|
+
``avar`` segment mapping must contain the entries ``-1.0: -1.0, 0.0: 0.0, 1.0: 1.0``.
|
|
44
|
+
fontTools does not enforce this, so it is your responsibility to ensure that
|
|
45
|
+
mappings are valid.
|
|
46
|
+
|
|
47
|
+
See also https://learn.microsoft.com/en-us/typography/opentype/spec/avar
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
dependencies = ["fvar"]
|
|
51
|
+
|
|
52
|
+
def __init__(self, tag=None):
|
|
53
|
+
super().__init__(tag)
|
|
54
|
+
self.segments = {}
|
|
55
|
+
|
|
56
|
+
def compile(self, ttFont):
|
|
57
|
+
axisTags = [axis.axisTag for axis in ttFont["fvar"].axes]
|
|
58
|
+
if not hasattr(self, "table"):
|
|
59
|
+
self.table = otTables.avar()
|
|
60
|
+
if not hasattr(self.table, "Reserved"):
|
|
61
|
+
self.table.Reserved = 0
|
|
62
|
+
self.table.Version = (getattr(self, "majorVersion", 1) << 16) | getattr(
|
|
63
|
+
self, "minorVersion", 0
|
|
64
|
+
)
|
|
65
|
+
self.table.AxisCount = len(axisTags)
|
|
66
|
+
self.table.AxisSegmentMap = []
|
|
67
|
+
for axis in axisTags:
|
|
68
|
+
mappings = self.segments[axis]
|
|
69
|
+
segmentMap = otTables.AxisSegmentMap()
|
|
70
|
+
segmentMap.PositionMapCount = len(mappings)
|
|
71
|
+
segmentMap.AxisValueMap = []
|
|
72
|
+
for key, value in sorted(mappings.items()):
|
|
73
|
+
valueMap = otTables.AxisValueMap()
|
|
74
|
+
valueMap.FromCoordinate = key
|
|
75
|
+
valueMap.ToCoordinate = value
|
|
76
|
+
segmentMap.AxisValueMap.append(valueMap)
|
|
77
|
+
self.table.AxisSegmentMap.append(segmentMap)
|
|
78
|
+
return super().compile(ttFont)
|
|
79
|
+
|
|
80
|
+
def decompile(self, data, ttFont):
|
|
81
|
+
super().decompile(data, ttFont)
|
|
82
|
+
self.majorVersion = self.table.Version >> 16
|
|
83
|
+
self.minorVersion = self.table.Version & 0xFFFF
|
|
84
|
+
if self.majorVersion not in (1, 2):
|
|
85
|
+
raise NotImplementedError("Unknown avar table version")
|
|
86
|
+
axisTags = [axis.axisTag for axis in ttFont["fvar"].axes]
|
|
87
|
+
for axis in axisTags:
|
|
88
|
+
self.segments[axis] = {}
|
|
89
|
+
for axis, segmentMap in zip(axisTags, self.table.AxisSegmentMap):
|
|
90
|
+
segments = self.segments[axis] = {}
|
|
91
|
+
for segment in segmentMap.AxisValueMap:
|
|
92
|
+
segments[segment.FromCoordinate] = segment.ToCoordinate
|
|
93
|
+
|
|
94
|
+
def toXML(self, writer, ttFont):
|
|
95
|
+
writer.simpletag(
|
|
96
|
+
"version",
|
|
97
|
+
major=getattr(self, "majorVersion", 1),
|
|
98
|
+
minor=getattr(self, "minorVersion", 0),
|
|
99
|
+
)
|
|
100
|
+
writer.newline()
|
|
101
|
+
axisTags = [axis.axisTag for axis in ttFont["fvar"].axes]
|
|
102
|
+
for axis in axisTags:
|
|
103
|
+
writer.begintag("segment", axis=axis)
|
|
104
|
+
writer.newline()
|
|
105
|
+
for key, value in sorted(self.segments[axis].items()):
|
|
106
|
+
key = fl2str(key, 14)
|
|
107
|
+
value = fl2str(value, 14)
|
|
108
|
+
writer.simpletag("mapping", **{"from": key, "to": value})
|
|
109
|
+
writer.newline()
|
|
110
|
+
writer.endtag("segment")
|
|
111
|
+
writer.newline()
|
|
112
|
+
if getattr(self, "majorVersion", 1) >= 2:
|
|
113
|
+
if self.table.VarIdxMap:
|
|
114
|
+
self.table.VarIdxMap.toXML(writer, ttFont, name="VarIdxMap")
|
|
115
|
+
if self.table.VarStore:
|
|
116
|
+
self.table.VarStore.toXML(writer, ttFont)
|
|
117
|
+
|
|
118
|
+
def fromXML(self, name, attrs, content, ttFont):
|
|
119
|
+
if not hasattr(self, "table"):
|
|
120
|
+
self.table = otTables.avar()
|
|
121
|
+
if not hasattr(self.table, "Reserved"):
|
|
122
|
+
self.table.Reserved = 0
|
|
123
|
+
if name == "version":
|
|
124
|
+
self.majorVersion = safeEval(attrs["major"])
|
|
125
|
+
self.minorVersion = safeEval(attrs["minor"])
|
|
126
|
+
self.table.Version = (getattr(self, "majorVersion", 1) << 16) | getattr(
|
|
127
|
+
self, "minorVersion", 0
|
|
128
|
+
)
|
|
129
|
+
elif name == "segment":
|
|
130
|
+
axis = attrs["axis"]
|
|
131
|
+
segment = self.segments[axis] = {}
|
|
132
|
+
for element in content:
|
|
133
|
+
if isinstance(element, tuple):
|
|
134
|
+
elementName, elementAttrs, _ = element
|
|
135
|
+
if elementName == "mapping":
|
|
136
|
+
fromValue = str2fl(elementAttrs["from"], 14)
|
|
137
|
+
toValue = str2fl(elementAttrs["to"], 14)
|
|
138
|
+
if fromValue in segment:
|
|
139
|
+
log.warning(
|
|
140
|
+
"duplicate entry for %s in axis '%s'", fromValue, axis
|
|
141
|
+
)
|
|
142
|
+
segment[fromValue] = toValue
|
|
143
|
+
else:
|
|
144
|
+
super().fromXML(name, attrs, content, ttFont)
|
|
145
|
+
|
|
146
|
+
def renormalizeLocation(self, location, font, dropZeroes=True):
|
|
147
|
+
|
|
148
|
+
majorVersion = getattr(self, "majorVersion", 1)
|
|
149
|
+
|
|
150
|
+
if majorVersion not in (1, 2):
|
|
151
|
+
raise NotImplementedError("Unknown avar table version")
|
|
152
|
+
|
|
153
|
+
avarSegments = self.segments
|
|
154
|
+
mappedLocation = {}
|
|
155
|
+
for axisTag, value in location.items():
|
|
156
|
+
avarMapping = avarSegments.get(axisTag, None)
|
|
157
|
+
if avarMapping is not None:
|
|
158
|
+
value = piecewiseLinearMap(value, avarMapping)
|
|
159
|
+
mappedLocation[axisTag] = value
|
|
160
|
+
|
|
161
|
+
if majorVersion < 2:
|
|
162
|
+
return mappedLocation
|
|
163
|
+
|
|
164
|
+
# Version 2
|
|
165
|
+
|
|
166
|
+
varIdxMap = self.table.VarIdxMap
|
|
167
|
+
varStore = self.table.VarStore
|
|
168
|
+
axes = font["fvar"].axes
|
|
169
|
+
if varStore is not None:
|
|
170
|
+
instancer = VarStoreInstancer(varStore, axes, mappedLocation)
|
|
171
|
+
|
|
172
|
+
coords = list(fl2fi(mappedLocation.get(axis.axisTag, 0), 14) for axis in axes)
|
|
173
|
+
|
|
174
|
+
out = []
|
|
175
|
+
for varIdx, v in enumerate(coords):
|
|
176
|
+
|
|
177
|
+
if varIdxMap is not None:
|
|
178
|
+
varIdx = varIdxMap[varIdx]
|
|
179
|
+
|
|
180
|
+
if varStore is not None:
|
|
181
|
+
delta = instancer[varIdx]
|
|
182
|
+
v += otRound(delta)
|
|
183
|
+
v = min(max(v, -(1 << 14)), +(1 << 14))
|
|
184
|
+
|
|
185
|
+
out.append(v)
|
|
186
|
+
|
|
187
|
+
mappedLocation = {
|
|
188
|
+
axis.axisTag: fi2fl(v, 14)
|
|
189
|
+
for v, axis in zip(out, axes)
|
|
190
|
+
if v != 0 or not dropZeroes
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return mappedLocation
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from .otBase import BaseTTXConverter
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
# https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bsln.html
|
|
5
|
+
class table__b_s_l_n(BaseTTXConverter):
|
|
6
|
+
"""Baseline table
|
|
7
|
+
|
|
8
|
+
The AAT ``bsln`` table is similar in purpose to the OpenType ``BASE``
|
|
9
|
+
table; it stores per-script baselines to support automatic alignment
|
|
10
|
+
of lines of text.
|
|
11
|
+
|
|
12
|
+
See also https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bsln.html
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
pass
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
from .otBase import BaseTTXConverter
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class table__c_i_d_g(BaseTTXConverter):
|
|
6
|
+
"""CID to Glyph ID table
|
|
7
|
+
|
|
8
|
+
The AAT ``cidg`` table has almost the same structure as ``gidc``,
|
|
9
|
+
just mapping CIDs to GlyphIDs instead of the reverse direction.
|
|
10
|
+
|
|
11
|
+
It is useful for fonts that may be used by a PDF renderer in lieu of
|
|
12
|
+
a font reference with a known glyph collection but no subsetted
|
|
13
|
+
glyphs. For instance, a PDF can say “please use a font conforming
|
|
14
|
+
to Adobe-Japan-1”; the ``cidg`` mapping is necessary if the font is,
|
|
15
|
+
say, a TrueType font. ``gidc`` is lossy for this purpose and is
|
|
16
|
+
obsoleted by ``cidg``.
|
|
17
|
+
|
|
18
|
+
For example, the first font in ``/System/Library/Fonts/PingFang.ttc``
|
|
19
|
+
(which Apple ships pre-installed on MacOS 10.12.6) has a ``cidg`` table.
|
|
20
|
+
|
|
21
|
+
See also https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6gcid.html
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
pass
|