protected override bool ReplaceLink(ref IProcessLinkParameter parameters, LinkType linkType) { FoundLink link = ((ConceptualItemParameter)parameters).Link; string href = ((ConceptualItemParameter)parameters).Href; string baseUrl = null; switch (linkType) { case LinkType.GeneralLink: baseUrl = BaseUrl; break; case LinkType.EnUsLink: baseUrl = BaseEnUsUrl; break; case LinkType.RelativeWoExt: baseUrl = BaseWoExtUrl; break; } if (baseUrl == null) { return(false); } if (Uri.TryCreate(new Uri(baseUrl), href.TrimStart('\\').TrimEnd(".md"), out Uri uri)) { string query = GetQueryFromLink(link.Link); if (linkType == LinkType.EnUsLink) { ReplacedEnUsLinks.AppendLine($"{SourceFilePath},{link.Link},\"{link.Title}\",{uri.AbsoluteUri},\"{link.Title + ExternalText}\""); } else { ReplacedLinks.AppendLine($"{SourceFilePath},{link.Link},\"{link.Title}\",{uri.AbsoluteUri},\"{link.Title + ExternalText}\""); string fileToRemove = href.TrimStart('\\'); if (!String.IsNullOrEmpty(query)) { fileToRemove = fileToRemove.Replace(query, ""); } if (Path.GetExtension(fileToRemove).Equals(".md", StringComparison.InvariantCultureIgnoreCase) && !FilesToRemove.Contains(fileToRemove)) { FilesToRemove.Add(fileToRemove); } } _newContent.Replace(link.FullMatch, link.FullMatch.Replace(link.Title, link.Title + ExternalText).Replace(link.Link, uri.AbsoluteUri)); return(true); } Logger.LogWarning($"URI could not be created: {BaseUrl} {href}"); return(false); }
/// <summary> /// Processes the link. /// </summary> /// <param name="href">The href.</param> /// <param name="rawLink">The raw link.</param> /// <param name="parameters">The parameters.</param> /// <returns></returns> protected bool ProcessLink(string href, string rawLink, IProcessLinkParameter parameters) { if (TryGetAbsoluteLinkOnDisk(BaseDir, href, out string path)) { if (File.Exists(path)) { string extension = Path.GetExtension(path); if (extension != null && extension.Equals(".MD", StringComparison.InvariantCultureIgnoreCase)) { if (NeedsToBeRemoved(path)) { if (ReplaceLink(ref parameters, LinkType.GeneralLink)) { HasModified = true; } } else { _normalFiles.AppendLine($"{href}"); } } } else { string extension = Path.GetExtension(path); if (String.IsNullOrEmpty(extension) && (rawLink.StartsWith("\\") || rawLink.StartsWith("/"))) { if (ReplaceLink(ref parameters, LinkType.RelativeWoExt)) { HasModified = true; } } else { if (EnRepository != null) { if (TryGetAbsoluteLinkOnDisk(EnRepository, href, out string enPath)) { if (File.Exists(enPath)) { if (extension != null && extension.Equals(".MD", StringComparison.InvariantCultureIgnoreCase)) { if (ReplaceLink(ref parameters, LinkType.EnUsLink)) { HasModified = true; } } else { string dir = Path.GetDirectoryName(path); if (dir != null && !Directory.Exists(dir)) { Directory.CreateDirectory(dir); } File.Copy(enPath, path); _copiedFiles.AppendLine($"{href}"); CopiedFiles.Add(href); } } else { Logger.LogWarning($"The file {href} doesn't exist in the both repositories, link inside {SourceFilePath}"); _notExistingFiles.AppendLine($"{href};{SourceFilePath}"); } } else { Logger.LogWarning($"Could not get absolute path for {BaseDir} and {href}"); } } else { Logger.LogWarning($"The file {href} doesn't exist, link inside {SourceFilePath}"); _notExistingFiles.AppendLine($"{href};{SourceFilePath}"); } } } } else { Logger.LogWarning($"Could not get absolute path for {BaseDir} and {href}"); } return(HasModified); }
/// <summary> /// Replaces the link. /// </summary> /// <returns></returns> protected abstract bool ReplaceLink(ref IProcessLinkParameter parameters, LinkType linkType);