getCorpus
This commit is contained in:
parent
b9cbf0a970
commit
f2aca1bb4b
6 changed files with 29 additions and 72 deletions
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue