Skip to content

Commit 4abfcc5

Browse files
committed
[font] support EBDT bitmap Format 1
Closes #244
1 parent b7af2ec commit 4abfcc5

6 files changed

Lines changed: 24 additions & 10 deletions

File tree

font/bitmaps.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -429,10 +429,10 @@ func parseBitmapDataMetrics(imageData []byte, start, end tables.Offset32, imageF
429429
}
430430
imageData = imageData[start:end]
431431
switch imageFormat {
432-
case 1, 6, 7, 8, 9:
432+
case 6, 7, 8, 9:
433433
return bitmapImage{}, fmt.Errorf("valid but currently not implemented bitmap image format: %d", imageFormat)
434-
case 2:
435-
data, _, err := tables.ParseBitmapData2(imageData)
434+
case 1, 2:
435+
data, _, err := tables.ParseBitmapData1or2(imageData)
436436
return bitmapImage{metrics: data.SmallGlyphMetrics, image: data.Image}, err
437437
case 17:
438438
data, _, err := tables.ParseBitmapData17(imageData)

font/bitmaps_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
package font
44

55
import (
6+
"bytes"
67
"testing"
78

89
td "github.com/go-text/typesetting-utils/opentype"
@@ -50,3 +51,15 @@ func TestEBLC(t *testing.T) {
5051
tu.AssertNoErr(t, err)
5152
}
5253
}
54+
55+
func TestEBDTFormat1(t *testing.T) {
56+
file, err := td.Files.ReadFile("bitmap/simsun.ttc")
57+
tu.AssertNoErr(t, err)
58+
59+
faces, err := ParseTTC(bytes.NewReader(file))
60+
tu.AssertNoErr(t, err)
61+
tu.Assert(t, len(faces) == 2)
62+
sizes := faces[0].BitmapSizes()
63+
tu.Assert(t, len(sizes) == 6)
64+
tu.Assert(t, sizes[0].XPpem == 12 && sizes[5].XPpem == 17)
65+
}

font/opentype/tables/glyphs_bitmap_gen.go

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

font/opentype/tables/glyphs_bitmap_src.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,9 @@ type BigGlyphMetrics struct {
161161
vertAdvance uint8 // Vertical advance width in pixels.
162162
}
163163

164+
// Format 1: small metrics, byte-aligned data
164165
// Format 2: small metrics, bit-aligned data
165-
type BitmapData2 struct {
166+
type BitmapData1or2 struct {
166167
SmallGlyphMetrics
167168
Image []byte `arrayCount:"ToEnd"`
168169
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/go-text/typesetting
33
go 1.19
44

55
require (
6-
github.com/go-text/typesetting-utils v0.0.0-20260223113751-2d88ac90dae3
6+
github.com/go-text/typesetting-utils v0.0.0-20260327125527-fbf04b32d9ad
77
golang.org/x/image v0.23.0
88
golang.org/x/text v0.21.0
99
)

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
github.com/go-text/typesetting-utils v0.0.0-20260223113751-2d88ac90dae3 h1:drBZzMgdYPbmyXqOto4YhhJGrFIQCX94FpR4MzTCsos=
2-
github.com/go-text/typesetting-utils v0.0.0-20260223113751-2d88ac90dae3/go.mod h1:3/62I4La/HBRX9TcTpBj4eipLiwzf+vhI+7whTc9V7o=
1+
github.com/go-text/typesetting-utils v0.0.0-20260327125527-fbf04b32d9ad h1:J6fi06yzug4KkyQo0hK7UZVFBIlCh7iaG38sGq7THaY=
2+
github.com/go-text/typesetting-utils v0.0.0-20260327125527-fbf04b32d9ad/go.mod h1:3/62I4La/HBRX9TcTpBj4eipLiwzf+vhI+7whTc9V7o=
33
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
44
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
55
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=

0 commit comments

Comments
 (0)