better appendix internal links
This commit is contained in:
parent
d0c22dfedd
commit
56e46d6260
3 changed files with 161 additions and 1 deletions
|
|
@ -11,6 +11,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"oss.terrastruct.com/d2/d2graph"
|
"oss.terrastruct.com/d2/d2graph"
|
||||||
|
"oss.terrastruct.com/d2/d2parser"
|
||||||
"oss.terrastruct.com/d2/d2renderers/d2fonts"
|
"oss.terrastruct.com/d2/d2renderers/d2fonts"
|
||||||
"oss.terrastruct.com/d2/d2renderers/d2svg"
|
"oss.terrastruct.com/d2/d2renderers/d2svg"
|
||||||
"oss.terrastruct.com/d2/d2target"
|
"oss.terrastruct.com/d2/d2target"
|
||||||
|
|
@ -162,6 +163,33 @@ func Append(diagram *d2target.Diagram, ruler *textmeasure.Ruler, in []byte) []by
|
||||||
return []byte(svg)
|
return []byte(svg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// transformInternalLink turns
|
||||||
|
// "root.layers.x.layers.y"
|
||||||
|
// into
|
||||||
|
// "[name] > x > y"
|
||||||
|
func transformInternalLink(rootName, link string) string {
|
||||||
|
if link == "" || !strings.HasPrefix(link, "root") {
|
||||||
|
return link
|
||||||
|
}
|
||||||
|
|
||||||
|
mk, err := d2parser.ParseMapKey(link)
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
key := d2graph.Key(mk.Key)
|
||||||
|
|
||||||
|
key[0] = rootName
|
||||||
|
|
||||||
|
if len(key) > 1 {
|
||||||
|
for i := 1; i < len(key); i += 2 {
|
||||||
|
key[i] = ">"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return strings.Join(key, " ")
|
||||||
|
}
|
||||||
|
|
||||||
func generateAppendix(diagram *d2target.Diagram, ruler *textmeasure.Ruler, svg string) (string, int, int) {
|
func generateAppendix(diagram *d2target.Diagram, ruler *textmeasure.Ruler, svg string) (string, int, int) {
|
||||||
tl, br := diagram.BoundingBox()
|
tl, br := diagram.BoundingBox()
|
||||||
|
|
||||||
|
|
@ -171,7 +199,7 @@ func generateAppendix(diagram *d2target.Diagram, ruler *textmeasure.Ruler, svg s
|
||||||
i := 1
|
i := 1
|
||||||
|
|
||||||
for _, s := range diagram.Shapes {
|
for _, s := range diagram.Shapes {
|
||||||
for _, txt := range []string{s.Tooltip, s.Link} {
|
for _, txt := range []string{s.Tooltip, transformInternalLink(diagram.Name, s.Link)} {
|
||||||
if txt != "" {
|
if txt != "" {
|
||||||
line, w, h := generateLine(i, br.Y+(PAD_TOP*2)+totalHeight, txt, ruler)
|
line, w, h := generateLine(i, br.Y+(PAD_TOP*2)+totalHeight, txt, ruler)
|
||||||
i++
|
i++
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,23 @@ x -> y
|
||||||
script: `x: { link: https://d2lang.com }
|
script: `x: { link: https://d2lang.com }
|
||||||
y: { link: https://fosny.eu; tooltip: Gee, I feel kind of LIGHT in the head now,\nknowing I can't make my satellite dish PAYMENTS! }
|
y: { link: https://fosny.eu; tooltip: Gee, I feel kind of LIGHT in the head now,\nknowing I can't make my satellite dish PAYMENTS! }
|
||||||
x -> y
|
x -> y
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "internal-links",
|
||||||
|
script: `x: { link: layers.x }
|
||||||
|
layers: {
|
||||||
|
x: {
|
||||||
|
gooo
|
||||||
|
home.link: _
|
||||||
|
next.link: steps.next
|
||||||
|
steps: {
|
||||||
|
next: {
|
||||||
|
hi
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
115
d2renderers/d2svg/appendix/testdata/internal-links/sketch.exp.svg
vendored
Normal file
115
d2renderers/d2svg/appendix/testdata/internal-links/sketch.exp.svg
vendored
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 976 KiB |
Loading…
Reference in a new issue