From 6d33b5515846cb09887129ebc8d3408d18f36206 Mon Sep 17 00:00:00 2001 From: Salih Date: Mon, 24 Jun 2024 15:34:38 +0300 Subject: [PATCH] refactoring MarkdownDocumentToHtmlConverter --- .../MarkdownDocumentToHtmlConverter.cs | 66 ++++++++----------- 1 file changed, 26 insertions(+), 40 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs b/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs index 61ba5cdfd9..0990269ff7 100644 --- a/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs +++ b/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs @@ -82,23 +82,41 @@ namespace Volo.Docs.Markdown string documentLocalDirectory, string languageCode) { - return Regex.Replace(content, MarkdownLinkRegExp, delegate (Match match) + return NormalizeLinksByRegexPattern(MarkdownLinkRegExp, 3, 1, content, projectShortName, version, documentLocalDirectory, languageCode); + } + + private string NormalizeAnchorLinks(string projectShortName, string version, string documentLocalDirectory, + string languageCode, string normalized) + { + return NormalizeLinksByRegexPattern(AnchorLinkRegExp, 1, 2, normalized, projectShortName, version, documentLocalDirectory, languageCode); + } + + private string NormalizeLinksByRegexPattern(string regexPattern, + int linkGroupIndex, + int displayTextGroupIndex, + string content, + string projectShortName, + string version, + string documentLocalDirectory, + string languageCode) + { + return Regex.Replace(content, regexPattern, delegate (Match match) { - var link = match.Groups[3].Value; - var displayText = match.Groups[1].Value; + var link = match.Groups[linkGroupIndex].Value; + var displayText = match.Groups[displayTextGroupIndex].Value; - var hashPart = ""; + var hashPart = string.Empty; var linkPart = link; - if (link.Contains("#")) + if (link.Contains('#')) { - var linkSplitted = link.Split("#"); + var linkSplitted = link.Split('#'); linkPart = linkSplitted[0]; hashPart = linkSplitted[1]; } var documentName = RemoveFileExtension(linkPart); - var isFolder = !Path.HasExtension(linkPart); + var isFolder = !linkPart.IsNullOrWhiteSpace() && !Path.HasExtension(linkPart); var isMdFile = linkPart.EndsWith(".md"); @@ -122,16 +140,11 @@ namespace Volo.Docs.Markdown { documentLocalDirectoryNormalized = "/" + documentLocalDirectoryNormalized; } - - if (!string.IsNullOrEmpty(hashPart)) - { - documentName += $"#{hashPart}"; - } return NormalizeLink( displayText, MdLinkFormat, - _docsLinkGenerator.GenerateLink(projectShortName, languageCode, $"{version}{documentLocalDirectoryNormalized}", documentName), + _docsLinkGenerator.GenerateLink(projectShortName, languageCode, $"{version}{documentLocalDirectoryNormalized}", documentName) + (hashPart.IsNullOrWhiteSpace() ? string.Empty : "#" + hashPart), projectShortName, version, documentName, @@ -139,33 +152,6 @@ namespace Volo.Docs.Markdown ); }); } - - private string NormalizeAnchorLinks(string projectShortName, string version, string documentLocalDirectory, - string languageCode, string normalized) - { - return Regex.Replace(normalized, AnchorLinkRegExp, delegate (Match match) - { - var link = match.Groups[1].Value; - var displayText = match.Groups[2].Value; - var documentName = RemoveFileExtension(link); - - if (UrlHelper.IsExternalLink(link)) - { - var documentLocalDirectoryNormalized = documentLocalDirectory.TrimStart('/').TrimEnd('/'); - if (!string.IsNullOrWhiteSpace(documentLocalDirectoryNormalized)) - { - documentLocalDirectoryNormalized = "/" + documentLocalDirectoryNormalized; - } - - link = _docsLinkGenerator.GenerateLink(projectShortName, languageCode, $"{version}{documentLocalDirectoryNormalized}", documentName); - } - - return NormalizeLink(displayText, MdLinkFormat, link,projectShortName, - version, - documentName, - languageCode); - }); - } private string NormalizeLink(string displayText, string linkFormat, string link, string projectName, string version, string documentName, string languageCode) {