Merge pull request #3024 from fonttools/no-overwrite-stat
[varLib] Don't overwrite pre-existing STAT
This commit is contained in:
commit
1a202ab1be
@ -45,6 +45,7 @@ import os.path
|
|||||||
import logging
|
import logging
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from pprint import pformat
|
from pprint import pformat
|
||||||
|
from re import fullmatch
|
||||||
from .errors import VarLibError, VarLibValidationError
|
from .errors import VarLibError, VarLibValidationError
|
||||||
|
|
||||||
log = logging.getLogger("fontTools.varLib")
|
log = logging.getLogger("fontTools.varLib")
|
||||||
@ -995,11 +996,11 @@ def build_many(
|
|||||||
vf = build(
|
vf = build(
|
||||||
vfDoc,
|
vfDoc,
|
||||||
master_finder,
|
master_finder,
|
||||||
exclude=list(exclude) + ["STAT"],
|
exclude=exclude,
|
||||||
optimize=optimize,
|
optimize=optimize,
|
||||||
colr_layer_reuse=colr_layer_reuse,
|
colr_layer_reuse=colr_layer_reuse,
|
||||||
)[0]
|
)[0]
|
||||||
if "STAT" not in exclude:
|
if "STAT" not in vf and "STAT" not in exclude:
|
||||||
buildVFStatTable(vf, designspace, name)
|
buildVFStatTable(vf, designspace, name)
|
||||||
res[name] = vf
|
res[name] = vf
|
||||||
return res
|
return res
|
||||||
@ -1174,15 +1175,23 @@ class MasterFinder(object):
|
|||||||
|
|
||||||
|
|
||||||
def main(args=None):
|
def main(args=None):
|
||||||
"""Build a variable font from a designspace file and masters"""
|
"""Build variable fonts from a designspace file and masters"""
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
from fontTools import configLogger
|
from fontTools import configLogger
|
||||||
|
|
||||||
parser = ArgumentParser(prog="varLib", description=main.__doc__)
|
parser = ArgumentParser(prog="varLib", description=main.__doc__)
|
||||||
parser.add_argument("designspace")
|
parser.add_argument("designspace")
|
||||||
parser.add_argument(
|
output_group = parser.add_mutually_exclusive_group()
|
||||||
|
output_group.add_argument(
|
||||||
"-o", metavar="OUTPUTFILE", dest="outfile", default=None, help="output file"
|
"-o", metavar="OUTPUTFILE", dest="outfile", default=None, help="output file"
|
||||||
)
|
)
|
||||||
|
output_group.add_argument(
|
||||||
|
"-d",
|
||||||
|
"--output-dir",
|
||||||
|
metavar="OUTPUTDIR",
|
||||||
|
default=None,
|
||||||
|
help="output dir (default: same as input designspace file)",
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"-x",
|
"-x",
|
||||||
metavar="TAG",
|
metavar="TAG",
|
||||||
@ -1218,6 +1227,19 @@ def main(args=None):
|
|||||||
'name. The default value is "%(default)s".'
|
'name. The default value is "%(default)s".'
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--variable-fonts",
|
||||||
|
default=".*",
|
||||||
|
metavar="VF_NAME",
|
||||||
|
help=(
|
||||||
|
"Filter the list of variable fonts produced from the input "
|
||||||
|
"Designspace v5 file. By default all listed variable fonts are "
|
||||||
|
"generated. To generate a specific variable font (or variable fonts) "
|
||||||
|
'that match a given "name" attribute, you can pass as argument '
|
||||||
|
"the full name or a regular expression. E.g.: --variable-fonts "
|
||||||
|
'"MyFontVF_WeightOnly"; or --variable-fonts "MyFontVFItalic_.*".'
|
||||||
|
),
|
||||||
|
)
|
||||||
logging_group = parser.add_mutually_exclusive_group(required=False)
|
logging_group = parser.add_mutually_exclusive_group(required=False)
|
||||||
logging_group.add_argument(
|
logging_group.add_argument(
|
||||||
"-v", "--verbose", action="store_true", help="Run more verbosely."
|
"-v", "--verbose", action="store_true", help="Run more verbosely."
|
||||||
@ -1232,23 +1254,58 @@ def main(args=None):
|
|||||||
)
|
)
|
||||||
|
|
||||||
designspace_filename = options.designspace
|
designspace_filename = options.designspace
|
||||||
|
designspace = DesignSpaceDocument.fromfile(designspace_filename)
|
||||||
|
|
||||||
|
vf_descriptors = designspace.getVariableFonts()
|
||||||
|
if not vf_descriptors:
|
||||||
|
parser.error(f"No variable fonts in given designspace {designspace.path!r}")
|
||||||
|
|
||||||
|
vfs_to_build = []
|
||||||
|
for vf in vf_descriptors:
|
||||||
|
# Skip variable fonts that do not match the user's inclusion regex if given.
|
||||||
|
if not fullmatch(options.variable_fonts, vf.name):
|
||||||
|
continue
|
||||||
|
vfs_to_build.append(vf)
|
||||||
|
|
||||||
|
if not vfs_to_build:
|
||||||
|
parser.error(f"No variable fonts matching {options.variable_fonts!r}")
|
||||||
|
|
||||||
|
if options.outfile is not None and len(vfs_to_build) > 1:
|
||||||
|
parser.error(
|
||||||
|
"can't specify -o because there are multiple VFs to build; "
|
||||||
|
"use --output-dir, or select a single VF with --variable-fonts"
|
||||||
|
)
|
||||||
|
|
||||||
|
output_dir = options.output_dir
|
||||||
|
if output_dir is None:
|
||||||
|
output_dir = os.path.dirname(designspace_filename)
|
||||||
|
|
||||||
|
vf_name_to_output_path = {}
|
||||||
|
if len(vfs_to_build) == 1 and options.outfile is not None:
|
||||||
|
vf_name_to_output_path[vfs_to_build[0].name] = options.outfile
|
||||||
|
else:
|
||||||
|
for vf in vfs_to_build:
|
||||||
|
filename = vf.filename if vf.filename is not None else vf.name + ".{ext}"
|
||||||
|
vf_name_to_output_path[vf.name] = os.path.join(output_dir, filename)
|
||||||
|
|
||||||
finder = MasterFinder(options.master_finder)
|
finder = MasterFinder(options.master_finder)
|
||||||
|
|
||||||
vf, _, _ = build(
|
vfs = build_many(
|
||||||
designspace_filename,
|
designspace,
|
||||||
finder,
|
finder,
|
||||||
exclude=options.exclude,
|
exclude=options.exclude,
|
||||||
optimize=options.optimize,
|
optimize=options.optimize,
|
||||||
colr_layer_reuse=options.colr_layer_reuse,
|
colr_layer_reuse=options.colr_layer_reuse,
|
||||||
)
|
)
|
||||||
|
|
||||||
outfile = options.outfile
|
for vf_name, vf in vfs.items():
|
||||||
if outfile is None:
|
|
||||||
ext = "otf" if vf.sfntVersion == "OTTO" else "ttf"
|
ext = "otf" if vf.sfntVersion == "OTTO" else "ttf"
|
||||||
outfile = os.path.splitext(designspace_filename)[0] + "-VF." + ext
|
output_path = vf_name_to_output_path[vf_name].format(ext=ext)
|
||||||
|
output_dir = os.path.dirname(output_path)
|
||||||
log.info("Saving variation font %s", outfile)
|
if output_dir:
|
||||||
vf.save(outfile)
|
os.makedirs(output_dir, exist_ok=True)
|
||||||
|
log.info("Saving variation font %s", output_path)
|
||||||
|
vf.save(output_path)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
36
Tests/varLib/data/TestNoOverwriteSTAT.designspace
Normal file
36
Tests/varLib/data/TestNoOverwriteSTAT.designspace
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
<designspace format="5.0">
|
||||||
|
<axes>
|
||||||
|
<axis tag="wght" name="Weight" minimum="100" maximum="900" default="100">
|
||||||
|
<map input="100" output="30"/>
|
||||||
|
<map input="900" output="240"/>
|
||||||
|
</axis>
|
||||||
|
<axis tag="wdth" name="Width" minimum="80" maximum="115" default="80"/>
|
||||||
|
</axes>
|
||||||
|
<sources>
|
||||||
|
<source filename="master_no_overwrite_stat/Test-CondensedThin.ttx" name="Test Condensed Thin">
|
||||||
|
<location>
|
||||||
|
<dimension name="Weight" xvalue="30"/>
|
||||||
|
<dimension name="Width" xvalue="80"/>
|
||||||
|
</location>
|
||||||
|
</source>
|
||||||
|
<source filename="master_no_overwrite_stat/Test-CondensedBlack.ttx" name="Test Condensed Black">
|
||||||
|
<location>
|
||||||
|
<dimension name="Weight" xvalue="240"/>
|
||||||
|
<dimension name="Width" xvalue="80"/>
|
||||||
|
</location>
|
||||||
|
</source>
|
||||||
|
<source filename="master_no_overwrite_stat/Test-ExtendedThin.ttx" name="Test Extended Thin">
|
||||||
|
<location>
|
||||||
|
<dimension name="Weight" xvalue="30"/>
|
||||||
|
<dimension name="Width" xvalue="115"/>
|
||||||
|
</location>
|
||||||
|
</source>
|
||||||
|
<source filename="master_no_overwrite_stat/Test-ExtendedBlack.ttx" name="Test Extended Black">
|
||||||
|
<location>
|
||||||
|
<dimension name="Weight" xvalue="240"/>
|
||||||
|
<dimension name="Width" xvalue="115"/>
|
||||||
|
</location>
|
||||||
|
</source>
|
||||||
|
</sources>
|
||||||
|
</designspace>
|
@ -0,0 +1,243 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="4.39">
|
||||||
|
|
||||||
|
<GlyphOrder>
|
||||||
|
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
|
||||||
|
<GlyphID id="0" name=".notdef"/>
|
||||||
|
<GlyphID id="1" name="A"/>
|
||||||
|
</GlyphOrder>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<!-- Most of this table will be recalculated by the compiler -->
|
||||||
|
<tableVersion value="1.0"/>
|
||||||
|
<fontRevision value="3.013"/>
|
||||||
|
<checkSumAdjustment value="0x37268237"/>
|
||||||
|
<magicNumber value="0x5f0f3cf5"/>
|
||||||
|
<flags value="00000000 00000011"/>
|
||||||
|
<unitsPerEm value="1000"/>
|
||||||
|
<created value="Fri Feb 17 14:29:44 2023"/>
|
||||||
|
<modified value="Tue Mar 7 12:56:58 2023"/>
|
||||||
|
<xMin value="-2"/>
|
||||||
|
<yMin value="-250"/>
|
||||||
|
<xMax value="583"/>
|
||||||
|
<yMax value="750"/>
|
||||||
|
<macStyle value="00000000 00000000"/>
|
||||||
|
<lowestRecPPEM value="6"/>
|
||||||
|
<fontDirectionHint value="2"/>
|
||||||
|
<indexToLocFormat value="0"/>
|
||||||
|
<glyphDataFormat value="0"/>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<hhea>
|
||||||
|
<tableVersion value="0x00010000"/>
|
||||||
|
<ascent value="1000"/>
|
||||||
|
<descent value="-300"/>
|
||||||
|
<lineGap value="0"/>
|
||||||
|
<advanceWidthMax value="582"/>
|
||||||
|
<minLeftSideBearing value="-2"/>
|
||||||
|
<minRightSideBearing value="-1"/>
|
||||||
|
<xMaxExtent value="583"/>
|
||||||
|
<caretSlopeRise value="1"/>
|
||||||
|
<caretSlopeRun value="0"/>
|
||||||
|
<caretOffset value="0"/>
|
||||||
|
<reserved0 value="0"/>
|
||||||
|
<reserved1 value="0"/>
|
||||||
|
<reserved2 value="0"/>
|
||||||
|
<reserved3 value="0"/>
|
||||||
|
<metricDataFormat value="0"/>
|
||||||
|
<numberOfHMetrics value="2"/>
|
||||||
|
</hhea>
|
||||||
|
|
||||||
|
<maxp>
|
||||||
|
<!-- Most of this table will be recalculated by the compiler -->
|
||||||
|
<tableVersion value="0x10000"/>
|
||||||
|
<numGlyphs value="2"/>
|
||||||
|
<maxPoints value="19"/>
|
||||||
|
<maxContours value="2"/>
|
||||||
|
<maxCompositePoints value="0"/>
|
||||||
|
<maxCompositeContours value="0"/>
|
||||||
|
<maxZones value="1"/>
|
||||||
|
<maxTwilightPoints value="0"/>
|
||||||
|
<maxStorage value="0"/>
|
||||||
|
<maxFunctionDefs value="0"/>
|
||||||
|
<maxInstructionDefs value="0"/>
|
||||||
|
<maxStackElements value="0"/>
|
||||||
|
<maxSizeOfInstructions value="0"/>
|
||||||
|
<maxComponentElements value="0"/>
|
||||||
|
<maxComponentDepth value="0"/>
|
||||||
|
</maxp>
|
||||||
|
|
||||||
|
<OS_2>
|
||||||
|
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
|
||||||
|
will be recalculated by the compiler -->
|
||||||
|
<version value="4"/>
|
||||||
|
<xAvgCharWidth value="541"/>
|
||||||
|
<usWeightClass value="900"/>
|
||||||
|
<usWidthClass value="3"/>
|
||||||
|
<fsType value="00000000 00001000"/>
|
||||||
|
<ySubscriptXSize value="650"/>
|
||||||
|
<ySubscriptYSize value="600"/>
|
||||||
|
<ySubscriptXOffset value="0"/>
|
||||||
|
<ySubscriptYOffset value="75"/>
|
||||||
|
<ySuperscriptXSize value="650"/>
|
||||||
|
<ySuperscriptYSize value="600"/>
|
||||||
|
<ySuperscriptXOffset value="0"/>
|
||||||
|
<ySuperscriptYOffset value="350"/>
|
||||||
|
<yStrikeoutSize value="80"/>
|
||||||
|
<yStrikeoutPosition value="303"/>
|
||||||
|
<sFamilyClass value="0"/>
|
||||||
|
<panose>
|
||||||
|
<bFamilyType value="0"/>
|
||||||
|
<bSerifStyle value="0"/>
|
||||||
|
<bWeight value="0"/>
|
||||||
|
<bProportion value="0"/>
|
||||||
|
<bContrast value="0"/>
|
||||||
|
<bStrokeVariation value="0"/>
|
||||||
|
<bArmStyle value="0"/>
|
||||||
|
<bLetterForm value="0"/>
|
||||||
|
<bMidline value="0"/>
|
||||||
|
<bXHeight value="0"/>
|
||||||
|
</panose>
|
||||||
|
<ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
|
||||||
|
<ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
|
||||||
|
<ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
|
||||||
|
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
|
||||||
|
<achVendID value="NONE"/>
|
||||||
|
<fsSelection value="00000000 01000000"/>
|
||||||
|
<usFirstCharIndex value="65"/>
|
||||||
|
<usLastCharIndex value="65"/>
|
||||||
|
<sTypoAscender value="750"/>
|
||||||
|
<sTypoDescender value="-250"/>
|
||||||
|
<sTypoLineGap value="250"/>
|
||||||
|
<usWinAscent value="1000"/>
|
||||||
|
<usWinDescent value="300"/>
|
||||||
|
<ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
|
||||||
|
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
|
||||||
|
<sxHeight value="505"/>
|
||||||
|
<sCapHeight value="670"/>
|
||||||
|
<usDefaultChar value="0"/>
|
||||||
|
<usBreakChar value="32"/>
|
||||||
|
<usMaxContext value="0"/>
|
||||||
|
</OS_2>
|
||||||
|
|
||||||
|
<hmtx>
|
||||||
|
<mtx name=".notdef" width="500" lsb="50"/>
|
||||||
|
<mtx name="A" width="582" lsb="-2"/>
|
||||||
|
</hmtx>
|
||||||
|
|
||||||
|
<cmap>
|
||||||
|
<tableVersion version="0"/>
|
||||||
|
<cmap_format_4 platformID="0" platEncID="3" language="0">
|
||||||
|
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||||
|
</cmap_format_4>
|
||||||
|
<cmap_format_4 platformID="3" platEncID="1" language="0">
|
||||||
|
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||||
|
</cmap_format_4>
|
||||||
|
</cmap>
|
||||||
|
|
||||||
|
<loca>
|
||||||
|
<!-- The 'loca' table will be calculated by the compiler -->
|
||||||
|
</loca>
|
||||||
|
|
||||||
|
<glyf>
|
||||||
|
|
||||||
|
<!-- The xMin, yMin, xMax and yMax values
|
||||||
|
will be recalculated by the compiler. -->
|
||||||
|
|
||||||
|
<TTGlyph name=".notdef" xMin="50" yMin="-250" xMax="450" yMax="750">
|
||||||
|
<contour>
|
||||||
|
<pt x="50" y="-250" on="1"/>
|
||||||
|
<pt x="50" y="750" on="1"/>
|
||||||
|
<pt x="450" y="750" on="1"/>
|
||||||
|
<pt x="450" y="-250" on="1"/>
|
||||||
|
</contour>
|
||||||
|
<contour>
|
||||||
|
<pt x="100" y="-200" on="1"/>
|
||||||
|
<pt x="400" y="-200" on="1"/>
|
||||||
|
<pt x="400" y="700" on="1"/>
|
||||||
|
<pt x="100" y="700" on="1"/>
|
||||||
|
</contour>
|
||||||
|
<instructions/>
|
||||||
|
</TTGlyph>
|
||||||
|
|
||||||
|
<TTGlyph name="A" xMin="-2" yMin="0" xMax="583" yMax="672">
|
||||||
|
<contour>
|
||||||
|
<pt x="410" y="672" on="1"/>
|
||||||
|
<pt x="570" y="81" on="1"/>
|
||||||
|
<pt x="576" y="58" on="0"/>
|
||||||
|
<pt x="583" y="19" on="0"/>
|
||||||
|
<pt x="583" y="0" on="1"/>
|
||||||
|
<pt x="384" y="0" on="1"/>
|
||||||
|
<pt x="315" y="355" on="1"/>
|
||||||
|
<pt x="297" y="480" on="1"/>
|
||||||
|
<pt x="292" y="480" on="1"/>
|
||||||
|
<pt x="195" y="0" on="1"/>
|
||||||
|
<pt x="-2" y="0" on="1"/>
|
||||||
|
<pt x="-2" y="15" on="0"/>
|
||||||
|
<pt x="2" y="55" on="0"/>
|
||||||
|
<pt x="9" y="79" on="1"/>
|
||||||
|
<pt x="176" y="668" on="1"/>
|
||||||
|
</contour>
|
||||||
|
<contour>
|
||||||
|
<pt x="422" y="257" on="1"/>
|
||||||
|
<pt x="422" y="107" on="1"/>
|
||||||
|
<pt x="137" y="107" on="1"/>
|
||||||
|
<pt x="137" y="257" on="1"/>
|
||||||
|
</contour>
|
||||||
|
<instructions/>
|
||||||
|
</TTGlyph>
|
||||||
|
|
||||||
|
</glyf>
|
||||||
|
|
||||||
|
<name>
|
||||||
|
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Test Condensed Black
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Regular
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
3.013;NONE;Test-CondensedBlack
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Test Condensed Black
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Version 3.013
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Test-CondensedBlack
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="16" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Test
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="17" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Condensed Black
|
||||||
|
</namerecord>
|
||||||
|
</name>
|
||||||
|
|
||||||
|
<post>
|
||||||
|
<formatType value="2.0"/>
|
||||||
|
<italicAngle value="0.0"/>
|
||||||
|
<underlinePosition value="-130"/>
|
||||||
|
<underlineThickness value="80"/>
|
||||||
|
<isFixedPitch value="0"/>
|
||||||
|
<minMemType42 value="0"/>
|
||||||
|
<maxMemType42 value="0"/>
|
||||||
|
<minMemType1 value="0"/>
|
||||||
|
<maxMemType1 value="0"/>
|
||||||
|
<psNames>
|
||||||
|
<!-- This file uses unique glyph names based on the information
|
||||||
|
found in the 'post' table. Since these names might not be unique,
|
||||||
|
we have to invent artificial names in case of clashes. In order to
|
||||||
|
be able to retain the original information, we need a name to
|
||||||
|
ps name mapping for those cases where they differ. That's what
|
||||||
|
you see below.
|
||||||
|
-->
|
||||||
|
</psNames>
|
||||||
|
<extraNames>
|
||||||
|
<!-- following are the name that are not taken from the standard Mac glyph order -->
|
||||||
|
</extraNames>
|
||||||
|
</post>
|
||||||
|
|
||||||
|
</ttFont>
|
@ -0,0 +1,373 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="4.39">
|
||||||
|
|
||||||
|
<GlyphOrder>
|
||||||
|
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
|
||||||
|
<GlyphID id="0" name=".notdef"/>
|
||||||
|
<GlyphID id="1" name="A"/>
|
||||||
|
</GlyphOrder>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<!-- Most of this table will be recalculated by the compiler -->
|
||||||
|
<tableVersion value="1.0"/>
|
||||||
|
<fontRevision value="3.013"/>
|
||||||
|
<checkSumAdjustment value="0x176a479f"/>
|
||||||
|
<magicNumber value="0x5f0f3cf5"/>
|
||||||
|
<flags value="00000000 00000011"/>
|
||||||
|
<unitsPerEm value="1000"/>
|
||||||
|
<created value="Fri Feb 17 14:29:44 2023"/>
|
||||||
|
<modified value="Tue Mar 7 12:56:58 2023"/>
|
||||||
|
<xMin value="28"/>
|
||||||
|
<yMin value="-250"/>
|
||||||
|
<xMax value="450"/>
|
||||||
|
<yMax value="750"/>
|
||||||
|
<macStyle value="00000000 00000000"/>
|
||||||
|
<lowestRecPPEM value="6"/>
|
||||||
|
<fontDirectionHint value="2"/>
|
||||||
|
<indexToLocFormat value="0"/>
|
||||||
|
<glyphDataFormat value="0"/>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<hhea>
|
||||||
|
<tableVersion value="0x00010000"/>
|
||||||
|
<ascent value="1000"/>
|
||||||
|
<descent value="-300"/>
|
||||||
|
<lineGap value="0"/>
|
||||||
|
<advanceWidthMax value="500"/>
|
||||||
|
<minLeftSideBearing value="28"/>
|
||||||
|
<minRightSideBearing value="31"/>
|
||||||
|
<xMaxExtent value="450"/>
|
||||||
|
<caretSlopeRise value="1"/>
|
||||||
|
<caretSlopeRun value="0"/>
|
||||||
|
<caretOffset value="0"/>
|
||||||
|
<reserved0 value="0"/>
|
||||||
|
<reserved1 value="0"/>
|
||||||
|
<reserved2 value="0"/>
|
||||||
|
<reserved3 value="0"/>
|
||||||
|
<metricDataFormat value="0"/>
|
||||||
|
<numberOfHMetrics value="2"/>
|
||||||
|
</hhea>
|
||||||
|
|
||||||
|
<maxp>
|
||||||
|
<!-- Most of this table will be recalculated by the compiler -->
|
||||||
|
<tableVersion value="0x10000"/>
|
||||||
|
<numGlyphs value="2"/>
|
||||||
|
<maxPoints value="19"/>
|
||||||
|
<maxContours value="2"/>
|
||||||
|
<maxCompositePoints value="0"/>
|
||||||
|
<maxCompositeContours value="0"/>
|
||||||
|
<maxZones value="1"/>
|
||||||
|
<maxTwilightPoints value="0"/>
|
||||||
|
<maxStorage value="0"/>
|
||||||
|
<maxFunctionDefs value="0"/>
|
||||||
|
<maxInstructionDefs value="0"/>
|
||||||
|
<maxStackElements value="0"/>
|
||||||
|
<maxSizeOfInstructions value="0"/>
|
||||||
|
<maxComponentElements value="0"/>
|
||||||
|
<maxComponentDepth value="0"/>
|
||||||
|
</maxp>
|
||||||
|
|
||||||
|
<OS_2>
|
||||||
|
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
|
||||||
|
will be recalculated by the compiler -->
|
||||||
|
<version value="4"/>
|
||||||
|
<xAvgCharWidth value="482"/>
|
||||||
|
<usWeightClass value="100"/>
|
||||||
|
<usWidthClass value="3"/>
|
||||||
|
<fsType value="00000000 00001000"/>
|
||||||
|
<ySubscriptXSize value="650"/>
|
||||||
|
<ySubscriptYSize value="600"/>
|
||||||
|
<ySubscriptXOffset value="0"/>
|
||||||
|
<ySubscriptYOffset value="75"/>
|
||||||
|
<ySuperscriptXSize value="650"/>
|
||||||
|
<ySuperscriptYSize value="600"/>
|
||||||
|
<ySuperscriptXOffset value="0"/>
|
||||||
|
<ySuperscriptYOffset value="350"/>
|
||||||
|
<yStrikeoutSize value="25"/>
|
||||||
|
<yStrikeoutPosition value="274"/>
|
||||||
|
<sFamilyClass value="0"/>
|
||||||
|
<panose>
|
||||||
|
<bFamilyType value="0"/>
|
||||||
|
<bSerifStyle value="0"/>
|
||||||
|
<bWeight value="0"/>
|
||||||
|
<bProportion value="0"/>
|
||||||
|
<bContrast value="0"/>
|
||||||
|
<bStrokeVariation value="0"/>
|
||||||
|
<bArmStyle value="0"/>
|
||||||
|
<bLetterForm value="0"/>
|
||||||
|
<bMidline value="0"/>
|
||||||
|
<bXHeight value="0"/>
|
||||||
|
</panose>
|
||||||
|
<ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
|
||||||
|
<ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
|
||||||
|
<ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
|
||||||
|
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
|
||||||
|
<achVendID value="NONE"/>
|
||||||
|
<fsSelection value="00000000 01000000"/>
|
||||||
|
<usFirstCharIndex value="65"/>
|
||||||
|
<usLastCharIndex value="65"/>
|
||||||
|
<sTypoAscender value="750"/>
|
||||||
|
<sTypoDescender value="-250"/>
|
||||||
|
<sTypoLineGap value="250"/>
|
||||||
|
<usWinAscent value="1000"/>
|
||||||
|
<usWinDescent value="300"/>
|
||||||
|
<ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
|
||||||
|
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
|
||||||
|
<sxHeight value="456"/>
|
||||||
|
<sCapHeight value="670"/>
|
||||||
|
<usDefaultChar value="0"/>
|
||||||
|
<usBreakChar value="32"/>
|
||||||
|
<usMaxContext value="0"/>
|
||||||
|
</OS_2>
|
||||||
|
|
||||||
|
<hmtx>
|
||||||
|
<mtx name=".notdef" width="500" lsb="50"/>
|
||||||
|
<mtx name="A" width="464" lsb="28"/>
|
||||||
|
</hmtx>
|
||||||
|
|
||||||
|
<cmap>
|
||||||
|
<tableVersion version="0"/>
|
||||||
|
<cmap_format_4 platformID="0" platEncID="3" language="0">
|
||||||
|
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||||
|
</cmap_format_4>
|
||||||
|
<cmap_format_4 platformID="3" platEncID="1" language="0">
|
||||||
|
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||||
|
</cmap_format_4>
|
||||||
|
</cmap>
|
||||||
|
|
||||||
|
<loca>
|
||||||
|
<!-- The 'loca' table will be calculated by the compiler -->
|
||||||
|
</loca>
|
||||||
|
|
||||||
|
<glyf>
|
||||||
|
|
||||||
|
<!-- The xMin, yMin, xMax and yMax values
|
||||||
|
will be recalculated by the compiler. -->
|
||||||
|
|
||||||
|
<TTGlyph name=".notdef" xMin="50" yMin="-250" xMax="450" yMax="750">
|
||||||
|
<contour>
|
||||||
|
<pt x="50" y="-250" on="1"/>
|
||||||
|
<pt x="50" y="750" on="1"/>
|
||||||
|
<pt x="450" y="750" on="1"/>
|
||||||
|
<pt x="450" y="-250" on="1"/>
|
||||||
|
</contour>
|
||||||
|
<contour>
|
||||||
|
<pt x="100" y="-200" on="1"/>
|
||||||
|
<pt x="400" y="-200" on="1"/>
|
||||||
|
<pt x="400" y="700" on="1"/>
|
||||||
|
<pt x="100" y="700" on="1"/>
|
||||||
|
</contour>
|
||||||
|
<instructions/>
|
||||||
|
</TTGlyph>
|
||||||
|
|
||||||
|
<TTGlyph name="A" xMin="28" yMin="0" xMax="433" yMax="672">
|
||||||
|
<contour>
|
||||||
|
<pt x="247" y="672" on="1"/>
|
||||||
|
<pt x="408" y="90" on="1"/>
|
||||||
|
<pt x="414" y="68" on="0"/>
|
||||||
|
<pt x="427" y="23" on="0"/>
|
||||||
|
<pt x="433" y="0" on="1"/>
|
||||||
|
<pt x="399" y="0" on="1"/>
|
||||||
|
<pt x="266" y="482" on="1"/>
|
||||||
|
<pt x="235" y="613" on="1"/>
|
||||||
|
<pt x="233" y="613" on="1"/>
|
||||||
|
<pt x="62" y="0" on="1"/>
|
||||||
|
<pt x="28" y="0" on="1"/>
|
||||||
|
<pt x="35" y="23" on="0"/>
|
||||||
|
<pt x="47" y="68" on="0"/>
|
||||||
|
<pt x="54" y="90" on="1"/>
|
||||||
|
<pt x="218" y="668" on="1"/>
|
||||||
|
</contour>
|
||||||
|
<contour>
|
||||||
|
<pt x="354" y="244" on="1"/>
|
||||||
|
<pt x="354" y="217" on="1"/>
|
||||||
|
<pt x="109" y="217" on="1"/>
|
||||||
|
<pt x="109" y="244" on="1"/>
|
||||||
|
</contour>
|
||||||
|
<instructions/>
|
||||||
|
</TTGlyph>
|
||||||
|
|
||||||
|
</glyf>
|
||||||
|
|
||||||
|
<name>
|
||||||
|
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Test Condensed Thin
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Regular
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
3.013;NONE;Test-CondensedThin
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Test Condensed Thin
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Version 3.013
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Test-CondensedThin
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="16" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Test
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="17" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Condensed Thin
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="256" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Standard
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="257" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Heaviness
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="258" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Extralight
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="259" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Thin
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="260" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Light
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="261" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Regular
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="262" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Medium
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="263" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Semibold
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="264" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Bold
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="265" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Wideness
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="266" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Compressed
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="267" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Condensed
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="268" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Normal
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="269" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Extended
|
||||||
|
</namerecord>
|
||||||
|
</name>
|
||||||
|
|
||||||
|
<post>
|
||||||
|
<formatType value="2.0"/>
|
||||||
|
<italicAngle value="0.0"/>
|
||||||
|
<underlinePosition value="-130"/>
|
||||||
|
<underlineThickness value="25"/>
|
||||||
|
<isFixedPitch value="0"/>
|
||||||
|
<minMemType42 value="0"/>
|
||||||
|
<maxMemType42 value="0"/>
|
||||||
|
<minMemType1 value="0"/>
|
||||||
|
<maxMemType1 value="0"/>
|
||||||
|
<psNames>
|
||||||
|
<!-- This file uses unique glyph names based on the information
|
||||||
|
found in the 'post' table. Since these names might not be unique,
|
||||||
|
we have to invent artificial names in case of clashes. In order to
|
||||||
|
be able to retain the original information, we need a name to
|
||||||
|
ps name mapping for those cases where they differ. That's what
|
||||||
|
you see below.
|
||||||
|
-->
|
||||||
|
</psNames>
|
||||||
|
<extraNames>
|
||||||
|
<!-- following are the name that are not taken from the standard Mac glyph order -->
|
||||||
|
</extraNames>
|
||||||
|
</post>
|
||||||
|
|
||||||
|
<STAT>
|
||||||
|
<Version value="0x00010001"/>
|
||||||
|
<DesignAxisRecordSize value="8"/>
|
||||||
|
<!-- DesignAxisCount=2 -->
|
||||||
|
<DesignAxisRecord>
|
||||||
|
<Axis index="0">
|
||||||
|
<AxisTag value="wght"/>
|
||||||
|
<AxisNameID value="257"/> <!-- Heaviness -->
|
||||||
|
<AxisOrdering value="0"/>
|
||||||
|
</Axis>
|
||||||
|
<Axis index="1">
|
||||||
|
<AxisTag value="wdth"/>
|
||||||
|
<AxisNameID value="265"/> <!-- Wideness -->
|
||||||
|
<AxisOrdering value="1"/>
|
||||||
|
</Axis>
|
||||||
|
</DesignAxisRecord>
|
||||||
|
<!-- AxisValueCount=11 -->
|
||||||
|
<AxisValueArray>
|
||||||
|
<AxisValue index="0" Format="1">
|
||||||
|
<AxisIndex value="0"/>
|
||||||
|
<Flags value="0"/>
|
||||||
|
<ValueNameID value="258"/> <!-- Extralight -->
|
||||||
|
<Value value="100.0"/>
|
||||||
|
</AxisValue>
|
||||||
|
<AxisValue index="1" Format="1">
|
||||||
|
<AxisIndex value="0"/>
|
||||||
|
<Flags value="0"/>
|
||||||
|
<ValueNameID value="259"/> <!-- Thin -->
|
||||||
|
<Value value="200.0"/>
|
||||||
|
</AxisValue>
|
||||||
|
<AxisValue index="2" Format="1">
|
||||||
|
<AxisIndex value="0"/>
|
||||||
|
<Flags value="0"/>
|
||||||
|
<ValueNameID value="260"/> <!-- Light -->
|
||||||
|
<Value value="300.0"/>
|
||||||
|
</AxisValue>
|
||||||
|
<AxisValue index="3" Format="1">
|
||||||
|
<AxisIndex value="0"/>
|
||||||
|
<Flags value="2"/> <!-- ElidableAxisValueName -->
|
||||||
|
<ValueNameID value="261"/> <!-- Regular -->
|
||||||
|
<Value value="400.0"/>
|
||||||
|
</AxisValue>
|
||||||
|
<AxisValue index="4" Format="1">
|
||||||
|
<AxisIndex value="0"/>
|
||||||
|
<Flags value="0"/>
|
||||||
|
<ValueNameID value="262"/> <!-- Medium -->
|
||||||
|
<Value value="500.0"/>
|
||||||
|
</AxisValue>
|
||||||
|
<AxisValue index="5" Format="1">
|
||||||
|
<AxisIndex value="0"/>
|
||||||
|
<Flags value="0"/>
|
||||||
|
<ValueNameID value="263"/> <!-- Semibold -->
|
||||||
|
<Value value="600.0"/>
|
||||||
|
</AxisValue>
|
||||||
|
<AxisValue index="6" Format="1">
|
||||||
|
<AxisIndex value="0"/>
|
||||||
|
<Flags value="0"/>
|
||||||
|
<ValueNameID value="264"/> <!-- Bold -->
|
||||||
|
<Value value="700.0"/>
|
||||||
|
</AxisValue>
|
||||||
|
<AxisValue index="7" Format="1">
|
||||||
|
<AxisIndex value="1"/>
|
||||||
|
<Flags value="0"/>
|
||||||
|
<ValueNameID value="266"/> <!-- Compressed -->
|
||||||
|
<Value value="80.0"/>
|
||||||
|
</AxisValue>
|
||||||
|
<AxisValue index="8" Format="1">
|
||||||
|
<AxisIndex value="1"/>
|
||||||
|
<Flags value="0"/>
|
||||||
|
<ValueNameID value="267"/> <!-- Condensed -->
|
||||||
|
<Value value="90.0"/>
|
||||||
|
</AxisValue>
|
||||||
|
<AxisValue index="9" Format="1">
|
||||||
|
<AxisIndex value="1"/>
|
||||||
|
<Flags value="0"/>
|
||||||
|
<ValueNameID value="268"/> <!-- Normal -->
|
||||||
|
<Value value="100.0"/>
|
||||||
|
</AxisValue>
|
||||||
|
<AxisValue index="10" Format="1">
|
||||||
|
<AxisIndex value="1"/>
|
||||||
|
<Flags value="0"/>
|
||||||
|
<ValueNameID value="269"/> <!-- Extended -->
|
||||||
|
<Value value="115.0"/>
|
||||||
|
</AxisValue>
|
||||||
|
</AxisValueArray>
|
||||||
|
<ElidedFallbackNameID value="256"/> <!-- Standard -->
|
||||||
|
</STAT>
|
||||||
|
|
||||||
|
</ttFont>
|
@ -0,0 +1,243 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="4.39">
|
||||||
|
|
||||||
|
<GlyphOrder>
|
||||||
|
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
|
||||||
|
<GlyphID id="0" name=".notdef"/>
|
||||||
|
<GlyphID id="1" name="A"/>
|
||||||
|
</GlyphOrder>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<!-- Most of this table will be recalculated by the compiler -->
|
||||||
|
<tableVersion value="1.0"/>
|
||||||
|
<fontRevision value="3.013"/>
|
||||||
|
<checkSumAdjustment value="0xc2b89a77"/>
|
||||||
|
<magicNumber value="0x5f0f3cf5"/>
|
||||||
|
<flags value="00000000 00000011"/>
|
||||||
|
<unitsPerEm value="1000"/>
|
||||||
|
<created value="Fri Feb 17 14:29:44 2023"/>
|
||||||
|
<modified value="Tue Mar 7 12:56:58 2023"/>
|
||||||
|
<xMin value="-6"/>
|
||||||
|
<yMin value="-250"/>
|
||||||
|
<xMax value="759"/>
|
||||||
|
<yMax value="750"/>
|
||||||
|
<macStyle value="00000000 00000000"/>
|
||||||
|
<lowestRecPPEM value="6"/>
|
||||||
|
<fontDirectionHint value="2"/>
|
||||||
|
<indexToLocFormat value="0"/>
|
||||||
|
<glyphDataFormat value="0"/>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<hhea>
|
||||||
|
<tableVersion value="0x00010000"/>
|
||||||
|
<ascent value="1000"/>
|
||||||
|
<descent value="-300"/>
|
||||||
|
<lineGap value="0"/>
|
||||||
|
<advanceWidthMax value="762"/>
|
||||||
|
<minLeftSideBearing value="-6"/>
|
||||||
|
<minRightSideBearing value="3"/>
|
||||||
|
<xMaxExtent value="759"/>
|
||||||
|
<caretSlopeRise value="1"/>
|
||||||
|
<caretSlopeRun value="0"/>
|
||||||
|
<caretOffset value="0"/>
|
||||||
|
<reserved0 value="0"/>
|
||||||
|
<reserved1 value="0"/>
|
||||||
|
<reserved2 value="0"/>
|
||||||
|
<reserved3 value="0"/>
|
||||||
|
<metricDataFormat value="0"/>
|
||||||
|
<numberOfHMetrics value="2"/>
|
||||||
|
</hhea>
|
||||||
|
|
||||||
|
<maxp>
|
||||||
|
<!-- Most of this table will be recalculated by the compiler -->
|
||||||
|
<tableVersion value="0x10000"/>
|
||||||
|
<numGlyphs value="2"/>
|
||||||
|
<maxPoints value="19"/>
|
||||||
|
<maxContours value="2"/>
|
||||||
|
<maxCompositePoints value="0"/>
|
||||||
|
<maxCompositeContours value="0"/>
|
||||||
|
<maxZones value="1"/>
|
||||||
|
<maxTwilightPoints value="0"/>
|
||||||
|
<maxStorage value="0"/>
|
||||||
|
<maxFunctionDefs value="0"/>
|
||||||
|
<maxInstructionDefs value="0"/>
|
||||||
|
<maxStackElements value="0"/>
|
||||||
|
<maxSizeOfInstructions value="0"/>
|
||||||
|
<maxComponentElements value="0"/>
|
||||||
|
<maxComponentDepth value="0"/>
|
||||||
|
</maxp>
|
||||||
|
|
||||||
|
<OS_2>
|
||||||
|
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
|
||||||
|
will be recalculated by the compiler -->
|
||||||
|
<version value="4"/>
|
||||||
|
<xAvgCharWidth value="631"/>
|
||||||
|
<usWeightClass value="900"/>
|
||||||
|
<usWidthClass value="6"/>
|
||||||
|
<fsType value="00000000 00001000"/>
|
||||||
|
<ySubscriptXSize value="650"/>
|
||||||
|
<ySubscriptYSize value="600"/>
|
||||||
|
<ySubscriptXOffset value="0"/>
|
||||||
|
<ySubscriptYOffset value="75"/>
|
||||||
|
<ySuperscriptXSize value="650"/>
|
||||||
|
<ySuperscriptYSize value="600"/>
|
||||||
|
<ySuperscriptXOffset value="0"/>
|
||||||
|
<ySuperscriptYOffset value="350"/>
|
||||||
|
<yStrikeoutSize value="100"/>
|
||||||
|
<yStrikeoutPosition value="303"/>
|
||||||
|
<sFamilyClass value="0"/>
|
||||||
|
<panose>
|
||||||
|
<bFamilyType value="0"/>
|
||||||
|
<bSerifStyle value="0"/>
|
||||||
|
<bWeight value="0"/>
|
||||||
|
<bProportion value="0"/>
|
||||||
|
<bContrast value="0"/>
|
||||||
|
<bStrokeVariation value="0"/>
|
||||||
|
<bArmStyle value="0"/>
|
||||||
|
<bLetterForm value="0"/>
|
||||||
|
<bMidline value="0"/>
|
||||||
|
<bXHeight value="0"/>
|
||||||
|
</panose>
|
||||||
|
<ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
|
||||||
|
<ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
|
||||||
|
<ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
|
||||||
|
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
|
||||||
|
<achVendID value="NONE"/>
|
||||||
|
<fsSelection value="00000000 01000000"/>
|
||||||
|
<usFirstCharIndex value="65"/>
|
||||||
|
<usLastCharIndex value="65"/>
|
||||||
|
<sTypoAscender value="750"/>
|
||||||
|
<sTypoDescender value="-250"/>
|
||||||
|
<sTypoLineGap value="250"/>
|
||||||
|
<usWinAscent value="1000"/>
|
||||||
|
<usWinDescent value="300"/>
|
||||||
|
<ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
|
||||||
|
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
|
||||||
|
<sxHeight value="505"/>
|
||||||
|
<sCapHeight value="670"/>
|
||||||
|
<usDefaultChar value="0"/>
|
||||||
|
<usBreakChar value="32"/>
|
||||||
|
<usMaxContext value="0"/>
|
||||||
|
</OS_2>
|
||||||
|
|
||||||
|
<hmtx>
|
||||||
|
<mtx name=".notdef" width="500" lsb="50"/>
|
||||||
|
<mtx name="A" width="762" lsb="-6"/>
|
||||||
|
</hmtx>
|
||||||
|
|
||||||
|
<cmap>
|
||||||
|
<tableVersion version="0"/>
|
||||||
|
<cmap_format_4 platformID="0" platEncID="3" language="0">
|
||||||
|
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||||
|
</cmap_format_4>
|
||||||
|
<cmap_format_4 platformID="3" platEncID="1" language="0">
|
||||||
|
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||||
|
</cmap_format_4>
|
||||||
|
</cmap>
|
||||||
|
|
||||||
|
<loca>
|
||||||
|
<!-- The 'loca' table will be calculated by the compiler -->
|
||||||
|
</loca>
|
||||||
|
|
||||||
|
<glyf>
|
||||||
|
|
||||||
|
<!-- The xMin, yMin, xMax and yMax values
|
||||||
|
will be recalculated by the compiler. -->
|
||||||
|
|
||||||
|
<TTGlyph name=".notdef" xMin="50" yMin="-250" xMax="450" yMax="750">
|
||||||
|
<contour>
|
||||||
|
<pt x="50" y="-250" on="1"/>
|
||||||
|
<pt x="50" y="750" on="1"/>
|
||||||
|
<pt x="450" y="750" on="1"/>
|
||||||
|
<pt x="450" y="-250" on="1"/>
|
||||||
|
</contour>
|
||||||
|
<contour>
|
||||||
|
<pt x="100" y="-200" on="1"/>
|
||||||
|
<pt x="400" y="-200" on="1"/>
|
||||||
|
<pt x="400" y="700" on="1"/>
|
||||||
|
<pt x="100" y="700" on="1"/>
|
||||||
|
</contour>
|
||||||
|
<instructions/>
|
||||||
|
</TTGlyph>
|
||||||
|
|
||||||
|
<TTGlyph name="A" xMin="-6" yMin="0" xMax="759" yMax="672">
|
||||||
|
<contour>
|
||||||
|
<pt x="542" y="672" on="1"/>
|
||||||
|
<pt x="735" y="121" on="1"/>
|
||||||
|
<pt x="747" y="86" on="0"/>
|
||||||
|
<pt x="759" y="24" on="0"/>
|
||||||
|
<pt x="759" y="0" on="1"/>
|
||||||
|
<pt x="501" y="0" on="1"/>
|
||||||
|
<pt x="421" y="258" on="1"/>
|
||||||
|
<pt x="384" y="458" on="1"/>
|
||||||
|
<pt x="377" y="458" on="1"/>
|
||||||
|
<pt x="244" y="0" on="1"/>
|
||||||
|
<pt x="-6" y="0" on="1"/>
|
||||||
|
<pt x="-6" y="21" on="0"/>
|
||||||
|
<pt x="4" y="87" on="0"/>
|
||||||
|
<pt x="17" y="121" on="1"/>
|
||||||
|
<pt x="233" y="668" on="1"/>
|
||||||
|
</contour>
|
||||||
|
<contour>
|
||||||
|
<pt x="545" y="259" on="1"/>
|
||||||
|
<pt x="545" y="92" on="1"/>
|
||||||
|
<pt x="176" y="92" on="1"/>
|
||||||
|
<pt x="176" y="259" on="1"/>
|
||||||
|
</contour>
|
||||||
|
<instructions/>
|
||||||
|
</TTGlyph>
|
||||||
|
|
||||||
|
</glyf>
|
||||||
|
|
||||||
|
<name>
|
||||||
|
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Test Extended Black
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Regular
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
3.013;NONE;Test-ExtendedBlack
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Test Extended Black
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Version 3.013
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Test-ExtendedBlack
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="16" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Test
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="17" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Extended Black
|
||||||
|
</namerecord>
|
||||||
|
</name>
|
||||||
|
|
||||||
|
<post>
|
||||||
|
<formatType value="2.0"/>
|
||||||
|
<italicAngle value="0.0"/>
|
||||||
|
<underlinePosition value="-130"/>
|
||||||
|
<underlineThickness value="100"/>
|
||||||
|
<isFixedPitch value="0"/>
|
||||||
|
<minMemType42 value="0"/>
|
||||||
|
<maxMemType42 value="0"/>
|
||||||
|
<minMemType1 value="0"/>
|
||||||
|
<maxMemType1 value="0"/>
|
||||||
|
<psNames>
|
||||||
|
<!-- This file uses unique glyph names based on the information
|
||||||
|
found in the 'post' table. Since these names might not be unique,
|
||||||
|
we have to invent artificial names in case of clashes. In order to
|
||||||
|
be able to retain the original information, we need a name to
|
||||||
|
ps name mapping for those cases where they differ. That's what
|
||||||
|
you see below.
|
||||||
|
-->
|
||||||
|
</psNames>
|
||||||
|
<extraNames>
|
||||||
|
<!-- following are the name that are not taken from the standard Mac glyph order -->
|
||||||
|
</extraNames>
|
||||||
|
</post>
|
||||||
|
|
||||||
|
</ttFont>
|
243
Tests/varLib/data/master_no_overwrite_stat/Test-ExtendedThin.ttx
Normal file
243
Tests/varLib/data/master_no_overwrite_stat/Test-ExtendedThin.ttx
Normal file
@ -0,0 +1,243 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="4.39">
|
||||||
|
|
||||||
|
<GlyphOrder>
|
||||||
|
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
|
||||||
|
<GlyphID id="0" name=".notdef"/>
|
||||||
|
<GlyphID id="1" name="A"/>
|
||||||
|
</GlyphOrder>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<!-- Most of this table will be recalculated by the compiler -->
|
||||||
|
<tableVersion value="1.0"/>
|
||||||
|
<fontRevision value="3.013"/>
|
||||||
|
<checkSumAdjustment value="0x4af8381f"/>
|
||||||
|
<magicNumber value="0x5f0f3cf5"/>
|
||||||
|
<flags value="00000000 00000011"/>
|
||||||
|
<unitsPerEm value="1000"/>
|
||||||
|
<created value="Fri Feb 17 14:29:44 2023"/>
|
||||||
|
<modified value="Tue Mar 7 12:56:58 2023"/>
|
||||||
|
<xMin value="23"/>
|
||||||
|
<yMin value="-250"/>
|
||||||
|
<xMax value="605"/>
|
||||||
|
<yMax value="750"/>
|
||||||
|
<macStyle value="00000000 00000000"/>
|
||||||
|
<lowestRecPPEM value="6"/>
|
||||||
|
<fontDirectionHint value="2"/>
|
||||||
|
<indexToLocFormat value="0"/>
|
||||||
|
<glyphDataFormat value="0"/>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<hhea>
|
||||||
|
<tableVersion value="0x00010000"/>
|
||||||
|
<ascent value="1000"/>
|
||||||
|
<descent value="-300"/>
|
||||||
|
<lineGap value="0"/>
|
||||||
|
<advanceWidthMax value="633"/>
|
||||||
|
<minLeftSideBearing value="23"/>
|
||||||
|
<minRightSideBearing value="28"/>
|
||||||
|
<xMaxExtent value="605"/>
|
||||||
|
<caretSlopeRise value="1"/>
|
||||||
|
<caretSlopeRun value="0"/>
|
||||||
|
<caretOffset value="0"/>
|
||||||
|
<reserved0 value="0"/>
|
||||||
|
<reserved1 value="0"/>
|
||||||
|
<reserved2 value="0"/>
|
||||||
|
<reserved3 value="0"/>
|
||||||
|
<metricDataFormat value="0"/>
|
||||||
|
<numberOfHMetrics value="2"/>
|
||||||
|
</hhea>
|
||||||
|
|
||||||
|
<maxp>
|
||||||
|
<!-- Most of this table will be recalculated by the compiler -->
|
||||||
|
<tableVersion value="0x10000"/>
|
||||||
|
<numGlyphs value="2"/>
|
||||||
|
<maxPoints value="19"/>
|
||||||
|
<maxContours value="2"/>
|
||||||
|
<maxCompositePoints value="0"/>
|
||||||
|
<maxCompositeContours value="0"/>
|
||||||
|
<maxZones value="1"/>
|
||||||
|
<maxTwilightPoints value="0"/>
|
||||||
|
<maxStorage value="0"/>
|
||||||
|
<maxFunctionDefs value="0"/>
|
||||||
|
<maxInstructionDefs value="0"/>
|
||||||
|
<maxStackElements value="0"/>
|
||||||
|
<maxSizeOfInstructions value="0"/>
|
||||||
|
<maxComponentElements value="0"/>
|
||||||
|
<maxComponentDepth value="0"/>
|
||||||
|
</maxp>
|
||||||
|
|
||||||
|
<OS_2>
|
||||||
|
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
|
||||||
|
will be recalculated by the compiler -->
|
||||||
|
<version value="4"/>
|
||||||
|
<xAvgCharWidth value="567"/>
|
||||||
|
<usWeightClass value="100"/>
|
||||||
|
<usWidthClass value="6"/>
|
||||||
|
<fsType value="00000000 00001000"/>
|
||||||
|
<ySubscriptXSize value="650"/>
|
||||||
|
<ySubscriptYSize value="600"/>
|
||||||
|
<ySubscriptXOffset value="0"/>
|
||||||
|
<ySubscriptYOffset value="75"/>
|
||||||
|
<ySuperscriptXSize value="650"/>
|
||||||
|
<ySuperscriptYSize value="600"/>
|
||||||
|
<ySuperscriptXOffset value="0"/>
|
||||||
|
<ySuperscriptYOffset value="350"/>
|
||||||
|
<yStrikeoutSize value="28"/>
|
||||||
|
<yStrikeoutPosition value="274"/>
|
||||||
|
<sFamilyClass value="0"/>
|
||||||
|
<panose>
|
||||||
|
<bFamilyType value="0"/>
|
||||||
|
<bSerifStyle value="0"/>
|
||||||
|
<bWeight value="0"/>
|
||||||
|
<bProportion value="0"/>
|
||||||
|
<bContrast value="0"/>
|
||||||
|
<bStrokeVariation value="0"/>
|
||||||
|
<bArmStyle value="0"/>
|
||||||
|
<bLetterForm value="0"/>
|
||||||
|
<bMidline value="0"/>
|
||||||
|
<bXHeight value="0"/>
|
||||||
|
</panose>
|
||||||
|
<ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
|
||||||
|
<ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
|
||||||
|
<ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
|
||||||
|
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
|
||||||
|
<achVendID value="NONE"/>
|
||||||
|
<fsSelection value="00000000 01000000"/>
|
||||||
|
<usFirstCharIndex value="65"/>
|
||||||
|
<usLastCharIndex value="65"/>
|
||||||
|
<sTypoAscender value="750"/>
|
||||||
|
<sTypoDescender value="-250"/>
|
||||||
|
<sTypoLineGap value="250"/>
|
||||||
|
<usWinAscent value="1000"/>
|
||||||
|
<usWinDescent value="300"/>
|
||||||
|
<ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
|
||||||
|
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
|
||||||
|
<sxHeight value="456"/>
|
||||||
|
<sCapHeight value="670"/>
|
||||||
|
<usDefaultChar value="0"/>
|
||||||
|
<usBreakChar value="32"/>
|
||||||
|
<usMaxContext value="0"/>
|
||||||
|
</OS_2>
|
||||||
|
|
||||||
|
<hmtx>
|
||||||
|
<mtx name=".notdef" width="500" lsb="50"/>
|
||||||
|
<mtx name="A" width="633" lsb="23"/>
|
||||||
|
</hmtx>
|
||||||
|
|
||||||
|
<cmap>
|
||||||
|
<tableVersion version="0"/>
|
||||||
|
<cmap_format_4 platformID="0" platEncID="3" language="0">
|
||||||
|
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||||
|
</cmap_format_4>
|
||||||
|
<cmap_format_4 platformID="3" platEncID="1" language="0">
|
||||||
|
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||||
|
</cmap_format_4>
|
||||||
|
</cmap>
|
||||||
|
|
||||||
|
<loca>
|
||||||
|
<!-- The 'loca' table will be calculated by the compiler -->
|
||||||
|
</loca>
|
||||||
|
|
||||||
|
<glyf>
|
||||||
|
|
||||||
|
<!-- The xMin, yMin, xMax and yMax values
|
||||||
|
will be recalculated by the compiler. -->
|
||||||
|
|
||||||
|
<TTGlyph name=".notdef" xMin="50" yMin="-250" xMax="450" yMax="750">
|
||||||
|
<contour>
|
||||||
|
<pt x="50" y="-250" on="1"/>
|
||||||
|
<pt x="50" y="750" on="1"/>
|
||||||
|
<pt x="450" y="750" on="1"/>
|
||||||
|
<pt x="450" y="-250" on="1"/>
|
||||||
|
</contour>
|
||||||
|
<contour>
|
||||||
|
<pt x="100" y="-200" on="1"/>
|
||||||
|
<pt x="400" y="-200" on="1"/>
|
||||||
|
<pt x="400" y="700" on="1"/>
|
||||||
|
<pt x="100" y="700" on="1"/>
|
||||||
|
</contour>
|
||||||
|
<instructions/>
|
||||||
|
</TTGlyph>
|
||||||
|
|
||||||
|
<TTGlyph name="A" xMin="23" yMin="0" xMax="605" yMax="672">
|
||||||
|
<contour>
|
||||||
|
<pt x="339" y="672" on="1"/>
|
||||||
|
<pt x="566" y="100" on="1"/>
|
||||||
|
<pt x="576" y="75" on="0"/>
|
||||||
|
<pt x="595" y="25" on="0"/>
|
||||||
|
<pt x="605" y="0" on="1"/>
|
||||||
|
<pt x="563" y="0" on="1"/>
|
||||||
|
<pt x="384" y="453" on="1"/>
|
||||||
|
<pt x="320" y="626" on="1"/>
|
||||||
|
<pt x="317" y="626" on="1"/>
|
||||||
|
<pt x="62" y="0" on="1"/>
|
||||||
|
<pt x="23" y="0" on="1"/>
|
||||||
|
<pt x="34" y="25" on="0"/>
|
||||||
|
<pt x="54" y="75" on="0"/>
|
||||||
|
<pt x="64" y="100" on="1"/>
|
||||||
|
<pt x="297" y="668" on="1"/>
|
||||||
|
</contour>
|
||||||
|
<contour>
|
||||||
|
<pt x="491" y="250" on="1"/>
|
||||||
|
<pt x="491" y="217" on="1"/>
|
||||||
|
<pt x="139" y="217" on="1"/>
|
||||||
|
<pt x="139" y="250" on="1"/>
|
||||||
|
</contour>
|
||||||
|
<instructions/>
|
||||||
|
</TTGlyph>
|
||||||
|
|
||||||
|
</glyf>
|
||||||
|
|
||||||
|
<name>
|
||||||
|
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Test Extended Thin
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Regular
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
3.013;NONE;Test-ExtendedThin
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Test Extended Thin
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Version 3.013
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Test-ExtendedThin
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="16" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Test
|
||||||
|
</namerecord>
|
||||||
|
<namerecord nameID="17" platformID="3" platEncID="1" langID="0x409">
|
||||||
|
Extended Thin
|
||||||
|
</namerecord>
|
||||||
|
</name>
|
||||||
|
|
||||||
|
<post>
|
||||||
|
<formatType value="2.0"/>
|
||||||
|
<italicAngle value="0.0"/>
|
||||||
|
<underlinePosition value="-130"/>
|
||||||
|
<underlineThickness value="28"/>
|
||||||
|
<isFixedPitch value="0"/>
|
||||||
|
<minMemType42 value="0"/>
|
||||||
|
<maxMemType42 value="0"/>
|
||||||
|
<minMemType1 value="0"/>
|
||||||
|
<maxMemType1 value="0"/>
|
||||||
|
<psNames>
|
||||||
|
<!-- This file uses unique glyph names based on the information
|
||||||
|
found in the 'post' table. Since these names might not be unique,
|
||||||
|
we have to invent artificial names in case of clashes. In order to
|
||||||
|
be able to retain the original information, we need a name to
|
||||||
|
ps name mapping for those cases where they differ. That's what
|
||||||
|
you see below.
|
||||||
|
-->
|
||||||
|
</psNames>
|
||||||
|
<extraNames>
|
||||||
|
<!-- following are the name that are not taken from the standard Mac glyph order -->
|
||||||
|
</extraNames>
|
||||||
|
</post>
|
||||||
|
|
||||||
|
</ttFont>
|
@ -1,7 +1,7 @@
|
|||||||
from fontTools.colorLib.builder import buildCOLR
|
from fontTools.colorLib.builder import buildCOLR
|
||||||
from fontTools.ttLib import TTFont, newTable
|
from fontTools.ttLib import TTFont, newTable
|
||||||
from fontTools.ttLib.tables import otTables as ot
|
from fontTools.ttLib.tables import otTables as ot
|
||||||
from fontTools.varLib import build, load_designspace, _add_COLR
|
from fontTools.varLib import build, build_many, load_designspace, _add_COLR
|
||||||
from fontTools.varLib.errors import VarLibValidationError
|
from fontTools.varLib.errors import VarLibValidationError
|
||||||
import fontTools.varLib.errors as varLibErrors
|
import fontTools.varLib.errors as varLibErrors
|
||||||
from fontTools.varLib.models import VariationModel
|
from fontTools.varLib.models import VariationModel
|
||||||
@ -493,6 +493,74 @@ class BuildTest(unittest.TestCase):
|
|||||||
expected_ttx_path = self.get_test_output("BuildMain.ttx")
|
expected_ttx_path = self.get_test_output("BuildMain.ttx")
|
||||||
self.expect_ttx(varfont, expected_ttx_path, tables)
|
self.expect_ttx(varfont, expected_ttx_path, tables)
|
||||||
|
|
||||||
|
def test_varLib_main_output_dir(self):
|
||||||
|
self.temp_dir()
|
||||||
|
outdir = os.path.join(self.tempdir, "output_dir_test")
|
||||||
|
self.assertFalse(os.path.exists(outdir))
|
||||||
|
|
||||||
|
ds_path = os.path.join(self.tempdir, "BuildMain.designspace")
|
||||||
|
shutil.copy2(self.get_test_input("Build.designspace"), ds_path)
|
||||||
|
|
||||||
|
shutil.copytree(
|
||||||
|
self.get_test_input("master_ttx_interpolatable_ttf"),
|
||||||
|
os.path.join(outdir, "master_ttx"),
|
||||||
|
)
|
||||||
|
|
||||||
|
finder = "%s/output_dir_test/master_ttx/{stem}.ttx" % self.tempdir
|
||||||
|
|
||||||
|
varLib_main([ds_path, "--output-dir", outdir, "--master-finder", finder])
|
||||||
|
|
||||||
|
self.assertTrue(os.path.isdir(outdir))
|
||||||
|
self.assertTrue(os.path.exists(os.path.join(outdir, "BuildMain-VF.ttf")))
|
||||||
|
|
||||||
|
def test_varLib_main_filter_variable_fonts(self):
|
||||||
|
self.temp_dir()
|
||||||
|
outdir = os.path.join(self.tempdir, "filter_variable_fonts_test")
|
||||||
|
self.assertFalse(os.path.exists(outdir))
|
||||||
|
|
||||||
|
ds_path = os.path.join(self.tempdir, "BuildMain.designspace")
|
||||||
|
shutil.copy2(self.get_test_input("Build.designspace"), ds_path)
|
||||||
|
|
||||||
|
shutil.copytree(
|
||||||
|
self.get_test_input("master_ttx_interpolatable_ttf"),
|
||||||
|
os.path.join(outdir, "master_ttx"),
|
||||||
|
)
|
||||||
|
|
||||||
|
finder = "%s/filter_variable_fonts_test/master_ttx/{stem}.ttx" % self.tempdir
|
||||||
|
|
||||||
|
cmd = [ds_path, "--output-dir", outdir, "--master-finder", finder]
|
||||||
|
|
||||||
|
with pytest.raises(SystemExit):
|
||||||
|
varLib_main(cmd + ["--variable-fonts", "FooBar"]) # no font matches
|
||||||
|
|
||||||
|
varLib_main(cmd + ["--variable-fonts", "Build.*"]) # this does match
|
||||||
|
|
||||||
|
self.assertTrue(os.path.isdir(outdir))
|
||||||
|
self.assertTrue(os.path.exists(os.path.join(outdir, "BuildMain-VF.ttf")))
|
||||||
|
|
||||||
|
def test_varLib_build_many_no_overwrite_STAT(self):
|
||||||
|
# Ensure that varLib.build_many doesn't overwrite a pre-existing STAT table,
|
||||||
|
# e.g. one built by feaLib from features.fea; the VF simply should inherit the
|
||||||
|
# STAT from the base master: https://github.com/googlefonts/fontmake/issues/985
|
||||||
|
base_master = TTFont()
|
||||||
|
base_master.importXML(
|
||||||
|
self.get_test_input("master_no_overwrite_stat/Test-CondensedThin.ttx")
|
||||||
|
)
|
||||||
|
assert "STAT" in base_master
|
||||||
|
|
||||||
|
vf = next(
|
||||||
|
iter(
|
||||||
|
build_many(
|
||||||
|
DesignSpaceDocument.fromfile(
|
||||||
|
self.get_test_input("TestNoOverwriteSTAT.designspace")
|
||||||
|
)
|
||||||
|
).values()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
assert "STAT" in vf
|
||||||
|
|
||||||
|
assert vf["STAT"].table == base_master["STAT"].table
|
||||||
|
|
||||||
def test_varlib_build_from_ds_object_in_memory_ttfonts(self):
|
def test_varlib_build_from_ds_object_in_memory_ttfonts(self):
|
||||||
ds_path = self.get_test_input("Build.designspace")
|
ds_path = self.get_test_input("Build.designspace")
|
||||||
ttx_dir = self.get_test_input("master_ttx_interpolatable_ttf")
|
ttx_dir = self.get_test_input("master_ttx_interpolatable_ttf")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user