diff --git a/d2oracle/edit.go b/d2oracle/edit.go index a395443ca3..91f4ad5975 100644 --- a/d2oracle/edit.go +++ b/d2oracle/edit.go @@ -647,8 +647,14 @@ func _set(g *d2graph.Graph, baseAST *d2ast.Map, key string, tag, value *string) case "source-arrowhead", "target-arrowhead": var arrowhead *d2graph.Attributes if reservedKey == "source-arrowhead" { + if edge.SrcArrowhead != nil { + attrs = *edge.SrcArrowhead + } arrowhead = edge.SrcArrowhead } else { + if edge.DstArrowhead != nil { + attrs = *edge.DstArrowhead + } arrowhead = edge.DstArrowhead } if arrowhead != nil { @@ -669,6 +675,12 @@ func _set(g *d2graph.Graph, baseAST *d2ast.Map, key string, tag, value *string) arrowhead.Label.MapKey.SetScalar(mk.Value.ScalarBox()) return nil } + case "style": + reservedTargetKey = mk.Key.Path[len(mk.Key.Path)-1].Unbox().ScalarString() + if inlined(attrs.Style.Filled) { + attrs.Style.Filled.MapKey.SetScalar(mk.Value.ScalarBox()) + return nil + } } } case "style": diff --git a/d2oracle/edit_test.go b/d2oracle/edit_test.go index dd0dc054d5..5d963b80b9 100644 --- a/d2oracle/edit_test.go +++ b/d2oracle/edit_test.go @@ -1562,6 +1562,42 @@ a.b -> a.c: {style.animated: true} target-arrowhead.shape: diamond target-arrowhead.style.filled: true } +`, + }, + { + name: "edge-arrowhead-filled/4", + text: `x -> y: { + target-arrowhead.shape: diamond + target-arrowhead.style.filled: true +} +`, + key: `(x -> y)[0].target-arrowhead.style.filled`, + value: go2.Pointer(`false`), + + exp: `x -> y: { + target-arrowhead.shape: diamond + target-arrowhead.style.filled: false +} +`, + }, + { + name: "edge-arrowhead-filled/5", + text: `x -> y: { + target-arrowhead.shape: diamond + target-arrowhead.style: { + filled: false + } +} +`, + key: `(x -> y)[0].target-arrowhead.style.filled`, + value: go2.Pointer(`true`), + + exp: `x -> y: { + target-arrowhead.shape: diamond + target-arrowhead.style: { + filled: true + } +} `, }, { diff --git a/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.exp.json b/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.exp.json new file mode 100644 index 0000000000..cf40b23a19 --- /dev/null +++ b/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.exp.json @@ -0,0 +1,327 @@ +{ + "graph": { + "name": "", + "isFolderOnly": false, + "ast": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,0:0:0-4:0:85", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,0:0:0-3:1:84", + "edges": [ + { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,0:0:0-0:6:6", + "src": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,0:0:0-0:1:1", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,0:0:0-0:1:1", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + }, + "src_arrow": "", + "dst": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,0:5:5-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,0:5:5-0:6:6", + "value": [ + { + "string": "y", + "raw_string": "y" + } + ] + } + } + ] + }, + "dst_arrow": ">" + } + ], + "primary": {}, + "value": { + "map": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,0:8:8-3:1:84", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,1:2:12-1:33:43", + "key": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,1:2:12-1:24:34", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,1:2:12-1:18:28", + "value": [ + { + "string": "target-arrowhead", + "raw_string": "target-arrowhead" + } + ] + } + }, + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,1:19:29-1:24:34", + "value": [ + { + "string": "shape", + "raw_string": "shape" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,1:26:36-1:33:43", + "value": [ + { + "string": "diamond", + "raw_string": "diamond" + } + ] + } + } + } + }, + { + "map_key": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,2:2:46-2:38:82", + "key": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,2:2:46-2:31:75", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,2:2:46-2:18:62", + "value": [ + { + "string": "target-arrowhead", + "raw_string": "target-arrowhead" + } + ] + } + }, + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,2:19:63-2:24:68", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + }, + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,2:25:69-2:31:75", + "value": [ + { + "string": "filled", + "raw_string": "filled" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "boolean": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,2:33:77-2:38:82", + "value": false + } + } + } + } + ] + } + } + } + } + ] + }, + "root": { + "id": "", + "id_val": "", + "attributes": { + "label": { + "value": "" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + }, + "edges": [ + { + "index": 0, + "isCurve": false, + "src_arrow": false, + "dst_arrow": true, + "dstArrowhead": { + "label": { + "value": "" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": { + "filled": { + "value": "false" + } + }, + "near_key": null, + "shape": { + "value": "diamond" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "references": [ + { + "map_key_edge_index": 0 + } + ], + "attributes": { + "label": { + "value": "" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + } + ], + "objects": [ + { + "id": "x", + "id_val": "x", + "references": [ + { + "key": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,0:0:0-0:1:1", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,0:0:0-0:1:1", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": 0 + } + ], + "attributes": { + "label": { + "value": "x" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "rectangle" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + }, + { + "id": "y", + "id_val": "y", + "references": [ + { + "key": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,0:5:5-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/4.d2,0:5:5-0:6:6", + "value": [ + { + "string": "y", + "raw_string": "y" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": 0 + } + ], + "attributes": { + "label": { + "value": "y" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "rectangle" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + } + ] + }, + "err": "" +} diff --git a/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.exp.json b/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.exp.json new file mode 100644 index 0000000000..9e5f0ae808 --- /dev/null +++ b/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.exp.json @@ -0,0 +1,345 @@ +{ + "graph": { + "name": "", + "isFolderOnly": false, + "ast": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,0:0:0-6:0:95", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,0:0:0-5:1:94", + "edges": [ + { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,0:0:0-0:6:6", + "src": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,0:0:0-0:1:1", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,0:0:0-0:1:1", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + }, + "src_arrow": "", + "dst": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,0:5:5-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,0:5:5-0:6:6", + "value": [ + { + "string": "y", + "raw_string": "y" + } + ] + } + } + ] + }, + "dst_arrow": ">" + } + ], + "primary": {}, + "value": { + "map": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,0:8:8-5:1:94", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,1:2:12-1:33:43", + "key": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,1:2:12-1:24:34", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,1:2:12-1:18:28", + "value": [ + { + "string": "target-arrowhead", + "raw_string": "target-arrowhead" + } + ] + } + }, + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,1:19:29-1:24:34", + "value": [ + { + "string": "shape", + "raw_string": "shape" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,1:26:36-1:33:43", + "value": [ + { + "string": "diamond", + "raw_string": "diamond" + } + ] + } + } + } + }, + { + "map_key": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,2:2:46-4:3:92", + "key": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,2:2:46-2:24:68", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,2:2:46-2:18:62", + "value": [ + { + "string": "target-arrowhead", + "raw_string": "target-arrowhead" + } + ] + } + }, + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,2:19:63-2:24:68", + "value": [ + { + "string": "style", + "raw_string": "style" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "map": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,2:26:70-4:3:92", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,3:4:76-3:16:88", + "key": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,3:4:76-3:10:82", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,3:4:76-3:10:82", + "value": [ + { + "string": "filled", + "raw_string": "filled" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "boolean": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,3:12:84-3:16:88", + "value": true + } + } + } + } + ] + } + } + } + } + ] + } + } + } + } + ] + }, + "root": { + "id": "", + "id_val": "", + "attributes": { + "label": { + "value": "" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + }, + "edges": [ + { + "index": 0, + "isCurve": false, + "src_arrow": false, + "dst_arrow": true, + "dstArrowhead": { + "label": { + "value": "" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": { + "filled": { + "value": "true" + } + }, + "near_key": null, + "shape": { + "value": "diamond" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "references": [ + { + "map_key_edge_index": 0 + } + ], + "attributes": { + "label": { + "value": "" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + } + ], + "objects": [ + { + "id": "x", + "id_val": "x", + "references": [ + { + "key": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,0:0:0-0:1:1", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,0:0:0-0:1:1", + "value": [ + { + "string": "x", + "raw_string": "x" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": 0 + } + ], + "attributes": { + "label": { + "value": "x" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "rectangle" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + }, + { + "id": "y", + "id_val": "y", + "references": [ + { + "key": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,0:5:5-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/edge-arrowhead-filled/5.d2,0:5:5-0:6:6", + "value": [ + { + "string": "y", + "raw_string": "y" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": 0 + } + ], + "attributes": { + "label": { + "value": "y" + }, + "labelDimensions": { + "width": 0, + "height": 0 + }, + "style": {}, + "near_key": null, + "shape": { + "value": "rectangle" + }, + "direction": { + "value": "" + }, + "constraint": null + }, + "zIndex": 0 + } + ] + }, + "err": "" +}