[ttx] Tests
This commit is contained in:
parent
076e2ba33a
commit
1a58912a60
3
Tests/ttx/data/TestBOM.ttx
Normal file
3
Tests/ttx/data/TestBOM.ttx
Normal file
@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- file starts with BOM '\xef\xbb\xbf' -->
|
||||
<ttFont />
|
BIN
Tests/ttx/data/TestDFONT.dfont
Normal file
BIN
Tests/ttx/data/TestDFONT.dfont
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.4 KiB |
0
Tests/ttx/data/TestFFIL
Executable file
0
Tests/ttx/data/TestFFIL
Executable file
2
Tests/ttx/data/TestNoSFNT.ttx
Normal file
2
Tests/ttx/data/TestNoSFNT.ttx
Normal file
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ttFont /> <!-- no sfntVersion -->
|
2
Tests/ttx/data/TestNoXML.ttx
Normal file
2
Tests/ttx/data/TestNoXML.ttx
Normal file
@ -0,0 +1,2 @@
|
||||
<!-- no XML header -->
|
||||
<ttFont />
|
BIN
Tests/ttx/data/TestOTF.otf
Normal file
BIN
Tests/ttx/data/TestOTF.otf
Normal file
Binary file not shown.
519
Tests/ttx/data/TestOTF.ttx
Normal file
519
Tests/ttx/data/TestOTF.ttx
Normal file
@ -0,0 +1,519 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ttFont sfntVersion="OTTO">
|
||||
|
||||
<GlyphOrder>
|
||||
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
|
||||
<GlyphID id="0" name=".notdef"/>
|
||||
<GlyphID id="1" name=".null"/>
|
||||
<GlyphID id="2" name="CR"/>
|
||||
<GlyphID id="3" name="space"/>
|
||||
<GlyphID id="4" name="period"/>
|
||||
<GlyphID id="5" name="ellipsis"/>
|
||||
</GlyphOrder>
|
||||
|
||||
<head>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="1.0"/>
|
||||
<fontRevision value="1.0"/>
|
||||
<checkSumAdjustment value="0x34034793"/>
|
||||
<magicNumber value="0x5f0f3cf5"/>
|
||||
<flags value="00000000 00000011"/>
|
||||
<unitsPerEm value="1000"/>
|
||||
<created value="Thu Jun 4 14:29:11 2015"/>
|
||||
<modified value="Sat Aug 1 10:07:17 2015"/>
|
||||
<xMin value="50"/>
|
||||
<yMin value="0"/>
|
||||
<xMax value="668"/>
|
||||
<yMax value="750"/>
|
||||
<macStyle value="00000000 00000000"/>
|
||||
<lowestRecPPEM value="9"/>
|
||||
<fontDirectionHint value="2"/>
|
||||
<indexToLocFormat value="0"/>
|
||||
<glyphDataFormat value="0"/>
|
||||
</head>
|
||||
|
||||
<hhea>
|
||||
<tableVersion value="0x00010000"/>
|
||||
<ascent value="900"/>
|
||||
<descent value="-300"/>
|
||||
<lineGap value="0"/>
|
||||
<advanceWidthMax value="723"/>
|
||||
<minLeftSideBearing value="50"/>
|
||||
<minRightSideBearing value="50"/>
|
||||
<xMaxExtent value="668"/>
|
||||
<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="6"/>
|
||||
</hhea>
|
||||
|
||||
<maxp>
|
||||
<tableVersion value="0x5000"/>
|
||||
<numGlyphs value="6"/>
|
||||
</maxp>
|
||||
|
||||
<OS_2>
|
||||
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
|
||||
will be recalculated by the compiler -->
|
||||
<version value="4"/>
|
||||
<xAvgCharWidth value="392"/>
|
||||
<usWeightClass value="400"/>
|
||||
<usWidthClass value="5"/>
|
||||
<fsType value="00000000 00000000"/>
|
||||
<ySubscriptXSize value="700"/>
|
||||
<ySubscriptYSize value="650"/>
|
||||
<ySubscriptXOffset value="0"/>
|
||||
<ySubscriptYOffset value="140"/>
|
||||
<ySuperscriptXSize value="700"/>
|
||||
<ySuperscriptYSize value="650"/>
|
||||
<ySuperscriptXOffset value="0"/>
|
||||
<ySuperscriptYOffset value="477"/>
|
||||
<yStrikeoutSize value="50"/>
|
||||
<yStrikeoutPosition value="250"/>
|
||||
<sFamilyClass value="2050"/>
|
||||
<panose>
|
||||
<bFamilyType value="2"/>
|
||||
<bSerifStyle value="11"/>
|
||||
<bWeight value="6"/>
|
||||
<bProportion value="4"/>
|
||||
<bContrast value="4"/>
|
||||
<bStrokeVariation value="2"/>
|
||||
<bArmStyle value="7"/>
|
||||
<bLetterForm value="8"/>
|
||||
<bMidline value="1"/>
|
||||
<bXHeight value="4"/>
|
||||
</panose>
|
||||
<ulUnicodeRange1 value="10000000 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 11000000"/>
|
||||
<usFirstCharIndex value="0"/>
|
||||
<usLastCharIndex value="8230"/>
|
||||
<sTypoAscender value="750"/>
|
||||
<sTypoDescender value="-250"/>
|
||||
<sTypoLineGap value="200"/>
|
||||
<usWinAscent value="900"/>
|
||||
<usWinDescent value="300"/>
|
||||
<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>
|
||||
|
||||
<name>
|
||||
<namerecord nameID="0" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Copyright (c) 2015 by FontTools. No rights reserved.
|
||||
</namerecord>
|
||||
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Test OTF
|
||||
</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">
|
||||
FontTools: Test OTF: 2015
|
||||
</namerecord>
|
||||
<namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Test OTF
|
||||
</namerecord>
|
||||
<namerecord nameID="5" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Version 1.000
|
||||
</namerecord>
|
||||
<namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
TestOTF-Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="7" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Test OTF is not a trademark of FontTools.
|
||||
</namerecord>
|
||||
<namerecord nameID="8" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
FontTools
|
||||
</namerecord>
|
||||
<namerecord nameID="9" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
FontTools
|
||||
</namerecord>
|
||||
<namerecord nameID="11" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
https://github.com/behdad/fonttools
|
||||
</namerecord>
|
||||
<namerecord nameID="12" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
https://github.com/behdad/fonttools
|
||||
</namerecord>
|
||||
<namerecord nameID="14" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
https://github.com/behdad/fonttools/blob/master/LICENSE.txt
|
||||
</namerecord>
|
||||
<namerecord nameID="18" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Test TTF
|
||||
</namerecord>
|
||||
<namerecord nameID="0" platformID="3" platEncID="1" langID="0x409">
|
||||
Copyright (c) 2015 by FontTools. No rights reserved.
|
||||
</namerecord>
|
||||
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
|
||||
Test OTF
|
||||
</namerecord>
|
||||
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
|
||||
Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
|
||||
FontTools: Test OTF: 2015
|
||||
</namerecord>
|
||||
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
|
||||
Test OTF
|
||||
</namerecord>
|
||||
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
|
||||
Version 1.000
|
||||
</namerecord>
|
||||
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
|
||||
TestOTF-Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="7" platformID="3" platEncID="1" langID="0x409">
|
||||
Test OTF is not a trademark of FontTools.
|
||||
</namerecord>
|
||||
<namerecord nameID="8" platformID="3" platEncID="1" langID="0x409">
|
||||
FontTools
|
||||
</namerecord>
|
||||
<namerecord nameID="9" platformID="3" platEncID="1" langID="0x409">
|
||||
FontTools
|
||||
</namerecord>
|
||||
<namerecord nameID="11" platformID="3" platEncID="1" langID="0x409">
|
||||
https://github.com/behdad/fonttools
|
||||
</namerecord>
|
||||
<namerecord nameID="12" platformID="3" platEncID="1" langID="0x409">
|
||||
https://github.com/behdad/fonttools
|
||||
</namerecord>
|
||||
<namerecord nameID="14" platformID="3" platEncID="1" langID="0x409">
|
||||
https://github.com/behdad/fonttools/blob/master/LICENSE.txt
|
||||
</namerecord>
|
||||
</name>
|
||||
|
||||
<cmap>
|
||||
<tableVersion version="0"/>
|
||||
<cmap_format_4 platformID="0" platEncID="3" language="0">
|
||||
<map code="0x0" name=".null"/><!-- ???? -->
|
||||
<map code="0xd" name="CR"/><!-- ???? -->
|
||||
<map code="0x20" name="space"/><!-- SPACE -->
|
||||
<map code="0x2e" name="period"/><!-- FULL STOP -->
|
||||
<map code="0x2026" name="ellipsis"/><!-- HORIZONTAL ELLIPSIS -->
|
||||
</cmap_format_4>
|
||||
<cmap_format_6 platformID="1" platEncID="0" language="0">
|
||||
<map code="0x0" name=".null"/>
|
||||
<map code="0x1" name=".notdef"/>
|
||||
<map code="0x2" name=".notdef"/>
|
||||
<map code="0x3" name=".notdef"/>
|
||||
<map code="0x4" name=".notdef"/>
|
||||
<map code="0x5" name=".notdef"/>
|
||||
<map code="0x6" name=".notdef"/>
|
||||
<map code="0x7" name=".notdef"/>
|
||||
<map code="0x8" name=".notdef"/>
|
||||
<map code="0x9" name=".notdef"/>
|
||||
<map code="0xa" name=".notdef"/>
|
||||
<map code="0xb" name=".notdef"/>
|
||||
<map code="0xc" name=".notdef"/>
|
||||
<map code="0xd" name="CR"/>
|
||||
<map code="0xe" name=".notdef"/>
|
||||
<map code="0xf" name=".notdef"/>
|
||||
<map code="0x10" name=".notdef"/>
|
||||
<map code="0x11" name=".notdef"/>
|
||||
<map code="0x12" name=".notdef"/>
|
||||
<map code="0x13" name=".notdef"/>
|
||||
<map code="0x14" name=".notdef"/>
|
||||
<map code="0x15" name=".notdef"/>
|
||||
<map code="0x16" name=".notdef"/>
|
||||
<map code="0x17" name=".notdef"/>
|
||||
<map code="0x18" name=".notdef"/>
|
||||
<map code="0x19" name=".notdef"/>
|
||||
<map code="0x1a" name=".notdef"/>
|
||||
<map code="0x1b" name=".notdef"/>
|
||||
<map code="0x1c" name=".notdef"/>
|
||||
<map code="0x1d" name=".notdef"/>
|
||||
<map code="0x1e" name=".notdef"/>
|
||||
<map code="0x1f" name=".notdef"/>
|
||||
<map code="0x20" name="space"/>
|
||||
<map code="0x21" name=".notdef"/>
|
||||
<map code="0x22" name=".notdef"/>
|
||||
<map code="0x23" name=".notdef"/>
|
||||
<map code="0x24" name=".notdef"/>
|
||||
<map code="0x25" name=".notdef"/>
|
||||
<map code="0x26" name=".notdef"/>
|
||||
<map code="0x27" name=".notdef"/>
|
||||
<map code="0x28" name=".notdef"/>
|
||||
<map code="0x29" name=".notdef"/>
|
||||
<map code="0x2a" name=".notdef"/>
|
||||
<map code="0x2b" name=".notdef"/>
|
||||
<map code="0x2c" name=".notdef"/>
|
||||
<map code="0x2d" name=".notdef"/>
|
||||
<map code="0x2e" name="period"/>
|
||||
<map code="0x2f" name=".notdef"/>
|
||||
<map code="0x30" name=".notdef"/>
|
||||
<map code="0x31" name=".notdef"/>
|
||||
<map code="0x32" name=".notdef"/>
|
||||
<map code="0x33" name=".notdef"/>
|
||||
<map code="0x34" name=".notdef"/>
|
||||
<map code="0x35" name=".notdef"/>
|
||||
<map code="0x36" name=".notdef"/>
|
||||
<map code="0x37" name=".notdef"/>
|
||||
<map code="0x38" name=".notdef"/>
|
||||
<map code="0x39" name=".notdef"/>
|
||||
<map code="0x3a" name=".notdef"/>
|
||||
<map code="0x3b" name=".notdef"/>
|
||||
<map code="0x3c" name=".notdef"/>
|
||||
<map code="0x3d" name=".notdef"/>
|
||||
<map code="0x3e" name=".notdef"/>
|
||||
<map code="0x3f" name=".notdef"/>
|
||||
<map code="0x40" name=".notdef"/>
|
||||
<map code="0x41" name=".notdef"/>
|
||||
<map code="0x42" name=".notdef"/>
|
||||
<map code="0x43" name=".notdef"/>
|
||||
<map code="0x44" name=".notdef"/>
|
||||
<map code="0x45" name=".notdef"/>
|
||||
<map code="0x46" name=".notdef"/>
|
||||
<map code="0x47" name=".notdef"/>
|
||||
<map code="0x48" name=".notdef"/>
|
||||
<map code="0x49" name=".notdef"/>
|
||||
<map code="0x4a" name=".notdef"/>
|
||||
<map code="0x4b" name=".notdef"/>
|
||||
<map code="0x4c" name=".notdef"/>
|
||||
<map code="0x4d" name=".notdef"/>
|
||||
<map code="0x4e" name=".notdef"/>
|
||||
<map code="0x4f" name=".notdef"/>
|
||||
<map code="0x50" name=".notdef"/>
|
||||
<map code="0x51" name=".notdef"/>
|
||||
<map code="0x52" name=".notdef"/>
|
||||
<map code="0x53" name=".notdef"/>
|
||||
<map code="0x54" name=".notdef"/>
|
||||
<map code="0x55" name=".notdef"/>
|
||||
<map code="0x56" name=".notdef"/>
|
||||
<map code="0x57" name=".notdef"/>
|
||||
<map code="0x58" name=".notdef"/>
|
||||
<map code="0x59" name=".notdef"/>
|
||||
<map code="0x5a" name=".notdef"/>
|
||||
<map code="0x5b" name=".notdef"/>
|
||||
<map code="0x5c" name=".notdef"/>
|
||||
<map code="0x5d" name=".notdef"/>
|
||||
<map code="0x5e" name=".notdef"/>
|
||||
<map code="0x5f" name=".notdef"/>
|
||||
<map code="0x60" name=".notdef"/>
|
||||
<map code="0x61" name=".notdef"/>
|
||||
<map code="0x62" name=".notdef"/>
|
||||
<map code="0x63" name=".notdef"/>
|
||||
<map code="0x64" name=".notdef"/>
|
||||
<map code="0x65" name=".notdef"/>
|
||||
<map code="0x66" name=".notdef"/>
|
||||
<map code="0x67" name=".notdef"/>
|
||||
<map code="0x68" name=".notdef"/>
|
||||
<map code="0x69" name=".notdef"/>
|
||||
<map code="0x6a" name=".notdef"/>
|
||||
<map code="0x6b" name=".notdef"/>
|
||||
<map code="0x6c" name=".notdef"/>
|
||||
<map code="0x6d" name=".notdef"/>
|
||||
<map code="0x6e" name=".notdef"/>
|
||||
<map code="0x6f" name=".notdef"/>
|
||||
<map code="0x70" name=".notdef"/>
|
||||
<map code="0x71" name=".notdef"/>
|
||||
<map code="0x72" name=".notdef"/>
|
||||
<map code="0x73" name=".notdef"/>
|
||||
<map code="0x74" name=".notdef"/>
|
||||
<map code="0x75" name=".notdef"/>
|
||||
<map code="0x76" name=".notdef"/>
|
||||
<map code="0x77" name=".notdef"/>
|
||||
<map code="0x78" name=".notdef"/>
|
||||
<map code="0x79" name=".notdef"/>
|
||||
<map code="0x7a" name=".notdef"/>
|
||||
<map code="0x7b" name=".notdef"/>
|
||||
<map code="0x7c" name=".notdef"/>
|
||||
<map code="0x7d" name=".notdef"/>
|
||||
<map code="0x7e" name=".notdef"/>
|
||||
<map code="0x7f" name=".notdef"/>
|
||||
<map code="0x80" name=".notdef"/>
|
||||
<map code="0x81" name=".notdef"/>
|
||||
<map code="0x82" name=".notdef"/>
|
||||
<map code="0x83" name=".notdef"/>
|
||||
<map code="0x84" name=".notdef"/>
|
||||
<map code="0x85" name=".notdef"/>
|
||||
<map code="0x86" name=".notdef"/>
|
||||
<map code="0x87" name=".notdef"/>
|
||||
<map code="0x88" name=".notdef"/>
|
||||
<map code="0x89" name=".notdef"/>
|
||||
<map code="0x8a" name=".notdef"/>
|
||||
<map code="0x8b" name=".notdef"/>
|
||||
<map code="0x8c" name=".notdef"/>
|
||||
<map code="0x8d" name=".notdef"/>
|
||||
<map code="0x8e" name=".notdef"/>
|
||||
<map code="0x8f" name=".notdef"/>
|
||||
<map code="0x90" name=".notdef"/>
|
||||
<map code="0x91" name=".notdef"/>
|
||||
<map code="0x92" name=".notdef"/>
|
||||
<map code="0x93" name=".notdef"/>
|
||||
<map code="0x94" name=".notdef"/>
|
||||
<map code="0x95" name=".notdef"/>
|
||||
<map code="0x96" name=".notdef"/>
|
||||
<map code="0x97" name=".notdef"/>
|
||||
<map code="0x98" name=".notdef"/>
|
||||
<map code="0x99" name=".notdef"/>
|
||||
<map code="0x9a" name=".notdef"/>
|
||||
<map code="0x9b" name=".notdef"/>
|
||||
<map code="0x9c" name=".notdef"/>
|
||||
<map code="0x9d" name=".notdef"/>
|
||||
<map code="0x9e" name=".notdef"/>
|
||||
<map code="0x9f" name=".notdef"/>
|
||||
<map code="0xa0" name=".notdef"/>
|
||||
<map code="0xa1" name=".notdef"/>
|
||||
<map code="0xa2" name=".notdef"/>
|
||||
<map code="0xa3" name=".notdef"/>
|
||||
<map code="0xa4" name=".notdef"/>
|
||||
<map code="0xa5" name=".notdef"/>
|
||||
<map code="0xa6" name=".notdef"/>
|
||||
<map code="0xa7" name=".notdef"/>
|
||||
<map code="0xa8" name=".notdef"/>
|
||||
<map code="0xa9" name=".notdef"/>
|
||||
<map code="0xaa" name=".notdef"/>
|
||||
<map code="0xab" name=".notdef"/>
|
||||
<map code="0xac" name=".notdef"/>
|
||||
<map code="0xad" name=".notdef"/>
|
||||
<map code="0xae" name=".notdef"/>
|
||||
<map code="0xaf" name=".notdef"/>
|
||||
<map code="0xb0" name=".notdef"/>
|
||||
<map code="0xb1" name=".notdef"/>
|
||||
<map code="0xb2" name=".notdef"/>
|
||||
<map code="0xb3" name=".notdef"/>
|
||||
<map code="0xb4" name=".notdef"/>
|
||||
<map code="0xb5" name=".notdef"/>
|
||||
<map code="0xb6" name=".notdef"/>
|
||||
<map code="0xb7" name=".notdef"/>
|
||||
<map code="0xb8" name=".notdef"/>
|
||||
<map code="0xb9" name=".notdef"/>
|
||||
<map code="0xba" name=".notdef"/>
|
||||
<map code="0xbb" name=".notdef"/>
|
||||
<map code="0xbc" name=".notdef"/>
|
||||
<map code="0xbd" name=".notdef"/>
|
||||
<map code="0xbe" name=".notdef"/>
|
||||
<map code="0xbf" name=".notdef"/>
|
||||
<map code="0xc0" name=".notdef"/>
|
||||
<map code="0xc1" name=".notdef"/>
|
||||
<map code="0xc2" name=".notdef"/>
|
||||
<map code="0xc3" name=".notdef"/>
|
||||
<map code="0xc4" name=".notdef"/>
|
||||
<map code="0xc5" name=".notdef"/>
|
||||
<map code="0xc6" name=".notdef"/>
|
||||
<map code="0xc7" name=".notdef"/>
|
||||
<map code="0xc8" name=".notdef"/>
|
||||
<map code="0xc9" name="ellipsis"/>
|
||||
</cmap_format_6>
|
||||
<cmap_format_4 platformID="3" platEncID="1" language="0">
|
||||
<map code="0x0" name=".null"/><!-- ???? -->
|
||||
<map code="0xd" name="CR"/><!-- ???? -->
|
||||
<map code="0x20" name="space"/><!-- SPACE -->
|
||||
<map code="0x2e" name="period"/><!-- FULL STOP -->
|
||||
<map code="0x2026" name="ellipsis"/><!-- HORIZONTAL ELLIPSIS -->
|
||||
</cmap_format_4>
|
||||
</cmap>
|
||||
|
||||
<post>
|
||||
<formatType value="3.0"/>
|
||||
<italicAngle value="0.0"/>
|
||||
<underlinePosition value="-75"/>
|
||||
<underlineThickness value="50"/>
|
||||
<isFixedPitch value="0"/>
|
||||
<minMemType42 value="0"/>
|
||||
<maxMemType42 value="0"/>
|
||||
<minMemType1 value="0"/>
|
||||
<maxMemType1 value="0"/>
|
||||
</post>
|
||||
|
||||
<CFF>
|
||||
<CFFFont name="TestOTF-Regular">
|
||||
<version value="001.001"/>
|
||||
<Notice value="Copyright \(c\) 2015 by FontTools. No rights reserved."/>
|
||||
<FullName value="Test OTF"/>
|
||||
<FamilyName value="Test OTF"/>
|
||||
<Weight value="Regular"/>
|
||||
<isFixedPitch value="0"/>
|
||||
<ItalicAngle value="0"/>
|
||||
<UnderlineThickness value="50"/>
|
||||
<PaintType value="0"/>
|
||||
<CharstringType value="2"/>
|
||||
<FontMatrix value="0.001 0 0 0.001 0 0"/>
|
||||
<FontBBox value="50 0 668 750"/>
|
||||
<StrokeWidth value="0"/>
|
||||
<!-- charset is dumped separately as the 'GlyphOrder' element -->
|
||||
<Encoding name="StandardEncoding"/>
|
||||
<Private>
|
||||
<BlueScale value="0.039625"/>
|
||||
<BlueShift value="7"/>
|
||||
<BlueFuzz value="1"/>
|
||||
<ForceBold value="0"/>
|
||||
<LanguageGroup value="0"/>
|
||||
<ExpansionFactor value="0.06"/>
|
||||
<initialRandomSeed value="0"/>
|
||||
<defaultWidthX value="0"/>
|
||||
<nominalWidthX value="0"/>
|
||||
<Subrs>
|
||||
<!-- The 'index' attribute is only for humans; it is ignored when parsed. -->
|
||||
<CharString index="0">
|
||||
131 122 -131 hlineto
|
||||
return
|
||||
</CharString>
|
||||
</Subrs>
|
||||
</Private>
|
||||
<CharStrings>
|
||||
<CharString name=".notdef">
|
||||
500 450 hmoveto
|
||||
750 -400 -750 vlineto
|
||||
50 50 rmoveto
|
||||
650 300 -650 vlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<CharString name=".null">
|
||||
0 endchar
|
||||
</CharString>
|
||||
<CharString name="CR">
|
||||
250 endchar
|
||||
</CharString>
|
||||
<CharString name="ellipsis">
|
||||
723 55 hmoveto
|
||||
-107 callsubr
|
||||
241 -122 rmoveto
|
||||
-107 callsubr
|
||||
241 -122 rmoveto
|
||||
-107 callsubr
|
||||
endchar
|
||||
</CharString>
|
||||
<CharString name="period">
|
||||
241 55 hmoveto
|
||||
-107 callsubr
|
||||
endchar
|
||||
</CharString>
|
||||
<CharString name="space">
|
||||
250 endchar
|
||||
</CharString>
|
||||
</CharStrings>
|
||||
</CFFFont>
|
||||
|
||||
<GlobalSubrs>
|
||||
<!-- The 'index' attribute is only for humans; it is ignored when parsed. -->
|
||||
</GlobalSubrs>
|
||||
</CFF>
|
||||
|
||||
<hmtx>
|
||||
<mtx name=".notdef" width="500" lsb="50"/>
|
||||
<mtx name=".null" width="0" lsb="0"/>
|
||||
<mtx name="CR" width="250" lsb="0"/>
|
||||
<mtx name="ellipsis" width="723" lsb="55"/>
|
||||
<mtx name="period" width="241" lsb="55"/>
|
||||
<mtx name="space" width="250" lsb="0"/>
|
||||
</hmtx>
|
||||
|
||||
<DSIG>
|
||||
<!-- note that the Digital Signature will be invalid after recompilation! -->
|
||||
<tableHeader flag="0x0" numSigs="0" version="1"/>
|
||||
</DSIG>
|
||||
|
||||
</ttFont>
|
BIN
Tests/ttx/data/TestTTC.ttc
Normal file
BIN
Tests/ttx/data/TestTTC.ttc
Normal file
Binary file not shown.
BIN
Tests/ttx/data/TestTTF.ttf
Normal file
BIN
Tests/ttx/data/TestTTF.ttf
Normal file
Binary file not shown.
553
Tests/ttx/data/TestTTF.ttx
Normal file
553
Tests/ttx/data/TestTTF.ttx
Normal file
@ -0,0 +1,553 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ttFont sfntVersion="\x00\x01\x00\x00">
|
||||
|
||||
<GlyphOrder>
|
||||
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
|
||||
<GlyphID id="0" name=".notdef"/>
|
||||
<GlyphID id="1" name=".null"/>
|
||||
<GlyphID id="2" name="CR"/>
|
||||
<GlyphID id="3" name="space"/>
|
||||
<GlyphID id="4" name="period"/>
|
||||
<GlyphID id="5" name="ellipsis"/>
|
||||
</GlyphOrder>
|
||||
|
||||
<head>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="1.0"/>
|
||||
<fontRevision value="1.0"/>
|
||||
<checkSumAdjustment value="0x2ee689e2"/>
|
||||
<magicNumber value="0x5f0f3cf5"/>
|
||||
<flags value="00000000 00000011"/>
|
||||
<unitsPerEm value="1000"/>
|
||||
<created value="Thu Jun 4 14:29:11 2015"/>
|
||||
<modified value="Mon Aug 3 13:04:43 2015"/>
|
||||
<xMin value="50"/>
|
||||
<yMin value="0"/>
|
||||
<xMax value="668"/>
|
||||
<yMax value="750"/>
|
||||
<macStyle value="00000000 00000000"/>
|
||||
<lowestRecPPEM value="9"/>
|
||||
<fontDirectionHint value="2"/>
|
||||
<indexToLocFormat value="0"/>
|
||||
<glyphDataFormat value="0"/>
|
||||
</head>
|
||||
|
||||
<hhea>
|
||||
<tableVersion value="0x00010000"/>
|
||||
<ascent value="900"/>
|
||||
<descent value="-300"/>
|
||||
<lineGap value="0"/>
|
||||
<advanceWidthMax value="723"/>
|
||||
<minLeftSideBearing value="50"/>
|
||||
<minRightSideBearing value="50"/>
|
||||
<xMaxExtent value="668"/>
|
||||
<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="6"/>
|
||||
</hhea>
|
||||
|
||||
<maxp>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="0x10000"/>
|
||||
<numGlyphs value="6"/>
|
||||
<maxPoints value="8"/>
|
||||
<maxContours value="2"/>
|
||||
<maxCompositePoints value="12"/>
|
||||
<maxCompositeContours value="3"/>
|
||||
<maxZones value="1"/>
|
||||
<maxTwilightPoints value="0"/>
|
||||
<maxStorage value="0"/>
|
||||
<maxFunctionDefs value="0"/>
|
||||
<maxInstructionDefs value="0"/>
|
||||
<maxStackElements value="0"/>
|
||||
<maxSizeOfInstructions value="0"/>
|
||||
<maxComponentElements value="3"/>
|
||||
<maxComponentDepth value="1"/>
|
||||
</maxp>
|
||||
|
||||
<OS_2>
|
||||
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
|
||||
will be recalculated by the compiler -->
|
||||
<version value="4"/>
|
||||
<xAvgCharWidth value="392"/>
|
||||
<usWeightClass value="400"/>
|
||||
<usWidthClass value="5"/>
|
||||
<fsType value="00000000 00000000"/>
|
||||
<ySubscriptXSize value="700"/>
|
||||
<ySubscriptYSize value="650"/>
|
||||
<ySubscriptXOffset value="0"/>
|
||||
<ySubscriptYOffset value="140"/>
|
||||
<ySuperscriptXSize value="700"/>
|
||||
<ySuperscriptYSize value="650"/>
|
||||
<ySuperscriptXOffset value="0"/>
|
||||
<ySuperscriptYOffset value="477"/>
|
||||
<yStrikeoutSize value="50"/>
|
||||
<yStrikeoutPosition value="250"/>
|
||||
<sFamilyClass value="2050"/>
|
||||
<panose>
|
||||
<bFamilyType value="2"/>
|
||||
<bSerifStyle value="11"/>
|
||||
<bWeight value="6"/>
|
||||
<bProportion value="4"/>
|
||||
<bContrast value="4"/>
|
||||
<bStrokeVariation value="2"/>
|
||||
<bArmStyle value="7"/>
|
||||
<bLetterForm value="8"/>
|
||||
<bMidline value="1"/>
|
||||
<bXHeight value="4"/>
|
||||
</panose>
|
||||
<ulUnicodeRange1 value="10000000 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 11000000"/>
|
||||
<usFirstCharIndex value="0"/>
|
||||
<usLastCharIndex value="8230"/>
|
||||
<sTypoAscender value="750"/>
|
||||
<sTypoDescender value="-250"/>
|
||||
<sTypoLineGap value="200"/>
|
||||
<usWinAscent value="900"/>
|
||||
<usWinDescent value="300"/>
|
||||
<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=".null" width="0" lsb="0"/>
|
||||
<mtx name="CR" width="250" lsb="0"/>
|
||||
<mtx name="ellipsis" width="723" lsb="55"/>
|
||||
<mtx name="period" width="241" lsb="55"/>
|
||||
<mtx name="space" width="250" lsb="0"/>
|
||||
</hmtx>
|
||||
|
||||
<cmap>
|
||||
<tableVersion version="0"/>
|
||||
<cmap_format_4 platformID="0" platEncID="3" language="0">
|
||||
<map code="0x0" name=".null"/><!-- ???? -->
|
||||
<map code="0xd" name="CR"/><!-- ???? -->
|
||||
<map code="0x20" name="space"/><!-- SPACE -->
|
||||
<map code="0x2e" name="period"/><!-- FULL STOP -->
|
||||
<map code="0x2026" name="ellipsis"/><!-- HORIZONTAL ELLIPSIS -->
|
||||
</cmap_format_4>
|
||||
<cmap_format_6 platformID="1" platEncID="0" language="0">
|
||||
<map code="0x0" name=".null"/>
|
||||
<map code="0x1" name=".notdef"/>
|
||||
<map code="0x2" name=".notdef"/>
|
||||
<map code="0x3" name=".notdef"/>
|
||||
<map code="0x4" name=".notdef"/>
|
||||
<map code="0x5" name=".notdef"/>
|
||||
<map code="0x6" name=".notdef"/>
|
||||
<map code="0x7" name=".notdef"/>
|
||||
<map code="0x8" name=".notdef"/>
|
||||
<map code="0x9" name=".notdef"/>
|
||||
<map code="0xa" name=".notdef"/>
|
||||
<map code="0xb" name=".notdef"/>
|
||||
<map code="0xc" name=".notdef"/>
|
||||
<map code="0xd" name="CR"/>
|
||||
<map code="0xe" name=".notdef"/>
|
||||
<map code="0xf" name=".notdef"/>
|
||||
<map code="0x10" name=".notdef"/>
|
||||
<map code="0x11" name=".notdef"/>
|
||||
<map code="0x12" name=".notdef"/>
|
||||
<map code="0x13" name=".notdef"/>
|
||||
<map code="0x14" name=".notdef"/>
|
||||
<map code="0x15" name=".notdef"/>
|
||||
<map code="0x16" name=".notdef"/>
|
||||
<map code="0x17" name=".notdef"/>
|
||||
<map code="0x18" name=".notdef"/>
|
||||
<map code="0x19" name=".notdef"/>
|
||||
<map code="0x1a" name=".notdef"/>
|
||||
<map code="0x1b" name=".notdef"/>
|
||||
<map code="0x1c" name=".notdef"/>
|
||||
<map code="0x1d" name=".notdef"/>
|
||||
<map code="0x1e" name=".notdef"/>
|
||||
<map code="0x1f" name=".notdef"/>
|
||||
<map code="0x20" name="space"/>
|
||||
<map code="0x21" name=".notdef"/>
|
||||
<map code="0x22" name=".notdef"/>
|
||||
<map code="0x23" name=".notdef"/>
|
||||
<map code="0x24" name=".notdef"/>
|
||||
<map code="0x25" name=".notdef"/>
|
||||
<map code="0x26" name=".notdef"/>
|
||||
<map code="0x27" name=".notdef"/>
|
||||
<map code="0x28" name=".notdef"/>
|
||||
<map code="0x29" name=".notdef"/>
|
||||
<map code="0x2a" name=".notdef"/>
|
||||
<map code="0x2b" name=".notdef"/>
|
||||
<map code="0x2c" name=".notdef"/>
|
||||
<map code="0x2d" name=".notdef"/>
|
||||
<map code="0x2e" name="period"/>
|
||||
<map code="0x2f" name=".notdef"/>
|
||||
<map code="0x30" name=".notdef"/>
|
||||
<map code="0x31" name=".notdef"/>
|
||||
<map code="0x32" name=".notdef"/>
|
||||
<map code="0x33" name=".notdef"/>
|
||||
<map code="0x34" name=".notdef"/>
|
||||
<map code="0x35" name=".notdef"/>
|
||||
<map code="0x36" name=".notdef"/>
|
||||
<map code="0x37" name=".notdef"/>
|
||||
<map code="0x38" name=".notdef"/>
|
||||
<map code="0x39" name=".notdef"/>
|
||||
<map code="0x3a" name=".notdef"/>
|
||||
<map code="0x3b" name=".notdef"/>
|
||||
<map code="0x3c" name=".notdef"/>
|
||||
<map code="0x3d" name=".notdef"/>
|
||||
<map code="0x3e" name=".notdef"/>
|
||||
<map code="0x3f" name=".notdef"/>
|
||||
<map code="0x40" name=".notdef"/>
|
||||
<map code="0x41" name=".notdef"/>
|
||||
<map code="0x42" name=".notdef"/>
|
||||
<map code="0x43" name=".notdef"/>
|
||||
<map code="0x44" name=".notdef"/>
|
||||
<map code="0x45" name=".notdef"/>
|
||||
<map code="0x46" name=".notdef"/>
|
||||
<map code="0x47" name=".notdef"/>
|
||||
<map code="0x48" name=".notdef"/>
|
||||
<map code="0x49" name=".notdef"/>
|
||||
<map code="0x4a" name=".notdef"/>
|
||||
<map code="0x4b" name=".notdef"/>
|
||||
<map code="0x4c" name=".notdef"/>
|
||||
<map code="0x4d" name=".notdef"/>
|
||||
<map code="0x4e" name=".notdef"/>
|
||||
<map code="0x4f" name=".notdef"/>
|
||||
<map code="0x50" name=".notdef"/>
|
||||
<map code="0x51" name=".notdef"/>
|
||||
<map code="0x52" name=".notdef"/>
|
||||
<map code="0x53" name=".notdef"/>
|
||||
<map code="0x54" name=".notdef"/>
|
||||
<map code="0x55" name=".notdef"/>
|
||||
<map code="0x56" name=".notdef"/>
|
||||
<map code="0x57" name=".notdef"/>
|
||||
<map code="0x58" name=".notdef"/>
|
||||
<map code="0x59" name=".notdef"/>
|
||||
<map code="0x5a" name=".notdef"/>
|
||||
<map code="0x5b" name=".notdef"/>
|
||||
<map code="0x5c" name=".notdef"/>
|
||||
<map code="0x5d" name=".notdef"/>
|
||||
<map code="0x5e" name=".notdef"/>
|
||||
<map code="0x5f" name=".notdef"/>
|
||||
<map code="0x60" name=".notdef"/>
|
||||
<map code="0x61" name=".notdef"/>
|
||||
<map code="0x62" name=".notdef"/>
|
||||
<map code="0x63" name=".notdef"/>
|
||||
<map code="0x64" name=".notdef"/>
|
||||
<map code="0x65" name=".notdef"/>
|
||||
<map code="0x66" name=".notdef"/>
|
||||
<map code="0x67" name=".notdef"/>
|
||||
<map code="0x68" name=".notdef"/>
|
||||
<map code="0x69" name=".notdef"/>
|
||||
<map code="0x6a" name=".notdef"/>
|
||||
<map code="0x6b" name=".notdef"/>
|
||||
<map code="0x6c" name=".notdef"/>
|
||||
<map code="0x6d" name=".notdef"/>
|
||||
<map code="0x6e" name=".notdef"/>
|
||||
<map code="0x6f" name=".notdef"/>
|
||||
<map code="0x70" name=".notdef"/>
|
||||
<map code="0x71" name=".notdef"/>
|
||||
<map code="0x72" name=".notdef"/>
|
||||
<map code="0x73" name=".notdef"/>
|
||||
<map code="0x74" name=".notdef"/>
|
||||
<map code="0x75" name=".notdef"/>
|
||||
<map code="0x76" name=".notdef"/>
|
||||
<map code="0x77" name=".notdef"/>
|
||||
<map code="0x78" name=".notdef"/>
|
||||
<map code="0x79" name=".notdef"/>
|
||||
<map code="0x7a" name=".notdef"/>
|
||||
<map code="0x7b" name=".notdef"/>
|
||||
<map code="0x7c" name=".notdef"/>
|
||||
<map code="0x7d" name=".notdef"/>
|
||||
<map code="0x7e" name=".notdef"/>
|
||||
<map code="0x7f" name=".notdef"/>
|
||||
<map code="0x80" name=".notdef"/>
|
||||
<map code="0x81" name=".notdef"/>
|
||||
<map code="0x82" name=".notdef"/>
|
||||
<map code="0x83" name=".notdef"/>
|
||||
<map code="0x84" name=".notdef"/>
|
||||
<map code="0x85" name=".notdef"/>
|
||||
<map code="0x86" name=".notdef"/>
|
||||
<map code="0x87" name=".notdef"/>
|
||||
<map code="0x88" name=".notdef"/>
|
||||
<map code="0x89" name=".notdef"/>
|
||||
<map code="0x8a" name=".notdef"/>
|
||||
<map code="0x8b" name=".notdef"/>
|
||||
<map code="0x8c" name=".notdef"/>
|
||||
<map code="0x8d" name=".notdef"/>
|
||||
<map code="0x8e" name=".notdef"/>
|
||||
<map code="0x8f" name=".notdef"/>
|
||||
<map code="0x90" name=".notdef"/>
|
||||
<map code="0x91" name=".notdef"/>
|
||||
<map code="0x92" name=".notdef"/>
|
||||
<map code="0x93" name=".notdef"/>
|
||||
<map code="0x94" name=".notdef"/>
|
||||
<map code="0x95" name=".notdef"/>
|
||||
<map code="0x96" name=".notdef"/>
|
||||
<map code="0x97" name=".notdef"/>
|
||||
<map code="0x98" name=".notdef"/>
|
||||
<map code="0x99" name=".notdef"/>
|
||||
<map code="0x9a" name=".notdef"/>
|
||||
<map code="0x9b" name=".notdef"/>
|
||||
<map code="0x9c" name=".notdef"/>
|
||||
<map code="0x9d" name=".notdef"/>
|
||||
<map code="0x9e" name=".notdef"/>
|
||||
<map code="0x9f" name=".notdef"/>
|
||||
<map code="0xa0" name=".notdef"/>
|
||||
<map code="0xa1" name=".notdef"/>
|
||||
<map code="0xa2" name=".notdef"/>
|
||||
<map code="0xa3" name=".notdef"/>
|
||||
<map code="0xa4" name=".notdef"/>
|
||||
<map code="0xa5" name=".notdef"/>
|
||||
<map code="0xa6" name=".notdef"/>
|
||||
<map code="0xa7" name=".notdef"/>
|
||||
<map code="0xa8" name=".notdef"/>
|
||||
<map code="0xa9" name=".notdef"/>
|
||||
<map code="0xaa" name=".notdef"/>
|
||||
<map code="0xab" name=".notdef"/>
|
||||
<map code="0xac" name=".notdef"/>
|
||||
<map code="0xad" name=".notdef"/>
|
||||
<map code="0xae" name=".notdef"/>
|
||||
<map code="0xaf" name=".notdef"/>
|
||||
<map code="0xb0" name=".notdef"/>
|
||||
<map code="0xb1" name=".notdef"/>
|
||||
<map code="0xb2" name=".notdef"/>
|
||||
<map code="0xb3" name=".notdef"/>
|
||||
<map code="0xb4" name=".notdef"/>
|
||||
<map code="0xb5" name=".notdef"/>
|
||||
<map code="0xb6" name=".notdef"/>
|
||||
<map code="0xb7" name=".notdef"/>
|
||||
<map code="0xb8" name=".notdef"/>
|
||||
<map code="0xb9" name=".notdef"/>
|
||||
<map code="0xba" name=".notdef"/>
|
||||
<map code="0xbb" name=".notdef"/>
|
||||
<map code="0xbc" name=".notdef"/>
|
||||
<map code="0xbd" name=".notdef"/>
|
||||
<map code="0xbe" name=".notdef"/>
|
||||
<map code="0xbf" name=".notdef"/>
|
||||
<map code="0xc0" name=".notdef"/>
|
||||
<map code="0xc1" name=".notdef"/>
|
||||
<map code="0xc2" name=".notdef"/>
|
||||
<map code="0xc3" name=".notdef"/>
|
||||
<map code="0xc4" name=".notdef"/>
|
||||
<map code="0xc5" name=".notdef"/>
|
||||
<map code="0xc6" name=".notdef"/>
|
||||
<map code="0xc7" name=".notdef"/>
|
||||
<map code="0xc8" name=".notdef"/>
|
||||
<map code="0xc9" name="ellipsis"/>
|
||||
</cmap_format_6>
|
||||
<cmap_format_4 platformID="3" platEncID="1" language="0">
|
||||
<map code="0x0" name=".null"/><!-- ???? -->
|
||||
<map code="0xd" name="CR"/><!-- ???? -->
|
||||
<map code="0x20" name="space"/><!-- SPACE -->
|
||||
<map code="0x2e" name="period"/><!-- FULL STOP -->
|
||||
<map code="0x2026" name="ellipsis"/><!-- HORIZONTAL ELLIPSIS -->
|
||||
</cmap_format_4>
|
||||
</cmap>
|
||||
|
||||
<fpgm>
|
||||
<assembly>
|
||||
SVTCA[0] /* SetFPVectorToAxis */
|
||||
</assembly>
|
||||
</fpgm>
|
||||
|
||||
<prep>
|
||||
<assembly>
|
||||
SVTCA[0] /* SetFPVectorToAxis */
|
||||
</assembly>
|
||||
</prep>
|
||||
|
||||
<cvt>
|
||||
<cv index="0" value="0"/>
|
||||
</cvt>
|
||||
|
||||
<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="0" xMax="450" yMax="750">
|
||||
<contour>
|
||||
<pt x="50" y="0" on="1"/>
|
||||
<pt x="50" y="750" on="1"/>
|
||||
<pt x="450" y="750" on="1"/>
|
||||
<pt x="450" y="0" on="1"/>
|
||||
</contour>
|
||||
<contour>
|
||||
<pt x="400" y="50" on="1"/>
|
||||
<pt x="400" y="700" on="1"/>
|
||||
<pt x="100" y="700" on="1"/>
|
||||
<pt x="100" y="50" on="1"/>
|
||||
</contour>
|
||||
<instructions><assembly>
|
||||
SVTCA[0] /* SetFPVectorToAxis */
|
||||
SVTCA[1] /* SetFPVectorToAxis */
|
||||
</assembly></instructions>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name=".null"/><!-- contains no outline data -->
|
||||
|
||||
<TTGlyph name="CR"/><!-- contains no outline data -->
|
||||
|
||||
<TTGlyph name="ellipsis" xMin="55" yMin="0" xMax="668" yMax="122">
|
||||
<component glyphName="period" x="0" y="0" flags="0x4"/>
|
||||
<component glyphName="period" x="241" y="0" flags="0x4"/>
|
||||
<component glyphName="period" x="482" y="0" flags="0x4"/>
|
||||
<instructions><assembly>
|
||||
SVTCA[0] /* SetFPVectorToAxis */
|
||||
SVTCA[1] /* SetFPVectorToAxis */
|
||||
</assembly></instructions>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="period" xMin="55" yMin="0" xMax="186" yMax="122">
|
||||
<contour>
|
||||
<pt x="55" y="122" on="1"/>
|
||||
<pt x="186" y="122" on="1"/>
|
||||
<pt x="186" y="0" on="1"/>
|
||||
<pt x="55" y="0" on="1"/>
|
||||
</contour>
|
||||
<instructions><assembly>
|
||||
SVTCA[0] /* SetFPVectorToAxis */
|
||||
SVTCA[1] /* SetFPVectorToAxis */
|
||||
</assembly></instructions>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="space"/><!-- contains no outline data -->
|
||||
|
||||
</glyf>
|
||||
|
||||
<name>
|
||||
<namerecord nameID="0" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Copyright (c) 2015 by FontTools. No rights reserved.
|
||||
</namerecord>
|
||||
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Test TTF
|
||||
</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">
|
||||
FontTools: Test TTF: 2015
|
||||
</namerecord>
|
||||
<namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Test TTF
|
||||
</namerecord>
|
||||
<namerecord nameID="5" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Version 1.000
|
||||
</namerecord>
|
||||
<namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
TestTTF-Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="7" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Test TTF is not a trademark of FontTools.
|
||||
</namerecord>
|
||||
<namerecord nameID="8" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
FontTools
|
||||
</namerecord>
|
||||
<namerecord nameID="9" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
FontTools
|
||||
</namerecord>
|
||||
<namerecord nameID="11" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
https://github.com/behdad/fonttools
|
||||
</namerecord>
|
||||
<namerecord nameID="12" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
https://github.com/behdad/fonttools
|
||||
</namerecord>
|
||||
<namerecord nameID="14" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
https://github.com/behdad/fonttools/blob/master/LICENSE.txt
|
||||
</namerecord>
|
||||
<namerecord nameID="18" platformID="1" platEncID="0" langID="0x0" unicode="True">
|
||||
Test TTF
|
||||
</namerecord>
|
||||
<namerecord nameID="0" platformID="3" platEncID="1" langID="0x409">
|
||||
Copyright (c) 2015 by FontTools. No rights reserved.
|
||||
</namerecord>
|
||||
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
|
||||
Test TTF
|
||||
</namerecord>
|
||||
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
|
||||
Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
|
||||
FontTools: Test TTF: 2015
|
||||
</namerecord>
|
||||
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
|
||||
Test TTF
|
||||
</namerecord>
|
||||
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
|
||||
Version 1.000
|
||||
</namerecord>
|
||||
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
|
||||
TestTTF-Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="7" platformID="3" platEncID="1" langID="0x409">
|
||||
Test TTF is not a trademark of FontTools.
|
||||
</namerecord>
|
||||
<namerecord nameID="8" platformID="3" platEncID="1" langID="0x409">
|
||||
FontTools
|
||||
</namerecord>
|
||||
<namerecord nameID="9" platformID="3" platEncID="1" langID="0x409">
|
||||
FontTools
|
||||
</namerecord>
|
||||
<namerecord nameID="11" platformID="3" platEncID="1" langID="0x409">
|
||||
https://github.com/behdad/fonttools
|
||||
</namerecord>
|
||||
<namerecord nameID="12" platformID="3" platEncID="1" langID="0x409">
|
||||
https://github.com/behdad/fonttools
|
||||
</namerecord>
|
||||
<namerecord nameID="14" platformID="3" platEncID="1" langID="0x409">
|
||||
https://github.com/behdad/fonttools/blob/master/LICENSE.txt
|
||||
</namerecord>
|
||||
</name>
|
||||
|
||||
<post>
|
||||
<formatType value="2.0"/>
|
||||
<italicAngle value="0.0"/>
|
||||
<underlinePosition value="-75"/>
|
||||
<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 -->
|
||||
<psName name=".null"/>
|
||||
<psName name="CR"/>
|
||||
</extraNames>
|
||||
</post>
|
||||
|
||||
<gasp>
|
||||
<gaspRange rangeMaxPPEM="8" rangeGaspBehavior="10"/>
|
||||
<gaspRange rangeMaxPPEM="65535" rangeGaspBehavior="15"/>
|
||||
</gasp>
|
||||
|
||||
<DSIG>
|
||||
<!-- note that the Digital Signature will be invalid after recompilation! -->
|
||||
<tableHeader flag="0x0" numSigs="0" version="1"/>
|
||||
</DSIG>
|
||||
|
||||
</ttFont>
|
BIN
Tests/ttx/data/TestWOFF.woff
Normal file
BIN
Tests/ttx/data/TestWOFF.woff
Normal file
Binary file not shown.
BIN
Tests/ttx/data/TestWOFF2.woff2
Normal file
BIN
Tests/ttx/data/TestWOFF2.woff2
Normal file
Binary file not shown.
202
Tests/ttx/ttx_test.py
Normal file
202
Tests/ttx/ttx_test.py
Normal file
@ -0,0 +1,202 @@
|
||||
from __future__ import print_function, division, absolute_import
|
||||
from fontTools.misc.py23 import *
|
||||
from fontTools import ttx
|
||||
import getopt
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
|
||||
try:
|
||||
import xattr
|
||||
except ImportError:
|
||||
xattr = None
|
||||
try:
|
||||
import MacOS
|
||||
except ImportError:
|
||||
MacOS = None
|
||||
|
||||
|
||||
class TTXTest(unittest.TestCase):
|
||||
def __init__(self, methodName):
|
||||
unittest.TestCase.__init__(self, methodName)
|
||||
# Python 3 renamed assertRaisesRegexp to assertRaisesRegex,
|
||||
# and fires deprecation warnings if a program uses the old name.
|
||||
if not hasattr(self, "assertRaisesRegex"):
|
||||
self.assertRaisesRegex = self.assertRaisesRegexp
|
||||
|
||||
def setUp(self):
|
||||
self.tempdir = None
|
||||
self.num_tempfiles = 0
|
||||
|
||||
def tearDown(self):
|
||||
if self.tempdir:
|
||||
shutil.rmtree(self.tempdir)
|
||||
|
||||
@staticmethod
|
||||
def getpath(testfile):
|
||||
path, _ = os.path.split(__file__)
|
||||
return os.path.join(path, "data", testfile)
|
||||
|
||||
def temp_dir(self):
|
||||
if not self.tempdir:
|
||||
self.tempdir = tempfile.mkdtemp()
|
||||
|
||||
def temp_font(self, font_path, file_name):
|
||||
self.temp_dir()
|
||||
temppath = os.path.join(self.tempdir, file_name)
|
||||
shutil.copy2(font_path, temppath)
|
||||
return temppath
|
||||
|
||||
# -----
|
||||
# Tests
|
||||
# -----
|
||||
|
||||
def test_parseOptions_no_args(self):
|
||||
with self.assertRaises(getopt.GetoptError) as cm:
|
||||
ttx.parseOptions([])
|
||||
self.assertTrue('Must specify at least one input file' in str(cm.exception))
|
||||
|
||||
def test_parseOptions_invalid_path(self):
|
||||
file_path = 'invalid_font_path'
|
||||
with self.assertRaises(getopt.GetoptError) as cm:
|
||||
ttx.parseOptions([file_path])
|
||||
self.assertTrue('File not found: "%s"' % file_path in str(cm.exception))
|
||||
|
||||
def test_parseOptions_font2ttx_1st_time(self):
|
||||
file_name = 'TestOTF.otf'
|
||||
font_path = self.getpath(file_name)
|
||||
temp_path = self.temp_font(font_path, file_name)
|
||||
jobs, _ = ttx.parseOptions([temp_path])
|
||||
self.assertEqual(jobs[0][0].__name__, 'ttDump')
|
||||
self.assertEqual(jobs[0][1:],
|
||||
(os.path.join(self.tempdir, file_name),
|
||||
os.path.join(self.tempdir, file_name.split('.')[0] + '.ttx')))
|
||||
|
||||
def test_parseOptions_font2ttx_2nd_time(self):
|
||||
file_name = 'TestTTF.ttf'
|
||||
font_path = self.getpath(file_name)
|
||||
temp_path = self.temp_font(font_path, file_name)
|
||||
_, _ = ttx.parseOptions([temp_path]) # this is NOT a mistake
|
||||
jobs, _ = ttx.parseOptions([temp_path])
|
||||
self.assertEqual(jobs[0][0].__name__, 'ttDump')
|
||||
self.assertEqual(jobs[0][1:],
|
||||
(os.path.join(self.tempdir, file_name),
|
||||
os.path.join(self.tempdir, file_name.split('.')[0] + '#1.ttx')))
|
||||
|
||||
def test_parseOptions_ttx2font_1st_time(self):
|
||||
file_name = 'TestTTF.ttx'
|
||||
font_path = self.getpath(file_name)
|
||||
temp_path = self.temp_font(font_path, file_name)
|
||||
jobs, _ = ttx.parseOptions([temp_path])
|
||||
self.assertEqual(jobs[0][0].__name__, 'ttCompile')
|
||||
self.assertEqual(jobs[0][1:],
|
||||
(os.path.join(self.tempdir, file_name),
|
||||
os.path.join(self.tempdir, file_name.split('.')[0] + '.ttf')))
|
||||
|
||||
def test_parseOptions_ttx2font_2nd_time(self):
|
||||
file_name = 'TestOTF.ttx'
|
||||
font_path = self.getpath(file_name)
|
||||
temp_path = self.temp_font(font_path, file_name)
|
||||
_, _ = ttx.parseOptions([temp_path]) # this is NOT a mistake
|
||||
jobs, _ = ttx.parseOptions([temp_path])
|
||||
self.assertEqual(jobs[0][0].__name__, 'ttCompile')
|
||||
self.assertEqual(jobs[0][1:],
|
||||
(os.path.join(self.tempdir, file_name),
|
||||
os.path.join(self.tempdir, file_name.split('.')[0] + '#1.otf')))
|
||||
|
||||
def test_parseOptions_multiple_fonts(self):
|
||||
file_names = ['TestOTF.otf', 'TestTTF.ttf']
|
||||
font_paths = [self.getpath(file_name) for file_name in file_names]
|
||||
temp_paths = [self.temp_font(font_path, file_name) \
|
||||
for font_path, file_name in zip(font_paths, file_names)]
|
||||
jobs, _ = ttx.parseOptions(temp_paths)
|
||||
for i in range(len(jobs)):
|
||||
self.assertEqual(jobs[i][0].__name__, 'ttDump')
|
||||
self.assertEqual(jobs[i][1:],
|
||||
(os.path.join(self.tempdir, file_names[i]),
|
||||
os.path.join(self.tempdir, file_names[i].split('.')[0] + '.ttx')))
|
||||
|
||||
def test_parseOptions_mixed_files(self):
|
||||
operations = ['ttDump', 'ttCompile']
|
||||
extensions = ['.ttx', '.ttf']
|
||||
file_names = ['TestOTF.otf', 'TestTTF.ttx']
|
||||
font_paths = [self.getpath(file_name) for file_name in file_names]
|
||||
temp_paths = [self.temp_font(font_path, file_name) \
|
||||
for font_path, file_name in zip(font_paths, file_names)]
|
||||
jobs, _ = ttx.parseOptions(temp_paths)
|
||||
for i in range(len(jobs)):
|
||||
self.assertEqual(jobs[i][0].__name__, operations[i])
|
||||
self.assertEqual(jobs[i][1:],
|
||||
(os.path.join(self.tempdir, file_names[i]),
|
||||
os.path.join(self.tempdir, file_names[i].split('.')[0] + extensions[i])))
|
||||
|
||||
def test_guessFileType_ttf(self):
|
||||
file_name = 'TestTTF.ttf'
|
||||
font_path = self.getpath(file_name)
|
||||
self.assertEqual(ttx.guessFileType(font_path), 'TTF')
|
||||
|
||||
def test_guessFileType_otf(self):
|
||||
file_name = 'TestOTF.otf'
|
||||
font_path = self.getpath(file_name)
|
||||
self.assertEqual(ttx.guessFileType(font_path), 'OTF')
|
||||
|
||||
def test_guessFileType_woff(self):
|
||||
file_name = 'TestWOFF.woff'
|
||||
font_path = self.getpath(file_name)
|
||||
self.assertEqual(ttx.guessFileType(font_path), 'WOFF')
|
||||
|
||||
def test_guessFileType_woff2(self):
|
||||
file_name = 'TestWOFF2.woff2'
|
||||
font_path = self.getpath(file_name)
|
||||
self.assertEqual(ttx.guessFileType(font_path), 'WOFF2')
|
||||
|
||||
def test_guessFileType_ttc(self):
|
||||
file_name = 'TestTTC.ttc'
|
||||
font_path = self.getpath(file_name)
|
||||
self.assertEqual(ttx.guessFileType(font_path), 'TTC')
|
||||
|
||||
def test_guessFileType_dfont(self):
|
||||
file_name = 'TestDFONT.dfont'
|
||||
font_path = self.getpath(file_name)
|
||||
self.assertEqual(ttx.guessFileType(font_path), 'TTF')
|
||||
|
||||
@unittest.skipUnless(xattr or MacOS, "xattr or MacOS not installed")
|
||||
def test_guessFileType_ffil(self):
|
||||
file_name = 'TestFFIL'
|
||||
font_path = self.getpath(file_name)
|
||||
self.assertEqual(ttx.guessFileType(font_path), 'TTF')
|
||||
|
||||
def test_guessFileType_ttx_ttf(self):
|
||||
file_name = 'TestTTF.ttx'
|
||||
font_path = self.getpath(file_name)
|
||||
self.assertEqual(ttx.guessFileType(font_path), 'TTX')
|
||||
|
||||
def test_guessFileType_ttx_otf(self):
|
||||
file_name = 'TestOTF.ttx'
|
||||
font_path = self.getpath(file_name)
|
||||
self.assertEqual(ttx.guessFileType(font_path), 'OTX')
|
||||
|
||||
def test_guessFileType_ttx_bom(self):
|
||||
file_name = 'TestBOM.ttx'
|
||||
font_path = self.getpath(file_name)
|
||||
self.assertEqual(ttx.guessFileType(font_path), 'TTX')
|
||||
|
||||
def test_guessFileType_ttx_no_sfntVersion(self):
|
||||
file_name = 'TestNoSFNT.ttx'
|
||||
font_path = self.getpath(file_name)
|
||||
self.assertEqual(ttx.guessFileType(font_path), 'TTX')
|
||||
|
||||
def test_guessFileType_ttx_no_xml(self):
|
||||
file_name = 'TestNoXML.ttx'
|
||||
font_path = self.getpath(file_name)
|
||||
self.assertIsNone(ttx.guessFileType(font_path))
|
||||
|
||||
def test_guessFileType_invalid_path(self):
|
||||
font_path = 'invalid_font_path'
|
||||
self.assertIsNone(ttx.guessFileType(font_path))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(unittest.main())
|
Loading…
x
Reference in New Issue
Block a user