getCorpus

This commit is contained in:
Bernard Xie 2023-03-29 13:50:00 -07:00
parent b9cbf0a970
commit f2aca1bb4b
No known key found for this signature in database
GPG key ID: 3C3E0036CE0F892C
6 changed files with 29 additions and 72 deletions

View file

@ -74,7 +74,7 @@ func Wrap(rootDiagram *d2target.Diagram, svgs [][]byte, renderOpts d2svg.RenderO
return nil, err return nil, err
} }
d2svg.EmbedFonts(buf, diagramHash, svgsStr, rootDiagram.FontFamily, rootDiagram.GetNestedUniqueChars()) d2svg.EmbedFonts(buf, diagramHash, svgsStr, rootDiagram.FontFamily, rootDiagram.GetNestedCorpus())
themeStylesheet, err := d2svg.ThemeCSS(diagramHash, renderOpts.ThemeID, renderOpts.DarkThemeID) themeStylesheet, err := d2svg.ThemeCSS(diagramHash, renderOpts.ThemeID, renderOpts.DarkThemeID)
if err != nil { if err != nil {

View file

@ -33,9 +33,18 @@ func (f FontFamily) Font(size int, style FontStyle) Font {
} }
func (f Font) GetEncodedSubset(corpus string) string { func (f Font) GetEncodedSubset(corpus string) string {
var uniqueChars string
uniqueMap := make(map[rune]bool)
for _, char := range corpus {
if _, exists := uniqueMap[char]; !exists {
uniqueMap[char] = true
uniqueChars = uniqueChars + string(char)
}
}
fontBuf := make([]byte, len(FontFaces[f])) fontBuf := make([]byte, len(FontFaces[f]))
copy(fontBuf, FontFaces[f]) copy(fontBuf, FontFaces[f])
fontBuf = gofpdf.UTF8CutFont(fontBuf, corpus) fontBuf = gofpdf.UTF8CutFont(fontBuf, uniqueChars)
fontBuf, err := fontlib.Sfnt2Woff(fontBuf) fontBuf, err := fontlib.Sfnt2Woff(fontBuf)
if err != nil { if err != nil {

View file

@ -1727,7 +1727,7 @@ func Render(diagram *d2target.Diagram, opts *RenderOpts) ([]byte, error) {
// generate style elements that will be appended to the SVG tag // generate style elements that will be appended to the SVG tag
upperBuf := &bytes.Buffer{} upperBuf := &bytes.Buffer{}
if opts.MasterID == "" { if opts.MasterID == "" {
EmbedFonts(upperBuf, diagramHash, buf.String(), diagram.FontFamily, diagram.GetUniqueChars()) // EmbedFonts *must* run before `d2sketch.DefineFillPatterns`, but after all elements are appended to `buf` EmbedFonts(upperBuf, diagramHash, buf.String(), diagram.FontFamily, diagram.GetCorpus()) // EmbedFonts *must* run before `d2sketch.DefineFillPatterns`, but after all elements are appended to `buf`
themeStylesheet, err := ThemeCSS(diagramHash, themeID, darkThemeID) themeStylesheet, err := ThemeCSS(diagramHash, themeID, darkThemeID)
if err != nil { if err != nil {
return nil, err return nil, err

View file

@ -44,18 +44,6 @@ func (cf ClassField) VisibilityToken() string {
} }
} }
func (cf ClassField) GetUniqueChars() string {
var uniqueChars string
uniqueMap := make(map[rune]bool)
for _, char := range fmt.Sprintf("%s%s%s", cf.VisibilityToken(), cf.Name, cf.Type) {
if _, exists := uniqueMap[char]; !exists {
uniqueMap[char] = true
uniqueChars = uniqueChars + string(char)
}
}
return uniqueChars
}
type ClassMethod struct { type ClassMethod struct {
Name string `json:"name"` Name string `json:"name"`
Return string `json:"return"` Return string `json:"return"`
@ -82,15 +70,3 @@ func (cm ClassMethod) VisibilityToken() string {
return "+" return "+"
} }
} }
func (cm ClassMethod) GetUniqueChars() string {
var uniqueChars string
uniqueMap := make(map[rune]bool)
for _, char := range fmt.Sprintf("%s%s%s", cm.VisibilityToken(), cm.Name, cm.Return) {
if _, exists := uniqueMap[char]; !exists {
uniqueMap[char] = true
uniqueChars = uniqueChars + string(char)
}
}
return uniqueChars
}

View file

@ -237,61 +237,47 @@ func (diagram Diagram) BoundingBox() (topLeft, bottomRight Point) {
return Point{x1, y1}, Point{x2, y2} return Point{x1, y1}, Point{x2, y2}
} }
func (diagram Diagram) GetNestedUniqueChars() string { func (diagram Diagram) GetNestedCorpus() string {
chars := diagram.GetUniqueChars() corpus := diagram.GetCorpus()
for _, d := range diagram.Layers { for _, d := range diagram.Layers {
chars = chars + d.GetNestedUniqueChars() corpus += d.GetNestedCorpus()
} }
for _, d := range diagram.Scenarios { for _, d := range diagram.Scenarios {
chars = chars + d.GetNestedUniqueChars() corpus += d.GetNestedCorpus()
} }
for _, d := range diagram.Steps { for _, d := range diagram.Steps {
chars = chars + d.GetNestedUniqueChars() corpus += d.GetNestedCorpus()
} }
var uniqueChars string return corpus
uniqueMap := make(map[rune]bool)
for _, char := range chars {
if _, exists := uniqueMap[char]; !exists {
uniqueMap[char] = true
uniqueChars = uniqueChars + string(char)
}
}
return uniqueChars
} }
func (diagram Diagram) GetUniqueChars() string { func (diagram Diagram) GetCorpus() string {
var chars string var corpus string
for _, s := range diagram.Shapes { for _, s := range diagram.Shapes {
chars = chars + s.Label + s.Tooltip + s.Link corpus += s.Label + s.Tooltip + s.Link
if s.Type == ShapeClass { if s.Type == ShapeClass {
for _, cf := range s.Fields { for _, cf := range s.Fields {
chars = chars + cf.GetUniqueChars() corpus += cf.Text(0).Text + cf.VisibilityToken()
} }
for _, cm := range s.Methods { for _, cm := range s.Methods {
chars = chars + cm.GetUniqueChars() corpus += cm.Text(0).Text + cm.VisibilityToken()
} }
} }
if s.Type == ShapeSQLTable { if s.Type == ShapeSQLTable {
for _, c := range s.Columns { for _, c := range s.Columns {
chars = chars + c.GetUniqueChars() for _, t := range c.Texts(0) {
corpus = corpus + t.Text
}
corpus += c.ConstraintAbbr()
} }
} }
} }
for _, c := range diagram.Connections { for _, c := range diagram.Connections {
chars = chars + c.Label corpus += c.Label
} }
var uniqueChars string return corpus
uniqueMap := make(map[rune]bool)
for _, char := range chars {
if _, exists := uniqueMap[char]; !exists {
uniqueMap[char] = true
uniqueChars = uniqueChars + string(char)
}
}
return uniqueChars
} }
func NewDiagram() *Diagram { func NewDiagram() *Diagram {

View file

@ -1,7 +1,5 @@
package d2target package d2target
import "fmt"
const ( const (
NamePadding = 10 NamePadding = 10
TypePadding = 20 TypePadding = 20
@ -54,15 +52,3 @@ func (c SQLColumn) ConstraintAbbr() string {
return "" return ""
} }
} }
func (c SQLColumn) GetUniqueChars() string {
var uniqueChars string
uniqueMap := make(map[rune]bool)
for _, char := range fmt.Sprintf("%s%s%s", c.Name.Label, c.Type.Label, c.ConstraintAbbr()) {
if _, exists := uniqueMap[char]; !exists {
uniqueMap[char] = true
uniqueChars = uniqueChars + string(char)
}
}
return uniqueChars
}