public void Merge(MetadataMergeParameters parameters) { if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } if (parameters.OutputBaseDir == null) { throw new ArgumentException("Output folder cannot be null.", nameof(parameters) + "." + nameof(parameters.OutputBaseDir)); } if (parameters.Files == null) { throw new ArgumentException("Source files cannot be null.", nameof(parameters) + "." + nameof(parameters.Files)); } if (parameters.Metadata == null) { parameters.Metadata = ImmutableDictionary <string, object> .Empty; } using (new LoggerPhaseScope(PhaseName)) { Directory.CreateDirectory(parameters.OutputBaseDir); var files = parameters.Files.EnumerateFiles().ToList(); var outputBase = Path.Combine(Environment.CurrentDirectory, parameters.OutputBaseDir); Logger.LogInfo("Start merge metadata..."); MergePageViewModel(files, parameters, outputBase); MergeToc(files, outputBase); Logger.LogInfo("Merge metadata completed."); } }
private static void MergePageViewModel(List <FileAndType> files, MetadataMergeParameters parameters, string outputBase) { var p = new ManagedReferenceDocumentProcessor(); var host = new HostService( from f in files where f.Type == DocumentType.Article && !"toc.yml".Equals(Path.GetFileName(f.File), StringComparison.OrdinalIgnoreCase) select Load(p, parameters.Metadata, parameters.FileMetadata, f)); // todo : temp reuse plugin var pv = new ApplyPlatformVersion(); pv.Prebuild(host.Models, host); var core = new MergeManagedReferenceDocument(); host.Reload(core.Prebuild(host.Models, host)); foreach (var m in host.Models) { m.File = m.PathRewriter(m.File); } foreach (var m in host.Models) { YamlUtility.Serialize(Path.Combine(outputBase, m.File), m.Content); } }