public void Given_A_File_With_Header_ExcerptBlock_And_Body_Should_Create_Object_With_Correct_Data()
            {
                var          fileData        = File.ReadAllText("PostParsers/TestFiles/series-sample-test-6.md");
                const string expectedHeader  = @"---
layout: post
series:
    name: 123
    current: 2
    part: test part 1
    part: test part 2
    part: test part 3
title: some title
---";
                const string expectedExcerpt = @"
Hello World, this is an excerpt
";
                const string expectedBody    = @"

Hello rest of the world, this is the body...
";

                var result = MarkdownFileParser.ParseDataFromFile(fileData);

                Assert.Equal(expectedHeader, result.Header);
                Assert.Equal(expectedExcerpt, result.Excerpt);
                Assert.Equal(expectedBody, result.Body);
            }
Пример #2
0
        public static Post GetFileData(FileInfo file, SnowSettings snowSettings)
        {
            var rawPost         = File.ReadAllText(file.FullName);
            var fileNameMatches = FileNameRegex.Match(file.Name);
            var rawSettings     = string.Empty;

            if (!fileNameMatches.Success)
            {
                file.Name.OutputIfDebug(" - Skipping file: ");
                " - File does not match the format {year}-{month}-{day}-{slug}.(md|markdown)".OutputIfDebug();
                return(new Post.MissingPost());
            }

            var result   = MarkdownFileParser.ParseDataFromFile(rawPost);
            var settings = ParseSettings(result.Header);

            var year  = fileNameMatches.Groups["year"].Value;
            var month = fileNameMatches.Groups["month"].Value;
            var day   = fileNameMatches.Groups["day"].Value;
            var slug  = fileNameMatches.Groups["slug"].Value.ToUrlSlug();
            var date  = DateTime.ParseExact(year + month + day, "yyyyMMdd", CultureInfo.InvariantCulture);

            /// if a 'date' property is found in markdown file header, that date will be used instead of the date in the file name
            if (settings.ContainsKey("date"))
            {
                try
                {
                    date = DateTime.Parse((string)settings["date"]);
                }
                finally
                {
                    /// do nothing, let the current 'date' be as is
                }
            }

            var bodySerialized    = Markdown.Transform(result.Body);
            var excerptSerialized = Markdown.Transform(result.Excerpt ?? string.Empty);

            var postHeader = new Post
            {
                FileName       = file.Name,
                MarkdownHeader = rawSettings,
                Content        = bodySerialized,
                ContentExcerpt = excerptSerialized,
                Settings       = settings,
                Year           = date.Year,
                Month          = date.Month,
                Day            = date.Day,
                Date           = date,
                Url            = slug
            };

            postHeader.SetSnowSettings(snowSettings);
            postHeader.SetHeaderSettings(settings);

            return(postHeader);
        }
            public void Given_A_File_With_No_Header_Should_Return_Raw_Post_And_Empty_Header()
            {
                var          fileData = File.ReadAllText("PostParsers/TestFiles/series-sample-test-2.md");
                const string expected = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Donec porttitor non velit nec feugiat.";

                var result = MarkdownFileParser.ParseDataFromFile(fileData);

                Assert.Null(result.Header);
                Assert.Equal(expected, result.Body);
            }
            public void Given_File_Should_Return_Tuple_With_Item2_Containing_Post()
            {
                var          fileData = File.ReadAllText("PostParsers/TestFiles/series-sample-test-1.md");
                const string expected = @"

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Donec porttitor non velit nec feugiat.";

                var result = MarkdownFileParser.ParseDataFromFile(fileData);

                Assert.Equal(expected, result.Body);
            }
Пример #5
0
        public static Page GetFileData(FileInfo file, SnowSettings snowSettings)
        {
            var rawPage         = File.ReadAllText(file.FullName);
            var fileNameMatches = FileNameRegex.Match(file.Name);
            var rawSettings     = string.Empty;

            if (!fileNameMatches.Success)
            {
                file.Name.OutputIfDebug(" - Skipping file: ");
                " - File does not match the format {slug}.(md|markdown)".OutputIfDebug();
                return(null);
            }

            var result   = MarkdownFileParser.ParseDataFromFile(rawPage);
            var settings = PostParser.ParseSettings(result.Header);

            var slug = fileNameMatches.Groups["slug"].Value.ToUrlSlug();

            /// if a 'date' property is found in markdown file header, that date will be used instead of the date in the file name
            DateTime date = DateTime.Now;

            if (settings.ContainsKey("date"))
            {
                DateTime.TryParse((string)settings["date"], out date);
            }

            var markdown          = new Markdown();
            var bodySerialized    = markdown.Transform(result.Body);
            var excerptSerialized = markdown.Transform(result.Excerpt ?? string.Empty);

            var pageHeader = new Page
            {
                FileName       = file.Name,
                MarkdownHeader = rawSettings,
                Content        = bodySerialized,
                ContentExcerpt = excerptSerialized,
                Settings       = settings,
                Date           = date,
                Url            = "/" + slug
            };

            pageHeader.SetSnowSettings(snowSettings);
            pageHeader.SetHeaderSettings(settings);

            return(pageHeader);
        }
            public void Given_File_Should_Return_Tuple_With_Item1_Containing_Header()
            {
                var          fileData = File.ReadAllText("PostParsers/TestFiles/series-sample-test-1.md");
                const string expected = @"---
layout: post
series:
    name: 123
    current: 1
    part: test part 1
    part: test part 2
    part: test part 3
title: some title
---";

                var result = MarkdownFileParser.ParseDataFromFile(fileData);

                Assert.Equal(expected, result.Header);
            }