Skip to content

Commit 3149c91

Browse files
authored
Merge pull request #49 from dvdksn/rewrite-internal-links
yaml: add processing for internal links, and tests
2 parents 40b8303 + 869802d commit 3149c91

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

markdown.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ var (
2929
// for our use-case; DO NOT consider using this as a generic regex, or at least
3030
// not before reading https://stackoverflow.com/a/1732454/1811501.
3131
htmlAnchor = regexp.MustCompile(`<a\s+(?:name|id)="?([^"]+)"?\s*></a>\s*`)
32+
// relativeLink matches parts of internal links between .md documents
33+
// e.g. "](buildx_build.md)"
34+
relativeLink = regexp.MustCompile(`\]\((\.\/)?[a-z-_]+\.md(#.*)?\)`)
3235
)
3336

3437
// getSections returns all H2 sections by title (lowercase)
@@ -58,6 +61,16 @@ func cleanupMarkDown(mdString string) (md string, anchors []string) {
5861
mdString = strings.ReplaceAll(mdString, "\t", " ")
5962
mdString = strings.ReplaceAll(mdString, "https://docs.docker.com", "")
6063

64+
// Rewrite internal links, replacing relative paths with absolute path
65+
// e.g. from [docker buildx build](buildx_build.md#build-arg)
66+
// to [docker buildx build](/reference/cli/docker/buildx/build/#build-arg)
67+
mdString = relativeLink.ReplaceAllStringFunc(mdString, func(link string) string {
68+
link = strings.TrimLeft(link, "](./")
69+
link = strings.ReplaceAll(link, "_", "/")
70+
link = strings.ReplaceAll(link, ".md", "/")
71+
return "](/reference/cli/docker/" + link
72+
})
73+
6174
var id string
6275
// replace trailing whitespace per line, and handle custom anchors
6376
lines := strings.Split(mdString, "\n")

markdown_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,21 @@ This is a line.
8484
8585
Last line.`,
8686
},
87+
{
88+
doc: "Link preprocessing",
89+
in: `[link1](https://example.com/)
90+
[link2](https://docs.docker.com/foo/bar/)
91+
[link3](buildx_build.md)
92+
[link4](buildx_imagetools_create.md)
93+
[link5](buildx_build.md#build-arg)
94+
[link6](./swarm_join-token.md)`,
95+
expected: `[link1](https://example.com/)
96+
[link2](/foo/bar/)
97+
[link3](/reference/cli/docker/buildx/build/)
98+
[link4](/reference/cli/docker/buildx/imagetools/create/)
99+
[link5](/reference/cli/docker/buildx/build/#build-arg)
100+
[link6](/reference/cli/docker/swarm/join-token/)`,
101+
},
87102
}
88103
for _, tc := range tests {
89104
tc := tc

0 commit comments

Comments
 (0)