From 8e01780b3a41be9d56de22ba3646af9f22a83909 Mon Sep 17 00:00:00 2001 From: Alexander Wang Date: Fri, 1 Aug 2025 09:23:09 -0600 Subject: [PATCH 1/2] legend: set label --- d2compiler/compile.go | 4 + d2compiler/compile_test.go | 6 +- d2exporter/export.go | 4 +- d2graph/d2graph.go | 1 + d2renderers/d2svg/d2svg.go | 8 +- d2target/d2target.go | 7 +- .../txtar/legend/dagre/board.exp.json | 1 + .../txtar/legend/dagre/sketch.exp.svg | 6 +- .../testdata/txtar/legend/elk/board.exp.json | 1 + .../testdata/txtar/legend/elk/sketch.exp.svg | 6 +- e2etests/txtar.txt | 2 +- .../d2compiler/TestCompile/legend.exp.json | 227 +++++++++--------- 12 files changed, 153 insertions(+), 120 deletions(-) diff --git a/d2compiler/compile.go b/d2compiler/compile.go index 0e2b2e839e..66f6497a54 100644 --- a/d2compiler/compile.go +++ b/d2compiler/compile.go @@ -155,6 +155,10 @@ func (c *compiler) compileLegend(g *d2graph.Graph, m *d2ir.Map) { Edges: legendGraph.Edges, } + if legendField.Primary() != nil && legendField.Primary().Value != nil { + legend.Label = legendField.Primary().Value.ScalarString() + } + if len(legend.Objects) > 0 || len(legend.Edges) > 0 { g.Legend = legend } diff --git a/d2compiler/compile_test.go b/d2compiler/compile_test.go index a593f67fe0..aacae33711 100644 --- a/d2compiler/compile_test.go +++ b/d2compiler/compile_test.go @@ -725,7 +725,7 @@ x: { text: ` vars: { - d2-legend: { + d2-legend: "凡例"{ User: "A person who interacts with the system" { shape: person style: { @@ -762,6 +762,10 @@ user -> db: Uses return } + if g.Legend.Label != "凡例" { + t.Errorf("Expected label") + } + // 2. Verify the correct objects are in the legend if len(g.Legend.Objects) != 2 { t.Errorf("Expected 2 objects in legend, got %d", len(g.Legend.Objects)) diff --git a/d2exporter/export.go b/d2exporter/export.go index dfbc596665..c492c6b8d0 100644 --- a/d2exporter/export.go +++ b/d2exporter/export.go @@ -48,7 +48,9 @@ func Export(ctx context.Context, g *d2graph.Graph, fontFamily *d2fonts.FontFamil } if g.Legend != nil { - legend := &d2target.Legend{} + legend := &d2target.Legend{ + Label: g.Legend.Label, + } if len(g.Legend.Objects) > 0 { legend.Shapes = make([]d2target.Shape, len(g.Legend.Objects)) diff --git a/d2graph/d2graph.go b/d2graph/d2graph.go index 107e7392ba..6b49c2984b 100644 --- a/d2graph/d2graph.go +++ b/d2graph/d2graph.go @@ -69,6 +69,7 @@ type Graph struct { } type Legend struct { + Label string `json:"label,omitempty"` Objects []*Object `json:"objects,omitempty"` Edges []*Edge `json:"edges,omitempty"` } diff --git a/d2renderers/d2svg/d2svg.go b/d2renderers/d2svg/d2svg.go index fe4e4435b8..9a19e0fae1 100644 --- a/d2renderers/d2svg/d2svg.go +++ b/d2renderers/d2svg/d2svg.go @@ -198,8 +198,12 @@ func RenderLegend(buf *bytes.Buffer, diagram *d2target.Diagram, diagramHash stri legendEl.Rx = 4 fmt.Fprint(buf, legendEl.Render()) - fmt.Fprintf(buf, `Legend`, - legendX+LEGEND_PADDING, legendY+LEGEND_PADDING+LEGEND_FONT_SIZE, LEGEND_FONT_SIZE+2) + legendLabel := "Legend" + if diagram.Legend.Label != "" { + legendLabel = diagram.Legend.Label + } + fmt.Fprintf(buf, `%s`, + legendX+LEGEND_PADDING, legendY+LEGEND_PADDING+LEGEND_FONT_SIZE, LEGEND_FONT_SIZE+2, html.EscapeString(legendLabel)) currentY := legendY + LEGEND_PADDING*2 + LEGEND_FONT_SIZE diff --git a/d2target/d2target.go b/d2target/d2target.go index 756ad4a575..eb9934c765 100644 --- a/d2target/d2target.go +++ b/d2target/d2target.go @@ -97,6 +97,7 @@ type Diagram struct { } type Legend struct { + Label string `json:"label,omitempty"` Shapes []Shape `json:"shapes,omitempty"` Connections []Connection `json:"connections,omitempty"` } @@ -545,7 +546,11 @@ func (diagram Diagram) GetCorpus() string { } if diagram.Legend != nil { - corpus += "Legend" + if diagram.Legend.Label != "" { + corpus += diagram.Legend.Label + } else { + corpus += "Legend" + } for _, s := range diagram.Legend.Shapes { corpus += s.Label } diff --git a/e2etests/testdata/txtar/legend/dagre/board.exp.json b/e2etests/testdata/txtar/legend/dagre/board.exp.json index 838cefcc88..9d1afe590f 100644 --- a/e2etests/testdata/txtar/legend/dagre/board.exp.json +++ b/e2etests/testdata/txtar/legend/dagre/board.exp.json @@ -518,6 +518,7 @@ "level": 0 }, "legend": { + "label": "凡例", "shapes": [ { "id": "a", diff --git a/e2etests/testdata/txtar/legend/dagre/sketch.exp.svg b/e2etests/testdata/txtar/legend/dagre/sketch.exp.svg index c261218243..e4f7496c76 100644 --- a/e2etests/testdata/txtar/legend/dagre/sketch.exp.svg +++ b/e2etests/testdata/txtar/legend/dagre/sketch.exp.svg @@ -4,14 +4,14 @@ } @font-face { font-family: d2-1289870894-font-regular; - src: url("data:application/font-woff;base64,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"); + src: url("data:application/font-woff;base64,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"); } .d2-1289870894 .text-bold { font-family: "d2-1289870894-font-bold"; } @font-face { font-family: d2-1289870894-font-bold; - src: url("data:application/font-woff;base64,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"); + src: url("data:application/font-woff;base64,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"); }]]>api-1api-2postgresexternalapi-3 LegendMicroserviceDatabase Good relationship Bad relationship Tenuous + .d2-1289870894 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-1289870894);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker-d2-1289870894);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright-d2-1289870894);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright-d2-1289870894);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright-d2-1289870894);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-1289870894);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-1289870894);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright-d2-1289870894);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-1289870894);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright-d2-1289870894);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-1289870894);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-1289870894);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-1289870894);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-1289870894);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-1289870894);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-1289870894);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-1289870894);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-1289870894);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]>api-1api-2postgresexternalapi-3 凡例MicroserviceDatabase Good relationship Bad relationship Tenuous \ No newline at end of file diff --git a/e2etests/testdata/txtar/legend/elk/board.exp.json b/e2etests/testdata/txtar/legend/elk/board.exp.json index 5376eae0ad..66724cfa4b 100644 --- a/e2etests/testdata/txtar/legend/elk/board.exp.json +++ b/e2etests/testdata/txtar/legend/elk/board.exp.json @@ -477,6 +477,7 @@ "level": 0 }, "legend": { + "label": "凡例", "shapes": [ { "id": "a", diff --git a/e2etests/testdata/txtar/legend/elk/sketch.exp.svg b/e2etests/testdata/txtar/legend/elk/sketch.exp.svg index 2a2b5fa3a0..4a02ff0b27 100644 --- a/e2etests/testdata/txtar/legend/elk/sketch.exp.svg +++ b/e2etests/testdata/txtar/legend/elk/sketch.exp.svg @@ -4,14 +4,14 @@ } @font-face { font-family: d2-3767055042-font-regular; - src: url("data:application/font-woff;base64,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"); + src: url("data:application/font-woff;base64,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"); } .d2-3767055042 .text-bold { font-family: "d2-3767055042-font-bold"; } @font-face { font-family: d2-3767055042-font-bold; - src: url("data:application/font-woff;base64,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"); + src: url("data:application/font-woff;base64,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"); }]]>api-1api-2postgresexternalapi-3 LegendMicroserviceDatabase Good relationship Bad relationship Tenuous + .d2-3767055042 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-3767055042);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker-d2-3767055042);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright-d2-3767055042);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright-d2-3767055042);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright-d2-3767055042);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-3767055042);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-3767055042);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright-d2-3767055042);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-3767055042);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright-d2-3767055042);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-3767055042);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-3767055042);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-3767055042);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-3767055042);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-3767055042);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-3767055042);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-3767055042);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-3767055042);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]>api-1api-2postgresexternalapi-3 凡例MicroserviceDatabase Good relationship Bad relationship Tenuous \ No newline at end of file diff --git a/e2etests/txtar.txt b/e2etests/txtar.txt index 0c32edc215..032de5bf95 100644 --- a/e2etests/txtar.txt +++ b/e2etests/txtar.txt @@ -1071,7 +1071,7 @@ c4person -> styling.c4styled -> styling.c4sized -- legend -- vars: { - d2-legend: { + d2-legend: "凡例"{ a: { label: Microservice } diff --git a/testdata/d2compiler/TestCompile/legend.exp.json b/testdata/d2compiler/TestCompile/legend.exp.json index 0c75e278cc..e97a4122a5 100644 --- a/testdata/d2compiler/TestCompile/legend.exp.json +++ b/testdata/d2compiler/TestCompile/legend.exp.json @@ -3,11 +3,11 @@ "name": "", "isFolderOnly": false, "ast": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,0:0:0-32:0:535", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,0:0:0-32:0:543", "nodes": [ { "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,1:3:4-27:1:492", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,1:3:4-27:1:500", "key": { "range": "d2/testdata/d2compiler/TestCompile/legend.d2,1:3:4-1:7:8", "path": [ @@ -27,11 +27,11 @@ "primary": {}, "value": { "map": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,1:9:10-27:1:492", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,1:9:10-27:1:500", "nodes": [ { "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,2:2:14-26:3:490", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,2:2:14-26:3:498", "key": { "range": "d2/testdata/d2compiler/TestCompile/legend.d2,2:2:14-2:11:23", "path": [ @@ -48,20 +48,30 @@ } ] }, - "primary": {}, + "primary": { + "double_quoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,2:13:25-2:21:33", + "value": [ + { + "string": "凡例", + "raw_string": "凡例" + } + ] + } + }, "value": { "map": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,2:13:25-26:3:490", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,2:21:33-26:3:498", "nodes": [ { "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,3:4:31-8:5:152", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,3:4:39-8:5:160", "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,3:4:31-3:8:35", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,3:4:39-3:8:43", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,3:4:31-3:8:35", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,3:4:39-3:8:43", "value": [ { "string": "User", @@ -74,7 +84,7 @@ }, "primary": { "double_quoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,3:10:37-3:50:77", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,3:10:45-3:50:85", "value": [ { "string": "A person who interacts with the system", @@ -85,17 +95,17 @@ }, "value": { "map": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,3:51:78-8:5:152", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,3:51:86-8:5:160", "nodes": [ { "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,4:6:86-4:19:99", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,4:6:94-4:19:107", "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,4:6:86-4:11:91", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,4:6:94-4:11:99", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,4:6:86-4:11:91", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,4:6:94-4:11:99", "value": [ { "string": "shape", @@ -109,7 +119,7 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,4:13:93-4:19:99", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,4:13:101-4:19:107", "value": [ { "string": "person", @@ -122,13 +132,13 @@ }, { "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,5:6:106-7:7:146", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,5:6:114-7:7:154", "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,5:6:106-5:11:111", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,5:6:114-5:11:119", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,5:6:106-5:11:111", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,5:6:114-5:11:119", "value": [ { "string": "style", @@ -142,17 +152,17 @@ "primary": {}, "value": { "map": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,5:13:113-7:7:146", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,5:13:121-7:7:154", "nodes": [ { "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,6:8:123-6:23:138", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,6:8:131-6:23:146", "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,6:8:123-6:12:127", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,6:8:131-6:12:135", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,6:8:123-6:12:127", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,6:8:131-6:12:135", "value": [ { "string": "fill", @@ -166,7 +176,7 @@ "primary": {}, "value": { "double_quoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,6:14:129-6:23:138", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,6:14:137-6:23:146", "value": [ { "string": "#f5f5f5", @@ -189,13 +199,13 @@ }, { "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,10:4:158-13:5:251", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,10:4:166-13:5:259", "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,10:4:158-10:12:166", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,10:4:166-10:12:174", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,10:4:158-10:12:166", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,10:4:166-10:12:174", "value": [ { "string": "Database", @@ -208,7 +218,7 @@ }, "primary": { "double_quoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,10:14:168-10:39:193", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,10:14:176-10:39:201", "value": [ { "string": "Stores application data", @@ -219,17 +229,17 @@ }, "value": { "map": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,10:40:194-13:5:251", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,10:40:202-13:5:259", "nodes": [ { "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,11:6:202-11:21:217", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,11:6:210-11:21:225", "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,11:6:202-11:11:207", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,11:6:210-11:11:215", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,11:6:202-11:11:207", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,11:6:210-11:11:215", "value": [ { "string": "shape", @@ -243,7 +253,7 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,11:13:209-11:21:217", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,11:13:217-11:21:225", "value": [ { "string": "cylinder", @@ -256,13 +266,13 @@ }, { "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,12:6:224-12:27:245", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,12:6:232-12:27:253", "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,12:6:224-12:16:234", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,12:6:232-12:16:242", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,12:6:224-12:11:229", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,12:6:232-12:11:237", "value": [ { "string": "style", @@ -273,7 +283,7 @@ }, { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,12:12:230-12:16:234", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,12:12:238-12:16:242", "value": [ { "string": "fill", @@ -287,7 +297,7 @@ "primary": {}, "value": { "double_quoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,12:18:236-12:27:245", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,12:18:244-12:27:253", "value": [ { "string": "#b5d3ff", @@ -305,13 +315,13 @@ }, { "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,15:4:257-17:5:339", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,15:4:265-17:5:347", "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,15:4:257-15:15:268", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,15:4:265-15:15:276", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,15:4:257-15:15:268", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,15:4:265-15:15:276", "value": [ { "string": "HiddenShape", @@ -324,7 +334,7 @@ }, "primary": { "double_quoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,15:17:270-15:55:308", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,15:17:278-15:55:316", "value": [ { "string": "This should not appear in the legend", @@ -335,17 +345,17 @@ }, "value": { "map": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,15:56:309-17:5:339", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,15:56:317-17:5:347", "nodes": [ { "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,16:6:317-16:22:333", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,16:6:325-16:22:341", "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,16:6:317-16:19:330", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,16:6:325-16:19:338", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,16:6:317-16:11:322", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,16:6:325-16:11:330", "value": [ { "string": "style", @@ -356,7 +366,7 @@ }, { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,16:12:323-16:19:330", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,16:12:331-16:19:338", "value": [ { "string": "opacity", @@ -370,7 +380,7 @@ "primary": {}, "value": { "number": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,16:21:332-16:22:333", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,16:21:340-16:22:341", "raw": "0", "value": "0" } @@ -384,16 +394,16 @@ }, { "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:4:345-21:5:410", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:4:353-21:5:418", "edges": [ { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:4:345-19:20:361", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:4:353-19:20:369", "src": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:4:345-19:8:349", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:4:353-19:8:357", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:4:345-19:8:349", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:4:353-19:8:357", "value": [ { "string": "User", @@ -406,11 +416,11 @@ }, "src_arrow": "", "dst": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:12:353-19:20:361", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:12:361-19:20:369", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:12:353-19:20:361", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:12:361-19:20:369", "value": [ { "string": "Database", @@ -426,7 +436,7 @@ ], "primary": { "double_quoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:22:363-19:34:375", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:22:371-19:34:383", "value": [ { "string": "Reads data", @@ -437,17 +447,17 @@ }, "value": { "map": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:35:376-21:5:410", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:35:384-21:5:418", "nodes": [ { "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,20:6:384-20:26:404", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,20:6:392-20:26:412", "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,20:6:384-20:18:396", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,20:6:392-20:18:404", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,20:6:384-20:11:389", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,20:6:392-20:11:397", "value": [ { "string": "style", @@ -458,7 +468,7 @@ }, { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,20:12:390-20:18:396", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,20:12:398-20:18:404", "value": [ { "string": "stroke", @@ -472,7 +482,7 @@ "primary": {}, "value": { "double_quoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,20:20:398-20:26:404", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,20:20:406-20:26:412", "value": [ { "string": "blue", @@ -490,16 +500,16 @@ }, { "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:4:416-25:5:486", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:4:424-25:5:494", "edges": [ { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:4:416-23:20:432", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:4:424-23:20:440", "src": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:4:416-23:12:424", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:4:424-23:12:432", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:4:416-23:12:424", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:4:424-23:12:432", "value": [ { "string": "Database", @@ -512,11 +522,11 @@ }, "src_arrow": "", "dst": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:16:428-23:20:432", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:16:436-23:20:440", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:16:428-23:20:432", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:16:436-23:20:440", "value": [ { "string": "User", @@ -532,7 +542,7 @@ ], "primary": { "double_quoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:22:434-23:39:451", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:22:442-23:39:459", "value": [ { "string": "Returns results", @@ -543,17 +553,17 @@ }, "value": { "map": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:40:452-25:5:486", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:40:460-25:5:494", "nodes": [ { "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,24:6:460-24:26:480", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,24:6:468-24:26:488", "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,24:6:460-24:23:477", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,24:6:468-24:23:485", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,24:6:460-24:11:465", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,24:6:468-24:11:473", "value": [ { "string": "style", @@ -564,7 +574,7 @@ }, { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,24:12:466-24:23:477", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,24:12:474-24:23:485", "value": [ { "string": "stroke-dash", @@ -578,7 +588,7 @@ "primary": {}, "value": { "number": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,24:25:479-24:26:480", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,24:25:487-24:26:488", "raw": "5", "value": "5" } @@ -602,13 +612,13 @@ }, { "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,29:0:494-29:10:504", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,29:0:502-29:10:512", "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,29:0:494-29:4:498", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,29:0:502-29:4:506", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,29:0:494-29:4:498", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,29:0:502-29:4:506", "value": [ { "string": "user", @@ -622,7 +632,7 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,29:6:500-29:10:504", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,29:6:508-29:10:512", "value": [ { "string": "User", @@ -635,13 +645,13 @@ }, { "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,30:0:505-30:12:517", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,30:0:513-30:12:525", "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,30:0:505-30:2:507", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,30:0:513-30:2:515", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,30:0:505-30:2:507", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,30:0:513-30:2:515", "value": [ { "string": "db", @@ -655,7 +665,7 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,30:4:509-30:12:517", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,30:4:517-30:12:525", "value": [ { "string": "Database", @@ -668,16 +678,16 @@ }, { "map_key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:0:518-31:16:534", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:0:526-31:16:542", "edges": [ { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:0:518-31:10:528", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:0:526-31:10:536", "src": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:0:518-31:4:522", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:0:526-31:4:530", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:0:518-31:4:522", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:0:526-31:4:530", "value": [ { "string": "user", @@ -690,11 +700,11 @@ }, "src_arrow": "", "dst": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:8:526-31:10:528", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:8:534-31:10:536", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:8:526-31:10:528", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:8:534-31:10:536", "value": [ { "string": "db", @@ -711,7 +721,7 @@ "primary": {}, "value": { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:12:530-31:16:534", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:12:538-31:16:542", "value": [ { "string": "Uses", @@ -749,6 +759,7 @@ "zIndex": 0 }, "legend": { + "label": "凡例", "objects": [ { "id": "User", @@ -756,11 +767,11 @@ "references": [ { "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,3:4:31-3:8:35", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,3:4:39-3:8:43", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,3:4:31-3:8:35", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,3:4:39-3:8:43", "value": [ { "string": "User", @@ -776,11 +787,11 @@ }, { "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:4:345-19:8:349", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:4:353-19:8:357", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:4:345-19:8:349", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:4:353-19:8:357", "value": [ { "string": "User", @@ -796,11 +807,11 @@ }, { "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:16:428-23:20:432", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:16:436-23:20:440", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:16:428-23:20:432", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:16:436-23:20:440", "value": [ { "string": "User", @@ -854,11 +865,11 @@ "references": [ { "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,10:4:158-10:12:166", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,10:4:166-10:12:174", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,10:4:158-10:12:166", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,10:4:166-10:12:174", "value": [ { "string": "Database", @@ -874,11 +885,11 @@ }, { "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:12:353-19:20:361", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:12:361-19:20:369", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:12:353-19:20:361", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,19:12:361-19:20:369", "value": [ { "string": "Database", @@ -894,11 +905,11 @@ }, { "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:4:416-23:12:424", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:4:424-23:12:432", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:4:416-23:12:424", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,23:4:424-23:12:432", "value": [ { "string": "Database", @@ -1080,11 +1091,11 @@ "references": [ { "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,29:0:494-29:4:498", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,29:0:502-29:4:506", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,29:0:494-29:4:498", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,29:0:502-29:4:506", "value": [ { "string": "user", @@ -1100,11 +1111,11 @@ }, { "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:0:518-31:4:522", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:0:526-31:4:530", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:0:518-31:4:522", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:0:526-31:4:530", "value": [ { "string": "user", @@ -1146,11 +1157,11 @@ "references": [ { "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,30:0:505-30:2:507", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,30:0:513-30:2:515", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,30:0:505-30:2:507", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,30:0:513-30:2:515", "value": [ { "string": "db", @@ -1166,11 +1177,11 @@ }, { "key": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:8:526-31:10:528", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:8:534-31:10:536", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:8:526-31:10:528", + "range": "d2/testdata/d2compiler/TestCompile/legend.d2,31:8:534-31:10:536", "value": [ { "string": "db", From 528019e5cec318bfdc2921c1eed5220b1ce7eadc Mon Sep 17 00:00:00 2001 From: Alexander Wang Date: Fri, 1 Aug 2025 09:32:53 -0600 Subject: [PATCH 2/2] next --- ci/release/changelogs/next.md | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/release/changelogs/next.md b/ci/release/changelogs/next.md index 91b2494428..02b3b0d037 100644 --- a/ci/release/changelogs/next.md +++ b/ci/release/changelogs/next.md @@ -11,6 +11,7 @@ - labels on scenario/step boards can be set with primary value (like layers) [#2579](https://github.com/terrastruct/d2/pull/2579) - autoformatter preserves order of boards [#2580](https://github.com/terrastruct/d2/pull/2580) +- rename "Legend" with a title/label of your choosing (especially useful for non-English diagrams) [#2582](https://github.com/terrastruct/d2/pull/2582) #### Bugfixes ⛑️