Exemplo n.º 1
0
        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.");
            }
        }
Exemplo n.º 2
0
        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);
            }
        }