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); }