internal static TagCollection ParsePage(string pageContent, string fullName) { var title = DocumentParser.GetParsePageTitle(pageContent); var tags = GetTagsFromContent(pageContent) .Select(x => Tuple.Create(x, new[] { new Page(title, fullName) })); return(new TagCollection(tags)); }
public TagCollection Execute(Configuration configuration) { var tags = filesystemRepository.EnumerateFiles(configuration.ArticlesPath, "*.md") .Select(path => new { relativePath = path.FullName.Substring(configuration.ReadBasePath.Length), fileContent = filesystemRepository.ReadAllText(path.FullName) }) .Where(x => !DocumentParser.IsDraftFile(x.fileContent)) .Select(x => ParsePage(x.fileContent, x.relativePath)); return(new TagCollection(tags)); }
static string MutateTopXArticles(string fileContent, List <Tuple <FileInfo, string, string> > files, string baseUrl) { var toplist = files .Select(x => new { Content = x.Item3, Path = x.Item2.Replace('\\', '/'), NewSign = IsLessThan30DaysOld(x.Item1.CreationTime) ? @"<img src=""img/new.gif"">" : "" }) .Select(x => $"* [{DocumentParser.GetParsePageTitle(x.Content)}]({x.Path}) {x.NewSign}"); var content = TopXLatestArticledEx.Replace(fileContent, x => string.Join("\n", toplist)); return(content); }
static List <Tuple <FileInfo, string, string> > GetTop4NewestFiles(Configuration rootFilePath, List <FileInfo> files) { var startIndex = rootFilePath.ReadBasePath.Length; return(files .Where(x => x.FullName.StartsWith(Path.Combine(rootFilePath.ReadBasePath, "Articles"))) .OrderByDescending(x => x.LastWriteTime) .Select(x => new { File = x, Content = File.ReadAllText(x.FullName) }) .Where(x => !DocumentParser.IsDraftFile(x.Content)) .Take(4) .Select(x => Tuple.Create( x.File, x.File.FullName.Substring(startIndex, x.File.FullName.Length - startIndex - 2) + "html", x.Content)) .ToList()); }
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 }); } }