From c48a8c75bbd5ea7c32579c258fad8a56b7e061ac Mon Sep 17 00:00:00 2001 From: Martijn Laarman Date: Fri, 14 Feb 2025 16:58:57 +0100 Subject: [PATCH] Allow for both :/ and style cross-link lookups --- .../CrossLinks/CrossLinkResolver.cs | 4 +- tests/authoring/Inline/CrossLinks.fs | 44 +++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/Elastic.Markdown/CrossLinks/CrossLinkResolver.cs b/src/Elastic.Markdown/CrossLinks/CrossLinkResolver.cs index 14bba092c..d7e70716f 100644 --- a/src/Elastic.Markdown/CrossLinks/CrossLinkResolver.cs +++ b/src/Elastic.Markdown/CrossLinks/CrossLinkResolver.cs @@ -108,7 +108,7 @@ public static bool TryResolve(Action errorEmitter, HashSet decla return false; } - var lookupPath = crossLinkUri.AbsolutePath.TrimStart('/'); + var lookupPath = (crossLinkUri.Host + '/' + crossLinkUri.AbsolutePath.TrimStart('/')).Trim('/'); var path = ToTargetUrlPath(lookupPath); if (!string.IsNullOrEmpty(crossLinkUri.Fragment)) path += crossLinkUri.Fragment; @@ -121,7 +121,7 @@ public static bool TryResolve(Action errorEmitter, HashSet decla private static bool TryFullyValidate(Action errorEmitter, LinkReference linkReference, Uri crossLinkUri, [NotNullWhen(true)] out Uri? resolvedUri) { resolvedUri = null; - var lookupPath = crossLinkUri.AbsolutePath.TrimStart('/'); + var lookupPath = (crossLinkUri.Host + '/' + crossLinkUri.AbsolutePath.TrimStart('/')).Trim('/'); if (string.IsNullOrEmpty(lookupPath) && crossLinkUri.Host.EndsWith(".md")) lookupPath = crossLinkUri.Host; diff --git a/tests/authoring/Inline/CrossLinks.fs b/tests/authoring/Inline/CrossLinks.fs index a21ca7df9..1de4e3ea7 100644 --- a/tests/authoring/Inline/CrossLinks.fs +++ b/tests/authoring/Inline/CrossLinks.fs @@ -100,3 +100,47 @@ type ``link to repository that does not resolve yet`` () = [] let ``has no warning`` () = markdown |> hasNoWarnings + +type ``Using double forward slashes`` () = + + static let markdown = Setup.Markdown """ +[APM Server binary](docs-content://solutions/observability/apps/apm-server-binary.md#apm-deb) +""" + + [] + let ``validate HTML`` () = + markdown |> convertsToHtml """ +

+ APM Server binary + +

+ """ + + [] + let ``has no errors`` () = markdown |> hasNoErrors + + [] + let ``has no warning`` () = markdown |> hasNoWarnings + +type ``link to repository that does not resolve yet using double slashes`` () = + + static let markdown = Setup.Markdown """ +[Elasticsearch Documentation](elasticsearch://index.md) +""" + + [] + let ``validate HTML`` () = + markdown |> convertsToHtml """ +

+ Elasticsearch Documentation + +

+ """ + + [] + let ``has no errors`` () = markdown |> hasNoErrors + + [] + let ``has no warning`` () = markdown |> hasNoWarnings