diff --git a/d2renderers/d2fonts/d2fonts.go b/d2renderers/d2fonts/d2fonts.go index 3863444c3..8fe6ca4e5 100644 --- a/d2renderers/d2fonts/d2fonts.go +++ b/d2renderers/d2fonts/d2fonts.go @@ -10,6 +10,8 @@ import ( "fmt" "strings" + "github.com/jung-kurt/gofpdf" + fontlib "oss.terrastruct.com/d2/lib/font" ) @@ -31,9 +33,10 @@ func (f FontFamily) Font(size int, style FontStyle) Font { } func (f Font) GetEncodedSubset(cutset string) string { + fontBuf := make([]byte, len(FontFaces[f])) + copy(fontBuf, FontFaces[f]) // gofpdf subset only accepts .ttf fonts - fontBuf := FontFaces[f] - fontBuf = fontlib.CutFont(fontBuf, cutset) + fontBuf = gofpdf.UTF8CutFont(fontBuf, cutset) fontBuf, err := fontlib.Sfnt2Woff(fontBuf) if err != nil { diff --git a/d2renderers/d2fonts/d2fonts_test.go b/d2renderers/d2fonts/d2fonts_test.go index 812d32918..0d28aece8 100644 --- a/d2renderers/d2fonts/d2fonts_test.go +++ b/d2renderers/d2fonts/d2fonts_test.go @@ -4,7 +4,8 @@ import ( "path/filepath" "testing" - "oss.terrastruct.com/d2/lib/font" + "github.com/jung-kurt/gofpdf" + "oss.terrastruct.com/util-go/assert" "oss.terrastruct.com/util-go/diff" ) @@ -12,10 +13,11 @@ import ( func TestCutFont(t *testing.T) { f := Font{ Family: SourceCodePro, - Style: FONT_STYLE_REGULAR, + Style: FONT_STYLE_BOLD, } - fontBuf := FontFaces[f] - fontBuf = font.CutFont(fontBuf, "a") + fontBuf := make([]byte, len(FontFaces[f])) + copy(fontBuf, FontFaces[f]) + fontBuf = gofpdf.UTF8CutFont(fontBuf, " 1") err := diff.Testdata(filepath.Join("testdata", "d2fonts", "cut"), ".txt", fontBuf) assert.Success(t, err) } diff --git a/d2renderers/d2fonts/testdata/d2fonts/cut.exp.txt b/d2renderers/d2fonts/testdata/d2fonts/cut.exp.txt index 0b0cd6e62..358066a59 100644 Binary files a/d2renderers/d2fonts/testdata/d2fonts/cut.exp.txt and b/d2renderers/d2fonts/testdata/d2fonts/cut.exp.txt differ diff --git a/d2renderers/d2sketch/testdata/all_shapes/sketch.exp.svg b/d2renderers/d2sketch/testdata/all_shapes/sketch.exp.svg index 0abbbec2d..76b137580 100644 --- a/d2renderers/d2sketch/testdata/all_shapes/sketch.exp.svg +++ b/d2renderers/d2sketch/testdata/all_shapes/sketch.exp.svg @@ -4,7 +4,7 @@ } @font-face { font-family: d2-1976235645-font-bold; - src: url("data:application/font-woff;base64,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"); + src: url("data:application/font-woff;base64,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"); }]]>