Skip to content

Commit 60ed1dc

Browse files
authored
Merge pull request #2398 from alixander/md-shape
patch md label setting
2 parents 42e11d1 + 16b0c89 commit 60ed1dc

File tree

4 files changed

+871
-15
lines changed

4 files changed

+871
-15
lines changed

d2compiler/compile.go

+19-12
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ func (c *compiler) compileBoard(g *d2graph.Graph, ir *d2ir.Map) *d2graph.Graph {
8787
ir = ir.Copy(nil).(*d2ir.Map)
8888
// c.preprocessSeqDiagrams(ir)
8989
c.compileMap(g.Root, ir)
90+
c.setDefaultShapes(g)
9091
if len(c.err.Errors) == 0 {
9192
c.validateKeys(g.Root, ir)
9293
}
@@ -356,14 +357,7 @@ func (c *compiler) compileField(obj *d2graph.Object, f *d2ir.Field) {
356357
parent := obj
357358
obj = obj.EnsureChild(([]d2ast.String{f.Name}))
358359
if f.Primary() != nil {
359-
var s string
360-
if obj.OuterSequenceDiagram() != nil {
361-
s = obj.Attributes.Shape.Value
362-
}
363360
c.compileLabel(&obj.Attributes, f)
364-
if s != "" {
365-
obj.Attributes.Shape.Value = s
366-
}
367361
}
368362
if f.Map() != nil {
369363
c.compileMap(obj, f.Map())
@@ -410,8 +404,6 @@ func (c *compiler) compileLabel(attrs *d2graph.Attributes, f d2ir.Node) {
410404
attrs.Language = fullTag
411405
}
412406
switch attrs.Language {
413-
case "latex":
414-
attrs.Shape.Value = d2target.ShapeText
415407
case "markdown":
416408
rendered, err := textmeasure.RenderMarkdown(scalar.ScalarString())
417409
if err != nil {
@@ -428,9 +420,6 @@ func (c *compiler) compileLabel(attrs *d2graph.Attributes, f d2ir.Node) {
428420
c.errorf(f.LastPrimaryKey(), "malformed Markdown: %s", err.Error())
429421
}
430422
}
431-
attrs.Shape.Value = d2target.ShapeText
432-
default:
433-
attrs.Shape.Value = d2target.ShapeCode
434423
}
435424
attrs.Label.Value = scalar.ScalarString()
436425
default:
@@ -1577,3 +1566,21 @@ FOR:
15771566
}
15781567
return nil, nil
15791568
}
1569+
1570+
func (c *compiler) setDefaultShapes(g *d2graph.Graph) {
1571+
for _, obj := range g.Objects {
1572+
if obj.Shape.Value == "" {
1573+
if obj.OuterSequenceDiagram() != nil {
1574+
obj.Shape.Value = d2target.ShapeRectangle
1575+
} else if obj.Language == "latex" {
1576+
obj.Shape.Value = d2target.ShapeText
1577+
} else if obj.Language == "markdown" {
1578+
obj.Shape.Value = d2target.ShapeText
1579+
} else if obj.Language != "" {
1580+
obj.Shape.Value = d2target.ShapeCode
1581+
} else {
1582+
obj.Shape.Value = d2target.ShapeRectangle
1583+
}
1584+
}
1585+
}
1586+
}

d2compiler/compile_test.go

+28
Original file line numberDiff line numberDiff line change
@@ -5605,6 +5605,34 @@ a -> c
56055605
tassert.Equal(t, (*d2graph.Scalar)(nil), g.Edges[2].Style.StrokeWidth)
56065606
},
56075607
},
5608+
{
5609+
name: "md-shape",
5610+
run: func(t *testing.T) {
5611+
g, _ := assertCompile(t, `
5612+
a.shape: circle
5613+
a: |md #hi |
5614+
5615+
b.shape: circle
5616+
b.label: |md #hi |
5617+
5618+
c: |md #hi |
5619+
c.shape: circle
5620+
5621+
d.label: |md #hi |
5622+
d.shape: circle
5623+
5624+
e: {
5625+
shape: circle
5626+
label: |md #hi |
5627+
}
5628+
`, ``)
5629+
tassert.Equal(t, 5, len(g.Objects))
5630+
for _, obj := range g.Objects {
5631+
tassert.Equal(t, "circle", obj.Shape.Value, "Object "+obj.ID+" should have circle shape")
5632+
tassert.Equal(t, "markdown", obj.Language, "Object "+obj.ID+" should have md language")
5633+
}
5634+
},
5635+
},
56085636
}
56095637

56105638
for _, tc := range tca {

d2graph/d2graph.go

-3
Original file line numberDiff line numberDiff line change
@@ -711,9 +711,6 @@ func (obj *Object) newObject(ids d2ast.String) *Object {
711711
Label: Scalar{
712712
Value: idval,
713713
},
714-
Shape: Scalar{
715-
Value: d2target.ShapeRectangle,
716-
},
717714
},
718715

719716
Graph: obj.Graph,

0 commit comments

Comments
 (0)