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:
parent
69afd001f7
commit
55ae12acc9
|
@ -19,6 +19,9 @@ const (
|
|||
|
||||
psidUnicode2BMPOnly = 3
|
||||
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
|
||||
|
||||
|
|
|
@ -89,7 +89,7 @@ func testTrueType(t *testing.T, f *Font) {
|
|||
}
|
||||
|
||||
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 {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
@ -120,27 +120,64 @@ func testGlyphIndex(t *testing.T, data []byte, cmapFormat int) {
|
|||
r rune
|
||||
want GlyphIndex
|
||||
}{
|
||||
{'0', 1},
|
||||
{'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.
|
||||
// Glyphs that aren't present in cmapTest.ttf.
|
||||
{'?', 0},
|
||||
{'\ufffd', 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
|
||||
for _, tc := range testCases {
|
||||
want := tc.want
|
||||
// cmap format 0, with the Macintosh Roman encoding, can't represent
|
||||
// U+4E2D.
|
||||
if cmapFormat == 0 && tc.r == '\u4e2d' {
|
||||
// cmap format 0, with the Macintosh Roman encoding, can only represent
|
||||
// a limited set of non-ASCII runes, e.g. U+00FF.
|
||||
if cmapFormat == 0 && tc.r > '\u007f' && tc.r != '\u00ff' {
|
||||
want = 0
|
||||
}
|
||||
|
||||
|
|
265
font/testdata/cmapTest.sfd
vendored
Normal file
265
font/testdata/cmapTest.sfd
vendored
Normal 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
BIN
font/testdata/cmapTest.ttf
vendored
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user