コード例 #1
0
        private void ParseXsdPopulator(ProjectModel model, ProjectLexer lexer)
        {
            var populator = new XsdProjectModelPopulator
            {
                Type = ProjectModelPopulatorType.Xsd
            };

            model.Populators.Add(populator);

            lexer.Consume(TokenKind.LeftCurly);

            while (lexer.Token.Kind == TokenKind.Keyword)
            {
                var keyword = lexer.Consume(TokenKind.Keyword);

                switch (keyword)
                {
                case "path":
                    populator.Path = ConsumeFile(lexer);
                    OptionallyConsume(lexer, TokenKind.Semicolon);
                    break;

                default:
                    throw new ParserException($"Unexpected populator keyword: {keyword}.", lexer.Token);
                }
            }

            lexer.Consume(TokenKind.RightCurly);
        }
コード例 #2
0
        private IModelMerger CreateXsdLoader(XsdProjectModelPopulator modelPopulator, ProjectModel projectModel, AppSettings settings)
        {
            // Create the loader
            var loader = serviceProvider.GetRequiredService <IXsdLoader>();

            // TODO - verify the path exists, and if not, throw an exception

            loader.Path = modelPopulator.Path;

            // TODO - make debugging an optional flag, either on the command-line or perhaps in the project file
            loader.DebugDumpPath = Path.Combine(settings.TempDir, $"{projectModel.Id}-xsdLoader.json");

            // Create the XSD-to-model translator
            var xsdToModel = XsdToModel(loader, modelPopulator.Path, projectModel);

            xsdToModel.ShortName = "xsd";

            // Clean things up a bit
            var cleaner = Clean(xsdToModel);

            // Wrap it all up in a merger
            return(Merge(cleaner));
        }