public ReadMdAndWriteHtml(IFilesystemRepository filesystemRepository, ContentGenerator contentGenerator, MarkdownToHtml markdownToHtml, ExpandTagsToMarkdown expandTagsToMarkdown)
 {
     this.filesystemRepository = filesystemRepository;
     this.contentGenerator     = contentGenerator;
     this.markdownToHtml       = markdownToHtml;
     this.expandTagsToMarkdown = expandTagsToMarkdown;
 }
Beispiel #2
0
 public SiteGenerator(ContentGenerator generator,
                      IFilesystemRepository filesystemRepository,
                      TagsExtractor tagsExtractor,
                      ReadMdAndWriteHtml readMdAndWriteHtml,
                      MarkdownToHtml markdownToHtml)
 {
     this.generator            = generator;
     this.filesystemRepository = filesystemRepository;
     this.tagsExtractor        = tagsExtractor;
     this.readMdAndWriteHtml   = readMdAndWriteHtml;
     this.markdownToHtml       = markdownToHtml;
 }
Beispiel #3
0
        static string MutateCategoryTags(string fileContent, string baseUrl, ContentGenerator contentGenerator)
        {
            var content = TagsExtractor.CategoryEx.Replace(
                fileContent,
                x =>
            {
                var parsedTags = TagsExtractor.ExtractTags(x.Groups["tags"].Value);
                var links      = parsedTags.Select(tag => contentGenerator.GenerateCategoryLink(tag, baseUrl));
                return(string.Join("\r\n", links) + "\r\n");
            });

            return(content);
        }
Beispiel #4
0
        public IEnumerable <DocumentInfo> Execute(
            Configuration rootFilePath,
            TagCollection tags,
            string baseUrl,
            string editBaseUrl,
            List <FileInfo> files,
            ContentGenerator contentGenerator)
        {
            var top4Files    = GetTop4NewestFiles(rootFilePath, files);
            var articleCount = tags.SelectMany(x => x.Value).Distinct().Count();

            foreach (var path in files)
            {
                var fileContent = filesystemRepository.ReadAllText(path.FullName);

                if (DocumentParser.IsDraftFile(fileContent))
                {
                    continue;
                }

                var relativePath = path.FullName.Substring(rootFilePath.ReadBasePath.Length).Replace('\\', '/');
                var editUrl      = editBaseUrl + relativePath;

                fileContent = MutateTopXArticles(fileContent, top4Files, baseUrl);
                fileContent = MutateArticleHeaderUrlsTag(fileContent);
                fileContent = MutateSocialLinks(fileContent, baseUrl, relativePath);
                fileContent = MutateCommentText(fileContent, editUrl);
                fileContent = MutateCategoryTags(fileContent, baseUrl, contentGenerator);
                fileContent = MutateAllTagsLine(fileContent, tags, baseUrl, contentGenerator);
                fileContent = MutateBaseUrlTag(fileContent, baseUrl);
                fileContent = MutateGithubPageUrlTag(fileContent, editUrl);
                fileContent = MutateTagArticleCount(fileContent, articleCount);

                var title = DocumentParser.GetParsePageTitle(fileContent);

                yield return
                    (new DocumentInfo
                {
                    Content = fileContent,
                    Path = Path.Combine(rootFilePath.WritePath, relativePath),
                    Title = title
                });
            }
        }
Beispiel #5
0
        static string MutateAllTagsLine(string fileContent, TagCollection tags, string baseUrl, ContentGenerator contentGenerator)
        {
            var content = AllTagsEx.Replace(
                fileContent,
                z => string.Join(" ", tags
                                 .Select(x => x.Key)
                                 .OrderBy(x => x.Value)
                                 .Select(x => contentGenerator.GenerateCategoryLink(x, baseUrl))));

            return(content);
        }