[varLib] Allow using CFF2 table as source

Nothing clever, if the source font has a CFF2 table use it as if it were
a CFF table (i.e. non-variable, not sure what would happen in the source
CFF2 was variable already).
This commit is contained in:
Khaled Hosny 2020-01-31 03:13:42 +02:00
parent 014991d710
commit 38981b6dae
7 changed files with 1657 additions and 6 deletions

View File

@ -683,9 +683,11 @@ _DesignSpaceData = namedtuple(
def _add_CFF2(varFont, model, master_fonts): def _add_CFF2(varFont, model, master_fonts):
from .cff import (convertCFFtoCFF2, merge_region_fonts) from .cff import merge_region_fonts
glyphOrder = varFont.getGlyphOrder() glyphOrder = varFont.getGlyphOrder()
convertCFFtoCFF2(varFont) if "CFF2" not in varFont:
from .cff import convertCFFtoCFF2
convertCFFtoCFF2(varFont)
ordered_fonts_list = model.reorderMasters(master_fonts, model.reverseMapping) ordered_fonts_list = model.reorderMasters(master_fonts, model.reverseMapping)
# re-ordering the master list simplifies building the CFF2 data item lists. # re-ordering the master list simplifies building the CFF2 data item lists.
merge_region_fonts(varFont, model, ordered_fonts_list, glyphOrder) merge_region_fonts(varFont, model, ordered_fonts_list, glyphOrder)
@ -884,7 +886,7 @@ def build(designspace, master_finder=lambda s:s, exclude=[], optimize=True):
_merge_TTHinting(vf, model, master_fonts) _merge_TTHinting(vf, model, master_fonts)
if 'GSUB' not in exclude and ds.rules: if 'GSUB' not in exclude and ds.rules:
_add_GSUB_feature_variations(vf, ds.axes, ds.internal_axis_supports, ds.rules, ds.rulesProcessingLast) _add_GSUB_feature_variations(vf, ds.axes, ds.internal_axis_supports, ds.rules, ds.rulesProcessingLast)
if 'CFF2' not in exclude and 'CFF ' in vf: if 'CFF2' not in exclude and ('CFF ' in vf or 'CFF2' in vf):
_add_CFF2(vf, model, master_fonts) _add_CFF2(vf, model, master_fonts)
if "post" in vf: if "post" in vf:
# set 'post' to format 2 to keep the glyph names dropped from CFF2 # set 'post' to format 2 to keep the glyph names dropped from CFF2

View File

@ -266,6 +266,12 @@ def merge_PrivateDicts(top_dicts, vsindex_dict, var_model, fd_map):
private_dict.rawDict[key] = dataList private_dict.rawDict[key] = dataList
def _cff_or_cff2(font):
if "CFF " in font:
return font["CFF "]
return font["CFF2"]
def getfd_map(varFont, fonts_list): def getfd_map(varFont, fonts_list):
""" Since a subset source font may have fewer FontDicts in their """ Since a subset source font may have fewer FontDicts in their
FDArray than the default font, we have to match up the FontDicts in FDArray than the default font, we have to match up the FontDicts in
@ -278,7 +284,7 @@ def getfd_map(varFont, fonts_list):
default_font = fonts_list[0] default_font = fonts_list[0]
region_fonts = fonts_list[1:] region_fonts = fonts_list[1:]
num_regions = len(region_fonts) num_regions = len(region_fonts)
topDict = default_font['CFF '].cff.topDictIndex[0] topDict = _cff_or_cff2(default_font).cff.topDictIndex[0]
if not hasattr(topDict, 'FDSelect'): if not hasattr(topDict, 'FDSelect'):
# All glyphs reference only one FontDict. # All glyphs reference only one FontDict.
# Map the FD index for regions to index 0. # Map the FD index for regions to index 0.
@ -294,7 +300,7 @@ def getfd_map(varFont, fonts_list):
fd_map[fdIndex] = {} fd_map[fdIndex] = {}
for ri, region_font in enumerate(region_fonts): for ri, region_font in enumerate(region_fonts):
region_glyphOrder = region_font.getGlyphOrder() region_glyphOrder = region_font.getGlyphOrder()
region_topDict = region_font['CFF '].cff.topDictIndex[0] region_topDict = _cff_or_cff2(region_font).cff.topDictIndex[0]
if not hasattr(region_topDict, 'FDSelect'): if not hasattr(region_topDict, 'FDSelect'):
# All the glyphs share the same FontDict. Pick any glyph. # All the glyphs share the same FontDict. Pick any glyph.
default_fdIndex = gname_mapping[region_glyphOrder[0]] default_fdIndex = gname_mapping[region_glyphOrder[0]]
@ -313,7 +319,7 @@ CVarData = namedtuple('CVarData', 'varDataList masterSupports vsindex_dict')
def merge_region_fonts(varFont, model, ordered_fonts_list, glyphOrder): def merge_region_fonts(varFont, model, ordered_fonts_list, glyphOrder):
topDict = varFont['CFF2'].cff.topDictIndex[0] topDict = varFont['CFF2'].cff.topDictIndex[0]
top_dicts = [topDict] + [ top_dicts = [topDict] + [
ttFont['CFF '].cff.topDictIndex[0] _cff_or_cff2(ttFont).cff.topDictIndex[0]
for ttFont in ordered_fonts_list[1:] for ttFont in ordered_fonts_list[1:]
] ]
num_masters = len(model.mapping) num_masters = len(model.mapping)

View File

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<designspace format="3">
<axes>
<axis default="400.0" maximum="900.0" minimum="200.0" name="weight" tag="wght">
<map input="200" output="0" /> <!-- ExtraLight -->
<map input="300" output="100" /> <!-- Light -->
<map input="400" output="368" /> <!-- Regular -->
<map input="500" output="486" /> <!-- Medium -->
<map input="600" output="600" /> <!-- Semibold -->
<map input="700" output="824" /> <!-- Bold -->
<map input="900" output="1000" /><!-- Black -->
</axis>
</axes>
<rules>
<rule name="named.rule.1">
<conditionset>
<condition maximum="600" minimum="0" name="weight" />
</conditionset>
<sub name="dollar" with="dollar.a" />
</rule>
</rules>
<sources>
<source filename="master_cff2_input/TestCFF2_ExtraLight.ufo" name="master_0">
<lib copy="1" />
<location>
<dimension name="weight" xvalue="0" />
</location>
</source>
<source filename="master_cff2_input/TestCFF2_Regular.ufo" name="master_1">
<glyph mute="1" name="T" />
<info copy="1" />
<location>
<dimension name="weight" xvalue="368" />
</location>
</source>
<source filename="master_cff2_input/TestCFF2_Black.ufo" name="master_2">
<location>
<dimension name="weight" xvalue="1000" />
</location>
</source>
</sources>
<instances>
<instance familyname="Test CFF2 Roman" postscriptfontname="TestCFF2Roman-ExtraLight" stylename="ExtraLight">
<location>
<dimension name="weight" xvalue="0" />
</location>
<kerning />
<info />
</instance>
<instance familyname="Test CFF2 Roman" postscriptfontname="TestCFF2Roman-Light" stylename="Light">
<location>
<dimension name="weight" xvalue="100" />
</location>
<kerning />
<info />
</instance>
<instance familyname="Test CFF2 Roman" postscriptfontname="TestCFF2Roman-Regular" stylename="Regular">
<location>
<dimension name="weight" xvalue="368" />
</location>
<kerning />
<info />
</instance>
<instance familyname="Test CFF2 Roman" postscriptfontname="TestCFF2Roman-Medium" stylename="Medium">
<location>
<dimension name="weight" xvalue="486" />
</location>
<kerning />
<info />
</instance>
<instance familyname="Test CFF2 Roman" postscriptfontname="TestCFF2Roman-Semibold" stylename="Semibold">
<location>
<dimension name="weight" xvalue="600" />
</location>
<kerning />
<info />
</instance>
<instance familyname="Test CFF2 Roman" postscriptfontname="TestCFF2Roman-Bold" stylename="Bold">
<location>
<dimension name="weight" xvalue="824" />
</location>
<kerning />
<info />
</instance>
<instance familyname="Test CFF2 Roman" postscriptfontname="TestCFF2Roman-Black" stylename="Black">
<location>
<dimension name="weight" xvalue="1000" />
</location>
<kerning />
<info />
</instance>
</instances>
</designspace>

View File

@ -0,0 +1,510 @@
<?xml version="1.0" encoding="UTF-8"?>
<ttFont sfntVersion="OTTO" ttLibVersion="4.2">
<GlyphOrder>
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
<GlyphID id="0" name=".notdef"/>
<GlyphID id="1" name="A"/>
<GlyphID id="2" name="T"/>
<GlyphID id="3" name="dollar.a"/>
<GlyphID id="4" name="dollar"/>
</GlyphOrder>
<head>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="1.0"/>
<fontRevision value="1.01"/>
<checkSumAdjustment value="0x26378952"/>
<magicNumber value="0x5f0f3cf5"/>
<flags value="00000000 00000011"/>
<unitsPerEm value="1000"/>
<created value="Thu Nov 29 14:52:09 2018"/>
<modified value="Thu Nov 29 14:52:09 2018"/>
<xMin value="0"/>
<yMin value="-116"/>
<xMax value="600"/>
<yMax value="750"/>
<macStyle value="00000000 00000000"/>
<lowestRecPPEM value="3"/>
<fontDirectionHint value="2"/>
<indexToLocFormat value="0"/>
<glyphDataFormat value="0"/>
</head>
<hhea>
<tableVersion value="0x00010000"/>
<ascent value="984"/>
<descent value="-273"/>
<lineGap value="0"/>
<advanceWidthMax value="600"/>
<minLeftSideBearing value="0"/>
<minRightSideBearing value="0"/>
<xMaxExtent value="600"/>
<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="5"/>
</hhea>
<maxp>
<tableVersion value="0x5000"/>
<numGlyphs value="5"/>
</maxp>
<OS_2>
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
will be recalculated by the compiler -->
<version value="3"/>
<xAvgCharWidth value="592"/>
<usWeightClass value="900"/>
<usWidthClass value="5"/>
<fsType value="00000000 00000000"/>
<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="2"/>
<bSerifStyle value="11"/>
<bWeight value="8"/>
<bProportion value="9"/>
<bContrast value="3"/>
<bStrokeVariation value="4"/>
<bArmStyle value="3"/>
<bLetterForm value="2"/>
<bMidline value="2"/>
<bXHeight value="4"/>
</panose>
<ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
<achVendID value="ADBO"/>
<fsSelection value="00000000 00000000"/>
<usFirstCharIndex value="36"/>
<usLastCharIndex value="84"/>
<sTypoAscender value="750"/>
<sTypoDescender value="-250"/>
<sTypoLineGap value="0"/>
<usWinAscent value="984"/>
<usWinDescent value="273"/>
<ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
<sxHeight value="500"/>
<sCapHeight value="660"/>
<usDefaultChar value="0"/>
<usBreakChar value="32"/>
<usMaxContext value="1"/>
</OS_2>
<name>
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
Source Code Variable
</namerecord>
<namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True">
Regular
</namerecord>
<namerecord nameID="3" platformID="1" platEncID="0" langID="0x0" unicode="True">
1.010;ADBO;SourceCode_Black
</namerecord>
<namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True">
Source Code Variable
</namerecord>
<namerecord nameID="5" platformID="1" platEncID="0" langID="0x0" unicode="True">
Version 1.010;hotconv 1.0.109;makeotfexe 2.5.65596
</namerecord>
<namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
SourceCode_Black
</namerecord>
<namerecord nameID="17" platformID="1" platEncID="0" langID="0x0" unicode="True">
Roman Master 2
</namerecord>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
Source Code Variable
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
Regular
</namerecord>
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
1.010;ADBO;SourceCode_Black
</namerecord>
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
Source Code Variable
</namerecord>
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
Version 1.010;hotconv 1.0.109;makeotfexe 2.5.65596
</namerecord>
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
SourceCode_Black
</namerecord>
<namerecord nameID="17" platformID="3" platEncID="1" langID="0x409">
Roman Master 2
</namerecord>
</name>
<cmap>
<tableVersion version="0"/>
<cmap_format_4 platformID="0" platEncID="3" language="0">
<map code="0x24" name="dollar"/><!-- DOLLAR SIGN -->
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
<map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T -->
</cmap_format_4>
<cmap_format_6 platformID="1" platEncID="0" language="0">
<map code="0x24" name="dollar"/>
<map code="0x41" name="A"/>
<map code="0x54" name="T"/>
</cmap_format_6>
<cmap_format_4 platformID="3" platEncID="1" language="0">
<map code="0x24" name="dollar"/><!-- DOLLAR SIGN -->
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
<map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T -->
</cmap_format_4>
</cmap>
<post>
<formatType value="2.0"/>
<italicAngle value="0.0"/>
<underlinePosition value="-75"/>
<underlineThickness value="50"/>
<isFixedPitch value="1"/>
<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 -->
<psName name="dollar.a"/>
</extraNames>
</post>
<CFF2>
<major value="2"/>
<minor value="0"/>
<CFFFont name="CFF2Font">
<FontMatrix value="0.001 0 0 0.001 0 0"/>
<FDArray>
<FontDict index="0">
<Private>
<BlueValues value="-12 0 500 512 580 592 634 646 650 662 696 708"/>
<OtherBlues value="-188 -176"/>
<FamilyBlues value="-12 0 486 498 574 586 638 650 656 668 712 724"/>
<FamilyOtherBlues value="-217 -205"/>
<BlueScale value="0.0625"/>
<BlueShift value="7"/>
<BlueFuzz value="0"/>
<StdHW value="134"/>
<StdVW value="172"/>
</Private>
</FontDict>
</FDArray>
<CharStrings>
<CharString name=".notdef">
24 0 rmoveto
552 0 rlineto
0 660 rlineto
-552 0 rlineto
0 -660 rlineto
212 104 rmoveto
26 56 rlineto
36 96 rlineto
4 0 rlineto
36 -96 rlineto
26 -56 rlineto
-128 0 rlineto
-100 68 rmoveto
0 336 rlineto
82 -168 rlineto
-82 -168 rlineto
162 252 rmoveto
-40 96 rlineto
-18 36 rlineto
120 0 rlineto
-18 -36 rlineto
-40 -96 rlineto
-4 0 rlineto
84 -84 rmoveto
82 168 rlineto
0 -336 rlineto
-82 168 rlineto
</CharString>
<CharString name="A">
0 0 rmoveto
176 0 rlineto
73 316 rlineto
14 62 17 78 14 66 rrcurveto
4 0 rlineto
14 -66 19 -78 14 -62 rrcurveto
73 -316 rlineto
182 0 rlineto
-196 650 rlineto
-208 0 rlineto
-196 -650 rlineto
141 138 rmoveto
316 0 rlineto
0 133 rlineto
-316 0 rlineto
0 -133 rlineto
</CharString>
<CharString name="T">
214 0 rmoveto
172 0 rlineto
0 506 rlineto
187 0 rlineto
0 144 rlineto
-546 0 rlineto
0 -144 rlineto
187 0 rlineto
0 -506 rlineto
</CharString>
<CharString name="dollar">
-107 260 39 rmoveto
-65 0 -28 11 -49 24 rrcurveto
89 -53 rlineto
-15 89 rlineto
-9 52 -22 18 -43 0 rrcurveto
-26 0 -27 -14 -14 -38 rrcurveto
0 -90 71 -54 139 0 rrcurveto
163 0 99 84 0 117 rrcurveto
0 98 -58 68 -142 45 rrcurveto
-33 10 rlineto
-72 22 -24 24 0 49 rrcurveto
0 61 47 23 67 0 rrcurveto
42 0 27 -4 52 -24 rrcurveto
-85 47 rlineto
10 -67 rlineto
11 -75 37 -14 39 0 rrcurveto
26 0 29 15 5 41 rrcurveto
-8 88 -76 48 -121 0 rrcurveto
-158 0 -85 -80 0 -115 rrcurveto
0 -93 66 -69 121 -39 rrcurveto
32 -11 rlineto
80 -28 23 -19 0 -53 rrcurveto
0 -55 -43 -39 -72 0 rrcurveto
64 275 rmoveto
0 417 rlineto
-71 0 rlineto
0 -417 rlineto
71 0 rlineto
-79 -429 rmoveto
71 0 rlineto
0 429 rlineto
-71 0 rlineto
0 -429 rlineto
</CharString>
<CharString name="dollar.a">
292 34 rmoveto
163 0 83 80 0 100 rrcurveto
0 182 -302 -4 0 56 rrcurveto
0 21 18 11 36 0 rrcurveto
55 0 39 -16 52 -32 rrcurveto
84 98 rlineto
-53 52 -69 36 -97 0 rrcurveto
-141 0 -88 -68 0 -104 rrcurveto
0 -188 302 12 0 -68 rrcurveto
0 -20 -19 -10 -37 0 rrcurveto
-61 0 -55 20 -72 40 rrcurveto
-74 -116 rlineto
65 -54 101 -28 70 0 rrcurveto
-19 -150 rmoveto
160 854 rlineto
-100 12 rlineto
-160 -854 rlineto
100 -12 rlineto
</CharString>
</CharStrings>
</CFFFont>
<GlobalSubrs>
<!-- The 'index' attribute is only for humans; it is ignored when parsed. -->
</GlobalSubrs>
</CFF2>
<BASE>
<Version value="0x00010000"/>
<HorizAxis>
<BaseTagList>
<!-- BaseTagCount=2 -->
<BaselineTag index="0" value="ideo"/>
<BaselineTag index="1" value="romn"/>
</BaseTagList>
<BaseScriptList>
<!-- BaseScriptCount=4 -->
<BaseScriptRecord index="0">
<BaseScriptTag value="DFLT"/>
<BaseScript>
<BaseValues>
<DefaultIndex value="1"/>
<!-- BaseCoordCount=2 -->
<BaseCoord index="0" Format="1">
<Coordinate value="-170"/>
</BaseCoord>
<BaseCoord index="1" Format="1">
<Coordinate value="0"/>
</BaseCoord>
</BaseValues>
<!-- BaseLangSysCount=0 -->
</BaseScript>
</BaseScriptRecord>
<BaseScriptRecord index="1">
<BaseScriptTag value="cyrl"/>
<BaseScript>
<BaseValues>
<DefaultIndex value="1"/>
<!-- BaseCoordCount=2 -->
<BaseCoord index="0" Format="1">
<Coordinate value="-170"/>
</BaseCoord>
<BaseCoord index="1" Format="1">
<Coordinate value="0"/>
</BaseCoord>
</BaseValues>
<!-- BaseLangSysCount=0 -->
</BaseScript>
</BaseScriptRecord>
<BaseScriptRecord index="2">
<BaseScriptTag value="grek"/>
<BaseScript>
<BaseValues>
<DefaultIndex value="1"/>
<!-- BaseCoordCount=2 -->
<BaseCoord index="0" Format="1">
<Coordinate value="-170"/>
</BaseCoord>
<BaseCoord index="1" Format="1">
<Coordinate value="0"/>
</BaseCoord>
</BaseValues>
<!-- BaseLangSysCount=0 -->
</BaseScript>
</BaseScriptRecord>
<BaseScriptRecord index="3">
<BaseScriptTag value="latn"/>
<BaseScript>
<BaseValues>
<DefaultIndex value="1"/>
<!-- BaseCoordCount=2 -->
<BaseCoord index="0" Format="1">
<Coordinate value="-170"/>
</BaseCoord>
<BaseCoord index="1" Format="1">
<Coordinate value="0"/>
</BaseCoord>
</BaseValues>
<!-- BaseLangSysCount=0 -->
</BaseScript>
</BaseScriptRecord>
</BaseScriptList>
</HorizAxis>
</BASE>
<GPOS>
<Version value="0x00010000"/>
<ScriptList>
<!-- ScriptCount=1 -->
<ScriptRecord index="0">
<ScriptTag value="DFLT"/>
<Script>
<DefaultLangSys>
<ReqFeatureIndex value="65535"/>
<!-- FeatureCount=1 -->
<FeatureIndex index="0" value="0"/>
</DefaultLangSys>
<!-- LangSysCount=0 -->
</Script>
</ScriptRecord>
</ScriptList>
<FeatureList>
<!-- FeatureCount=1 -->
<FeatureRecord index="0">
<FeatureTag value="size"/>
<Feature>
<FeatureParamsSize>
<DesignSize value="10.0"/>
<SubfamilyID value="0"/>
<SubfamilyNameID value="0"/>
<RangeStart value="0.0"/>
<RangeEnd value="0.0"/>
</FeatureParamsSize>
<!-- LookupCount=0 -->
</Feature>
</FeatureRecord>
</FeatureList>
<LookupList>
<!-- LookupCount=0 -->
</LookupList>
</GPOS>
<GSUB>
<Version value="0x00010000"/>
<ScriptList>
<!-- ScriptCount=1 -->
<ScriptRecord index="0">
<ScriptTag value="DFLT"/>
<Script>
<DefaultLangSys>
<ReqFeatureIndex value="65535"/>
<!-- FeatureCount=1 -->
<FeatureIndex index="0" value="0"/>
</DefaultLangSys>
<!-- LangSysCount=0 -->
</Script>
</ScriptRecord>
</ScriptList>
<FeatureList>
<!-- FeatureCount=1 -->
<FeatureRecord index="0">
<FeatureTag value="test"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="0"/>
</Feature>
</FeatureRecord>
</FeatureList>
<LookupList>
<!-- LookupCount=1 -->
<Lookup index="0">
<LookupType value="1"/>
<LookupFlag value="0"/>
<!-- SubTableCount=1 -->
<SingleSubst index="0" Format="1">
<Substitution in="dollar" out="dollar.a"/>
</SingleSubst>
</Lookup>
</LookupList>
</GSUB>
<hmtx>
<mtx name=".notdef" width="600" lsb="24"/>
<mtx name="A" width="600" lsb="0"/>
<mtx name="T" width="600" lsb="27"/>
<mtx name="dollar" width="560" lsb="51"/>
<mtx name="dollar.a" width="600" lsb="56"/>
</hmtx>
<DSIG>
<!-- note that the Digital Signature will be invalid after recompilation! -->
<tableHeader flag="0x0" numSigs="0" version="1"/>
</DSIG>
</ttFont>

View File

@ -0,0 +1,510 @@
<?xml version="1.0" encoding="UTF-8"?>
<ttFont sfntVersion="OTTO" ttLibVersion="4.2">
<GlyphOrder>
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
<GlyphID id="0" name=".notdef"/>
<GlyphID id="1" name="A"/>
<GlyphID id="2" name="T"/>
<GlyphID id="3" name="dollar.a"/>
<GlyphID id="4" name="dollar"/>
</GlyphOrder>
<head>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="1.0"/>
<fontRevision value="1.01"/>
<checkSumAdjustment value="0xeb345d38"/>
<magicNumber value="0x5f0f3cf5"/>
<flags value="00000000 00000011"/>
<unitsPerEm value="1000"/>
<created value="Thu Nov 29 14:52:09 2018"/>
<modified value="Thu Nov 29 14:52:09 2018"/>
<xMin value="50"/>
<yMin value="-115"/>
<xMax value="550"/>
<yMax value="762"/>
<macStyle value="00000000 00000000"/>
<lowestRecPPEM value="3"/>
<fontDirectionHint value="2"/>
<indexToLocFormat value="0"/>
<glyphDataFormat value="0"/>
</head>
<hhea>
<tableVersion value="0x00010000"/>
<ascent value="984"/>
<descent value="-273"/>
<lineGap value="0"/>
<advanceWidthMax value="600"/>
<minLeftSideBearing value="50"/>
<minRightSideBearing value="50"/>
<xMaxExtent value="550"/>
<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="5"/>
</hhea>
<maxp>
<tableVersion value="0x5000"/>
<numGlyphs value="5"/>
</maxp>
<OS_2>
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
will be recalculated by the compiler -->
<version value="3"/>
<xAvgCharWidth value="578"/>
<usWeightClass value="200"/>
<usWidthClass value="5"/>
<fsType value="00000000 00000000"/>
<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="286"/>
<sFamilyClass value="0"/>
<panose>
<bFamilyType value="2"/>
<bSerifStyle value="11"/>
<bWeight value="3"/>
<bProportion value="9"/>
<bContrast value="3"/>
<bStrokeVariation value="4"/>
<bArmStyle value="3"/>
<bLetterForm value="2"/>
<bMidline value="2"/>
<bXHeight value="4"/>
</panose>
<ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
<achVendID value="ADBO"/>
<fsSelection value="00000000 00000000"/>
<usFirstCharIndex value="36"/>
<usLastCharIndex value="84"/>
<sTypoAscender value="750"/>
<sTypoDescender value="-250"/>
<sTypoLineGap value="0"/>
<usWinAscent value="984"/>
<usWinDescent value="273"/>
<ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
<sxHeight value="478"/>
<sCapHeight value="660"/>
<usDefaultChar value="0"/>
<usBreakChar value="32"/>
<usMaxContext value="1"/>
</OS_2>
<name>
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
Source Code Variable
</namerecord>
<namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True">
Regular
</namerecord>
<namerecord nameID="3" platformID="1" platEncID="0" langID="0x0" unicode="True">
1.010;ADBO;SourceCode_ExtraLight
</namerecord>
<namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True">
Source Code Variable
</namerecord>
<namerecord nameID="5" platformID="1" platEncID="0" langID="0x0" unicode="True">
Version 1.010;hotconv 1.0.109;makeotfexe 2.5.65596
</namerecord>
<namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
SourceCode_ExtraLight
</namerecord>
<namerecord nameID="17" platformID="1" platEncID="0" langID="0x0" unicode="True">
Roman Master 0
</namerecord>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
Source Code Variable
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
Regular
</namerecord>
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
1.010;ADBO;SourceCode_ExtraLight
</namerecord>
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
Source Code Variable
</namerecord>
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
Version 1.010;hotconv 1.0.109;makeotfexe 2.5.65596
</namerecord>
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
SourceCode_ExtraLight
</namerecord>
<namerecord nameID="17" platformID="3" platEncID="1" langID="0x409">
Roman Master 0
</namerecord>
</name>
<cmap>
<tableVersion version="0"/>
<cmap_format_4 platformID="0" platEncID="3" language="0">
<map code="0x24" name="dollar"/><!-- DOLLAR SIGN -->
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
<map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T -->
</cmap_format_4>
<cmap_format_6 platformID="1" platEncID="0" language="0">
<map code="0x24" name="dollar"/>
<map code="0x41" name="A"/>
<map code="0x54" name="T"/>
</cmap_format_6>
<cmap_format_4 platformID="3" platEncID="1" language="0">
<map code="0x24" name="dollar"/><!-- DOLLAR SIGN -->
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
<map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T -->
</cmap_format_4>
</cmap>
<post>
<formatType value="2.0"/>
<italicAngle value="0.0"/>
<underlinePosition value="-75"/>
<underlineThickness value="50"/>
<isFixedPitch value="1"/>
<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 -->
<psName name="dollar.a"/>
</extraNames>
</post>
<CFF2>
<major value="2"/>
<minor value="0"/>
<CFFFont name="CFF2Font">
<FontMatrix value="0.001 0 0 0.001 0 0"/>
<FDArray>
<FontDict index="0">
<Private>
<BlueValues value="-12 0 478 490 570 582 640 652 660 672 722 734"/>
<OtherBlues value="-234 -222"/>
<FamilyBlues value="-12 0 486 498 574 586 638 650 656 668 712 724"/>
<FamilyOtherBlues value="-217 -205"/>
<BlueScale value="0.0625"/>
<BlueShift value="7"/>
<BlueFuzz value="0"/>
<StdHW value="28"/>
<StdVW value="34"/>
</Private>
</FontDict>
</FDArray>
<CharStrings>
<CharString name=".notdef">
84 0 rmoveto
432 0 rlineto
0 660 rlineto
-432 0 rlineto
0 -660 rlineto
48 32 rmoveto
102 176 rlineto
64 106 rlineto
4 0 rlineto
62 -106 rlineto
100 -176 rlineto
-332 0 rlineto
-10 42 rmoveto
0 536 rlineto
154 -270 rlineto
-154 -266 rlineto
176 292 rmoveto
-56 92 rlineto
-94 168 rlineto
302 0 rlineto
-94 -168 rlineto
-54 -92 rlineto
-4 0 rlineto
26 -26 rmoveto
152 270 rlineto
0 -536 rlineto
-152 266 rlineto
</CharString>
<CharString name="A">
50 0 rmoveto
32 0 rlineto
140 396 rlineto
28 80 24 68 24 82 rrcurveto
4 0 rlineto
24 -82 24 -68 28 -80 rrcurveto
138 -396 rlineto
34 0 rlineto
-236 660 rlineto
-28 0 rlineto
-236 -660 rlineto
102 236 rmoveto
293 0 rlineto
0 28 rlineto
-293 0 rlineto
0 -28 rlineto
</CharString>
<CharString name="T">
284 0 rmoveto
32 0 rlineto
0 632 rlineto
234 0 rlineto
0 28 rlineto
-500 0 rlineto
0 -28 rlineto
234 0 rlineto
0 -632 rlineto
</CharString>
<CharString name="dollar">
-107 245 7 rmoveto
-65 0 -39 15 -46 50 rrcurveto
36 -48 rlineto
-28 100 rlineto
-4 16 -12 4 -11 0 rrcurveto
-14 0 -8 -7 -1 -14 rrcurveto
24 -85 61 -51 107 0 rrcurveto
91 0 90 53 0 111 rrcurveto
0 70 -26 66 -134 57 rrcurveto
-19 8 rlineto
-93 39 -42 49 0 68 rrcurveto
0 91 60 48 88 0 rrcurveto
56 0 35 -14 44 -50 rrcurveto
-38 47 rlineto
28 -100 rlineto
6 -15 10 -5 11 0 rrcurveto
14 0 8 7 1 14 rrcurveto
-24 88 -67 48 -84 0 rrcurveto
-92 0 -82 -51 0 -108 rrcurveto
0 -80 45 -53 92 -42 rrcurveto
37 -17 rlineto
114 -52 26 -46 0 -65 rrcurveto
0 -92 -65 -54 -90 0 rrcurveto
18 327 rmoveto
0 428 rlineto
-22 0 rlineto
0 -428 rlineto
22 0 rlineto
-22 -449 rmoveto
22 0 rlineto
0 449 rlineto
-22 0 rlineto
0 -449 rlineto
</CharString>
<CharString name="dollar.a">
311 34 rmoveto
103 0 88 56 0 94 rrcurveto
0 184 -338 -32 0 142 rrcurveto
0 68 57 44 85 0 rrcurveto
76 0 34 -24 44 -38 rrcurveto
20 20 rlineto
-41 38 -45 32 -85 0 rrcurveto
-99 0 -78 -54 0 -88 rrcurveto
0 -166 338 28 0 -156 rrcurveto
0 -70 -56 -50 -103 0 rrcurveto
-85 0 -66 38 -40 34 rrcurveto
-18 -22 rlineto
45 -38 73 -40 91 0 rrcurveto
-70 -146 rmoveto
158 860 rlineto
-30 4 rlineto
-158 -860 rlineto
30 -4 rlineto
</CharString>
</CharStrings>
</CFFFont>
<GlobalSubrs>
<!-- The 'index' attribute is only for humans; it is ignored when parsed. -->
</GlobalSubrs>
</CFF2>
<BASE>
<Version value="0x00010000"/>
<HorizAxis>
<BaseTagList>
<!-- BaseTagCount=2 -->
<BaselineTag index="0" value="ideo"/>
<BaselineTag index="1" value="romn"/>
</BaseTagList>
<BaseScriptList>
<!-- BaseScriptCount=4 -->
<BaseScriptRecord index="0">
<BaseScriptTag value="DFLT"/>
<BaseScript>
<BaseValues>
<DefaultIndex value="1"/>
<!-- BaseCoordCount=2 -->
<BaseCoord index="0" Format="1">
<Coordinate value="-170"/>
</BaseCoord>
<BaseCoord index="1" Format="1">
<Coordinate value="0"/>
</BaseCoord>
</BaseValues>
<!-- BaseLangSysCount=0 -->
</BaseScript>
</BaseScriptRecord>
<BaseScriptRecord index="1">
<BaseScriptTag value="cyrl"/>
<BaseScript>
<BaseValues>
<DefaultIndex value="1"/>
<!-- BaseCoordCount=2 -->
<BaseCoord index="0" Format="1">
<Coordinate value="-170"/>
</BaseCoord>
<BaseCoord index="1" Format="1">
<Coordinate value="0"/>
</BaseCoord>
</BaseValues>
<!-- BaseLangSysCount=0 -->
</BaseScript>
</BaseScriptRecord>
<BaseScriptRecord index="2">
<BaseScriptTag value="grek"/>
<BaseScript>
<BaseValues>
<DefaultIndex value="1"/>
<!-- BaseCoordCount=2 -->
<BaseCoord index="0" Format="1">
<Coordinate value="-170"/>
</BaseCoord>
<BaseCoord index="1" Format="1">
<Coordinate value="0"/>
</BaseCoord>
</BaseValues>
<!-- BaseLangSysCount=0 -->
</BaseScript>
</BaseScriptRecord>
<BaseScriptRecord index="3">
<BaseScriptTag value="latn"/>
<BaseScript>
<BaseValues>
<DefaultIndex value="1"/>
<!-- BaseCoordCount=2 -->
<BaseCoord index="0" Format="1">
<Coordinate value="-170"/>
</BaseCoord>
<BaseCoord index="1" Format="1">
<Coordinate value="0"/>
</BaseCoord>
</BaseValues>
<!-- BaseLangSysCount=0 -->
</BaseScript>
</BaseScriptRecord>
</BaseScriptList>
</HorizAxis>
</BASE>
<GPOS>
<Version value="0x00010000"/>
<ScriptList>
<!-- ScriptCount=1 -->
<ScriptRecord index="0">
<ScriptTag value="DFLT"/>
<Script>
<DefaultLangSys>
<ReqFeatureIndex value="65535"/>
<!-- FeatureCount=1 -->
<FeatureIndex index="0" value="0"/>
</DefaultLangSys>
<!-- LangSysCount=0 -->
</Script>
</ScriptRecord>
</ScriptList>
<FeatureList>
<!-- FeatureCount=1 -->
<FeatureRecord index="0">
<FeatureTag value="size"/>
<Feature>
<FeatureParamsSize>
<DesignSize value="10.0"/>
<SubfamilyID value="0"/>
<SubfamilyNameID value="0"/>
<RangeStart value="0.0"/>
<RangeEnd value="0.0"/>
</FeatureParamsSize>
<!-- LookupCount=0 -->
</Feature>
</FeatureRecord>
</FeatureList>
<LookupList>
<!-- LookupCount=0 -->
</LookupList>
</GPOS>
<GSUB>
<Version value="0x00010000"/>
<ScriptList>
<!-- ScriptCount=1 -->
<ScriptRecord index="0">
<ScriptTag value="DFLT"/>
<Script>
<DefaultLangSys>
<ReqFeatureIndex value="65535"/>
<!-- FeatureCount=1 -->
<FeatureIndex index="0" value="0"/>
</DefaultLangSys>
<!-- LangSysCount=0 -->
</Script>
</ScriptRecord>
</ScriptList>
<FeatureList>
<!-- FeatureCount=1 -->
<FeatureRecord index="0">
<FeatureTag value="test"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="0"/>
</Feature>
</FeatureRecord>
</FeatureList>
<LookupList>
<!-- LookupCount=1 -->
<Lookup index="0">
<LookupType value="1"/>
<LookupFlag value="0"/>
<!-- SubTableCount=1 -->
<SingleSubst index="0" Format="1">
<Substitution in="dollar" out="dollar.a"/>
</SingleSubst>
</Lookup>
</LookupList>
</GSUB>
<hmtx>
<mtx name=".notdef" width="600" lsb="84"/>
<mtx name="A" width="600" lsb="50"/>
<mtx name="T" width="600" lsb="50"/>
<mtx name="dollar" width="490" lsb="53"/>
<mtx name="dollar.a" width="600" lsb="102"/>
</hmtx>
<DSIG>
<!-- note that the Digital Signature will be invalid after recompilation! -->
<tableHeader flag="0x0" numSigs="0" version="1"/>
</DSIG>
</ttFont>

View File

@ -0,0 +1,508 @@
<?xml version="1.0" encoding="UTF-8"?>
<ttFont sfntVersion="OTTO" ttLibVersion="4.2">
<GlyphOrder>
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
<GlyphID id="0" name=".notdef"/>
<GlyphID id="1" name="A"/>
<GlyphID id="2" name="T"/>
<GlyphID id="3" name="dollar.a"/>
<GlyphID id="4" name="dollar"/>
</GlyphOrder>
<head>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="1.0"/>
<fontRevision value="1.01"/>
<checkSumAdjustment value="0x60d07155"/>
<magicNumber value="0x5f0f3cf5"/>
<flags value="00000000 00000011"/>
<unitsPerEm value="1000"/>
<created value="Thu Nov 29 14:52:09 2018"/>
<modified value="Thu Nov 29 14:52:09 2018"/>
<xMin value="31"/>
<yMin value="-115"/>
<xMax value="569"/>
<yMax value="751"/>
<macStyle value="00000000 00000000"/>
<lowestRecPPEM value="3"/>
<fontDirectionHint value="2"/>
<indexToLocFormat value="0"/>
<glyphDataFormat value="0"/>
</head>
<hhea>
<tableVersion value="0x00010000"/>
<ascent value="984"/>
<descent value="-273"/>
<lineGap value="0"/>
<advanceWidthMax value="600"/>
<minLeftSideBearing value="31"/>
<minRightSideBearing value="31"/>
<xMaxExtent value="569"/>
<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="5"/>
</hhea>
<maxp>
<tableVersion value="0x5000"/>
<numGlyphs value="5"/>
</maxp>
<OS_2>
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
will be recalculated by the compiler -->
<version value="3"/>
<xAvgCharWidth value="579"/>
<usWeightClass value="400"/>
<usWidthClass value="5"/>
<fsType value="00000000 00000000"/>
<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="291"/>
<sFamilyClass value="0"/>
<panose>
<bFamilyType value="2"/>
<bSerifStyle value="11"/>
<bWeight value="5"/>
<bProportion value="9"/>
<bContrast value="3"/>
<bStrokeVariation value="4"/>
<bArmStyle value="3"/>
<bLetterForm value="2"/>
<bMidline value="2"/>
<bXHeight value="4"/>
</panose>
<ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
<achVendID value="ADBO"/>
<fsSelection value="00000000 01000000"/>
<usFirstCharIndex value="36"/>
<usLastCharIndex value="84"/>
<sTypoAscender value="750"/>
<sTypoDescender value="-250"/>
<sTypoLineGap value="0"/>
<usWinAscent value="984"/>
<usWinDescent value="273"/>
<ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
<sxHeight value="486"/>
<sCapHeight value="660"/>
<usDefaultChar value="0"/>
<usBreakChar value="32"/>
<usMaxContext value="1"/>
</OS_2>
<name>
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
Source Code Variable
</namerecord>
<namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True">
Regular
</namerecord>
<namerecord nameID="3" platformID="1" platEncID="0" langID="0x0" unicode="True">
1.010;ADBO;SourceCodeVariable-Roman
</namerecord>
<namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True">
Source Code Variable
</namerecord>
<namerecord nameID="5" platformID="1" platEncID="0" langID="0x0" unicode="True">
Version 1.010;hotconv 1.0.109;makeotfexe 2.5.65596
</namerecord>
<namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
SourceCodeVariable-Roman
</namerecord>
<namerecord nameID="17" platformID="1" platEncID="0" langID="0x0" unicode="True">
Roman
</namerecord>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
Source Code Variable
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
Regular
</namerecord>
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
1.010;ADBO;SourceCodeVariable-Roman
</namerecord>
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
Source Code Variable
</namerecord>
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
Version 1.010;hotconv 1.0.109;makeotfexe 2.5.65596
</namerecord>
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
SourceCodeVariable-Roman
</namerecord>
<namerecord nameID="17" platformID="3" platEncID="1" langID="0x409">
Roman
</namerecord>
</name>
<cmap>
<tableVersion version="0"/>
<cmap_format_4 platformID="0" platEncID="3" language="0">
<map code="0x24" name="dollar"/><!-- DOLLAR SIGN -->
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
<map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T -->
</cmap_format_4>
<cmap_format_6 platformID="1" platEncID="0" language="0">
<map code="0x24" name="dollar"/>
<map code="0x41" name="A"/>
<map code="0x54" name="T"/>
</cmap_format_6>
<cmap_format_4 platformID="3" platEncID="1" language="0">
<map code="0x24" name="dollar"/><!-- DOLLAR SIGN -->
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
<map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T -->
</cmap_format_4>
</cmap>
<post>
<formatType value="2.0"/>
<italicAngle value="0.0"/>
<underlinePosition value="-75"/>
<underlineThickness value="50"/>
<isFixedPitch value="1"/>
<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 -->
<psName name="dollar.a"/>
</extraNames>
</post>
<CFF2>
<major value="2"/>
<minor value="0"/>
<CFFFont name="CFF2Font">
<FontMatrix value="0.001 0 0 0.001 0 0"/>
<FDArray>
<FontDict index="0">
<Private>
<BlueValues value="-12 0 486 498 574 586 638 650 656 668 712 724"/>
<OtherBlues value="-217 -205"/>
<BlueScale value="0.0625"/>
<BlueShift value="7"/>
<BlueFuzz value="0"/>
<StdHW value="67"/>
<StdVW value="85"/>
</Private>
</FontDict>
</FDArray>
<CharStrings>
<CharString name=".notdef">
62 0 rmoveto
476 0 rlineto
0 660 rlineto
-476 0 rlineto
0 -660 rlineto
109 59 rmoveto
73 131 rlineto
54 102 rlineto
4 0 rlineto
52 -102 rlineto
73 -131 rlineto
-256 0 rlineto
-44 52 rmoveto
0 461 rlineto
127 -232 rlineto
-127 -229 rlineto
171 277 rmoveto
-50 93 rlineto
-66 119 rlineto
234 0 rlineto
-65 -119 rlineto
-49 -93 rlineto
-4 0 rlineto
48 -48 rmoveto
126 232 rlineto
0 -461 rlineto
-126 229 rlineto
</CharString>
<CharString name="A">
31 0 rmoveto
86 0 rlineto
115 366 rlineto
23 73 21 72 21 76 rrcurveto
4 0 rlineto
20 -76 22 -72 23 -73 rrcurveto
113 -366 rlineto
90 0 rlineto
-221 656 rlineto
-96 0 rlineto
-221 -656 rlineto
117 199 rmoveto
301 0 rlineto
0 68 rlineto
-301 0 rlineto
0 -68 rlineto
</CharString>
<CharString name="T">
258 0 rmoveto
84 0 rlineto
0 585 rlineto
217 0 rlineto
0 71 rlineto
-518 0 rlineto
0 -71 rlineto
217 0 rlineto
0 -585 rlineto
</CharString>
<CharString name="dollar">
-107 248 35 rmoveto
-39 0 -45 5 -46 18 rrcurveto
53 -36 rlineto
-17 76 rlineto
-12 53 -22 13 -24 0 rrcurveto
-22 0 -14 -11 -9 -20 rrcurveto
4 -87 81 -59 107 0 rrcurveto
136 0 82 76 0 107 rrcurveto
0 82 -41 65 -135 47 rrcurveto
-38 13 rlineto
-71 23 -40 35 0 64 rrcurveto
0 75 57 37 74 0 rrcurveto
30 0 36 -5 42 -17 rrcurveto
-52 36 rlineto
17 -76 rlineto
12 -52 25 -14 22 0 rrcurveto
19 0 17 10 8 21 rrcurveto
-6 86 -80 60 -101 0 rrcurveto
-115 0 -83 -80 0 -102 rrcurveto
0 -100 62 -54 105 -37 rrcurveto
37 -13 rlineto
85 -30 36 -30 0 -63 rrcurveto
0 -74 -53 -42 -82 0 rrcurveto
31 287 rmoveto
0 428 rlineto
-40 0 rlineto
0 -428 rlineto
40 0 rlineto
-41 -437 rmoveto
40 0 rlineto
0 437 rlineto
-40 0 rlineto
0 -437 rlineto
</CharString>
<CharString name="dollar.a">
304 34 rmoveto
125 0 86 65 0 96 rrcurveto
0 183 -324 -21 0 110 rrcurveto
0 50 42 32 67 0 rrcurveto
68 0 36 -21 47 -36 rrcurveto
44 49 rlineto
-46 44 -54 33 -89 0 rrcurveto
-115 0 -81 -59 0 -94 rrcurveto
0 -174 324 22 0 -124 rrcurveto
0 -51 -42 -35 -78 0 rrcurveto
-76 0 -62 31 -52 37 rrcurveto
-39 -58 rlineto
52 -43 84 -36 83 0 rrcurveto
-51 -147 rmoveto
159 857 rlineto
-56 7 rlineto
-159 -858 rlineto
56 -6 rlineto
</CharString>
</CharStrings>
</CFFFont>
<GlobalSubrs>
<!-- The 'index' attribute is only for humans; it is ignored when parsed. -->
</GlobalSubrs>
</CFF2>
<BASE>
<Version value="0x00010000"/>
<HorizAxis>
<BaseTagList>
<!-- BaseTagCount=2 -->
<BaselineTag index="0" value="ideo"/>
<BaselineTag index="1" value="romn"/>
</BaseTagList>
<BaseScriptList>
<!-- BaseScriptCount=4 -->
<BaseScriptRecord index="0">
<BaseScriptTag value="DFLT"/>
<BaseScript>
<BaseValues>
<DefaultIndex value="1"/>
<!-- BaseCoordCount=2 -->
<BaseCoord index="0" Format="1">
<Coordinate value="-170"/>
</BaseCoord>
<BaseCoord index="1" Format="1">
<Coordinate value="0"/>
</BaseCoord>
</BaseValues>
<!-- BaseLangSysCount=0 -->
</BaseScript>
</BaseScriptRecord>
<BaseScriptRecord index="1">
<BaseScriptTag value="cyrl"/>
<BaseScript>
<BaseValues>
<DefaultIndex value="1"/>
<!-- BaseCoordCount=2 -->
<BaseCoord index="0" Format="1">
<Coordinate value="-170"/>
</BaseCoord>
<BaseCoord index="1" Format="1">
<Coordinate value="0"/>
</BaseCoord>
</BaseValues>
<!-- BaseLangSysCount=0 -->
</BaseScript>
</BaseScriptRecord>
<BaseScriptRecord index="2">
<BaseScriptTag value="grek"/>
<BaseScript>
<BaseValues>
<DefaultIndex value="1"/>
<!-- BaseCoordCount=2 -->
<BaseCoord index="0" Format="1">
<Coordinate value="-170"/>
</BaseCoord>
<BaseCoord index="1" Format="1">
<Coordinate value="0"/>
</BaseCoord>
</BaseValues>
<!-- BaseLangSysCount=0 -->
</BaseScript>
</BaseScriptRecord>
<BaseScriptRecord index="3">
<BaseScriptTag value="latn"/>
<BaseScript>
<BaseValues>
<DefaultIndex value="1"/>
<!-- BaseCoordCount=2 -->
<BaseCoord index="0" Format="1">
<Coordinate value="-170"/>
</BaseCoord>
<BaseCoord index="1" Format="1">
<Coordinate value="0"/>
</BaseCoord>
</BaseValues>
<!-- BaseLangSysCount=0 -->
</BaseScript>
</BaseScriptRecord>
</BaseScriptList>
</HorizAxis>
</BASE>
<GPOS>
<Version value="0x00010000"/>
<ScriptList>
<!-- ScriptCount=1 -->
<ScriptRecord index="0">
<ScriptTag value="DFLT"/>
<Script>
<DefaultLangSys>
<ReqFeatureIndex value="65535"/>
<!-- FeatureCount=1 -->
<FeatureIndex index="0" value="0"/>
</DefaultLangSys>
<!-- LangSysCount=0 -->
</Script>
</ScriptRecord>
</ScriptList>
<FeatureList>
<!-- FeatureCount=1 -->
<FeatureRecord index="0">
<FeatureTag value="size"/>
<Feature>
<FeatureParamsSize>
<DesignSize value="10.0"/>
<SubfamilyID value="0"/>
<SubfamilyNameID value="0"/>
<RangeStart value="0.0"/>
<RangeEnd value="0.0"/>
</FeatureParamsSize>
<!-- LookupCount=0 -->
</Feature>
</FeatureRecord>
</FeatureList>
<LookupList>
<!-- LookupCount=0 -->
</LookupList>
</GPOS>
<GSUB>
<Version value="0x00010000"/>
<ScriptList>
<!-- ScriptCount=1 -->
<ScriptRecord index="0">
<ScriptTag value="DFLT"/>
<Script>
<DefaultLangSys>
<ReqFeatureIndex value="65535"/>
<!-- FeatureCount=1 -->
<FeatureIndex index="0" value="0"/>
</DefaultLangSys>
<!-- LangSysCount=0 -->
</Script>
</ScriptRecord>
</ScriptList>
<FeatureList>
<!-- FeatureCount=1 -->
<FeatureRecord index="0">
<FeatureTag value="test"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="0"/>
</Feature>
</FeatureRecord>
</FeatureList>
<LookupList>
<!-- LookupCount=1 -->
<Lookup index="0">
<LookupType value="1"/>
<LookupFlag value="0"/>
<!-- SubTableCount=1 -->
<SingleSubst index="0" Format="1">
<Substitution in="dollar" out="dollar.a"/>
</SingleSubst>
</Lookup>
</LookupList>
</GSUB>
<hmtx>
<mtx name=".notdef" width="600" lsb="62"/>
<mtx name="A" width="600" lsb="31"/>
<mtx name="T" width="600" lsb="41"/>
<mtx name="dollar" width="497" lsb="51"/>
<mtx name="dollar.a" width="600" lsb="85"/>
</hmtx>
<DSIG>
<!-- note that the Digital Signature will be invalid after recompilation! -->
<tableHeader flag="0x0" numSigs="0" version="1"/>
</DSIG>
</ttFont>

View File

@ -317,6 +317,28 @@ class BuildTest(unittest.TestCase):
tables = ["fvar", "CFF2"] tables = ["fvar", "CFF2"]
self.expect_ttx(varfont, expected_ttx_path, tables) self.expect_ttx(varfont, expected_ttx_path, tables)
def test_varlib_build_CFF2_from_CFF2(self):
ds_path = self.get_test_input('TestCFF2Input.designspace')
ttx_dir = self.get_test_input("master_cff2_input")
expected_ttx_path = self.get_test_output("BuildTestCFF2.ttx")
self.temp_dir()
for path in self.get_file_list(ttx_dir, '.ttx', 'TestCFF2_'):
self.compile_font(path, ".otf", self.tempdir)
ds = DesignSpaceDocument.fromfile(ds_path)
for source in ds.sources:
source.path = os.path.join(
self.tempdir, os.path.basename(source.filename).replace(".ufo", ".otf")
)
ds.updatePaths()
varfont, _, _ = build(ds)
varfont = reload_font(varfont)
tables = ["fvar", "CFF2"]
self.expect_ttx(varfont, expected_ttx_path, tables)
def test_varlib_build_sparse_CFF2(self): def test_varlib_build_sparse_CFF2(self):
ds_path = self.get_test_input('TestSparseCFF2VF.designspace') ds_path = self.get_test_input('TestSparseCFF2VF.designspace')
ttx_dir = self.get_test_input("master_sparse_cff2") ttx_dir = self.get_test_input("master_sparse_cff2")