font/sfnt: implement flagWeHaveATwoByTwo.

Change-Id: I9f4577b57f25a85ef0639c34215adf40df61c5ab
Reviewed-on: https://go-review.googlesource.com/38274
Reviewed-by: David Crawshaw <crawshaw@golang.org>
This commit is contained in:
Nigel Tao 2017-03-18 22:40:49 +11:00
parent fb59e5ba10
commit 2c9074b9aa
5 changed files with 219 additions and 35 deletions

View File

@ -1194,9 +1194,9 @@ func tform(txx, txy, tyx, tyy int16, dx, dy, x, y fixed.Int26_6) (newX, newY fix
const half = 1 << 13 const half = 1 << 13
newX = dx + newX = dx +
fixed.Int26_6((int64(x)*int64(txx)+half)>>14) + fixed.Int26_6((int64(x)*int64(txx)+half)>>14) +
fixed.Int26_6((int64(y)*int64(txy)+half)>>14) fixed.Int26_6((int64(y)*int64(tyx)+half)>>14)
newY = dy + newY = dy +
fixed.Int26_6((int64(x)*int64(tyx)+half)>>14) + fixed.Int26_6((int64(x)*int64(txy)+half)>>14) +
fixed.Int26_6((int64(y)*int64(tyy)+half)>>14) fixed.Int26_6((int64(y)*int64(tyy)+half)>>14)
return newX, newY return newX, newY
} }

View File

@ -388,6 +388,70 @@ func TestTrueTypeSegments(t *testing.T) {
lineTo(614, 1638), lineTo(614, 1638),
lineTo(614, 0), lineTo(614, 0),
lineTo(205, 0), lineTo(205, 0),
}, {
// five
// - contour #0
moveTo(0, 0),
lineTo(0, 100),
lineTo(400, 100),
lineTo(400, 0),
lineTo(0, 0),
}, {
// six
// - contour #0
moveTo(0, 0),
lineTo(0, 100),
lineTo(400, 100),
lineTo(400, 0),
lineTo(0, 0),
// - contour #1
translate(111, 234, moveTo(205, 0)),
translate(111, 234, lineTo(205, 1638)),
translate(111, 234, lineTo(614, 1638)),
translate(111, 234, lineTo(614, 0)),
translate(111, 234, lineTo(205, 0)),
}, {
// seven
// - contour #0
moveTo(0, 0),
lineTo(0, 100),
lineTo(400, 100),
lineTo(400, 0),
lineTo(0, 0),
// - contour #1
transform(1<<13, 0, 0, 1<<13, 56, 117, moveTo(205, 0)),
transform(1<<13, 0, 0, 1<<13, 56, 117, lineTo(205, 1638)),
transform(1<<13, 0, 0, 1<<13, 56, 117, lineTo(614, 1638)),
transform(1<<13, 0, 0, 1<<13, 56, 117, lineTo(614, 0)),
transform(1<<13, 0, 0, 1<<13, 56, 117, lineTo(205, 0)),
}, {
// eight
// - contour #0
moveTo(0, 0),
lineTo(0, 100),
lineTo(400, 100),
lineTo(400, 0),
lineTo(0, 0),
// - contour #1
transform(3<<13, 0, 0, 1<<13, 56, 117, moveTo(205, 0)),
transform(3<<13, 0, 0, 1<<13, 56, 117, lineTo(205, 1638)),
transform(3<<13, 0, 0, 1<<13, 56, 117, lineTo(614, 1638)),
transform(3<<13, 0, 0, 1<<13, 56, 117, lineTo(614, 0)),
transform(3<<13, 0, 0, 1<<13, 56, 117, lineTo(205, 0)),
}, {
// nine
// - contour #0
moveTo(0, 0),
lineTo(0, 100),
lineTo(400, 100),
lineTo(400, 0),
lineTo(0, 0),
// - contour #1
transform(22381, 8192, 5996, 14188, 237, 258, moveTo(205, 0)),
transform(22381, 8192, 5996, 14188, 237, 258, lineTo(205, 1638)),
transform(22381, 8192, 5996, 14188, 237, 258, lineTo(614, 1638)),
transform(22381, 8192, 5996, 14188, 237, 258, lineTo(614, 0)),
transform(22381, 8192, 5996, 14188, 237, 258, lineTo(205, 0)),
}} }}
testSegments(t, "glyfTest.ttf", wants) testSegments(t, "glyfTest.ttf", wants)

View File

@ -285,9 +285,6 @@ func loadCompoundGlyf(f *Font, b *Buffer, data []byte, stackBottom, recursionDep
elem.transformYX = int16(u16(data[4:])) elem.transformYX = int16(u16(data[4:]))
elem.transformYY = int16(u16(data[6:])) elem.transformYY = int16(u16(data[6:]))
data = data[8:] data = data[8:]
// TODO: find a font that does this, so we can verify that
// we've got the xy vs yx ordering right.
return errUnsupportedCompoundGlyph
} }
} }

View File

@ -2,7 +2,7 @@ SplineFontDB: 3.0
FontName: glyfTest FontName: glyfTest
FullName: glyfTest FullName: glyfTest
FamilyName: glyfTest FamilyName: glyfTest
Weight: Regular Weight: Book
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. 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 Version: 001.000
ItalicAngle: -11.25 ItalicAngle: -11.25
@ -10,38 +10,75 @@ UnderlinePosition: -204
UnderlineWidth: 102 UnderlineWidth: 102
Ascent: 1638 Ascent: 1638
Descent: 410 Descent: 410
sfntRevision: 0x00010000
LayerCount: 2 LayerCount: 2
Layer: 0 1 "Back" 1 Layer: 0 1 "Back" 1
Layer: 1 1 "Fore" 0 Layer: 1 1 "Fore" 0
XUID: [1021 367 888937226 7862908] XUID: [1021 367 888937226 5879518]
FSType: 8 FSType: 8
OS2Version: 0 OS2Version: 4
OS2_WeightWidthSlopeOnly: 0 OS2_WeightWidthSlopeOnly: 0
OS2_UseTypoMetrics: 1 OS2_UseTypoMetrics: 1
CreationTime: 1484386143 CreationTime: 1484386143
ModificationTime: 1484386143 ModificationTime: 1489831626
PfmFamily: 17 PfmFamily: 17
TTFWeight: 400 TTFWeight: 400
TTFWidth: 5 TTFWidth: 5
LineGap: 184 LineGap: 184
VLineGap: 0 VLineGap: 0
OS2TypoAscent: 0 Panose: 2 0 5 3 0 0 0 0 0 0
OS2TypoAOffset: 1 OS2TypoAscent: 1638
OS2TypoDescent: 0 OS2TypoAOffset: 0
OS2TypoDOffset: 1 OS2TypoDescent: -410
OS2TypoDOffset: 0
OS2TypoLinegap: 184 OS2TypoLinegap: 184
OS2WinAscent: 0 OS2WinAscent: 1984
OS2WinAOffset: 1 OS2WinAOffset: 0
OS2WinDescent: 0 OS2WinDescent: 0
OS2WinDOffset: 1 OS2WinDOffset: 0
HheadAscent: 0 HheadAscent: 1984
HheadAOffset: 1 HheadAOffset: 0
HheadDescent: 0 HheadDescent: 0
HheadDOffset: 1 HheadDOffset: 0
OS2SubXSize: 1331
OS2SubYSize: 1433
OS2SubXOff: 55
OS2SubYOff: 286
OS2SupXSize: 1331
OS2SupYSize: 1433
OS2SupXOff: -191
OS2SupYOff: 983
OS2StrikeYSize: 102
OS2StrikeYPos: 530
OS2Vendor: 'PfEd' OS2Vendor: 'PfEd'
OS2CodePages: 00000001.00000000
OS2UnicodeRanges: 00000001.00000000.00000000.00000000
MarkAttachClasses: 1 MarkAttachClasses: 1
DEI: 91125 DEI: 91125
LangName: 1033 ShortTable: cvt 2
68
1297
EndShort
ShortTable: maxp 16
1
0
10
18
2
8
2
2
0
1
1
0
64
46
2
1
EndShort
LangName: 1033 "" "" "Regular" "FontForge : glyfTest : 18-3-2017" "" "Version 001.000"
GaspTable: 1 65535 2 0
Encoding: UnicodeBmp Encoding: UnicodeBmp
UnicodeInterp: none UnicodeInterp: none
NameList: Adobe Glyph List NameList: Adobe Glyph List
@ -49,18 +86,47 @@ DisplaySize: -24
AntiAlias: 1 AntiAlias: 1
FitToEm: 1 FitToEm: 1
WinInfo: 0 32 23 WinInfo: 0 32 23
BeginPrivate: 0 BeginChars: 65539 10
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 StartChar: .notdef
BeginChars: 65536 2 Encoding: 65536 -1 0
Width: 748
Flags: W
LayerCount: 2
Fore
SplineSet
68 0 m 1,0,-1
68 1365 l 1,1,-1
612 1365 l 1,2,-1
612 0 l 1,3,-1
68 0 l 1,0,-1
136 68 m 1,4,-1
544 68 l 1,5,-1
544 1297 l 1,6,-1
136 1297 l 1,7,-1
136 68 l 1,4,-1
EndSplineSet
Validated: 1
EndChar
StartChar: .null
Encoding: 65537 -1 1
Width: 0
Flags: W
LayerCount: 2
EndChar
StartChar: nonmarkingreturn
Encoding: 65538 -1 2
Width: 682
Flags: W
LayerCount: 2
EndChar
StartChar: zero StartChar: zero
Encoding: 48 48 0 Encoding: 48 48 3
Width: 1228 Width: 1228
VWidth: 0
Flags: W Flags: W
HStem: 0 205<508 700> 1434 205<529 720>
VStem: 205 164<500 1088> 860 164<550 1139>
LayerCount: 2 LayerCount: 2
Fore Fore
SplineSet SplineSet
@ -69,7 +135,7 @@ SplineSet
369 471 369 471 435 338 c 0,4,5 369 471 369 471 435 338 c 0,4,5
502 205 502 205 614 205 c 0,6,7 502 205 502 205 614 205 c 0,6,7
860 205 860 205 860 1024 c 0,8,9 860 205 860 205 860 1024 c 0,8,9
860 1167 860 1167 793 1300 c 0,10,11 860 1167 860 1167 793 1300 c 1,10,11
727 1434 727 1434 614 1434 c 0,0,1 727 1434 727 1434 614 1434 c 0,0,1
614 1638 m 0,12,13 614 1638 m 0,12,13
1024 1638 1024 1638 1024 819 c 128,-1,14 1024 1638 1024 1638 1024 819 c 128,-1,14
@ -81,22 +147,79 @@ Validated: 1
EndChar EndChar
StartChar: one StartChar: one
Encoding: 49 49 1 Encoding: 49 49 4
Width: 819 Width: 819
VWidth: 0
Flags: W Flags: W
HStem: 0 43G<205 614>
VStem: 205 410<0 1638>
LayerCount: 2 LayerCount: 2
Fore Fore
SplineSet SplineSet
205 0 m 25,0,-1 205 0 m 1,0,-1
205 1638 l 1,1,-1 205 1638 l 1,1,-1
614 1638 l 1,2,-1 614 1638 l 1,2,-1
614 0 l 1,3,-1 614 0 l 1,3,-1
205 0 l 25,0,-1 205 0 l 1,0,-1
EndSplineSet EndSplineSet
Validated: 1 Validated: 1
EndChar EndChar
StartChar: five
Encoding: 53 53 5
Width: 400
Flags: W
LayerCount: 2
Fore
SplineSet
0 0 m 1,0,-1
0 100 l 1,1,-1
400 100 l 1,2,-1
400 0 l 1,3,-1
0 0 l 1,0,-1
EndSplineSet
Validated: 1
EndChar
StartChar: six
Encoding: 54 54 6
Width: 400
Flags: W
LayerCount: 2
Fore
Refer: 5 53 N 1 0 0 1 0 0 2
Refer: 4 49 N 1 0 0 1 111 234 2
Validated: 1
EndChar
StartChar: seven
Encoding: 55 55 7
Width: 400
Flags: W
LayerCount: 2
Fore
Refer: 5 53 N 1 0 0 1 0 0 2
Refer: 4 49 N 0.5 0 0 0.5 56 117 2
Validated: 1
EndChar
StartChar: eight
Encoding: 56 56 8
Width: 400
Flags: W
LayerCount: 2
Fore
Refer: 5 53 N 1 0 0 1 0 0 2
Refer: 4 49 N 1.5 0 0 0.5 56 117 2
Validated: 1
EndChar
StartChar: nine
Encoding: 57 57 9
Width: 400
Flags: W
LayerCount: 2
Fore
Refer: 5 53 N 1 0 0 1 0 0 2
Refer: 4 49 N 1.36603 0.5 0.365967 0.865967 237 258 2
Validated: 1
EndChar
EndChars EndChars
EndSplineFont EndSplineFont

Binary file not shown.