/// <summary> /// This is used to merge the conceptual content table of contents with any additional content table of /// contents information. /// </summary> private void MergeConceptualAndAdditionalContentTocInfo() { List<ITableOfContents> tocFiles; TocEntryCollection siteMap; TocEntry tocEntry; this.ReportProgress(BuildStep.MergeTablesOfContents, "Merging conceptual and additional tables of contents..."); if(this.ExecutePlugIns(ExecutionBehaviors.InsteadOf)) return; this.ExecutePlugIns(ExecutionBehaviors.Before); // Add the conceptual content layout files tocFiles = new List<ITableOfContents>(); foreach(TopicCollection topics in this.ConceptualContent.Topics) tocFiles.Add(topics); // Load all site maps and add them to the list foreach(var contentFile in project.ContentFiles(BuildAction.SiteMap)) { this.ReportProgress(" Loading site map '{0}'", contentFile.FullPath); siteMap = new TocEntryCollection(contentFile); siteMap.Load(); // Copy site map files to the help format folders foreach(TocEntry site in siteMap) this.CopySiteMapFiles(site); tocFiles.Add(siteMap); } // Sort the files tocFiles.Sort((x, y) => { ContentFile fx = x.ContentLayoutFile, fy = y.ContentLayoutFile; if(fx.SortOrder < fy.SortOrder) return -1; if(fx.SortOrder > fy.SortOrder) return 1; return String.Compare(fx.Filename, fy.Filename, StringComparison.OrdinalIgnoreCase); }); // Create the merged TOC. Invisible items are excluded. toc = new TocEntryCollection(); foreach(ITableOfContents file in tocFiles) file.GenerateTableOfContents(toc, false); if(toc.Count != 0) { // Look for the default topic tocEntry = toc.FindDefaultTopic(); if(tocEntry != null) defaultTopic = tocEntry.DestinationFile; } this.ExecutePlugIns(ExecutionBehaviors.After); }
/// <summary> /// This is used to merge the conceptual content table of contents with /// any additional content table of contents information. /// </summary> /// <remarks>This will also split the table of contents if any entry /// has the "split" option. A split in the conceptual content will /// take precedence as additional content is always appended to /// the end of the conceptual content. Likewise, a default topic in /// the conceptual content will take precedence over a default topic /// in the additional content.</remarks> private void MergeConceptualAndAdditionalContentTocInfo() { FileItemCollection siteMapFiles; List <ITableOfContents> tocFiles; TocEntryCollection siteMap, mergedToc; TocEntry tocEntry; this.ReportProgress(BuildStep.MergeTablesOfContents, "Merging conceptual and additional tables of contents..."); if (this.ExecutePlugIns(ExecutionBehaviors.InsteadOf)) { return; } this.ExecutePlugIns(ExecutionBehaviors.Before); // Add the conceptual content layout files tocFiles = new List <ITableOfContents>(); foreach (TopicCollection topics in conceptualContent.Topics) { tocFiles.Add(topics); } // Load all site maps and add them to the list siteMapFiles = new FileItemCollection(project, BuildAction.SiteMap); foreach (FileItem fileItem in siteMapFiles) { this.ReportProgress(" Loading site map '{0}'", fileItem.FullPath); siteMap = new TocEntryCollection(fileItem); siteMap.Load(); // Merge destination file information into the site map foreach (TocEntry site in siteMap) { this.MergeTocInfo(site); } tocFiles.Add(siteMap); } // Sort the files tocFiles.Sort((x, y) => { FileItem fx = x.ContentLayoutFile, fy = y.ContentLayoutFile; if (fx.SortOrder < fy.SortOrder) { return(-1); } if (fx.SortOrder > fy.SortOrder) { return(1); } return(String.Compare(fx.Name, fy.Name, StringComparison.OrdinalIgnoreCase)); }); // Create the merged TOC. Invisible items are excluded. mergedToc = new TocEntryCollection(); foreach (ITableOfContents file in tocFiles) { file.GenerateTableOfContents(mergedToc, project, false); } // If there were no site maps, add items copied from the project. // Empty container nodes are ignored. if (siteMapFiles.Count == 0 && toc != null && toc.Count != 0) { foreach (TocEntry t in toc) { if (t.DestinationFile != null || t.Children.Count != 0) { mergedToc.Add(t); } } } toc = mergedToc; if (toc.Count != 0) { // Look for the default topic tocEntry = toc.FindDefaultTopic(); if (tocEntry != null) { defaultTopic = tocEntry.DestinationFile; } } this.ExecutePlugIns(ExecutionBehaviors.After); }
/// <summary> /// This is used to merge the conceptual content table of contents with any additional content table of /// contents information. /// </summary> private void MergeConceptualAndAdditionalContentTocInfo() { List <ITableOfContents> tocFiles; TocEntryCollection siteMap; TocEntry tocEntry; this.ReportProgress(BuildStep.MergeTablesOfContents, "Merging conceptual and additional tables of contents..."); if (this.ExecutePlugIns(ExecutionBehaviors.InsteadOf)) { return; } this.ExecutePlugIns(ExecutionBehaviors.Before); // Add the conceptual content layout files tocFiles = new List <ITableOfContents>(); foreach (TopicCollection topics in this.ConceptualContent.Topics) { tocFiles.Add(topics); } // Load all site maps and add them to the list foreach (var contentFile in project.ContentFiles(BuildAction.SiteMap)) { this.ReportProgress(" Loading site map '{0}'", contentFile.FullPath); siteMap = new TocEntryCollection(contentFile); siteMap.Load(); // Copy site map files to the help format folders foreach (TocEntry site in siteMap) { this.CopySiteMapFiles(site); } tocFiles.Add(siteMap); } // Sort the files tocFiles.Sort((x, y) => { ContentFile fx = x.ContentLayoutFile, fy = y.ContentLayoutFile; if (fx.SortOrder < fy.SortOrder) { return(-1); } if (fx.SortOrder > fy.SortOrder) { return(1); } return(String.Compare(fx.Filename, fy.Filename, StringComparison.OrdinalIgnoreCase)); }); // Create the merged TOC. Invisible items are excluded. toc = new TocEntryCollection(); foreach (ITableOfContents file in tocFiles) { file.GenerateTableOfContents(toc, false); } if (toc.Count != 0) { // Look for the default topic tocEntry = toc.FindDefaultTopic(); if (tocEntry != null) { defaultTopic = tocEntry.DestinationFile; } } this.ExecutePlugIns(ExecutionBehaviors.After); }
/// <summary> /// This is used to merge the conceptual content table of contents with /// any additional content table of contents information. /// </summary> /// <remarks>This will also split the table of contents if any entry /// has the "split" option. A split in the conceptual content will /// take precedence as additional content is always appended to /// the end of the conceptual content. Likewise, a default topic in /// the conceptual content will take precedence over a default topic /// in the additional content.</remarks> private void MergeConceptualAndAdditionalContentTocInfo() { FileItemCollection siteMapFiles; List<ITableOfContents> tocFiles; TocEntryCollection siteMap, mergedToc; TocEntry tocEntry; this.ReportProgress(BuildStep.MergeTablesOfContents, "Merging conceptual and additional tables of contents..."); if(this.ExecutePlugIns(ExecutionBehaviors.InsteadOf)) return; this.ExecutePlugIns(ExecutionBehaviors.Before); // Add the conceptual content layout files tocFiles = new List<ITableOfContents>(); foreach(TopicCollection topics in conceptualContent.Topics) tocFiles.Add(topics); // Load all site maps and add them to the list siteMapFiles = new FileItemCollection(project, BuildAction.SiteMap); foreach(FileItem fileItem in siteMapFiles) { this.ReportProgress(" Loading site map '{0}'", fileItem.FullPath); siteMap = new TocEntryCollection(fileItem); siteMap.Load(); // Merge destination file information into the site map foreach(TocEntry site in siteMap) this.MergeTocInfo(site); tocFiles.Add(siteMap); } // Sort the files tocFiles.Sort((x, y) => { FileItem fx = x.ContentLayoutFile, fy = y.ContentLayoutFile; if(fx.SortOrder < fy.SortOrder) return -1; if(fx.SortOrder > fy.SortOrder) return 1; return String.Compare(fx.Name, fy.Name, StringComparison.OrdinalIgnoreCase); }); // Create the merged TOC mergedToc = new TocEntryCollection(); foreach(ITableOfContents file in tocFiles) file.GenerateTableOfContents(mergedToc, project); // If there were no site maps, add items copied from the project. // Empty container nodes are ignored. if(siteMapFiles.Count == 0 && toc != null && toc.Count != 0) foreach(TocEntry t in toc) if(t.DestinationFile != null || t.Children.Count != 0) mergedToc.Add(t); toc = mergedToc; if(toc.Count != 0) { // Look for the default topic tocEntry = toc.FindDefaultTopic(); if(tocEntry != null) defaultTopic = tocEntry.DestinationFile; } this.ExecutePlugIns(ExecutionBehaviors.After); }