font/sfnt: use charmap EncodeRune API.
Change-Id: I91d850d1816b43748580f6f8a8f19151472750d0 Reviewed-on: https://go-review.googlesource.com/39070 Reviewed-by: Marcel van Lohuizen <mpvl@golang.org> Run-TryBot: Nigel Tao <nigeltao@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
10ed294205
commit
84a6511894
|
@ -5,8 +5,6 @@
|
||||||
package sfnt
|
package sfnt
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"unicode/utf8"
|
|
||||||
|
|
||||||
"golang.org/x/text/encoding/charmap"
|
"golang.org/x/text/encoding/charmap"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -112,20 +110,12 @@ func (f *Font) makeCachedGlyphIndexFormat0(buf []byte, offset, length uint32) ([
|
||||||
var table [256]byte
|
var table [256]byte
|
||||||
copy(table[:], buf[6:])
|
copy(table[:], buf[6:])
|
||||||
return buf, func(f *Font, b *Buffer, r rune) (GlyphIndex, error) {
|
return buf, func(f *Font, b *Buffer, r rune) (GlyphIndex, error) {
|
||||||
// TODO: for this closure to be goroutine-safe, the
|
x, ok := charmap.Macintosh.EncodeRune(r)
|
||||||
// golang.org/x/text/encoding/charmap API needs to allocate a new
|
if !ok {
|
||||||
// Encoder and new []byte buffers, for every call to this closure, even
|
|
||||||
// though all we want to do is to encode one rune as one byte. We could
|
|
||||||
// possibly add some fields in the Buffer struct to re-use these
|
|
||||||
// allocations, but a better solution is to improve the charmap API.
|
|
||||||
var dst, src [utf8.UTFMax]byte
|
|
||||||
n := utf8.EncodeRune(src[:], r)
|
|
||||||
_, _, err = charmap.Macintosh.NewEncoder().Transform(dst[:], src[:n], true)
|
|
||||||
if err != nil {
|
|
||||||
// The source rune r is not representable in the Macintosh-Roman encoding.
|
// The source rune r is not representable in the Macintosh-Roman encoding.
|
||||||
return 0, nil
|
return 0, nil
|
||||||
}
|
}
|
||||||
return GlyphIndex(table[dst[0]]), nil
|
return GlyphIndex(table[x]), nil
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user