예제 #1
0
        public bool WritePostFile(string postText, string blogName, string blogRoot)
        {
            var jkMeta = new JekyllMetaData
            {
                Title            = PostMetadata.Title,
                Date             = PostMetadata.PostDate.Date,
                Published        = PostMetadata.PostStatus.Equals("published", StringComparison.OrdinalIgnoreCase),
                Permalink        = PostMetadata.Permalink,
                FeaturedImageUrl = PostMetadata.FeaturedImageUrl
            };

            if (!string.IsNullOrEmpty(PostMetadata.Categories))
            {
                foreach (var cat in PostMetadata.Categories.Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries))
                {
                    jkMeta.Categories.Add(cat?.Trim());
                }
            }

            if (!string.IsNullOrEmpty(PostMetadata.Keywords))
            {
                foreach (var key in PostMetadata.Keywords.Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries))
                {
                    jkMeta.Tags.Add(key.Trim());
                }
            }

            var serializer = new SerializerBuilder()
                             .WithNamingConvention(CamelCaseNamingConvention.Instance)
                             .Build();

            string yaml = serializer.Serialize(jkMeta);

            if (PostMetadata.ExtraValues.Count > 0)
            {
                // serialize extra fields that aren't part of the scheme explicitly
                var root = new YamlMappingNode();
                var doc  = new YamlDocument(root);

                foreach (var extra in PostMetadata.ExtraValues)
                {
                    root.Add(extra.Key.ToString(), extra.Value?.ToString().Trim());
                }

                var    yamlStream = new YamlStream(doc);
                var    buffer     = new StringBuilder();
                string yamlText;
                using (var writer = new StringWriter(buffer))
                {
                    yamlStream.Save(writer);
                    yamlText = writer.ToString();
                }

                yaml += yamlText.TrimEnd('\r', '\n', '.') + mmApp.NewLine;
            }


            var folder = Path.Combine(blogRoot, "_posts");

            if (!Directory.Exists(folder))
            {
                Directory.CreateDirectory(folder);
            }

            try
            {
                var file = Path.Combine(folder, blogName + ".markdown");

                System.IO.File.WriteAllText(file, "---\n" + yaml + "---\n" + postText);
            }
            catch
            {
                SetError($"Unable to write post files into the Jekyll output folder: {blogRoot}");
                return(false);
            }

            return(true);
        }
        public bool WritePostFile(string postText, string blogName, string blogRoot)
        {
            var jkMeta = new JekyllMetaData
            {
                Title            = PostMetadata.Title,
                Date             = PostMetadata.PostDate.Date,
                Published        = PostMetadata.PostStatus.Equals("published", StringComparison.OrdinalIgnoreCase),
                Permalink        = PostMetadata.Permalink,
                FeaturedImageUrl = PostMetadata.FeaturedImageUrl
            };

            if (!string.IsNullOrEmpty(PostMetadata.Categories))
            {
                StringBuilder sb = new StringBuilder();
                foreach (var cat in PostMetadata.Categories.Split(','))
                {
                    var k = cat.ToLower().Trim().Replace(" ", "-");
                    sb.Append(k + " ");
                }
                jkMeta.Categories = sb.ToString().TrimEnd();
            }

            if (!string.IsNullOrEmpty(PostMetadata.Keywords))
            {
                StringBuilder sb = new StringBuilder();
                foreach (var key in PostMetadata.Keywords.Split(','))
                {
                    var k = key.ToLower().Trim().Replace(" ", "-");
                    sb.Append(k + " ");
                }
                jkMeta.Tags = sb.ToString().TrimEnd();
            }


            var serializer = new SerializerBuilder()
                             .WithNamingConvention(new CamelCaseNamingConvention())
                             .Build();

            string yaml = serializer.Serialize(jkMeta);

            var folder = Path.Combine(blogRoot, "_posts");

            if (!Directory.Exists(folder))
            {
                Directory.CreateDirectory(folder);
            }

            try
            {
                var file = Path.Combine(folder, blogName + ".markdown");

                System.IO.File.WriteAllText(file, "---\n" + yaml + "---\n" + postText);
            }
            catch
            {
                SetError($"Unable to write post files into the Jekyll output folder: {blogRoot}");
                return(false);
            }

            return(true);
        }