public static void BuildDocument(BuildJsonConfig config, TemplateManager templateManager, string baseDirectory, string outputDirectory, string pluginDirectory, string templateDirectory) { IEnumerable <Assembly> assemblies; using (new LoggerPhaseScope("LoadPluginAssemblies", LogLevel.Verbose)) { assemblies = LoadPluginAssemblies(pluginDirectory); } var postProcessorNames = config.PostProcessors.ToImmutableArray(); var metadata = config.GlobalMetadata?.ToImmutableDictionary(); // For backward compatible, retain "_enableSearch" to globalMetadata though it's deprecated if (metadata != null && metadata.TryGetValue("_enableSearch", out object value)) { var isSearchable = value as bool?; if (isSearchable.HasValue && isSearchable.Value && !postProcessorNames.Contains("ExtractSearchIndex")) { postProcessorNames = postProcessorNames.Add("ExtractSearchIndex"); } } ChangeList changeList = null; if (config.ChangesFile != null) { changeList = ChangeList.Parse(config.ChangesFile, config.BaseDirectory); } using (var builder = new DocumentBuilder(assemblies, postProcessorNames, templateManager?.GetTemplatesHash(), config.IntermediateFolder, changeList?.From, changeList?.To)) using (new PerformanceScope("building documents", LogLevel.Info)) { builder.Build(ConfigToParameter(config, templateManager, changeList, baseDirectory, outputDirectory, templateDirectory).ToList(), outputDirectory); } }
private static IEnumerable <DocumentBuildParameters> ConfigToParameter(BuildJsonConfig config, TemplateManager templateManager, string baseDirectory, string outputDirectory, string templateDir) { var parameters = new DocumentBuildParameters(); parameters.OutputBaseDir = outputDirectory; if (config.GlobalMetadata != null) { parameters.Metadata = config.GlobalMetadata.ToImmutableDictionary(); } if (config.FileMetadata != null) { parameters.FileMetadata = ConvertToFileMetadataItem(baseDirectory, config.FileMetadata); } if (config.PostProcessors != null) { parameters.PostProcessors = config.PostProcessors.ToImmutableArray(); } parameters.ExternalReferencePackages = GetFilesFromFileMapping( GlobUtility.ExpandFileMapping(baseDirectory, config.ExternalReference)) .ToImmutableArray(); if (config.XRefMaps != null) { parameters.XRefMaps = config.XRefMaps.ToImmutableArray(); } if (!config.NoLangKeyword) { parameters.XRefMaps = parameters.XRefMaps.Add("embedded:docfx/langwordMapping.yml"); } var applyTemplateSettings = new ApplyTemplateSettings(baseDirectory, outputDirectory) { TransformDocument = config.DryRun != true, }; applyTemplateSettings.RawModelExportSettings.Export = config.ExportRawModel == true; if (!string.IsNullOrEmpty(config.RawModelOutputFolder)) { applyTemplateSettings.RawModelExportSettings.OutputFolder = Path.Combine(baseDirectory, config.RawModelOutputFolder); } applyTemplateSettings.ViewModelExportSettings.Export = config.ExportViewModel == true; if (!string.IsNullOrEmpty(config.ViewModelOutputFolder)) { applyTemplateSettings.ViewModelExportSettings.OutputFolder = Path.Combine(baseDirectory, config.ViewModelOutputFolder); } parameters.ApplyTemplateSettings = applyTemplateSettings; parameters.TemplateManager = templateManager; if (config.MaxParallelism == null || config.MaxParallelism.Value <= 0) { parameters.MaxParallelism = Environment.ProcessorCount; } else { parameters.MaxParallelism = config.MaxParallelism.Value; } if (config.MarkdownEngineName != null) { parameters.MarkdownEngineName = config.MarkdownEngineName; } if (config.MarkdownEngineProperties != null) { parameters.MarkdownEngineParameters = config.MarkdownEngineProperties.ToImmutableDictionary(); } parameters.TemplateDir = templateDir; ChangeList changeList = null; if (config.ChangesFile != null) { changeList = ChangeList.Parse(config.ChangesFile, config.BaseDirectory); } var fileMappingParametersDictionary = GroupFileMappings(config.Content, config.Overwrite, config.Resource); foreach (var pair in fileMappingParametersDictionary) { parameters.Files = GetFileCollectionFromFileMapping( baseDirectory, GlobUtility.ExpandFileMapping(baseDirectory, pair.Value.GetFileMapping(FileMappingType.Content)), GlobUtility.ExpandFileMapping(baseDirectory, pair.Value.GetFileMapping(FileMappingType.Overwrite)), GlobUtility.ExpandFileMapping(baseDirectory, pair.Value.GetFileMapping(FileMappingType.Resource))); parameters.VersionName = pair.Key; parameters.Changes = GetIntersectChanges(parameters.Files, changeList); yield return(parameters); } }