예제 #1
0
        public static Tokenizer GetFor(DemoLanguage language)
        {
            var startFinder = RegionStartFinders[language];
            var endFinder   = RegionEndFinders[language];

            return(new Tokenizer(startFinder, endFinder));
        }
예제 #2
0
        public Demo GetDemo(DemoLanguage language, string categoryName, string demoName)
        {
            if (CategoriesForLanguages.ContainsKey(language) == false)
            {
                throw new InvalidOperationException($"There are no categories for language: {language}.");
            }

            var categoriesForLanguage = CategoriesForLanguages[language];

            var category = categoriesForLanguage.SingleOrDefault(x =>
                                                                 string.Equals(x.Slug, categoryName, StringComparison.OrdinalIgnoreCase));

            if (category == null)
            {
                throw new InvalidOperationException($"Category {categoryName} was not found.");
            }

            var demo = category.Demos.SingleOrDefault(x =>
                                                      string.Equals(x.Slug, demoName, StringComparison.OrdinalIgnoreCase));

            if (demo == null)
            {
                throw new InvalidOperationException($"Demo {demoName} was not found in category {categoryName}.");
            }

            return(demo);
        }
예제 #3
0
        public static DemoCodeBuilder Initialize(string filePath, DemoLanguage language)
        {
            var tokenizer = TokenizerFactory.GetFor(language);
            var parser    = new RegionParser(filePath, tokenizer);
            var regions   = parser.GetRegions().ToList();

            return(new DemoCodeBuilder(filePath, regions));
        }
예제 #4
0
        private CategoriesForLanguage GetCategoriesForLanguage(DemoLanguage language)
        {
            var categories             = CategoriesForLanguages[language];
            var categoriesForLanguages = categories.Select(ToCategoryForLanguage).ToList();

            return(new CategoriesForLanguage
            {
                Language = language,
                Categories = categoriesForLanguages
            });
        }
예제 #5
0
        public IActionResult GetDemo(DemoLanguage language, string categoryName, string demoName)
        {
            var demo = _demoContainer.GetDemo(language, categoryName, demoName);

            if (demo == null)
            {
                return(NotFound());
            }

            var dto = DemoDto.FromModel(demo);

            dto.StudioUrl = GetStudioUrl(demo);

            return(Ok(dto));
        }
예제 #6
0
        public IActionResult GetDemo(DemoLanguage language, string categoryName, string demoName)
        {
            try
            {
                var demo = _demoContainer.GetDemo(language, categoryName, demoName);
                var dto  = DemoDto.FromModel(demo);

                dto.StudioUrl = GetStudioUrl(demo);

                return(Ok(dto));
            }
            catch (InvalidOperationException e)
            {
                _logger.LogError(e, "An error occured during demo fetching.");
                return(NotFound());
            }
        }
예제 #7
0
        private void ParseLanguage(DemoLanguage language, string sourceFolder)
        {
            var parserSettings = new ParserSettings
            {
                SourceCodeFolder = sourceFolder,
                Language         = language
            };

            var parser = new Parser(parserSettings);

            try
            {
                var result = parser.Run();
                CategoriesForLanguages[language] = result.ToList();
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Error during source code parsing.");
            }
        }
예제 #8
0
 protected DemoCodeBuilder GetBuilder(string filePath, DemoLanguage language)
 => DemoCodeBuilder.Initialize(filePath, language);