private async Task EnrichTemplatePackage(TemplatePackage templatePackage) { IDeserializer deserializer = new DeserializerBuilder().IgnoreUnmatchedProperties().IgnoreFields().Build(); MarkdownPipeline pipeline = new MarkdownPipelineBuilder() .UseYamlFrontMatter() .Build(); foreach (Template template in templatePackage.Templates) { string filePath = Path.GetFullPath(Path.Combine(templatePackage.InstalltionPath, template.NestedFilePath)); string content = await File.ReadAllTextAsync(filePath).ConfigureAwait(false); MarkdownDocument doc = Markdown.Parse(content, pipeline); YamlFrontMatterBlock yamlBlock = doc.Descendants <YamlFrontMatterBlock>().FirstOrDefault(); if (yamlBlock != null) { string yaml = string.Join(Environment.NewLine, yamlBlock.Lines.Lines.Select(stringLine => stringLine.ToString()).Where(value => !string.IsNullOrEmpty(value))); Dictionary <string, dynamic> frontMatter = deserializer.Deserialize <Dictionary <string, dynamic> >(yaml); if (frontMatter.TryGetValue("ContentType", out dynamic contentType)) { template.ContentType = contentType; } } } }
private static (string?Name, string?Id) ReadYamlMatter(YamlFrontMatterBlock yaml) { string?name = null, id = null; foreach (var line in yaml.Lines) { if (line is StringLine str && str.Slice.Text != null) { int colon = str.Slice.IndexOf(':'); var key = str.Slice.Text[str.Slice.Start..colon];
public static FrontMatterBlock Parse(this YamlFrontMatterBlock block) { var lines = new Dictionary <string, string>(); foreach (var l in block.Lines.Lines.Select(l => l.ToString())) { if (l.IndexOf(':') > 0) { lines[l.Substring(0, l.IndexOf(':'))] = l.Substring(l.IndexOf(':') + 1); } } return(new FrontMatterBlock(lines)); }
protected override void Write(HtmlRenderer renderer, YamlFrontMatterBlock block) { try { var yaml = new YamlStream(); yaml.Load(new StringReader(block.GetText())); var root = (YamlMappingNode)yaml.Documents[0].RootNode; WriteCss(renderer, root); WriteTitle(renderer, root); } catch (Exception ex) when(!ex.IsCriticalException()) { } base.Write(renderer, block); }
public WikiNoticeContainer(YamlFrontMatterBlock yamlFrontMatterBlock) { RelativeSizeAxes = Axes.X; AutoSizeAxes = Axes.Y; Direction = FillDirection.Vertical; foreach (object line in yamlFrontMatterBlock.Lines) { switch (line.ToString()) { case "outdated: true": isOutdated = true; break; case "needs_cleanup: true": needsCleanup = true; break; } } }