fix label near setting

This commit is contained in:
Alexander Wang 2024-02-14 14:18:50 -08:00
parent 03795d8ff4
commit 77aa38b0ef
No known key found for this signature in database
GPG key ID: BE3937D0D52D8927
7 changed files with 939 additions and 3 deletions

View file

@ -771,9 +771,20 @@ func _set(g *d2graph.Graph, baseAST *d2ast.Map, key string, tag, value *string)
}
}
case "label":
if inlined(&attrs.Label) {
attrs.Label.MapKey.SetScalar(mk.Value.ScalarBox())
return nil
if len(mk.Key.Path[reservedIndex:]) > 1 {
reservedTargetKey = mk.Key.Path[reservedIndex+1].Unbox().ScalarString()
switch reservedTargetKey {
case "near":
if inlined(attrs.LabelPosition) {
attrs.LabelPosition.MapKey.SetScalar(mk.Value.ScalarBox())
return nil
}
}
} else {
if inlined(&attrs.Label) {
attrs.Label.MapKey.SetScalar(mk.Value.ScalarBox())
return nil
}
}
}
}

View file

@ -2185,6 +2185,76 @@ layers: {
value: go2.Pointer(`red`),
exp: `...@yo
(a -> b)[0].style.stroke: red
`,
},
{
name: "label-near/1",
text: `x
`,
key: `x.label.near`,
value: go2.Pointer(`bottom-right`),
exp: `x: {label.near: bottom-right}
`,
},
{
name: "label-near/2",
text: `x.label.near: bottom-left
`,
key: `x.label.near`,
value: go2.Pointer(`bottom-right`),
exp: `x.label.near: bottom-right
`,
},
{
name: "label-near/3",
text: `x: {
label.near: bottom-left
}
`,
key: `x.label.near`,
value: go2.Pointer(`bottom-right`),
exp: `x: {
label.near: bottom-right
}
`,
},
{
name: "label-near/4",
text: `x: {
label: hi {
near: bottom-left
}
}
`,
key: `x.label.near`,
value: go2.Pointer(`bottom-right`),
exp: `x: {
label: hi {
near: bottom-right
}
}
`,
},
{
name: "label-near/5",
text: `x: hi {
label: {
near: bottom-left
}
}
`,
key: `x.label.near`,
value: go2.Pointer(`bottom-right`),
exp: `x: hi {
label: {
near: bottom-right
}
}
`,
},
}

159
testdata/d2oracle/TestSet/label-near/1.exp.json generated vendored Normal file
View file

@ -0,0 +1,159 @@
{
"graph": {
"name": "",
"isFolderOnly": false,
"ast": {
"range": "d2/testdata/d2oracle/TestSet/label-near/1.d2,0:0:0-1:0:30",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/1.d2,0:0:0-0:29:29",
"key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/1.d2,0:0:0-0:1:1",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/1.d2,0:0:0-0:1:1",
"value": [
{
"string": "x",
"raw_string": "x"
}
]
}
}
]
},
"primary": {},
"value": {
"map": {
"range": "d2/testdata/d2oracle/TestSet/label-near/1.d2,0:3:3-0:29:29",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/1.d2,0:4:4-0:28:28",
"key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/1.d2,0:4:4-0:14:14",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/1.d2,0:4:4-0:9:9",
"value": [
{
"string": "label",
"raw_string": "label"
}
]
}
},
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/1.d2,0:10:10-0:14:14",
"value": [
{
"string": "near",
"raw_string": "near"
}
]
}
}
]
},
"primary": {},
"value": {
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/1.d2,0:16:16-0:28:28",
"value": [
{
"string": "bottom-right",
"raw_string": "bottom-right"
}
]
}
}
}
}
]
}
}
}
}
]
},
"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": null,
"objects": [
{
"id": "x",
"id_val": "x",
"references": [
{
"key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/1.d2,0:0:0-0:1:1",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/1.d2,0:0:0-0:1:1",
"value": [
{
"string": "x",
"raw_string": "x"
}
]
}
}
]
},
"key_path_index": 0,
"map_key_edge_index": -1
}
],
"attributes": {
"label": {
"value": "x"
},
"labelDimensions": {
"width": 0,
"height": 0
},
"style": {},
"near_key": null,
"shape": {
"value": "rectangle"
},
"direction": {
"value": ""
},
"constraint": null,
"labelPosition": {
"value": "bottom-right"
}
},
"zIndex": 0
}
]
},
"err": "<nil>"
}

163
testdata/d2oracle/TestSet/label-near/2.exp.json generated vendored Normal file
View file

@ -0,0 +1,163 @@
{
"graph": {
"name": "",
"isFolderOnly": false,
"ast": {
"range": "d2/testdata/d2oracle/TestSet/label-near/2.d2,0:0:0-1:0:27",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/2.d2,0:0:0-0:26:26",
"key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/2.d2,0:0:0-0:12:12",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/2.d2,0:0:0-0:1:1",
"value": [
{
"string": "x",
"raw_string": "x"
}
]
}
},
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/2.d2,0:2:2-0:7:7",
"value": [
{
"string": "label",
"raw_string": "label"
}
]
}
},
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/2.d2,0:8:8-0:12:12",
"value": [
{
"string": "near",
"raw_string": "near"
}
]
}
}
]
},
"primary": {},
"value": {
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/2.d2,0:14:14-0:26:26",
"value": [
{
"string": "bottom-right",
"raw_string": "bottom-right"
}
]
}
}
}
}
]
},
"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": null,
"objects": [
{
"id": "x",
"id_val": "x",
"references": [
{
"key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/2.d2,0:0:0-0:12:12",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/2.d2,0:0:0-0:1:1",
"value": [
{
"string": "x",
"raw_string": "x"
}
]
}
},
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/2.d2,0:2:2-0:7:7",
"value": [
{
"string": "label",
"raw_string": "label"
}
]
}
},
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/2.d2,0:8:8-0:12:12",
"value": [
{
"string": "near",
"raw_string": "near"
}
]
}
}
]
},
"key_path_index": 0,
"map_key_edge_index": -1
}
],
"attributes": {
"label": {
"value": "x"
},
"labelDimensions": {
"width": 0,
"height": 0
},
"style": {},
"near_key": null,
"shape": {
"value": "rectangle"
},
"direction": {
"value": ""
},
"constraint": null,
"labelPosition": {
"value": "bottom-right"
}
},
"zIndex": 0
}
]
},
"err": "<nil>"
}

159
testdata/d2oracle/TestSet/label-near/3.exp.json generated vendored Normal file
View file

@ -0,0 +1,159 @@
{
"graph": {
"name": "",
"isFolderOnly": false,
"ast": {
"range": "d2/testdata/d2oracle/TestSet/label-near/3.d2,0:0:0-3:0:34",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/3.d2,0:0:0-2:1:33",
"key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/3.d2,0:0:0-0:1:1",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/3.d2,0:0:0-0:1:1",
"value": [
{
"string": "x",
"raw_string": "x"
}
]
}
}
]
},
"primary": {},
"value": {
"map": {
"range": "d2/testdata/d2oracle/TestSet/label-near/3.d2,0:3:3-2:1:33",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/3.d2,1:2:7-1:26:31",
"key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/3.d2,1:2:7-1:12:17",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/3.d2,1:2:7-1:7:12",
"value": [
{
"string": "label",
"raw_string": "label"
}
]
}
},
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/3.d2,1:8:13-1:12:17",
"value": [
{
"string": "near",
"raw_string": "near"
}
]
}
}
]
},
"primary": {},
"value": {
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/3.d2,1:14:19-1:26:31",
"value": [
{
"string": "bottom-right",
"raw_string": "bottom-right"
}
]
}
}
}
}
]
}
}
}
}
]
},
"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": null,
"objects": [
{
"id": "x",
"id_val": "x",
"references": [
{
"key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/3.d2,0:0:0-0:1:1",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/3.d2,0:0:0-0:1:1",
"value": [
{
"string": "x",
"raw_string": "x"
}
]
}
}
]
},
"key_path_index": 0,
"map_key_edge_index": -1
}
],
"attributes": {
"label": {
"value": "x"
},
"labelDimensions": {
"width": 0,
"height": 0
},
"style": {},
"near_key": null,
"shape": {
"value": "rectangle"
},
"direction": {
"value": ""
},
"constraint": null,
"labelPosition": {
"value": "bottom-right"
}
},
"zIndex": 0
}
]
},
"err": "<nil>"
}

187
testdata/d2oracle/TestSet/label-near/4.exp.json generated vendored Normal file
View file

@ -0,0 +1,187 @@
{
"graph": {
"name": "",
"isFolderOnly": false,
"ast": {
"range": "d2/testdata/d2oracle/TestSet/label-near/4.d2,0:0:0-5:0:48",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/4.d2,0:0:0-4:1:47",
"key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/4.d2,0:0:0-0:1:1",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/4.d2,0:0:0-0:1:1",
"value": [
{
"string": "x",
"raw_string": "x"
}
]
}
}
]
},
"primary": {},
"value": {
"map": {
"range": "d2/testdata/d2oracle/TestSet/label-near/4.d2,0:3:3-4:1:47",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/4.d2,1:2:7-3:3:45",
"key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/4.d2,1:2:7-1:7:12",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/4.d2,1:2:7-1:7:12",
"value": [
{
"string": "label",
"raw_string": "label"
}
]
}
}
]
},
"primary": {
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/4.d2,1:9:14-1:11:16",
"value": [
{
"string": "hi",
"raw_string": "hi"
}
]
}
},
"value": {
"map": {
"range": "d2/testdata/d2oracle/TestSet/label-near/4.d2,1:12:17-3:3:45",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/4.d2,2:4:23-2:22:41",
"key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/4.d2,2:4:23-2:8:27",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/4.d2,2:4:23-2:8:27",
"value": [
{
"string": "near",
"raw_string": "near"
}
]
}
}
]
},
"primary": {},
"value": {
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/4.d2,2:10:29-2:22:41",
"value": [
{
"string": "bottom-right",
"raw_string": "bottom-right"
}
]
}
}
}
}
]
}
}
}
}
]
}
}
}
}
]
},
"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": null,
"objects": [
{
"id": "x",
"id_val": "x",
"references": [
{
"key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/4.d2,0:0:0-0:1:1",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/4.d2,0:0:0-0:1:1",
"value": [
{
"string": "x",
"raw_string": "x"
}
]
}
}
]
},
"key_path_index": 0,
"map_key_edge_index": -1
}
],
"attributes": {
"label": {
"value": "hi"
},
"labelDimensions": {
"width": 0,
"height": 0
},
"style": {},
"near_key": null,
"shape": {
"value": "rectangle"
},
"direction": {
"value": ""
},
"constraint": null,
"labelPosition": {
"value": "bottom-right"
}
},
"zIndex": 0
}
]
},
"err": "<nil>"
}

187
testdata/d2oracle/TestSet/label-near/5.exp.json generated vendored Normal file
View file

@ -0,0 +1,187 @@
{
"graph": {
"name": "",
"isFolderOnly": false,
"ast": {
"range": "d2/testdata/d2oracle/TestSet/label-near/5.d2,0:0:0-5:0:48",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/5.d2,0:0:0-4:1:47",
"key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/5.d2,0:0:0-0:1:1",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/5.d2,0:0:0-0:1:1",
"value": [
{
"string": "x",
"raw_string": "x"
}
]
}
}
]
},
"primary": {
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/5.d2,0:3:3-0:5:5",
"value": [
{
"string": "hi",
"raw_string": "hi"
}
]
}
},
"value": {
"map": {
"range": "d2/testdata/d2oracle/TestSet/label-near/5.d2,0:6:6-4:1:47",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/5.d2,1:2:10-3:3:45",
"key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/5.d2,1:2:10-1:7:15",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/5.d2,1:2:10-1:7:15",
"value": [
{
"string": "label",
"raw_string": "label"
}
]
}
}
]
},
"primary": {},
"value": {
"map": {
"range": "d2/testdata/d2oracle/TestSet/label-near/5.d2,1:9:17-3:3:45",
"nodes": [
{
"map_key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/5.d2,2:4:23-2:22:41",
"key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/5.d2,2:4:23-2:8:27",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/5.d2,2:4:23-2:8:27",
"value": [
{
"string": "near",
"raw_string": "near"
}
]
}
}
]
},
"primary": {},
"value": {
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/5.d2,2:10:29-2:22:41",
"value": [
{
"string": "bottom-right",
"raw_string": "bottom-right"
}
]
}
}
}
}
]
}
}
}
}
]
}
}
}
}
]
},
"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": null,
"objects": [
{
"id": "x",
"id_val": "x",
"references": [
{
"key": {
"range": "d2/testdata/d2oracle/TestSet/label-near/5.d2,0:0:0-0:1:1",
"path": [
{
"unquoted_string": {
"range": "d2/testdata/d2oracle/TestSet/label-near/5.d2,0:0:0-0:1:1",
"value": [
{
"string": "x",
"raw_string": "x"
}
]
}
}
]
},
"key_path_index": 0,
"map_key_edge_index": -1
}
],
"attributes": {
"label": {
"value": "hi"
},
"labelDimensions": {
"width": 0,
"height": 0
},
"style": {},
"near_key": null,
"shape": {
"value": "rectangle"
},
"direction": {
"value": ""
},
"constraint": null,
"labelPosition": {
"value": "bottom-right"
}
},
"zIndex": 0
}
]
},
"err": "<nil>"
}