Add partialInstancer_test.py and PartialInstancerTest-VF.ttx
Currently tests the instantiateGvar function only. The test font contains two axes and a single glyph. I shall make add more complexity later.
This commit is contained in:
parent
373d1b86f3
commit
126a2d9c38
915
Tests/varLib/data/PartialInstancerTest-VF.ttx
Normal file
915
Tests/varLib/data/PartialInstancerTest-VF.ttx
Normal file
@ -0,0 +1,915 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.38">
|
||||
|
||||
<GlyphOrder>
|
||||
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
|
||||
<GlyphID id="0" name=".notdef"/>
|
||||
<GlyphID id="1" name="hyphen"/>
|
||||
<GlyphID id="2" name="space"/>
|
||||
</GlyphOrder>
|
||||
|
||||
<head>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="1.0"/>
|
||||
<fontRevision value="2.001"/>
|
||||
<checkSumAdjustment value="0x648a72b4"/>
|
||||
<magicNumber value="0x5f0f3cf5"/>
|
||||
<flags value="00000000 00000011"/>
|
||||
<unitsPerEm value="1000"/>
|
||||
<created value="Tue Mar 5 00:05:14 2019"/>
|
||||
<modified value="Fri Mar 8 21:09:33 2019"/>
|
||||
<xMin value="40"/>
|
||||
<yMin value="-200"/>
|
||||
<xMax value="450"/>
|
||||
<yMax value="800"/>
|
||||
<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="-200"/>
|
||||
<lineGap value="0"/>
|
||||
<advanceWidthMax value="600"/>
|
||||
<minLeftSideBearing value="40"/>
|
||||
<minRightSideBearing value="40"/>
|
||||
<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="3"/>
|
||||
</hhea>
|
||||
|
||||
<maxp>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="0x10000"/>
|
||||
<numGlyphs value="3"/>
|
||||
<maxPoints value="8"/>
|
||||
<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="474"/>
|
||||
<usWeightClass value="400"/>
|
||||
<usWidthClass value="5"/>
|
||||
<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="50"/>
|
||||
<yStrikeoutPosition value="300"/>
|
||||
<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="GOOG"/>
|
||||
<fsSelection value="00000000 01000000"/>
|
||||
<usFirstCharIndex value="32"/>
|
||||
<usLastCharIndex value="45"/>
|
||||
<sTypoAscender value="800"/>
|
||||
<sTypoDescender value="-200"/>
|
||||
<sTypoLineGap value="200"/>
|
||||
<usWinAscent value="1000"/>
|
||||
<usWinDescent value="200"/>
|
||||
<ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
|
||||
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
|
||||
<sxHeight value="500"/>
|
||||
<sCapHeight value="700"/>
|
||||
<usDefaultChar value="0"/>
|
||||
<usBreakChar value="32"/>
|
||||
<usMaxContext value="0"/>
|
||||
</OS_2>
|
||||
|
||||
<hmtx>
|
||||
<mtx name=".notdef" width="500" lsb="50"/>
|
||||
<mtx name="hyphen" width="322" lsb="40"/>
|
||||
<mtx name="space" width="600" lsb="0"/>
|
||||
</hmtx>
|
||||
|
||||
<cmap>
|
||||
<tableVersion version="0"/>
|
||||
<cmap_format_4 platformID="0" platEncID="3" language="0">
|
||||
<map code="0x20" name="space"/><!-- SPACE -->
|
||||
<map code="0x2d" name="hyphen"/><!-- HYPHEN-MINUS -->
|
||||
</cmap_format_4>
|
||||
<cmap_format_4 platformID="3" platEncID="1" language="0">
|
||||
<map code="0x20" name="space"/><!-- SPACE -->
|
||||
<map code="0x2d" name="hyphen"/><!-- HYPHEN-MINUS -->
|
||||
</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="-200" xMax="450" yMax="800">
|
||||
<contour>
|
||||
<pt x="50" y="-200" on="1"/>
|
||||
<pt x="450" y="-200" on="1"/>
|
||||
<pt x="450" y="800" on="1"/>
|
||||
<pt x="50" y="800" on="1"/>
|
||||
</contour>
|
||||
<contour>
|
||||
<pt x="100" y="-150" on="1"/>
|
||||
<pt x="100" y="750" on="1"/>
|
||||
<pt x="400" y="750" on="1"/>
|
||||
<pt x="400" y="-150" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="hyphen" xMin="40" yMin="229" xMax="282" yMax="307">
|
||||
<contour>
|
||||
<pt x="40" y="229" on="1"/>
|
||||
<pt x="40" y="307" on="1"/>
|
||||
<pt x="282" y="307" on="1"/>
|
||||
<pt x="282" y="229" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="space"/><!-- contains no outline data -->
|
||||
|
||||
</glyf>
|
||||
|
||||
<name>
|
||||
<namerecord nameID="256" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Weight
|
||||
</namerecord>
|
||||
<namerecord nameID="257" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Width
|
||||
</namerecord>
|
||||
<namerecord nameID="258" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Thin
|
||||
</namerecord>
|
||||
<namerecord nameID="259" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
ExtraLight
|
||||
</namerecord>
|
||||
<namerecord nameID="260" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Light
|
||||
</namerecord>
|
||||
<namerecord nameID="261" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="262" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Medium
|
||||
</namerecord>
|
||||
<namerecord nameID="263" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
SemiBold
|
||||
</namerecord>
|
||||
<namerecord nameID="264" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Bold
|
||||
</namerecord>
|
||||
<namerecord nameID="265" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
ExtraBold
|
||||
</namerecord>
|
||||
<namerecord nameID="266" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Black
|
||||
</namerecord>
|
||||
<namerecord nameID="267" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
SemiCondensed Thin
|
||||
</namerecord>
|
||||
<namerecord nameID="268" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
SemiCondensed ExtraLight
|
||||
</namerecord>
|
||||
<namerecord nameID="269" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
SemiCondensed Light
|
||||
</namerecord>
|
||||
<namerecord nameID="270" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
SemiCondensed
|
||||
</namerecord>
|
||||
<namerecord nameID="271" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
SemiCondensed Medium
|
||||
</namerecord>
|
||||
<namerecord nameID="272" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
SemiCondensed SemiBold
|
||||
</namerecord>
|
||||
<namerecord nameID="273" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
SemiCondensed Bold
|
||||
</namerecord>
|
||||
<namerecord nameID="274" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
SemiCondensed ExtraBold
|
||||
</namerecord>
|
||||
<namerecord nameID="275" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
SemiCondensed Black
|
||||
</namerecord>
|
||||
<namerecord nameID="276" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Condensed Thin
|
||||
</namerecord>
|
||||
<namerecord nameID="277" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Condensed ExtraLight
|
||||
</namerecord>
|
||||
<namerecord nameID="278" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Condensed Light
|
||||
</namerecord>
|
||||
<namerecord nameID="279" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Condensed
|
||||
</namerecord>
|
||||
<namerecord nameID="280" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Condensed Medium
|
||||
</namerecord>
|
||||
<namerecord nameID="281" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Condensed SemiBold
|
||||
</namerecord>
|
||||
<namerecord nameID="282" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Condensed Bold
|
||||
</namerecord>
|
||||
<namerecord nameID="283" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Condensed ExtraBold
|
||||
</namerecord>
|
||||
<namerecord nameID="284" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Condensed Black
|
||||
</namerecord>
|
||||
<namerecord nameID="285" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
ExtraCondensed Thin
|
||||
</namerecord>
|
||||
<namerecord nameID="286" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
ExtraCondensed ExtraLight
|
||||
</namerecord>
|
||||
<namerecord nameID="287" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
ExtraCondensed Light
|
||||
</namerecord>
|
||||
<namerecord nameID="288" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
ExtraCondensed
|
||||
</namerecord>
|
||||
<namerecord nameID="289" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
ExtraCondensed Medium
|
||||
</namerecord>
|
||||
<namerecord nameID="290" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
ExtraCondensed SemiBold
|
||||
</namerecord>
|
||||
<namerecord nameID="291" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
ExtraCondensed Bold
|
||||
</namerecord>
|
||||
<namerecord nameID="292" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
ExtraCondensed ExtraBold
|
||||
</namerecord>
|
||||
<namerecord nameID="293" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
ExtraCondensed Black
|
||||
</namerecord>
|
||||
<namerecord nameID="0" platformID="3" platEncID="1" langID="0x409">
|
||||
Copyright 2015 Google Inc. All Rights Reserved.
|
||||
</namerecord>
|
||||
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
|
||||
Test Variable Font
|
||||
</namerecord>
|
||||
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
|
||||
Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
|
||||
2.001;GOOG;TestVariableFont-Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
|
||||
Test Variable Font Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
|
||||
Version 2.001
|
||||
</namerecord>
|
||||
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
|
||||
TestVariableFont-Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="7" platformID="3" platEncID="1" langID="0x409">
|
||||
Noto is a trademark of Google Inc.
|
||||
</namerecord>
|
||||
<namerecord nameID="8" platformID="3" platEncID="1" langID="0x409">
|
||||
Monotype Imaging Inc.
|
||||
</namerecord>
|
||||
<namerecord nameID="9" platformID="3" platEncID="1" langID="0x409">
|
||||
Monotype Design Team
|
||||
</namerecord>
|
||||
<namerecord nameID="11" platformID="3" platEncID="1" langID="0x409">
|
||||
http://www.google.com/get/noto/
|
||||
</namerecord>
|
||||
<namerecord nameID="12" platformID="3" platEncID="1" langID="0x409">
|
||||
http://www.monotype.com/studio
|
||||
</namerecord>
|
||||
<namerecord nameID="256" platformID="3" platEncID="1" langID="0x409">
|
||||
Weight
|
||||
</namerecord>
|
||||
<namerecord nameID="257" platformID="3" platEncID="1" langID="0x409">
|
||||
Width
|
||||
</namerecord>
|
||||
<namerecord nameID="258" platformID="3" platEncID="1" langID="0x409">
|
||||
Thin
|
||||
</namerecord>
|
||||
<namerecord nameID="259" platformID="3" platEncID="1" langID="0x409">
|
||||
ExtraLight
|
||||
</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">
|
||||
ExtraBold
|
||||
</namerecord>
|
||||
<namerecord nameID="266" platformID="3" platEncID="1" langID="0x409">
|
||||
Black
|
||||
</namerecord>
|
||||
<namerecord nameID="267" platformID="3" platEncID="1" langID="0x409">
|
||||
SemiCondensed Thin
|
||||
</namerecord>
|
||||
<namerecord nameID="268" platformID="3" platEncID="1" langID="0x409">
|
||||
SemiCondensed ExtraLight
|
||||
</namerecord>
|
||||
<namerecord nameID="269" platformID="3" platEncID="1" langID="0x409">
|
||||
SemiCondensed Light
|
||||
</namerecord>
|
||||
<namerecord nameID="270" platformID="3" platEncID="1" langID="0x409">
|
||||
SemiCondensed
|
||||
</namerecord>
|
||||
<namerecord nameID="271" platformID="3" platEncID="1" langID="0x409">
|
||||
SemiCondensed Medium
|
||||
</namerecord>
|
||||
<namerecord nameID="272" platformID="3" platEncID="1" langID="0x409">
|
||||
SemiCondensed SemiBold
|
||||
</namerecord>
|
||||
<namerecord nameID="273" platformID="3" platEncID="1" langID="0x409">
|
||||
SemiCondensed Bold
|
||||
</namerecord>
|
||||
<namerecord nameID="274" platformID="3" platEncID="1" langID="0x409">
|
||||
SemiCondensed ExtraBold
|
||||
</namerecord>
|
||||
<namerecord nameID="275" platformID="3" platEncID="1" langID="0x409">
|
||||
SemiCondensed Black
|
||||
</namerecord>
|
||||
<namerecord nameID="276" platformID="3" platEncID="1" langID="0x409">
|
||||
Condensed Thin
|
||||
</namerecord>
|
||||
<namerecord nameID="277" platformID="3" platEncID="1" langID="0x409">
|
||||
Condensed ExtraLight
|
||||
</namerecord>
|
||||
<namerecord nameID="278" platformID="3" platEncID="1" langID="0x409">
|
||||
Condensed Light
|
||||
</namerecord>
|
||||
<namerecord nameID="279" platformID="3" platEncID="1" langID="0x409">
|
||||
Condensed
|
||||
</namerecord>
|
||||
<namerecord nameID="280" platformID="3" platEncID="1" langID="0x409">
|
||||
Condensed Medium
|
||||
</namerecord>
|
||||
<namerecord nameID="281" platformID="3" platEncID="1" langID="0x409">
|
||||
Condensed SemiBold
|
||||
</namerecord>
|
||||
<namerecord nameID="282" platformID="3" platEncID="1" langID="0x409">
|
||||
Condensed Bold
|
||||
</namerecord>
|
||||
<namerecord nameID="283" platformID="3" platEncID="1" langID="0x409">
|
||||
Condensed ExtraBold
|
||||
</namerecord>
|
||||
<namerecord nameID="284" platformID="3" platEncID="1" langID="0x409">
|
||||
Condensed Black
|
||||
</namerecord>
|
||||
<namerecord nameID="285" platformID="3" platEncID="1" langID="0x409">
|
||||
ExtraCondensed Thin
|
||||
</namerecord>
|
||||
<namerecord nameID="286" platformID="3" platEncID="1" langID="0x409">
|
||||
ExtraCondensed ExtraLight
|
||||
</namerecord>
|
||||
<namerecord nameID="287" platformID="3" platEncID="1" langID="0x409">
|
||||
ExtraCondensed Light
|
||||
</namerecord>
|
||||
<namerecord nameID="288" platformID="3" platEncID="1" langID="0x409">
|
||||
ExtraCondensed
|
||||
</namerecord>
|
||||
<namerecord nameID="289" platformID="3" platEncID="1" langID="0x409">
|
||||
ExtraCondensed Medium
|
||||
</namerecord>
|
||||
<namerecord nameID="290" platformID="3" platEncID="1" langID="0x409">
|
||||
ExtraCondensed SemiBold
|
||||
</namerecord>
|
||||
<namerecord nameID="291" platformID="3" platEncID="1" langID="0x409">
|
||||
ExtraCondensed Bold
|
||||
</namerecord>
|
||||
<namerecord nameID="292" platformID="3" platEncID="1" langID="0x409">
|
||||
ExtraCondensed ExtraBold
|
||||
</namerecord>
|
||||
<namerecord nameID="293" platformID="3" platEncID="1" langID="0x409">
|
||||
ExtraCondensed Black
|
||||
</namerecord>
|
||||
</name>
|
||||
|
||||
<post>
|
||||
<formatType value="2.0"/>
|
||||
<italicAngle value="0.0"/>
|
||||
<underlinePosition value="-100"/>
|
||||
<underlineThickness value="50"/>
|
||||
<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>
|
||||
|
||||
<HVAR>
|
||||
<Version value="0x00010000"/>
|
||||
<VarStore Format="1">
|
||||
<Format value="1"/>
|
||||
<VarRegionList>
|
||||
<!-- RegionAxisCount=2 -->
|
||||
<!-- RegionCount=7 -->
|
||||
<Region index="0">
|
||||
<VarRegionAxis index="0">
|
||||
<StartCoord value="-1.0"/>
|
||||
<PeakCoord value="-1.0"/>
|
||||
<EndCoord value="0.0"/>
|
||||
</VarRegionAxis>
|
||||
<VarRegionAxis index="1">
|
||||
<StartCoord value="0.0"/>
|
||||
<PeakCoord value="0.0"/>
|
||||
<EndCoord value="0.0"/>
|
||||
</VarRegionAxis>
|
||||
</Region>
|
||||
<Region index="1">
|
||||
<VarRegionAxis index="0">
|
||||
<StartCoord value="0.0"/>
|
||||
<PeakCoord value="0.61"/>
|
||||
<EndCoord value="1.0"/>
|
||||
</VarRegionAxis>
|
||||
<VarRegionAxis index="1">
|
||||
<StartCoord value="0.0"/>
|
||||
<PeakCoord value="0.0"/>
|
||||
<EndCoord value="0.0"/>
|
||||
</VarRegionAxis>
|
||||
</Region>
|
||||
<Region index="2">
|
||||
<VarRegionAxis index="0">
|
||||
<StartCoord value="0.61"/>
|
||||
<PeakCoord value="1.0"/>
|
||||
<EndCoord value="1.0"/>
|
||||
</VarRegionAxis>
|
||||
<VarRegionAxis index="1">
|
||||
<StartCoord value="0.0"/>
|
||||
<PeakCoord value="0.0"/>
|
||||
<EndCoord value="0.0"/>
|
||||
</VarRegionAxis>
|
||||
</Region>
|
||||
<Region index="3">
|
||||
<VarRegionAxis index="0">
|
||||
<StartCoord value="0.0"/>
|
||||
<PeakCoord value="0.0"/>
|
||||
<EndCoord value="0.0"/>
|
||||
</VarRegionAxis>
|
||||
<VarRegionAxis index="1">
|
||||
<StartCoord value="-1.0"/>
|
||||
<PeakCoord value="-1.0"/>
|
||||
<EndCoord value="0.0"/>
|
||||
</VarRegionAxis>
|
||||
</Region>
|
||||
<Region index="4">
|
||||
<VarRegionAxis index="0">
|
||||
<StartCoord value="-1.0"/>
|
||||
<PeakCoord value="-1.0"/>
|
||||
<EndCoord value="0.0"/>
|
||||
</VarRegionAxis>
|
||||
<VarRegionAxis index="1">
|
||||
<StartCoord value="-1.0"/>
|
||||
<PeakCoord value="-1.0"/>
|
||||
<EndCoord value="0.0"/>
|
||||
</VarRegionAxis>
|
||||
</Region>
|
||||
<Region index="5">
|
||||
<VarRegionAxis index="0">
|
||||
<StartCoord value="0.0"/>
|
||||
<PeakCoord value="0.61"/>
|
||||
<EndCoord value="1.0"/>
|
||||
</VarRegionAxis>
|
||||
<VarRegionAxis index="1">
|
||||
<StartCoord value="-1.0"/>
|
||||
<PeakCoord value="-1.0"/>
|
||||
<EndCoord value="0.0"/>
|
||||
</VarRegionAxis>
|
||||
</Region>
|
||||
<Region index="6">
|
||||
<VarRegionAxis index="0">
|
||||
<StartCoord value="0.61"/>
|
||||
<PeakCoord value="1.0"/>
|
||||
<EndCoord value="1.0"/>
|
||||
</VarRegionAxis>
|
||||
<VarRegionAxis index="1">
|
||||
<StartCoord value="-1.0"/>
|
||||
<PeakCoord value="-1.0"/>
|
||||
<EndCoord value="0.0"/>
|
||||
</VarRegionAxis>
|
||||
</Region>
|
||||
</VarRegionList>
|
||||
<!-- VarDataCount=1 -->
|
||||
<VarData index="0">
|
||||
<!-- ItemCount=3 -->
|
||||
<NumShorts value="0"/>
|
||||
<!-- VarRegionCount=5 -->
|
||||
<VarRegionIndex index="0" value="2"/>
|
||||
<VarRegionIndex index="1" value="3"/>
|
||||
<VarRegionIndex index="2" value="4"/>
|
||||
<VarRegionIndex index="3" value="5"/>
|
||||
<VarRegionIndex index="4" value="6"/>
|
||||
<Item index="0" value="[0, 0, 0, 0, 0]"/>
|
||||
<Item index="1" value="[-4, -48, -11, 31, 55]"/>
|
||||
<Item index="2" value="[0, 0, 0, 0, 0]"/>
|
||||
</VarData>
|
||||
</VarStore>
|
||||
</HVAR>
|
||||
|
||||
<STAT>
|
||||
<Version value="0x00010001"/>
|
||||
<DesignAxisRecordSize value="8"/>
|
||||
<!-- DesignAxisCount=2 -->
|
||||
<DesignAxisRecord>
|
||||
<Axis index="0">
|
||||
<AxisTag value="wght"/>
|
||||
<AxisNameID value="256"/> <!-- Weight -->
|
||||
<AxisOrdering value="0"/>
|
||||
</Axis>
|
||||
<Axis index="1">
|
||||
<AxisTag value="wdth"/>
|
||||
<AxisNameID value="257"/> <!-- Width -->
|
||||
<AxisOrdering value="1"/>
|
||||
</Axis>
|
||||
</DesignAxisRecord>
|
||||
<!-- AxisValueCount=0 -->
|
||||
<ElidedFallbackNameID value="2"/> <!-- Regular -->
|
||||
</STAT>
|
||||
|
||||
<avar>
|
||||
<segment axis="wght">
|
||||
<mapping from="-1.0" to="-1.0"/>
|
||||
<mapping from="-0.6667" to="-0.7969"/>
|
||||
<mapping from="-0.3333" to="-0.5"/>
|
||||
<mapping from="0.0" to="0.0"/>
|
||||
<mapping from="0.2" to="0.18"/>
|
||||
<mapping from="0.4" to="0.38"/>
|
||||
<mapping from="0.6" to="0.61"/>
|
||||
<mapping from="0.8" to="0.79"/>
|
||||
<mapping from="1.0" to="1.0"/>
|
||||
</segment>
|
||||
<segment axis="wdth">
|
||||
<mapping from="-1.0" to="-1.0"/>
|
||||
<mapping from="0.0" to="0.0"/>
|
||||
<mapping from="1.0" to="1.0"/>
|
||||
</segment>
|
||||
</avar>
|
||||
|
||||
<fvar>
|
||||
|
||||
<!-- Weight -->
|
||||
<Axis>
|
||||
<AxisTag>wght</AxisTag>
|
||||
<Flags>0x0</Flags>
|
||||
<MinValue>100.0</MinValue>
|
||||
<DefaultValue>400.0</DefaultValue>
|
||||
<MaxValue>900.0</MaxValue>
|
||||
<AxisNameID>256</AxisNameID>
|
||||
</Axis>
|
||||
|
||||
<!-- Width -->
|
||||
<Axis>
|
||||
<AxisTag>wdth</AxisTag>
|
||||
<Flags>0x0</Flags>
|
||||
<MinValue>70.0</MinValue>
|
||||
<DefaultValue>100.0</DefaultValue>
|
||||
<MaxValue>100.0</MaxValue>
|
||||
<AxisNameID>257</AxisNameID>
|
||||
</Axis>
|
||||
|
||||
<!-- Thin -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="258">
|
||||
<coord axis="wght" value="100.0"/>
|
||||
<coord axis="wdth" value="100.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- ExtraLight -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="259">
|
||||
<coord axis="wght" value="200.0"/>
|
||||
<coord axis="wdth" value="100.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- Light -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="260">
|
||||
<coord axis="wght" value="300.0"/>
|
||||
<coord axis="wdth" value="100.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- Regular -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="261">
|
||||
<coord axis="wght" value="400.0"/>
|
||||
<coord axis="wdth" value="100.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- Medium -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="262">
|
||||
<coord axis="wght" value="500.0"/>
|
||||
<coord axis="wdth" value="100.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- SemiBold -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="263">
|
||||
<coord axis="wght" value="600.0"/>
|
||||
<coord axis="wdth" value="100.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- Bold -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="264">
|
||||
<coord axis="wght" value="700.0"/>
|
||||
<coord axis="wdth" value="100.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- ExtraBold -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="265">
|
||||
<coord axis="wght" value="800.0"/>
|
||||
<coord axis="wdth" value="100.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- Black -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="266">
|
||||
<coord axis="wght" value="900.0"/>
|
||||
<coord axis="wdth" value="100.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- SemiCondensed Thin -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="267">
|
||||
<coord axis="wght" value="100.0"/>
|
||||
<coord axis="wdth" value="89.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- SemiCondensed ExtraLight -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="268">
|
||||
<coord axis="wght" value="200.0"/>
|
||||
<coord axis="wdth" value="89.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- SemiCondensed Light -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="269">
|
||||
<coord axis="wght" value="300.0"/>
|
||||
<coord axis="wdth" value="89.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- SemiCondensed -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="270">
|
||||
<coord axis="wght" value="400.0"/>
|
||||
<coord axis="wdth" value="89.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- SemiCondensed Medium -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="271">
|
||||
<coord axis="wght" value="500.0"/>
|
||||
<coord axis="wdth" value="89.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- SemiCondensed SemiBold -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="272">
|
||||
<coord axis="wght" value="600.0"/>
|
||||
<coord axis="wdth" value="89.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- SemiCondensed Bold -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="273">
|
||||
<coord axis="wght" value="700.0"/>
|
||||
<coord axis="wdth" value="89.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- SemiCondensed ExtraBold -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="274">
|
||||
<coord axis="wght" value="800.0"/>
|
||||
<coord axis="wdth" value="89.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- SemiCondensed Black -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="275">
|
||||
<coord axis="wght" value="900.0"/>
|
||||
<coord axis="wdth" value="89.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- Condensed Thin -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="276">
|
||||
<coord axis="wght" value="100.0"/>
|
||||
<coord axis="wdth" value="79.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- Condensed ExtraLight -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="277">
|
||||
<coord axis="wght" value="200.0"/>
|
||||
<coord axis="wdth" value="79.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- Condensed Light -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="278">
|
||||
<coord axis="wght" value="300.0"/>
|
||||
<coord axis="wdth" value="79.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- Condensed -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="279">
|
||||
<coord axis="wght" value="400.0"/>
|
||||
<coord axis="wdth" value="79.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- Condensed Medium -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="280">
|
||||
<coord axis="wght" value="500.0"/>
|
||||
<coord axis="wdth" value="79.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- Condensed SemiBold -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="281">
|
||||
<coord axis="wght" value="600.0"/>
|
||||
<coord axis="wdth" value="79.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- Condensed Bold -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="282">
|
||||
<coord axis="wght" value="700.0"/>
|
||||
<coord axis="wdth" value="79.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- Condensed ExtraBold -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="283">
|
||||
<coord axis="wght" value="800.0"/>
|
||||
<coord axis="wdth" value="79.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- Condensed Black -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="284">
|
||||
<coord axis="wght" value="900.0"/>
|
||||
<coord axis="wdth" value="79.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- ExtraCondensed Thin -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="285">
|
||||
<coord axis="wght" value="100.0"/>
|
||||
<coord axis="wdth" value="70.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- ExtraCondensed ExtraLight -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="286">
|
||||
<coord axis="wght" value="200.0"/>
|
||||
<coord axis="wdth" value="70.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- ExtraCondensed Light -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="287">
|
||||
<coord axis="wght" value="300.0"/>
|
||||
<coord axis="wdth" value="70.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- ExtraCondensed -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="288">
|
||||
<coord axis="wght" value="400.0"/>
|
||||
<coord axis="wdth" value="70.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- ExtraCondensed Medium -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="289">
|
||||
<coord axis="wght" value="500.0"/>
|
||||
<coord axis="wdth" value="70.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- ExtraCondensed SemiBold -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="290">
|
||||
<coord axis="wght" value="600.0"/>
|
||||
<coord axis="wdth" value="70.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- ExtraCondensed Bold -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="291">
|
||||
<coord axis="wght" value="700.0"/>
|
||||
<coord axis="wdth" value="70.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- ExtraCondensed ExtraBold -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="292">
|
||||
<coord axis="wght" value="800.0"/>
|
||||
<coord axis="wdth" value="70.0"/>
|
||||
</NamedInstance>
|
||||
|
||||
<!-- ExtraCondensed Black -->
|
||||
<NamedInstance flags="0x0" subfamilyNameID="293">
|
||||
<coord axis="wght" value="900.0"/>
|
||||
<coord axis="wdth" value="70.0"/>
|
||||
</NamedInstance>
|
||||
</fvar>
|
||||
|
||||
<gvar>
|
||||
<version value="1"/>
|
||||
<reserved value="0"/>
|
||||
<glyphVariations glyph="hyphen">
|
||||
<tuple>
|
||||
<coord axis="wght" value="-1.0"/>
|
||||
<delta pt="0" x="0" y="30"/>
|
||||
<delta pt="1" x="0" y="-23"/>
|
||||
<delta pt="2" x="0" y="-23"/>
|
||||
<delta pt="3" x="0" y="30"/>
|
||||
<delta pt="4" x="0" y="0"/>
|
||||
<delta pt="5" x="0" y="0"/>
|
||||
<delta pt="6" x="0" y="0"/>
|
||||
<delta pt="7" x="0" y="0"/>
|
||||
</tuple>
|
||||
<tuple>
|
||||
<coord axis="wght" min="0.0" value="0.61" max="1.0"/>
|
||||
<delta pt="1" x="-10" y="22"/>
|
||||
<delta pt="3" x="10" y="-22"/>
|
||||
</tuple>
|
||||
<tuple>
|
||||
<coord axis="wght" min="0.61" value="1.0" max="1.0"/>
|
||||
<delta pt="1" x="-19" y="37"/>
|
||||
<delta pt="3" x="15" y="-37"/>
|
||||
<delta pt="5" x="-4" y="0"/>
|
||||
</tuple>
|
||||
<tuple>
|
||||
<coord axis="wdth" value="-1.0"/>
|
||||
<delta pt="1" x="-13" y="3"/>
|
||||
<delta pt="3" x="-35" y="0"/>
|
||||
<delta pt="5" x="-48" y="0"/>
|
||||
</tuple>
|
||||
<tuple>
|
||||
<coord axis="wght" value="-1.0"/>
|
||||
<coord axis="wdth" value="-1.0"/>
|
||||
<delta pt="1" x="-1" y="-1"/>
|
||||
<delta pt="3" x="-10" y="0"/>
|
||||
<delta pt="5" x="-11" y="0"/>
|
||||
</tuple>
|
||||
<tuple>
|
||||
<coord axis="wght" min="0.0" value="0.61" max="1.0"/>
|
||||
<coord axis="wdth" value="-1.0"/>
|
||||
<delta pt="1" x="11" y="-1"/>
|
||||
<delta pt="3" x="20" y="-1"/>
|
||||
<delta pt="5" x="31" y="0"/>
|
||||
</tuple>
|
||||
<tuple>
|
||||
<coord axis="wght" min="0.61" value="1.0" max="1.0"/>
|
||||
<coord axis="wdth" value="-1.0"/>
|
||||
<delta pt="1" x="21" y="-3"/>
|
||||
<delta pt="3" x="34" y="0"/>
|
||||
<delta pt="5" x="55" y="0"/>
|
||||
</tuple>
|
||||
</glyphVariations>
|
||||
</gvar>
|
||||
|
||||
</ttFont>
|
92
Tests/varLib/partialInstancer_test.py
Normal file
92
Tests/varLib/partialInstancer_test.py
Normal file
@ -0,0 +1,92 @@
|
||||
from __future__ import print_function, division, absolute_import
|
||||
from fontTools.misc.py23 import *
|
||||
from fontTools.ttLib import TTFont
|
||||
from fontTools.varLib import partialInstancer as pi
|
||||
import os
|
||||
import pytest
|
||||
|
||||
|
||||
TESTDATA = os.path.join(os.path.dirname(__file__), "data")
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def varfont():
|
||||
f = TTFont()
|
||||
f.importXML(os.path.join(TESTDATA, "PartialInstancerTest-VF.ttx"))
|
||||
return f
|
||||
|
||||
|
||||
def _get_coordinates(varfont, glyphname):
|
||||
# converts GlyphCoordinates to a list of (x, y) tuples, so that pytest's
|
||||
# assert will give us a nicer diff
|
||||
return list(varfont["glyf"].getCoordinates(glyphname, varfont))
|
||||
|
||||
|
||||
class InstantiateGvarTest(object):
|
||||
@pytest.mark.parametrize("glyph_name", ["hyphen"])
|
||||
@pytest.mark.parametrize(
|
||||
"location, expected",
|
||||
[
|
||||
pytest.param(
|
||||
{"wdth": -1.0},
|
||||
{
|
||||
"hyphen": [
|
||||
(27, 229),
|
||||
(27, 310),
|
||||
(247, 310),
|
||||
(247, 229),
|
||||
(0, 0),
|
||||
(274, 0),
|
||||
(0, 1000),
|
||||
(0, 0),
|
||||
]
|
||||
},
|
||||
id="wdth=-1.0",
|
||||
),
|
||||
pytest.param(
|
||||
{"wdth": -0.5},
|
||||
{
|
||||
"hyphen": [
|
||||
(33.5, 229),
|
||||
(33.5, 308.5),
|
||||
(264.5, 308.5),
|
||||
(264.5, 229),
|
||||
(0, 0),
|
||||
(298, 0),
|
||||
(0, 1000),
|
||||
(0, 0),
|
||||
]
|
||||
},
|
||||
id="wdth=-0.5",
|
||||
),
|
||||
# an axis pinned at the default normalized location (0.0) means
|
||||
# the default glyf outline stays the same
|
||||
pytest.param(
|
||||
{"wdth": 0.0},
|
||||
{
|
||||
"hyphen": [
|
||||
(40, 229),
|
||||
(40, 307),
|
||||
(282, 307),
|
||||
(282, 229),
|
||||
(0, 0),
|
||||
(322, 0),
|
||||
(0, 1000),
|
||||
(0, 0),
|
||||
]
|
||||
},
|
||||
id="wdth=0.0",
|
||||
),
|
||||
],
|
||||
)
|
||||
def test_pin_and_drop_axis(self, varfont, glyph_name, location, expected):
|
||||
pi.instantiateGvar(varfont, location)
|
||||
|
||||
assert _get_coordinates(varfont, glyph_name) == expected[glyph_name]
|
||||
|
||||
# check that the pinned axis has been dropped from gvar
|
||||
assert not any(
|
||||
"wdth" in t.axes
|
||||
for tuples in varfont["gvar"].variations.values()
|
||||
for t in tuples
|
||||
)
|
Loading…
x
Reference in New Issue
Block a user