diff --git a/d2oracle/edit.go b/d2oracle/edit.go index 3537677b3..fb63fd419 100644 --- a/d2oracle/edit.go +++ b/d2oracle/edit.go @@ -234,6 +234,26 @@ func _set(g *d2graph.Graph, key string, tag, value *string) error { attrs.Shape.MapKey.SetScalar(mk.Value.ScalarBox()) return nil } + case "width": + if attrs.Width != nil && attrs.Width.MapKey != nil { + attrs.Width.MapKey.SetScalar(mk.Value.ScalarBox()) + return nil + } + case "height": + if attrs.Height != nil && attrs.Height.MapKey != nil { + attrs.Height.MapKey.SetScalar(mk.Value.ScalarBox()) + return nil + } + case "top": + if attrs.Top != nil && attrs.Top.MapKey != nil { + attrs.Top.MapKey.SetScalar(mk.Value.ScalarBox()) + return nil + } + case "left": + if attrs.Left != nil && attrs.Left.MapKey != nil { + attrs.Left.MapKey.SetScalar(mk.Value.ScalarBox()) + return nil + } case "style": if len(mk.Key.Path[reservedIndex:]) != 2 { return errors.New("malformed style setting, expected 2 part path") diff --git a/d2oracle/edit_test.go b/d2oracle/edit_test.go index 6dd62ffec..d01f44b5e 100644 --- a/d2oracle/edit_test.go +++ b/d2oracle/edit_test.go @@ -695,6 +695,54 @@ square.style.opacity: 0.2 } }, }, + { + name: "set_position", + text: `square +`, + key: `square.top`, + value: go2.Pointer(`200`), + exp: `square: {top: 200} +`, + }, + { + name: "replace_position", + text: `square: { + width: 100 + top: 32 + left: 44 +} +`, + key: `square.top`, + value: go2.Pointer(`200`), + exp: `square: { + width: 100 + top: 200 + left: 44 +} +`, + }, + { + name: "set_dimensions", + text: `square +`, + key: `square.width`, + value: go2.Pointer(`200`), + exp: `square: {width: 200} +`, + }, + { + name: "replace_dimensions", + text: `square: { + width: 100 +} +`, + key: `square.width`, + value: go2.Pointer(`200`), + exp: `square: { + width: 200 +} +`, + }, { name: "label_unset", text: `square: "Always try to do things in chronological order; it's less confusing that way." diff --git a/testdata/d2oracle/TestSet/replace_dimensions.exp.json b/testdata/d2oracle/TestSet/replace_dimensions.exp.json new file mode 100644 index 000000000..cfb65d1c3 --- /dev/null +++ b/testdata/d2oracle/TestSet/replace_dimensions.exp.json @@ -0,0 +1,147 @@ +{ + "graph": { + "name": "", + "ast": { + "range": "d2/testdata/d2oracle/TestSet/replace_dimensions.d2,0:0:0-3:0:25", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2oracle/TestSet/replace_dimensions.d2,0:0:0-2:1:24", + "key": { + "range": "d2/testdata/d2oracle/TestSet/replace_dimensions.d2,0:0:0-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/replace_dimensions.d2,0:0:0-0:6:6", + "value": [ + { + "string": "square", + "raw_string": "square" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "map": { + "range": "d2/testdata/d2oracle/TestSet/replace_dimensions.d2,0:8:8-2:0:23", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2oracle/TestSet/replace_dimensions.d2,1:2:12-1:12:22", + "key": { + "range": "d2/testdata/d2oracle/TestSet/replace_dimensions.d2,1:2:12-1:7:17", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/replace_dimensions.d2,1:2:12-1:7:17", + "value": [ + { + "string": "width", + "raw_string": "width" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "number": { + "range": "d2/testdata/d2oracle/TestSet/replace_dimensions.d2,1:9:19-1:12:22", + "raw": "200", + "value": "200" + } + } + } + } + ] + } + } + } + } + ] + }, + "root": { + "id": "", + "id_val": "", + "label_dimensions": { + "width": 0, + "height": 0 + }, + "attributes": { + "label": { + "value": "" + }, + "style": {}, + "near_key": null, + "shape": { + "value": "" + }, + "direction": { + "value": "" + }, + "constraint": { + "value": "" + } + }, + "zIndex": 0 + }, + "edges": null, + "objects": [ + { + "id": "square", + "id_val": "square", + "label_dimensions": { + "width": 0, + "height": 0 + }, + "references": [ + { + "key": { + "range": "d2/testdata/d2oracle/TestSet/replace_dimensions.d2,0:0:0-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/replace_dimensions.d2,0:0:0-0:6:6", + "value": [ + { + "string": "square", + "raw_string": "square" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": -1 + } + ], + "attributes": { + "label": { + "value": "square" + }, + "style": {}, + "width": { + "value": "200" + }, + "near_key": null, + "shape": { + "value": "rectangle" + }, + "direction": { + "value": "" + }, + "constraint": { + "value": "" + } + }, + "zIndex": 0 + } + ] + }, + "err": "" +} diff --git a/testdata/d2oracle/TestSet/set_dimensions.exp.json b/testdata/d2oracle/TestSet/set_dimensions.exp.json new file mode 100644 index 000000000..073461ca1 --- /dev/null +++ b/testdata/d2oracle/TestSet/set_dimensions.exp.json @@ -0,0 +1,147 @@ +{ + "graph": { + "name": "", + "ast": { + "range": "d2/testdata/d2oracle/TestSet/set_dimensions.d2,0:0:0-1:0:21", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2oracle/TestSet/set_dimensions.d2,0:0:0-0:20:20", + "key": { + "range": "d2/testdata/d2oracle/TestSet/set_dimensions.d2,0:0:0-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/set_dimensions.d2,0:0:0-0:6:6", + "value": [ + { + "string": "square", + "raw_string": "square" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "map": { + "range": "d2/testdata/d2oracle/TestSet/set_dimensions.d2,0:8:8-0:19:19", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2oracle/TestSet/set_dimensions.d2,0:9:9-0:19:19", + "key": { + "range": "d2/testdata/d2oracle/TestSet/set_dimensions.d2,0:9:9-0:14:14", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/set_dimensions.d2,0:9:9-0:14:14", + "value": [ + { + "string": "width", + "raw_string": "width" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "number": { + "range": "d2/testdata/d2oracle/TestSet/set_dimensions.d2,0:16:16-0:19:19", + "raw": "200", + "value": "200" + } + } + } + } + ] + } + } + } + } + ] + }, + "root": { + "id": "", + "id_val": "", + "label_dimensions": { + "width": 0, + "height": 0 + }, + "attributes": { + "label": { + "value": "" + }, + "style": {}, + "near_key": null, + "shape": { + "value": "" + }, + "direction": { + "value": "" + }, + "constraint": { + "value": "" + } + }, + "zIndex": 0 + }, + "edges": null, + "objects": [ + { + "id": "square", + "id_val": "square", + "label_dimensions": { + "width": 0, + "height": 0 + }, + "references": [ + { + "key": { + "range": "d2/testdata/d2oracle/TestSet/set_dimensions.d2,0:0:0-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/set_dimensions.d2,0:0:0-0:6:6", + "value": [ + { + "string": "square", + "raw_string": "square" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": -1 + } + ], + "attributes": { + "label": { + "value": "square" + }, + "style": {}, + "width": { + "value": "200" + }, + "near_key": null, + "shape": { + "value": "rectangle" + }, + "direction": { + "value": "" + }, + "constraint": { + "value": "" + } + }, + "zIndex": 0 + } + ] + }, + "err": "" +} diff --git a/testdata/d2oracle/TestSet/set_position.exp.json b/testdata/d2oracle/TestSet/set_position.exp.json new file mode 100644 index 000000000..321da083b --- /dev/null +++ b/testdata/d2oracle/TestSet/set_position.exp.json @@ -0,0 +1,147 @@ +{ + "graph": { + "name": "", + "ast": { + "range": "d2/testdata/d2oracle/TestSet/set_position.d2,0:0:0-1:0:19", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2oracle/TestSet/set_position.d2,0:0:0-0:18:18", + "key": { + "range": "d2/testdata/d2oracle/TestSet/set_position.d2,0:0:0-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/set_position.d2,0:0:0-0:6:6", + "value": [ + { + "string": "square", + "raw_string": "square" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "map": { + "range": "d2/testdata/d2oracle/TestSet/set_position.d2,0:8:8-0:17:17", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2oracle/TestSet/set_position.d2,0:9:9-0:17:17", + "key": { + "range": "d2/testdata/d2oracle/TestSet/set_position.d2,0:9:9-0:12:12", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/set_position.d2,0:9:9-0:12:12", + "value": [ + { + "string": "top", + "raw_string": "top" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "number": { + "range": "d2/testdata/d2oracle/TestSet/set_position.d2,0:14:14-0:17:17", + "raw": "200", + "value": "200" + } + } + } + } + ] + } + } + } + } + ] + }, + "root": { + "id": "", + "id_val": "", + "label_dimensions": { + "width": 0, + "height": 0 + }, + "attributes": { + "label": { + "value": "" + }, + "style": {}, + "near_key": null, + "shape": { + "value": "" + }, + "direction": { + "value": "" + }, + "constraint": { + "value": "" + } + }, + "zIndex": 0 + }, + "edges": null, + "objects": [ + { + "id": "square", + "id_val": "square", + "label_dimensions": { + "width": 0, + "height": 0 + }, + "references": [ + { + "key": { + "range": "d2/testdata/d2oracle/TestSet/set_position.d2,0:0:0-0:6:6", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestSet/set_position.d2,0:0:0-0:6:6", + "value": [ + { + "string": "square", + "raw_string": "square" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": -1 + } + ], + "attributes": { + "label": { + "value": "square" + }, + "style": {}, + "top": { + "value": "200" + }, + "near_key": null, + "shape": { + "value": "rectangle" + }, + "direction": { + "value": "" + }, + "constraint": { + "value": "" + } + }, + "zIndex": 0 + } + ] + }, + "err": "" +}