-
Notifications
You must be signed in to change notification settings - Fork 2
/
fonts.go
111 lines (97 loc) · 2.61 KB
/
fonts.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// Package fonts contains the embedded fonts and utility functions.
package fonts
import (
"fmt"
rice "github.com/GeertJohan/go.rice"
)
// FontFamily encapsulates a font family for easy adding to the document
type FontFamily struct {
Name string
Bold []byte
Italic []byte
Normal []byte
}
func loadFromRice(filename, description string) ([]byte, error) {
box, err := riceBox()
if err != nil {
return nil, err
}
data, err := box.Bytes(filename)
if err != nil {
return nil, fmt.Errorf("could not load %s: %s", description, err)
}
return data, nil
}
func riceBox() (*rice.Box, error) {
box, err := rice.FindBox("")
if err != nil {
return nil, fmt.Errorf("rice find box failed: %s", err)
}
return box, nil
}
// NewLatoFamily returns a new FontFamily of the Lato font.
func NewLatoFamily() (*FontFamily, error) {
heavy, err := LatoHeavy()
if err != nil {
return nil, err
}
italic, err := LatoItalic()
if err != nil {
return nil, err
}
normal, err := LatoRegular()
if err != nil {
return nil, err
}
return &FontFamily{
Name: "lato",
Bold: heavy,
Italic: italic,
Normal: normal,
}, nil
}
// LatoHeavy returns the heavy style of the Lato font.
func LatoHeavy() ([]byte, error) {
return loadFromRice("Lato-Heavy.ttf", "lato heavy")
}
// LatoItalic returns the italic style of the Lato font.
func LatoItalic() ([]byte, error) {
return loadFromRice("Lato-Italic.ttf", "lato italic")
}
// LatoRegular returns the regular style of the Lato font.
func LatoRegular() ([]byte, error) {
return loadFromRice("Lato-Regular.ttf", "lato normal")
}
// NewLiberationSansFamily returns a new FontFamily of the Liberation Sans font.
func NewLiberationSansFamily() (*FontFamily, error) {
bold, err := LiberationSansBold()
if err != nil {
return nil, err
}
italic, err := LiberationSansItalic()
if err != nil {
return nil, err
}
normal, err := LiberationSansRegular()
if err != nil {
return nil, err
}
return &FontFamily{
Name: "liberation-sans",
Bold: bold,
Italic: italic,
Normal: normal,
}, nil
}
// LiberationSansBold returns the bold style of the Liberation Sans font.
func LiberationSansBold() ([]byte, error) {
return loadFromRice("LiberationSans-Bold.ttf", "liberations sans bold")
}
// LiberationSansItalic returns the italic style of the Liberation Sans font.
func LiberationSansItalic() ([]byte, error) {
return loadFromRice("LiberationSans-Italic.ttf", "liberations sans italic")
}
// LiberationSansRegular returns the normal style of the Liberation Sans font.
func LiberationSansRegular() ([]byte, error) {
return loadFromRice("LiberationSans-Regular.ttf", "liberations sans regular")
}