From a6b34634cddc665771191faabb989c518d44e732 Mon Sep 17 00:00:00 2001 From: Alexander Wang Date: Thu, 12 Jan 2023 11:22:53 -0800 Subject: [PATCH] refactor --- d2renderers/d2sketch/sketch.go | 30 +++++------------------------- d2renderers/d2svg/class.go | 2 +- d2renderers/d2svg/d2svg.go | 31 ++++--------------------------- d2renderers/d2svg/table.go | 2 +- d2target/d2target.go | 23 +++++++++++++++++++++++ 5 files changed, 34 insertions(+), 54 deletions(-) diff --git a/d2renderers/d2sketch/sketch.go b/d2renderers/d2sketch/sketch.go index ea9b7035b..13beb9b97 100644 --- a/d2renderers/d2sketch/sketch.go +++ b/d2renderers/d2sketch/sketch.go @@ -63,26 +63,6 @@ func DefineFillPattern() string { `, fillPattern) } -func shapeStyle(shape d2target.Shape) string { - out := "" - - if shape.Type == d2target.ShapeSQLTable || shape.Type == d2target.ShapeClass { - out += fmt.Sprintf(`fill:%s;`, shape.Stroke) - out += fmt.Sprintf(`stroke:%s;`, shape.Fill) - } else { - out += fmt.Sprintf(`fill:%s;`, shape.Fill) - out += fmt.Sprintf(`stroke:%s;`, shape.Stroke) - } - out += fmt.Sprintf(`opacity:%f;`, shape.Opacity) - out += fmt.Sprintf(`stroke-width:%d;`, shape.StrokeWidth) - if shape.StrokeDash != 0 { - dashSize, gapSize := svg.GetStrokeDashAttributes(float64(shape.StrokeWidth), shape.StrokeDash) - out += fmt.Sprintf(`stroke-dasharray:%f,%f;`, dashSize, gapSize) - } - - return out -} - func Rect(r *Runner, shape d2target.Shape) (string, error) { js := fmt.Sprintf(`node = rc.rectangle(0, 0, %d, %d, { fill: "%s", @@ -98,7 +78,7 @@ func Rect(r *Runner, shape d2target.Shape) (string, error) { for _, p := range paths { output += fmt.Sprintf( ``, - shape.Pos.X, shape.Pos.Y, p, shapeStyle(shape), + shape.Pos.X, shape.Pos.Y, p, shape.CSSStyle(), ) } output += fmt.Sprintf( @@ -123,7 +103,7 @@ func Oval(r *Runner, shape d2target.Shape) (string, error) { for _, p := range paths { output += fmt.Sprintf( ``, - shape.Pos.X, shape.Pos.Y, p, shapeStyle(shape), + shape.Pos.X, shape.Pos.Y, p, shape.CSSStyle(), ) } output += fmt.Sprintf( @@ -150,7 +130,7 @@ func Paths(r *Runner, shape d2target.Shape, paths []string) (string, error) { for _, p := range sketchPaths { output += fmt.Sprintf( ``, - p, shapeStyle(shape), + p, shape.CSSStyle(), ) } for _, p := range sketchPaths { @@ -200,7 +180,7 @@ func Table(r *Runner, shape d2target.Shape) (string, error) { for _, p := range paths { output += fmt.Sprintf( ``, - shape.Pos.X, shape.Pos.Y, p, shapeStyle(shape), + shape.Pos.X, shape.Pos.Y, p, shape.CSSStyle(), ) } @@ -328,7 +308,7 @@ func Class(r *Runner, shape d2target.Shape) (string, error) { for _, p := range paths { output += fmt.Sprintf( ``, - shape.Pos.X, shape.Pos.Y, p, shapeStyle(shape), + shape.Pos.X, shape.Pos.Y, p, shape.CSSStyle(), ) } diff --git a/d2renderers/d2svg/class.go b/d2renderers/d2svg/class.go index 85205db32..200264054 100644 --- a/d2renderers/d2svg/class.go +++ b/d2renderers/d2svg/class.go @@ -80,7 +80,7 @@ func classRow(shape d2target.Shape, box *geo.Box, prefix, nameText, typeText str func drawClass(writer io.Writer, targetShape d2target.Shape) { fmt.Fprintf(writer, ``, - targetShape.Pos.X, targetShape.Pos.Y, targetShape.Width, targetShape.Height, shapeStyle(targetShape)) + targetShape.Pos.X, targetShape.Pos.Y, targetShape.Width, targetShape.Height, targetShape.CSSStyle()) box := geo.NewBox( geo.NewPoint(float64(targetShape.Pos.X), float64(targetShape.Pos.Y)), diff --git a/d2renderers/d2svg/d2svg.go b/d2renderers/d2svg/d2svg.go index 0f28eccb2..87bfff9a2 100644 --- a/d2renderers/d2svg/d2svg.go +++ b/d2renderers/d2svg/d2svg.go @@ -586,7 +586,7 @@ func render3dRect(targetShape d2target.Shape) string { ) border := targetShape border.Fill = "none" - borderStyle := shapeStyle(border) + borderStyle := border.CSSStyle() renderedBorder := fmt.Sprintf(``, strings.Join(borderSegments, " "), borderStyle) @@ -607,7 +607,7 @@ func render3dRect(targetShape d2target.Shape) string { mainShape := targetShape mainShape.Stroke = "none" mainRect := fmt.Sprintf(``, - targetShape.Pos.X, targetShape.Pos.Y, targetShape.Width, targetShape.Height, shapeStyle(mainShape), maskID, + targetShape.Pos.X, targetShape.Pos.Y, targetShape.Width, targetShape.Height, mainShape.CSSStyle(), maskID, ) // render the side shapes in the darkened color without stroke and the border mask @@ -632,7 +632,7 @@ func render3dRect(targetShape d2target.Shape) string { sideShape.Fill = darkerColor sideShape.Stroke = "none" renderedSides := fmt.Sprintf(``, - strings.Join(sidePoints, " "), shapeStyle(sideShape), maskID) + strings.Join(sidePoints, " "), sideShape.CSSStyle(), maskID) return borderMask + mainRect + renderedSides + renderedBorder } @@ -647,7 +647,7 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske tl := geo.NewPoint(float64(targetShape.Pos.X), float64(targetShape.Pos.Y)) width := float64(targetShape.Width) height := float64(targetShape.Height) - style := shapeStyle(targetShape) + style := targetShape.CSSStyle() shapeType := d2target.DSL_SHAPE_TO_SHAPE_TYPE[targetShape.Type] s := shape.NewShape(shapeType, geo.NewBox(tl, width, height)) @@ -943,29 +943,6 @@ func RenderText(text string, x, height float64) string { return strings.Join(rendered, "") } -func shapeStyle(shape d2target.Shape) string { - out := "" - - if shape.Type == d2target.ShapeSQLTable || shape.Type == d2target.ShapeClass { - // Fill is used for header fill in these types - // This fill property is just background of rows - out += fmt.Sprintf(`fill:%s;`, shape.Stroke) - // Stroke (border) of these shapes should match the header fill - out += fmt.Sprintf(`stroke:%s;`, shape.Fill) - } else { - out += fmt.Sprintf(`fill:%s;`, shape.Fill) - out += fmt.Sprintf(`stroke:%s;`, shape.Stroke) - } - out += fmt.Sprintf(`opacity:%f;`, shape.Opacity) - out += fmt.Sprintf(`stroke-width:%d;`, shape.StrokeWidth) - if shape.StrokeDash != 0 { - dashSize, gapSize := svg.GetStrokeDashAttributes(float64(shape.StrokeWidth), shape.StrokeDash) - out += fmt.Sprintf(`stroke-dasharray:%f,%f;`, dashSize, gapSize) - } - - return out -} - func embedFonts(buf *bytes.Buffer, fontFamily *d2fonts.FontFamily) { content := buf.String() buf.WriteString(`