string GenerateAnchorElement(HtmlFile targetFile, PageTitle pageTitle)
        {
            string href    = targetFile.Uri.AbsoluteUri;
            string element = String.Empty;

            if (PageTitle == PageTitle.TitleElement)
            {
                element = targetFile.TitleElement;
            }
            else if (PageTitle == PageTitle.H1Element)
            {
                element = targetFile.H1Element;
            }
            else if (PageTitle == PageTitle.FileName)
            {
                element = Regex.Match(targetFile.Uri.AbsoluteUri, @"(?<fname>[^/\\]*?)$", RegexOptions.Singleline).Value;
                if (element == "")
                {
                    element = "(index)";
                }
            }
            else
            {
                element = targetFile.Uri.AbsoluteUri;
            }


            return(string.Format("<a href=\"{0}\">{1}</a>", HttpUtility.HtmlEncode(href), HttpUtility.HtmlEncode(element)));
        }
        private void ListUpUrls(Uri baseUri)
        {
            Queue <Uri> pending = new Queue <Uri>();

            pending.Enqueue(baseUri);

            while (pending.Count > 0)
            {
                Uri      currentUri = pending.Dequeue();
                HtmlFile file       = null;

                bw.ReportProgress(0, Resources.String3 + Environment.NewLine + currentUri.AbsolutePath);
                CheckCanceledOrNot();

                try
                {
                    file = new HtmlFile(currentUri);
                    file.Fetch(FileEncoding, LastModification == LastModification.Server && GenerateXmlFile, FromLocalFiles, LocalPathInfo);

                    if (LastModification == LastModification.Specified)
                    {
                        file.SavedDate = this.SpecifiedDate;
                    }
                    htmlFileList.Add(file);

                    foreach (Uri newUri in file.GetLinkUrls())
                    {
                        if (!htmlFileList.Exists(f => f.Uri.AbsoluteUri == newUri.AbsoluteUri) &&
                            !erroredFileUris.Exists(u => u.AbsoluteUri == newUri.AbsoluteUri) &&
                            !pending.Contains(newUri) &&
                            !MatchPattern(newUri.AbsolutePath, this.ExcludedPatternList) &&
                            newUri.AbsoluteUri.Contains(PathInfo.EliminateFileName(this.baseUrl.AbsoluteUri)))
                        {
                            pending.Enqueue(newUri);
                        }
                    }
                }
                catch (OperationCanceledException)
                {
                    throw;
                }
                catch (Exception e)
                {
                    if (IncludeNotFoundFiles && file != null)
                    {
                        htmlFileList.Add(file);
                    }
                    erroredFileUris.Add(currentUri);
                    Logger.AddLog(e, currentUri.AbsolutePath);
                }
            }
        }
        public static double CalculatePriority(HtmlFile file, int relativeDepth)
        {
            string fileName = Path.GetFileNameWithoutExtension(PathInfo.ExtractFileName(file.Uri.AbsoluteUri));

            if (fileName.Equals("") ||
                fileName.Equals("index", StringComparison.OrdinalIgnoreCase) ||
                fileName.Equals("default", StringComparison.OrdinalIgnoreCase))
            {
                return(Math.Max(1.0 - 0.1 * relativeDepth, 0.4));
            }
            else
            {
                return(Math.Max(0.8 - 0.1 * relativeDepth, 0.4));
            }
        }