| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- // Copyright ©2021 The star-tex Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE-STAR-TEX file.
- package tfm
- import (
- "io"
- "modernc.org/knuth/font/fixed"
- "modernc.org/knuth/internal/iobuf"
- )
- func newReader(r io.Reader) (*iobuf.Reader, error) {
- p, err := io.ReadAll(r)
- if err != nil {
- return nil, err
- }
- return iobuf.NewReader(p), nil
- }
- func readStr(r *iobuf.Reader, max int) string {
- n := int(r.ReadU8())
- if n > max {
- return ""
- }
- raw := r.ReadBuf(max - 1)
- return string(raw[:n])
- }
- func readHeader(r *iobuf.Reader, hdr *fileHeader) error {
- const hdrSize = 12 * 2
- if len(r.Bytes()) < hdrSize {
- return io.ErrUnexpectedEOF
- }
- hdr.lf = r.ReadU16()
- hdr.lh = r.ReadU16()
- hdr.bc = r.ReadU16()
- hdr.ec = r.ReadU16()
- hdr.nw = r.ReadU16()
- hdr.nh = r.ReadU16()
- hdr.nd = r.ReadU16()
- hdr.ni = r.ReadU16()
- hdr.nl = r.ReadU16()
- hdr.nk = r.ReadU16()
- hdr.ne = r.ReadU16()
- hdr.np = r.ReadU16()
- return nil
- }
- func readCharInfos(r *iobuf.Reader, n int) []glyphInfo {
- if len(r.Bytes()) < n*4 {
- return nil
- }
- out := make([]glyphInfo, n)
- for i := range out {
- out[i].raw[0] = r.ReadU8()
- out[i].raw[1] = r.ReadU8()
- out[i].raw[2] = r.ReadU8()
- out[i].raw[3] = r.ReadU8()
- }
- return out
- }
- func readFWs(r *iobuf.Reader, n int) []fixed.Int12_20 {
- if len(r.Bytes()) < n*4 {
- return nil
- }
- out := make([]fixed.Int12_20, n)
- for i := range out {
- out[i] = fixed.Int12_20(r.ReadU32())
- }
- return out
- }
- func readLigKerns(r *iobuf.Reader, n int) []ligKernCmd {
- if len(r.Bytes()) < n*4 {
- return nil
- }
- out := make([]ligKernCmd, n)
- for i := range out {
- out[i].raw[0] = r.ReadU8()
- out[i].raw[1] = r.ReadU8()
- out[i].raw[2] = r.ReadU8()
- out[i].raw[3] = r.ReadU8()
- }
- return out
- }
- func readExtens(r *iobuf.Reader, n int) []extensible {
- if len(r.Bytes()) < n*4 {
- return nil
- }
- out := make([]extensible, n)
- for i := range out {
- out[i].raw[0] = r.ReadU8()
- out[i].raw[1] = r.ReadU8()
- out[i].raw[2] = r.ReadU8()
- out[i].raw[3] = r.ReadU8()
- }
- return out
- }
|