protected override void BuildArticle(IHostService host, FileModel model) { var content = model.Content; var context = new ProcessContext(host, model); DocumentSchema schema = model.Properties.Schema; content = _schemaProcessor.Process(content, schema, context); model.LinkToUids = model.LinkToUids.Union(context.UidLinkSources.Keys); model.LinkToFiles = model.LinkToFiles.Union(context.FileLinkSources.Keys); model.FileLinkSources = model.FileLinkSources.Merge(context.FileLinkSources); model.UidLinkSources = model.UidLinkSources.Merge(context.UidLinkSources); model.Uids = model.Uids.AddRange(context.Uids); model.Properties.XRefSpecs = context.XRefSpecs; model.Properties.ExternalXRefSpecs = context.ExternalXRefSpecs; foreach (var d in context.Dependency) { host.ReportDependencyTo(model, d, DependencyTypeName.Include); } if (content is IDictionary <string, object> eo) { if (eo.TryGetValue(DocumentTypeKey, out object documentType) && documentType is string dt) { model.DocumentType = dt; } } }
public SchemaDrivenDocumentProcessor( DocumentSchema schema, ICompositionContainer container, MarkdigMarkdownService markdigMarkdownService, FolderRedirectionManager folderRedirectionManager) { if (string.IsNullOrWhiteSpace(schema.Title)) { throw new ArgumentException("Title for schema must not be empty"); } _schemaName = schema.Title; _schema = schema; SchemaValidator = schema.Validator; _allowOverwrite = schema.AllowOverwrite; _serializerPool = new ResourcePoolManager <JsonSerializer>(GetSerializer, 0x10); _markdigMarkdownService = markdigMarkdownService ?? throw new ArgumentNullException(nameof(MarkdigMarkdownService)); _folderRedirectionManager = folderRedirectionManager; if (container != null) { var commonSteps = container.GetExports <IDocumentBuildStep>(nameof(SchemaDrivenDocumentProcessor)); var schemaSpecificSteps = container.GetExports <IDocumentBuildStep>($"{nameof(SchemaDrivenDocumentProcessor)}.{_schemaName}"); BuildSteps = commonSteps.Union(schemaSpecificSteps).ToList(); } }
protected override void BuildArticle(IHostService host, FileModel model) { var content = model.Content; var context = new ProcessContext(host, model); context.Properties.Uids = new List <UidDefinition>(); context.Properties.UidLinkSources = new Dictionary <string, List <LinkSourceInfo> >(); context.Properties.FileLinkSources = new Dictionary <string, List <LinkSourceInfo> >(); context.Properties.Dependency = new HashSet <string>(); DocumentSchema schema = model.Properties.Schema; content = _schemaProcessor.Process(content, schema, context); model.LinkToUids = model.LinkToUids.Union(((Dictionary <string, List <LinkSourceInfo> >)context.Properties.UidLinkSources).Keys); model.LinkToFiles = model.LinkToFiles.Union(((Dictionary <string, List <LinkSourceInfo> >)context.Properties.FileLinkSources).Keys); model.FileLinkSources = model.FileLinkSources.Merge((Dictionary <string, List <LinkSourceInfo> >)context.Properties.FileLinkSources); model.UidLinkSources = model.UidLinkSources.Merge((Dictionary <string, List <LinkSourceInfo> >)context.Properties.UidLinkSources); foreach (var d in context.Properties.Dependency) { host.ReportDependencyTo(model, d, DependencyTypeName.Include); } if (content is IDictionary <string, object> eo) { if (eo.TryGetValue(DocumentTypeKey, out object documentType) && documentType is string dt) { model.DocumentType = dt; } } }
public SchemaValidator(DocumentSchema schema) { _schema = schema; _schemaObject = schema.InnerJObject; Validate(schema, _schemaObject); _jSchema = JSchema.Load(_schemaObject.CreateReader()); }
public override void UpdateHref(FileModel model, IDocumentBuildContext context) { var content = model.Content; var pc = new ProcessContext(null, model, context); DocumentSchema schema = model.Properties.Schema; model.Content = new SchemaProcessor( new HrefInterpreter(false, true), new FileInterpreter(false, true)).Process(content, schema, pc); }
public BaseSchema FindSchema(DocumentSchema rootSchema) { if (_isRoot) { return(rootSchema); } BaseSchema schema = rootSchema; foreach (var part in _parts) { schema = GetChildSchema(schema, part); } return(schema); }
public SchemaDrivenDocumentProcessor(DocumentSchema schema, ICompositionContainer container) { if (string.IsNullOrWhiteSpace(schema.Title)) { throw new ArgumentException("Title for schema must not be empty"); } _schemaName = schema.Title; _schema = schema; _serializerPool = new ResourcePoolManager <JsonSerializer>(GetSerializer, 0x10); if (container != null) { var commonSteps = container.GetExports <IDocumentBuildStep>(nameof(SchemaDrivenDocumentProcessor)); var schemaSpecificSteps = container.GetExports <IDocumentBuildStep>($"{nameof(SchemaDrivenDocumentProcessor)}.{_schemaName}"); BuildSteps = commonSteps.Union(schemaSpecificSteps).ToList(); } }
private static void Validate(DocumentSchema schema, JObject obj) { if (!ValidateSchemaUrl(schema.SchemaVersion)) { throw new InvalidSchemaException($"Schema {schema.SchemaVersion} is not supported. Current supported schemas are: {SupportedMetaSchemaUri.OriginalString}."); } using (var stream = typeof(SchemaValidator).Assembly.GetManifestResourceStream("Microsoft.DocAsCode.Build.SchemaDriven.schemas.v1._0.schema.json")) using (var sr = new StreamReader(stream)) { var metaSchema = JSchema.Parse(sr.ReadToEnd()); var isValid = obj.IsValid(metaSchema, out IList <string> errors); if (!isValid) { throw new InvalidSchemaException($"Schema {schema.Title} is not a valid one according to {SupportedMetaSchemaUri.OriginalString}: \n{errors.ToDelimitedString("\n")}"); } } }