コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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());
        }
コード例 #5
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
                });
            }
        }