fonttools 4.59.1__cp314-cp314t-musllinux_1_2_x86_64.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 +8 -0
- fontTools/__main__.py +35 -0
- fontTools/afmLib.py +439 -0
- fontTools/agl.py +5233 -0
- fontTools/cffLib/CFF2ToCFF.py +233 -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 +15560 -0
- fontTools/cu2qu/cu2qu.cpython-314t-x86_64-linux-musl.so +0 -0
- fontTools/cu2qu/cu2qu.py +531 -0
- fontTools/cu2qu/errors.py +77 -0
- fontTools/cu2qu/ufo.py +349 -0
- fontTools/designspaceLib/__init__.py +3338 -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 +1802 -0
- fontTools/feaLib/error.py +22 -0
- fontTools/feaLib/lexer.c +17351 -0
- fontTools/feaLib/lexer.cpython-314t-x86_64-linux-musl.so +0 -0
- fontTools/feaLib/lexer.py +287 -0
- fontTools/feaLib/location.py +12 -0
- fontTools/feaLib/lookupDebugInfo.py +12 -0
- fontTools/feaLib/parser.py +2379 -0
- fontTools/feaLib/variableScalar.py +113 -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 +40151 -0
- fontTools/misc/bezierTools.cpython-314t-x86_64-linux-musl.so +0 -0
- fontTools/misc/bezierTools.py +1497 -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/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 +154 -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 +150 -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 +241 -0
- fontTools/pens/freetypePen.py +462 -0
- fontTools/pens/hashPointPen.py +89 -0
- fontTools/pens/momentsPen.c +13466 -0
- fontTools/pens/momentsPen.cpython-314t-x86_64-linux-musl.so +0 -0
- fontTools/pens/momentsPen.py +879 -0
- fontTools/pens/perimeterPen.py +69 -0
- fontTools/pens/pointInsidePen.py +192 -0
- fontTools/pens/pointPen.py +609 -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 +16753 -0
- fontTools/qu2cu/qu2cu.cpython-314t-x86_64-linux-musl.so +0 -0
- fontTools/qu2cu/qu2cu.py +405 -0
- fontTools/subset/__init__.py +3929 -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 +393 -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 +191 -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 +1237 -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 +1464 -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 +2472 -0
- fontTools/ufoLib/converters.py +398 -0
- fontTools/ufoLib/errors.py +30 -0
- fontTools/ufoLib/etree.py +6 -0
- fontTools/ufoLib/filenames.py +346 -0
- fontTools/ufoLib/glifLib.py +2024 -0
- fontTools/ufoLib/kerning.py +121 -0
- fontTools/ufoLib/plistlib.py +47 -0
- fontTools/ufoLib/pointPen.py +6 -0
- fontTools/ufoLib/utils.py +79 -0
- fontTools/ufoLib/validators.py +1184 -0
- fontTools/unicode.py +50 -0
- fontTools/unicodedata/Blocks.py +801 -0
- fontTools/unicodedata/Mirrored.py +446 -0
- fontTools/unicodedata/OTTags.py +50 -0
- fontTools/unicodedata/ScriptExtensions.py +826 -0
- fontTools/unicodedata/Scripts.py +3617 -0
- fontTools/unicodedata/__init__.py +304 -0
- fontTools/varLib/__init__.py +1517 -0
- fontTools/varLib/__main__.py +6 -0
- fontTools/varLib/avar.py +260 -0
- fontTools/varLib/avarPlanner.py +1004 -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 +2014 -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 +396 -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 +19845 -0
- fontTools/varLib/iup.cpython-314t-x86_64-linux-musl.so +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.59.1.data/data/share/man/man1/ttx.1 +225 -0
- fonttools-4.59.1.dist-info/METADATA +2175 -0
- fonttools-4.59.1.dist-info/RECORD +346 -0
- fonttools-4.59.1.dist-info/WHEEL +5 -0
- fonttools-4.59.1.dist-info/entry_points.txt +5 -0
- fonttools-4.59.1.dist-info/licenses/LICENSE +21 -0
- fonttools-4.59.1.dist-info/licenses/LICENSE.external +388 -0
- fonttools-4.59.1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
def lookupKerningValue(
|
|
2
|
+
pair, kerning, groups, fallback=0, glyphToFirstGroup=None, glyphToSecondGroup=None
|
|
3
|
+
):
|
|
4
|
+
"""Retrieve the kerning value (if any) between a pair of elements.
|
|
5
|
+
|
|
6
|
+
The elments can be either individual glyphs (by name) or kerning
|
|
7
|
+
groups (by name), or any combination of the two.
|
|
8
|
+
|
|
9
|
+
Args:
|
|
10
|
+
pair:
|
|
11
|
+
A tuple, in logical order (first, second) with respect
|
|
12
|
+
to the reading direction, to query the font for kerning
|
|
13
|
+
information on. Each element in the tuple can be either
|
|
14
|
+
a glyph name or a kerning group name.
|
|
15
|
+
kerning:
|
|
16
|
+
A dictionary of kerning pairs.
|
|
17
|
+
groups:
|
|
18
|
+
A set of kerning groups.
|
|
19
|
+
fallback:
|
|
20
|
+
The fallback value to return if no kern is found between
|
|
21
|
+
the elements in ``pair``. Defaults to 0.
|
|
22
|
+
glyphToFirstGroup:
|
|
23
|
+
A dictionary mapping glyph names to the first-glyph kerning
|
|
24
|
+
groups to which they belong. Defaults to ``None``.
|
|
25
|
+
glyphToSecondGroup:
|
|
26
|
+
A dictionary mapping glyph names to the second-glyph kerning
|
|
27
|
+
groups to which they belong. Defaults to ``None``.
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
The kerning value between the element pair. If no kerning for
|
|
31
|
+
the pair is found, the fallback value is returned.
|
|
32
|
+
|
|
33
|
+
Note: This function expects the ``kerning`` argument to be a flat
|
|
34
|
+
dictionary of kerning pairs, not the nested structure used in a
|
|
35
|
+
kerning.plist file.
|
|
36
|
+
|
|
37
|
+
Examples::
|
|
38
|
+
|
|
39
|
+
>>> groups = {
|
|
40
|
+
... "public.kern1.O" : ["O", "D", "Q"],
|
|
41
|
+
... "public.kern2.E" : ["E", "F"]
|
|
42
|
+
... }
|
|
43
|
+
>>> kerning = {
|
|
44
|
+
... ("public.kern1.O", "public.kern2.E") : -100,
|
|
45
|
+
... ("public.kern1.O", "F") : -200,
|
|
46
|
+
... ("D", "F") : -300
|
|
47
|
+
... }
|
|
48
|
+
>>> lookupKerningValue(("D", "F"), kerning, groups)
|
|
49
|
+
-300
|
|
50
|
+
>>> lookupKerningValue(("O", "F"), kerning, groups)
|
|
51
|
+
-200
|
|
52
|
+
>>> lookupKerningValue(("O", "E"), kerning, groups)
|
|
53
|
+
-100
|
|
54
|
+
>>> lookupKerningValue(("O", "O"), kerning, groups)
|
|
55
|
+
0
|
|
56
|
+
>>> lookupKerningValue(("E", "E"), kerning, groups)
|
|
57
|
+
0
|
|
58
|
+
>>> lookupKerningValue(("E", "O"), kerning, groups)
|
|
59
|
+
0
|
|
60
|
+
>>> lookupKerningValue(("X", "X"), kerning, groups)
|
|
61
|
+
0
|
|
62
|
+
>>> lookupKerningValue(("public.kern1.O", "public.kern2.E"),
|
|
63
|
+
... kerning, groups)
|
|
64
|
+
-100
|
|
65
|
+
>>> lookupKerningValue(("public.kern1.O", "F"), kerning, groups)
|
|
66
|
+
-200
|
|
67
|
+
>>> lookupKerningValue(("O", "public.kern2.E"), kerning, groups)
|
|
68
|
+
-100
|
|
69
|
+
>>> lookupKerningValue(("public.kern1.X", "public.kern2.X"), kerning, groups)
|
|
70
|
+
0
|
|
71
|
+
"""
|
|
72
|
+
# quickly check to see if the pair is in the kerning dictionary
|
|
73
|
+
if pair in kerning:
|
|
74
|
+
return kerning[pair]
|
|
75
|
+
# create glyph to group mapping
|
|
76
|
+
if glyphToFirstGroup is not None:
|
|
77
|
+
assert glyphToSecondGroup is not None
|
|
78
|
+
if glyphToSecondGroup is not None:
|
|
79
|
+
assert glyphToFirstGroup is not None
|
|
80
|
+
if glyphToFirstGroup is None:
|
|
81
|
+
glyphToFirstGroup = {}
|
|
82
|
+
glyphToSecondGroup = {}
|
|
83
|
+
for group, groupMembers in groups.items():
|
|
84
|
+
if group.startswith("public.kern1."):
|
|
85
|
+
for glyph in groupMembers:
|
|
86
|
+
glyphToFirstGroup[glyph] = group
|
|
87
|
+
elif group.startswith("public.kern2."):
|
|
88
|
+
for glyph in groupMembers:
|
|
89
|
+
glyphToSecondGroup[glyph] = group
|
|
90
|
+
# get group names and make sure first and second are glyph names
|
|
91
|
+
first, second = pair
|
|
92
|
+
firstGroup = secondGroup = None
|
|
93
|
+
if first.startswith("public.kern1."):
|
|
94
|
+
firstGroup = first
|
|
95
|
+
first = None
|
|
96
|
+
else:
|
|
97
|
+
firstGroup = glyphToFirstGroup.get(first)
|
|
98
|
+
if second.startswith("public.kern2."):
|
|
99
|
+
secondGroup = second
|
|
100
|
+
second = None
|
|
101
|
+
else:
|
|
102
|
+
secondGroup = glyphToSecondGroup.get(second)
|
|
103
|
+
# make an ordered list of pairs to look up
|
|
104
|
+
pairs = [
|
|
105
|
+
(first, second),
|
|
106
|
+
(first, secondGroup),
|
|
107
|
+
(firstGroup, second),
|
|
108
|
+
(firstGroup, secondGroup),
|
|
109
|
+
]
|
|
110
|
+
# look up the pairs and return any matches
|
|
111
|
+
for pair in pairs:
|
|
112
|
+
if pair in kerning:
|
|
113
|
+
return kerning[pair]
|
|
114
|
+
# use the fallback value
|
|
115
|
+
return fallback
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
if __name__ == "__main__":
|
|
119
|
+
import doctest
|
|
120
|
+
|
|
121
|
+
doctest.testmod()
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""DEPRECATED - This module is kept here only as a backward compatibility shim
|
|
2
|
+
for the old `ufoLib.plistlib` module, which was moved to :class:`fontTools.misc.plistlib`.
|
|
3
|
+
Please use the latter instead.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from fontTools.misc.plistlib import dump, dumps, load, loads
|
|
7
|
+
from fontTools.misc.textTools import tobytes
|
|
8
|
+
|
|
9
|
+
# The following functions were part of the old py2-like ufoLib.plistlib API.
|
|
10
|
+
# They are kept only for backward compatiblity.
|
|
11
|
+
from fontTools.ufoLib.utils import deprecated
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@deprecated("Use 'fontTools.misc.plistlib.load' instead")
|
|
15
|
+
def readPlist(path_or_file):
|
|
16
|
+
did_open = False
|
|
17
|
+
if isinstance(path_or_file, str):
|
|
18
|
+
path_or_file = open(path_or_file, "rb")
|
|
19
|
+
did_open = True
|
|
20
|
+
try:
|
|
21
|
+
return load(path_or_file, use_builtin_types=False)
|
|
22
|
+
finally:
|
|
23
|
+
if did_open:
|
|
24
|
+
path_or_file.close()
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@deprecated("Use 'fontTools.misc.plistlib.dump' instead")
|
|
28
|
+
def writePlist(value, path_or_file):
|
|
29
|
+
did_open = False
|
|
30
|
+
if isinstance(path_or_file, str):
|
|
31
|
+
path_or_file = open(path_or_file, "wb")
|
|
32
|
+
did_open = True
|
|
33
|
+
try:
|
|
34
|
+
dump(value, path_or_file, use_builtin_types=False)
|
|
35
|
+
finally:
|
|
36
|
+
if did_open:
|
|
37
|
+
path_or_file.close()
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@deprecated("Use 'fontTools.misc.plistlib.loads' instead")
|
|
41
|
+
def readPlistFromString(data):
|
|
42
|
+
return loads(tobytes(data, encoding="utf-8"), use_builtin_types=False)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@deprecated("Use 'fontTools.misc.plistlib.dumps' instead")
|
|
46
|
+
def writePlistToString(value):
|
|
47
|
+
return dumps(value, use_builtin_types=False)
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""This module contains miscellaneous helpers.
|
|
2
|
+
|
|
3
|
+
It is not considered part of the public ufoLib API. It does, however,
|
|
4
|
+
define the :py:obj:`.deprecated` decorator that is used elsewhere in
|
|
5
|
+
the module.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import warnings
|
|
9
|
+
import functools
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
numberTypes = (int, float)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def deprecated(msg=""):
|
|
16
|
+
"""Decorator factory to mark functions as deprecated with given message.
|
|
17
|
+
|
|
18
|
+
>>> @deprecated("Enough!")
|
|
19
|
+
... def some_function():
|
|
20
|
+
... "I just print 'hello world'."
|
|
21
|
+
... print("hello world")
|
|
22
|
+
>>> some_function()
|
|
23
|
+
hello world
|
|
24
|
+
>>> some_function.__doc__ == "I just print 'hello world'."
|
|
25
|
+
True
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
def deprecated_decorator(func):
|
|
29
|
+
@functools.wraps(func)
|
|
30
|
+
def wrapper(*args, **kwargs):
|
|
31
|
+
warnings.warn(
|
|
32
|
+
f"{func.__name__} function is a deprecated. {msg}",
|
|
33
|
+
category=DeprecationWarning,
|
|
34
|
+
stacklevel=2,
|
|
35
|
+
)
|
|
36
|
+
return func(*args, **kwargs)
|
|
37
|
+
|
|
38
|
+
return wrapper
|
|
39
|
+
|
|
40
|
+
return deprecated_decorator
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
# To be mixed with enum.Enum in UFOFormatVersion and GLIFFormatVersion
|
|
44
|
+
class _VersionTupleEnumMixin:
|
|
45
|
+
@property
|
|
46
|
+
def major(self):
|
|
47
|
+
return self.value[0]
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
def minor(self):
|
|
51
|
+
return self.value[1]
|
|
52
|
+
|
|
53
|
+
@classmethod
|
|
54
|
+
def _missing_(cls, value):
|
|
55
|
+
# allow to initialize a version enum from a single (major) integer
|
|
56
|
+
if isinstance(value, int):
|
|
57
|
+
return cls((value, 0))
|
|
58
|
+
# or from None to obtain the current default version
|
|
59
|
+
if value is None:
|
|
60
|
+
return cls.default()
|
|
61
|
+
return super()._missing_(value)
|
|
62
|
+
|
|
63
|
+
def __str__(self):
|
|
64
|
+
return f"{self.major}.{self.minor}"
|
|
65
|
+
|
|
66
|
+
@classmethod
|
|
67
|
+
def default(cls):
|
|
68
|
+
# get the latest defined version (i.e. the max of all versions)
|
|
69
|
+
return max(cls.__members__.values())
|
|
70
|
+
|
|
71
|
+
@classmethod
|
|
72
|
+
def supported_versions(cls):
|
|
73
|
+
return frozenset(cls.__members__.values())
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
if __name__ == "__main__":
|
|
77
|
+
import doctest
|
|
78
|
+
|
|
79
|
+
doctest.testmod()
|