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"
|
||||
|
||||
"oss.terrastruct.com/d2/d2graph"
|
||||
"oss.terrastruct.com/d2/d2parser"
|
||||
"oss.terrastruct.com/d2/d2renderers/d2fonts"
|
||||
"oss.terrastruct.com/d2/d2renderers/d2svg"
|
||||
"oss.terrastruct.com/d2/d2target"
|
||||
|
|
@ -162,6 +163,33 @@ func Append(diagram *d2target.Diagram, ruler *textmeasure.Ruler, in []byte) []by
|
|||
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) {
|
||||
tl, br := diagram.BoundingBox()
|
||||
|
||||
|
|
@ -171,7 +199,7 @@ func generateAppendix(diagram *d2target.Diagram, ruler *textmeasure.Ruler, svg s
|
|||
i := 1
|
||||
|
||||
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 != "" {
|
||||
line, w, h := generateLine(i, br.Y+(PAD_TOP*2)+totalHeight, txt, ruler)
|
||||
i++
|
||||
|
|
|
|||
|
|
@ -90,6 +90,23 @@ x -> y
|
|||
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! }
|
||||
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