font/sfnt: use ../testdata/cmapTest.ttf.

The index numbers can be verified by running ttx over the ttf file:

<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="nonmarkingreturn"/>
<GlyphID id="3" name="zero"/>
<GlyphID id="4" name="one"/>
<GlyphID id="5" name="two"/>
<GlyphID id="6" name="A"/>
<GlyphID id="7" name="B"/>
<GlyphID id="8" name="a"/>
<GlyphID id="9" name="ydieresis"/>
<GlyphID id="10" name="Amacron"/>
<GlyphID id="11" name="amacron"/>
<GlyphID id="12" name="uni4E2D"/>
<GlyphID id="13" name="u1F0A1"/>
<GlyphID id="14" name="u1F0B1"/>
<GlyphID id="15" name="u1F0B2"/>
</GlyphOrder>

Change-Id: I8c3b3f09ca25c14d92725d121481287cf57d0d01
Reviewed-on: https://go-review.googlesource.com/36080
Reviewed-by: David Crawshaw <crawshaw@golang.org>
This commit is contained in:
Nigel Tao 2017-02-02 19:04:00 +11:00
parent 69afd001f7
commit 55ae12acc9
4 changed files with 319 additions and 14 deletions

View File

@ -19,6 +19,9 @@ const (
psidUnicode2BMPOnly = 3 psidUnicode2BMPOnly = 3
psidUnicode2FullRepertoire = 4 psidUnicode2FullRepertoire = 4
// Note that FontForge may generate a bogus Platform Specific ID (value 10)
// for the Unicode Platform ID (value 0). See
// https://github.com/fontforge/fontforge/issues/2728
psidMacintoshRoman = 0 psidMacintoshRoman = 0

View File

@ -89,7 +89,7 @@ func testTrueType(t *testing.T, f *Font) {
} }
func TestGlyphIndex(t *testing.T) { func TestGlyphIndex(t *testing.T) {
data, err := ioutil.ReadFile(filepath.FromSlash("../testdata/CFFTest.otf")) data, err := ioutil.ReadFile(filepath.FromSlash("../testdata/cmapTest.ttf"))
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -120,27 +120,64 @@ func testGlyphIndex(t *testing.T, data []byte, cmapFormat int) {
r rune r rune
want GlyphIndex want GlyphIndex
}{ }{
{'0', 1}, // Glyphs that aren't present in cmapTest.ttf.
{'1', 2},
{'Q', 3},
// TODO: add the U+00E0 non-ASCII Latin-1 Supplement rune to
// CFFTest.otf and change 0 to something non-zero.
{'\u00e0', 0},
{'\u4e2d', 4},
// TODO: add a rune >= U+00010000 to CFFTest.otf?
// Glyphs that aren't present in CFFTest.otf.
{'?', 0}, {'?', 0},
{'\ufffd', 0}, {'\ufffd', 0},
{'\U0001f4a9', 0}, {'\U0001f4a9', 0},
// For a .TTF file, FontForge maps:
// - ".notdef" to glyph index 0.
// - ".null" to glyph index 1.
// - "nonmarkingreturn" to glyph index 2.
{'/', 0},
{'0', 3},
{'1', 4},
{'2', 5},
{'3', 0},
{'@', 0},
{'A', 6},
{'B', 7},
{'C', 0},
{'`', 0},
{'a', 8},
{'b', 0},
// Of the remaining runes, only U+00FF LATIN SMALL LETTER Y WITH
// DIAERESIS is in both the Mac Roman encoding and the cmapTest.ttf
// font file.
{'\u00fe', 0},
{'\u00ff', 9},
{'\u0100', 10},
{'\u0101', 11},
{'\u0102', 0},
{'\u4e2c', 0},
{'\u4e2d', 12},
{'\u4e2e', 0},
/*
TODO: support runes above U+FFFF, i.e. cmap format 12.
{'\U0001f0a0', 0},
{'\U0001f0a1', 13},
{'\U0001f0a2', 0},
{'\U0001f0b0', 0},
{'\U0001f0b1', 14},
{'\U0001f0b2', 15},
{'\U0001f0b3', 0},
*/
} }
var b Buffer var b Buffer
for _, tc := range testCases { for _, tc := range testCases {
want := tc.want want := tc.want
// cmap format 0, with the Macintosh Roman encoding, can't represent // cmap format 0, with the Macintosh Roman encoding, can only represent
// U+4E2D. // a limited set of non-ASCII runes, e.g. U+00FF.
if cmapFormat == 0 && tc.r == '\u4e2d' { if cmapFormat == 0 && tc.r > '\u007f' && tc.r != '\u00ff' {
want = 0 want = 0
} }

265
font/testdata/cmapTest.sfd vendored Normal file
View File

@ -0,0 +1,265 @@
SplineFontDB: 3.0
FontName: cmapTest
FullName: cmapTest
FamilyName: cmapTest
Weight: Regular
Copyright: Copyright 2016 The Go Authors. All rights reserved.\nUse of this font is governed by a BSD-style license that can be found at https://golang.org/LICENSE.
Version: 001.000
ItalicAngle: -11.25
UnderlinePosition: -204
UnderlineWidth: 102
Ascent: 1638
Descent: 410
LayerCount: 2
Layer: 0 1 "Back" 1
Layer: 1 1 "Fore" 0
XUID: [1021 367 888937226 7862908]
FSType: 8
OS2Version: 0
OS2_WeightWidthSlopeOnly: 0
OS2_UseTypoMetrics: 1
CreationTime: 1484386143
ModificationTime: 1486021330
PfmFamily: 17
TTFWeight: 400
TTFWidth: 5
LineGap: 184
VLineGap: 0
OS2TypoAscent: 0
OS2TypoAOffset: 1
OS2TypoDescent: 0
OS2TypoDOffset: 1
OS2TypoLinegap: 184
OS2WinAscent: 0
OS2WinAOffset: 1
OS2WinDescent: 0
OS2WinDOffset: 1
HheadAscent: 0
HheadAOffset: 1
HheadDescent: 0
HheadDOffset: 1
OS2Vendor: 'PfEd'
MarkAttachClasses: 1
DEI: 91125
LangName: 1033
Encoding: UnicodeFull
UnicodeInterp: none
NameList: Adobe Glyph List
DisplaySize: -24
AntiAlias: 1
FitToEm: 1
WinInfo: 126976 32 23
BeginPrivate: 0
EndPrivate
TeXData: 1 0 0 346030 173015 115343 0 -1048576 115343 783286 444596 497025 792723 393216 433062 380633 303038 157286 324010 404750 52429 2506097 1059062 262144
BeginChars: 1114112 13
StartChar: zero
Encoding: 48 48 0
Width: 800
VWidth: 0
Flags: W
LayerCount: 2
Fore
SplineSet
0 0 m 29,0,-1
400 800 l 25,1,-1
800 0 l 25,2,-1
0 0 l 29,0,-1
EndSplineSet
Validated: 1
EndChar
StartChar: one
Encoding: 49 49 1
Width: 800
VWidth: 0
Flags: W
LayerCount: 2
Fore
SplineSet
0 0 m 29,0,-1
400 800 l 25,1,-1
800 0 l 25,2,-1
0 0 l 29,0,-1
EndSplineSet
Validated: 1
EndChar
StartChar: two
Encoding: 50 50 2
Width: 800
VWidth: 0
Flags: W
LayerCount: 2
Fore
SplineSet
0 0 m 29,0,-1
400 800 l 25,1,-1
800 0 l 25,2,-1
0 0 l 29,0,-1
EndSplineSet
Validated: 1
EndChar
StartChar: A
Encoding: 65 65 3
Width: 800
VWidth: 0
Flags: W
LayerCount: 2
Fore
SplineSet
0 0 m 29,0,-1
400 800 l 25,1,-1
800 0 l 25,2,-1
0 0 l 29,0,-1
EndSplineSet
Validated: 1
EndChar
StartChar: uni4E2D
Encoding: 20013 20013 4
Width: 800
VWidth: 0
Flags: W
LayerCount: 2
Fore
SplineSet
0 0 m 29,0,-1
400 800 l 25,1,-1
800 0 l 25,2,-1
0 0 l 29,0,-1
EndSplineSet
Validated: 1
EndChar
StartChar: u1F0A1
Encoding: 127137 127137 5
Width: 800
VWidth: 0
Flags: W
LayerCount: 2
Fore
SplineSet
0 0 m 29,0,-1
400 800 l 25,1,-1
800 0 l 25,2,-1
0 0 l 29,0,-1
EndSplineSet
Validated: 1
EndChar
StartChar: ydieresis
Encoding: 255 255 6
Width: 800
VWidth: 0
Flags: W
LayerCount: 2
Fore
SplineSet
0 0 m 29,0,-1
400 800 l 25,1,-1
800 0 l 25,2,-1
0 0 l 29,0,-1
EndSplineSet
Validated: 1
EndChar
StartChar: Amacron
Encoding: 256 256 7
Width: 800
VWidth: 0
Flags: W
LayerCount: 2
Fore
SplineSet
0 0 m 29,0,-1
400 800 l 25,1,-1
800 0 l 25,2,-1
0 0 l 29,0,-1
EndSplineSet
Validated: 1
EndChar
StartChar: amacron
Encoding: 257 257 8
Width: 800
VWidth: 0
Flags: W
LayerCount: 2
Fore
SplineSet
0 0 m 29,0,-1
400 800 l 25,1,-1
800 0 l 25,2,-1
0 0 l 29,0,-1
EndSplineSet
Validated: 1
EndChar
StartChar: B
Encoding: 66 66 9
Width: 800
VWidth: 0
Flags: W
LayerCount: 2
Fore
SplineSet
0 0 m 29,0,-1
400 800 l 25,1,-1
800 0 l 25,2,-1
0 0 l 29,0,-1
EndSplineSet
Validated: 1
EndChar
StartChar: a
Encoding: 97 97 10
Width: 800
VWidth: 0
Flags: W
LayerCount: 2
Fore
SplineSet
0 0 m 29,0,-1
400 800 l 25,1,-1
800 0 l 25,2,-1
0 0 l 29,0,-1
EndSplineSet
Validated: 1
EndChar
StartChar: u1F0B1
Encoding: 127153 127153 11
Width: 800
VWidth: 0
Flags: W
LayerCount: 2
Fore
SplineSet
0 0 m 29,0,-1
400 800 l 25,1,-1
800 0 l 25,2,-1
0 0 l 29,0,-1
EndSplineSet
Validated: 1
EndChar
StartChar: u1F0B2
Encoding: 127154 127154 12
Width: 800
VWidth: 0
Flags: W
LayerCount: 2
Fore
SplineSet
0 0 m 29,0,-1
400 800 l 25,1,-1
800 0 l 25,2,-1
0 0 l 29,0,-1
EndSplineSet
Validated: 1
EndChar
EndChars
EndSplineFont

BIN
font/testdata/cmapTest.ttf vendored Normal file

Binary file not shown.