Beispiel #1
0
        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();
            }
        }
Beispiel #3
0
        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;
                }
            }
        }
Beispiel #4
0
 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);
        }
Beispiel #6
0
        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();
            }
        }
Beispiel #8
0
        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")}");
                    }
                }
        }