public override BuildStep CreateInitialSteps(BuildGroup group) { ReferenceGroup refGroup = group as ReferenceGroup; if (refGroup == null) { throw new BuildException("The build engine requires reference group."); } if (_listFormats == null || _listFormats.Count == 0) { return(null); } BuildMultiStep listSteps = new BuildMultiStep(); listSteps.Message = "References topics for the group: " + group.Name; listSteps.LogTitle = String.Empty; listSteps.LogTimeSpan = true; BuildSettings settings = this.Settings; string sandcastleDir = this.Context.StylesDirectory; BuildStyle outputStyle = settings.Style; if (String.IsNullOrEmpty(sandcastleDir)) { return(null); } // 1. Initialize the conceptual topics... StepReferenceInit stepInit = new StepReferenceInit(refGroup); stepInit.Message = "Initializing and copying reference contents"; stepInit.LogTitle = String.Empty; listSteps.Add(stepInit); string helpStyle = BuildStyle.StyleFolder( outputStyle.StyleType); string workingDir = this.Context.WorkingDirectory; // 2. Ensure that we have a valid list of folders... IList <string> listFolders = new List <string>(); IDictionary <string, bool> dicFolders = this.GetOutputFolders(listFolders); // 3. Handle the resources... StepDirectoryCopy copyResources = new StepDirectoryCopy( workingDir); copyResources.LogTitle = String.Empty; copyResources.Message = "Copying user-defined resources."; IList <ResourceContent> resourceContents = group.ResourceContents; if (resourceContents != null && resourceContents.Count != 0) { int contentCount = resourceContents.Count; for (int j = 0; j < contentCount; j++) { ResourceContent resourceContent = resourceContents[j]; if (resourceContent == null || resourceContent.Count == 0) { continue; } int itemCount = resourceContent.Count; for (int i = 0; i < itemCount; i++) { ResourceItem resource = resourceContent[i]; if (resource != null && !resource.IsEmpty) { string destFolder = resource.Destination; copyResources.Add(resource.Source, destFolder); // Add this to the output folders so that it is copied // to the final output/build directories... if (destFolder.StartsWith("Output", StringComparison.OrdinalIgnoreCase)) { DirectoryInfo info = new DirectoryInfo(destFolder); destFolder = info.Name; if (!String.IsNullOrEmpty(destFolder) && !dicFolders.ContainsKey(destFolder)) { dicFolders.Add(destFolder, true); listFolders.Add(destFolder); } } } } } } if (copyResources.IsValid) { listSteps.Add(copyResources); } else { StepNone placeHolder = new StepNone(); placeHolder.LogTitle = String.Empty; placeHolder.Message = "Copying user-defined resources."; listSteps.Add(placeHolder); } _listFolders = listFolders; this.CreateReflectionSteps(listSteps, refGroup, sandcastleDir, helpStyle); if (listSteps.Count != 0) { return(listSteps); } return(null); }
private bool CreateConfiguration(ReferenceGroup group) { BuildExceptions.NotNull(group, "group"); BuildContext context = this.Context; BuildGroupContext groupContext = context.GroupContexts[group.Id]; if (groupContext == null) { throw new BuildException( "The group context is not provided, and it is required by the build system."); } BuildLogger logger = context.Logger; BuildSettings settings = context.Settings; BuildStyle outputStyle = settings.Style; BuildStyleType styleType = outputStyle.StyleType; string workingDir = context.WorkingDirectory; string configDir = settings.ConfigurationDirectory; if (String.IsNullOrEmpty(workingDir)) { if (logger != null) { logger.WriteLine( "The working directory is required, it is not specified.", BuildLoggerLevel.Error); } return(false); } string configFile = String.Empty; string finalConfigFile = String.Empty; if (!String.IsNullOrEmpty(configDir) && Directory.Exists(configDir)) { configFile = Path.Combine(configDir, BuildStyle.StyleFolder(styleType) + ".config"); finalConfigFile = Path.Combine(workingDir, groupContext["$ConfigurationFile"]); } if (!File.Exists(configFile)) { configFile = String.Empty; } ReferenceConfigurator assembler = new ReferenceConfigurator(); try { assembler.Initialize(context); // 3. Configure the build assembler... if (!String.IsNullOrEmpty(configFile)) { assembler.Configure(group, configFile, finalConfigFile); _manifestFile = Path.Combine(workingDir, groupContext["$ManifestFile"]); _configurationFile = finalConfigFile; } } finally { if (assembler != null) { assembler.Uninitialize(); } } return(true); }