/// <summary> /// Contruct a enw instance of the TOCBuilder class /// </summary> /// <param name="toc">The table of contents file to write to</param> /// <param name="factory">The HTMLFactory creating each file to be added</param> public TOCBuilder( TOCFile toc, HtmlFactory factory ) { if ( toc == null ) throw new NullReferenceException( "The TOCFile cannot be null" ); if ( factory == null ) throw new NullReferenceException( "The HtmlFactory cannot be null" ); _toc = toc; _factory = factory; _toc.Open(); // connect to factory events // this is so we can build the TOC as we go _factory.TopicStart += new TopicEventHandler(factory_TopicStart); _factory.TopicEnd += new EventHandler(factory_TopicEnd); _factory.AddFileToTopic += new TopicEventHandler(factory_AddFileToTopic); }
private void MakeHtml( Workspace workspace, HtmlFactory factory ) { // load the stylesheets OnDocBuildingStep( 20, "Loading StyleSheets..." ); factory.LoadStylesheets(MyConfig.ExtensibilityStylesheet); OnDocBuildingStep( 30, "Generating HTML..." ); if ( ((string)MyConfig.UseHelpNamespaceMappingFile).Length != 0 ) factory.SetNamespaceMap( MyConfig.UseHelpNamespaceMappingFile ); #if DEBUG int start = Environment.TickCount; #endif // make the html factory.MakeHtml(); #if DEBUG Trace.WriteLine( string.Format( "It took {0} seconds to make the html", ( Environment.TickCount - start ) / 1000 ) ); #endif }
/// <summary>See <see cref="IDocumenter"/>.</summary> public override void Build(Project project) { if ( !HxObject.HxCompIsInstalled ) throw new DocumenterException( "Could not find Html Help 2 compiler. Please make sure VSHIK 2003 is properly installed" ); try { #if DEBUG int start = Environment.TickCount; #endif OnDocBuildingStep( 0, "Initializing..." ); Workspace workspace = new NativeHtmlHelp2Workspace( WorkingPath ); workspace.Clean(); workspace.Prepare(); UnPackResources( workspace ); // set up the includes file IncludeFile includes = IncludeFile.CreateFrom( Path.Combine( workspace.ResourceDirectory, "includes.hxf" ), "includes" ); // attach to this event so resource directories get included in the include file workspace.ContentDirectoryAdded += new ContentEventHandler( includes.AddDirectory ); // create and save the named url index CreateNamedUrlIndex( workspace ); // save the includes file includes.Save( workspace.WorkingDirectory ); // set up the table of contents TOCFile toc = TOCFile.CreateFrom( Path.Combine( workspace.ResourceDirectory, "project.HxT" ), MyConfig.HtmlHelpName ); toc.LangId = MyConfig.LangID; // set up the project file ProjectFile HxProject = CreateProjectFile( workspace ); HxProject.TOCFile = toc.FileName; HxProject.Save( workspace.WorkingDirectory ); // get the ndoc xml OnDocBuildingStep( 10, "Merging XML documentation..." ); // Will hold the name of the file name containing the XML doc string tempFileName = null; HtmlFactory factory = null; try { // determine temp file name tempFileName = Path.GetTempFileName(); // Let the Documenter base class do it's thing. MakeXmlFile(project, tempFileName); GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); // create and intialize a HtmlFactory ExternalHtmlProvider htmlProvider = new ExternalHtmlProvider( MyConfig.HeaderHtml, MyConfig.FooterHtml); factory = new HtmlFactory(tempFileName, workspace.ContentDirectory, htmlProvider, MyConfig); } finally { if (tempFileName != null && File.Exists(tempFileName)) { File.Delete(tempFileName); } } // generate all the html content - builds the toc along the way using( new TOCBuilder( toc, factory ) ) MakeHtml( workspace, factory ); toc.Save( workspace.WorkingDirectory ); //then compile the HxC into an HxS OnDocBuildingStep( 65, "Compiling Html Help 2 Files..." ); CompileHxCFile( workspace ); // copy outputs to the final build location workspace.SaveOutputs( "*.Hxs" ); workspace.SaveOutputs( "*.HxI" ); // do clean up and final registration steps OnDocBuildingStep( 95, "Finishing up..." ); if ( MyConfig.RegisterTitleWithNamespace ) RegisterTitleWithCollection( workspace ); else if ( MyConfig.RegisterTitleAsCollection ) RegisterTitleAsCollection( workspace ); // create collection level files if( MyConfig.GenerateCollectionFiles ) CreateCollectionFiles( workspace ); workspace.RemoveResourceDirectory(); if ( MyConfig.CleanIntermediates ) workspace.CleanIntermediates(); #if DEBUG Trace.WriteLine( string.Format( "It took a total of {0} seconds", ( Environment.TickCount - start ) / 1000 ) ); #endif Trace.WriteLine( "Build complete" ); } catch ( Exception e ) { throw new DocumenterException( "An error occured while creating the documentation", e ); } }