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);