Skip to content

Commit ce77c31

Browse files
committed
vg/vgsvg: add switch to embed fonts to SVG plot
Fixes #703.
1 parent 9d1968c commit ce77c31

14 files changed

Lines changed: 642 additions & 227 deletions

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ require (
66
gioui.org v0.0.0-20210308172011-57750fc8a0a6
77
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af
88
github.com/fogleman/gg v1.3.0
9+
github.com/go-fonts/latin-modern v0.2.0
910
github.com/go-fonts/liberation v0.1.1
1011
github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07
1112
github.com/go-pdf/fpdf v0.4.0

go.sum

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=
1212
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
1313
github.com/go-fonts/dejavu v0.1.0 h1:JSajPXURYqpr+Cu8U9bt8K+XcACIHWqWrvWCKyeFmVQ=
1414
github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g=
15+
github.com/go-fonts/latin-modern v0.2.0 h1:5/Tv1Ek/QCr20C6ZOz15vw3g7GELYL98KWr8Hgo+3vk=
1516
github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks=
1617
github.com/go-fonts/liberation v0.1.1 h1:wBrPaMkrXFBW3qXpXAjiKljdVUMxn9bX2ia3XjPHoik=
1718
github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY=

plotter/testdata/polygon_holes_golden.svg

Lines changed: 10 additions & 10 deletions
Loading

vg/testdata/width_-1_golden.svg

Lines changed: 8 additions & 8 deletions
Loading

vg/testdata/width_0_golden.svg

Lines changed: 8 additions & 8 deletions
Loading

vg/testdata/width_1_golden.svg

Lines changed: 8 additions & 8 deletions
Loading

vg/vgsvg/font_example_test.go

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
// Copyright ©2021 The Gonum Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
5+
package vgsvg_test
6+
7+
import (
8+
"log"
9+
"os"
10+
11+
lmit "github.com/go-fonts/latin-modern/lmroman10italic"
12+
lreg "github.com/go-fonts/liberation/liberationserifregular"
13+
xfnt "golang.org/x/image/font"
14+
"golang.org/x/image/font/opentype"
15+
16+
"gonum.org/v1/plot"
17+
"gonum.org/v1/plot/font"
18+
"gonum.org/v1/plot/plotter"
19+
"gonum.org/v1/plot/vg"
20+
"gonum.org/v1/plot/vg/draw"
21+
"gonum.org/v1/plot/vg/vgsvg"
22+
)
23+
24+
func Example_embedFonts() {
25+
// Use Latin-Modern fonts.
26+
cmi10 := font.Font{Typeface: "Latin-Modern", Style: xfnt.StyleItalic}
27+
fnt, err := opentype.Parse(lmit.TTF)
28+
if err != nil {
29+
log.Fatalf("could not parse Latin-Modern fonts: %+v", err)
30+
}
31+
32+
font.DefaultCache.Add([]font.Face{{
33+
Font: cmi10,
34+
Face: fnt,
35+
}})
36+
plot.DefaultFont = cmi10
37+
38+
p := plot.New()
39+
p.Title.Text = "Scatter plot"
40+
p.X.Label.Text = "x-Axis"
41+
p.Y.Label.Text = "y-Axis"
42+
43+
scatter, err := plotter.NewScatter(plotter.XYs{{X: 1, Y: 1}, {X: 0, Y: 1}, {X: 0, Y: 0}})
44+
if err != nil {
45+
log.Fatalf("could not create scatter: %v", err)
46+
}
47+
p.Add(scatter)
48+
49+
c := vgsvg.NewWith(
50+
vgsvg.UseWH(5*vg.Centimeter, 5*vg.Centimeter),
51+
vgsvg.EmbedFonts(true),
52+
)
53+
p.Draw(draw.New(c))
54+
55+
f, err := os.Create("testdata/embed_fonts.svg")
56+
if err != nil {
57+
log.Fatalf("could not create output SVG file: %+v", err)
58+
}
59+
defer f.Close()
60+
61+
_, err = c.WriteTo(f)
62+
if err != nil {
63+
log.Fatalf("could not write output SVG plot: %+v", err)
64+
}
65+
66+
err = f.Close()
67+
if err != nil {
68+
log.Fatalf("could not close output SVG file: %v", err)
69+
}
70+
}
71+
72+
func Example_standardFonts() {
73+
// Use standard fonts.
74+
tms := font.Font{Typeface: "Times"}
75+
fnt, err := opentype.Parse(lreg.TTF)
76+
if err != nil {
77+
log.Fatalf("could not parse Times fonts: %+v", err)
78+
}
79+
80+
font.DefaultCache.Add([]font.Face{{
81+
Font: tms,
82+
Face: fnt,
83+
}})
84+
plot.DefaultFont = tms
85+
86+
p := plot.New()
87+
p.Title.Text = "Scatter plot"
88+
p.X.Label.Text = "x-Axis"
89+
p.Y.Label.Text = "y-Axis"
90+
91+
scatter, err := plotter.NewScatter(plotter.XYs{{X: 1, Y: 1}, {X: 0, Y: 1}, {X: 0, Y: 0}})
92+
if err != nil {
93+
log.Fatalf("could not create scatter: %v", err)
94+
}
95+
p.Add(scatter)
96+
97+
err = p.Save(5*vg.Centimeter, 5*vg.Centimeter, "testdata/standard_fonts.svg")
98+
if err != nil {
99+
log.Fatalf("could not save SVG plot: %+v", err)
100+
}
101+
}

0 commit comments

Comments
 (0)