private void BuildPageLinks(WikiPage page) { //this.Log.Write("Construction liens page {0}", page.FullName); this.currentPageLink = new PageLink(page); if (this.Redirections.ContainsKey(this.currentPageLink)) { // Cette page est une redirection, on l'ignore this.Log.Info("Construction liens page {0} ignorée, redirection", page.FullName); return; } this.currentPage = page; var pageContent = page.GetContent(); if (pageContent == null) { this.Log.Info("Construction liens page {0} ignorée, vide", page.FullName); return; } var formatter = new Formatter(); var formatted = string.Empty; try { formatted = page.FormatWithPhase1And2(formatter); } catch (Exception ex) { this.Log.Error("Erreur durant la mise en forme de la page {0}, extraction annulée. Détail : {1}", page.FullName, ex); } // We create a list with all links in this page var pageLinks = new List<PageLink>(page.Links.Length); foreach (var link in page.Links) { // We create a PageLink for this link string linkNS, linkName; NameTools.ExpandFullName(link, out linkNS, out linkName); if (!this.trackCrossNamespaceLinks && linkNS != this.currentPageLink.Namespace) { // Link with another namespace, we do not track them continue; } int index = linkName.IndexOf('#'); if (index > -1) { linkName = linkName.Substring(0, index); } var pageLink = new PageLink(linkNS, linkName, null); // Pas sur que cela ait un intérêt : les liens dans la page envoient toujours vers la page qui n'existe plus, donc // peu d'intérêt de modifier les liens dans les métadonnées de la page. // Il faudrait peut-être à terme générer aussi les pages de redirection sous forme de fichiers, afin de permettre de les reconstruire ensuite. //// We eventually replace the link with the real redirected page ////PageLink redirectedLink; ////if (this.Redirections.TryGetValue(pageLink, out redirectedLink)) ////{ //// pageLink = new PageLink(redirectedLink.Namespace, redirectedLink.Name, redirectedLink.Anchor); ////} ////if (!pageLinks.Contains(pageLink)) ////{ //// pageLinks.Add(pageLink); ////} pageLinks.Add(pageLink); PageLinkStatus linkStatus; if (!this.PageLinks.TryGetValue(pageLink, out linkStatus)) { // The linked page is not yet registered (existing or not), // we create then register it var linkedPage = this.FindPage(pageLink.FullName); linkStatus = new PageLinkStatus(pageLink, linkedPage); this.PageLinks.Add(pageLink, linkStatus); } // We add this page as an incoming link linkStatus.EnteringLinks.Add(this.currentPageLink); } // We check the current page status PageLinkStatus pageStatus; if (!this.PageLinks.TryGetValue(this.currentPageLink, out pageStatus)) { // This page is not yet registered (not yet linked), // we create then register it var linkedPage = this.FindPage(this.currentPageLink.FullName); pageStatus = new PageLinkStatus(this.currentPageLink, linkedPage); this.PageLinks.Add(this.currentPageLink, pageStatus); } // The page now exists pageStatus.Exists = true; // We set all outgoing links pageStatus.Links = pageLinks; }