1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- // SPDX-License-Identifier: Unlicense OR MIT
- // Package gofont exports the Go fonts as a text.Collection.
- //
- // See https://blog.golang.org/go-fonts for a description of the
- // fonts, and the golang.org/x/image/font/gofont packages for the
- // font data.
- package gofont
- import (
- "fmt"
- "sync"
- "golang.org/x/image/font/gofont/gobold"
- "golang.org/x/image/font/gofont/gobolditalic"
- "golang.org/x/image/font/gofont/goitalic"
- "golang.org/x/image/font/gofont/gomedium"
- "golang.org/x/image/font/gofont/gomediumitalic"
- "golang.org/x/image/font/gofont/gomono"
- "golang.org/x/image/font/gofont/gomonobold"
- "golang.org/x/image/font/gofont/gomonobolditalic"
- "golang.org/x/image/font/gofont/gomonoitalic"
- "golang.org/x/image/font/gofont/goregular"
- "golang.org/x/image/font/gofont/gosmallcaps"
- "golang.org/x/image/font/gofont/gosmallcapsitalic"
- "gioui.org/font"
- "gioui.org/font/opentype"
- )
- var (
- regOnce sync.Once
- reg []font.FontFace
- once sync.Once
- collection []font.FontFace
- )
- func loadRegular() {
- regOnce.Do(func() {
- faces, err := opentype.ParseCollection(goregular.TTF)
- if err != nil {
- panic(fmt.Errorf("failed to parse font: %v", err))
- }
- reg = faces
- collection = append(collection, reg[0])
- })
- }
- // Regular returns a collection of only the Go regular font face.
- func Regular() []font.FontFace {
- loadRegular()
- return reg
- }
- // Regular returns a collection of all available Go font faces.
- func Collection() []font.FontFace {
- loadRegular()
- once.Do(func() {
- register(goitalic.TTF)
- register(gobold.TTF)
- register(gobolditalic.TTF)
- register(gomedium.TTF)
- register(gomediumitalic.TTF)
- register(gomono.TTF)
- register(gomonobold.TTF)
- register(gomonobolditalic.TTF)
- register(gomonoitalic.TTF)
- register(gosmallcaps.TTF)
- register(gosmallcapsitalic.TTF)
- // Ensure that any outside appends will not reuse the backing store.
- n := len(collection)
- collection = collection[:n:n]
- })
- return collection
- }
- func register(ttf []byte) {
- faces, err := opentype.ParseCollection(ttf)
- if err != nil {
- panic(fmt.Errorf("failed to parse font: %v", err))
- }
- collection = append(collection, faces[0])
- }
|