RoundtripRenderer and YamlFrontMatterRenderer #488

Closed
opened 2026-01-29 14:37:57 +00:00 by claunia · 1 comment
Owner

Originally created by @mnaoumov on GitHub (Dec 16, 2021).

If I have a markdown file my-awesome.md

---
title: Hello world
---

My awesome **markdown**

which I want to edit programatically


var pipeline
    = new MarkdownPipelineBuilder()
        .UseYamlFrontMatter()
        .EnableTrackTrivia()
        .Build();

var md = File.ReadAllText("my-awesome-md");
var document = Markdown.Parse(md, pipeline);

var sw = new StringWriter();
var rr = new RoundtripRenderer(sw);
rr.ObjectRenderers.Add(new YamlFrontMatterRenderer()); // this line doesn't change anything
rr.Write(document);
Console.WriteLine(sw.ToString());

it outputs

title: Hello world

My awesome **markdown**

with --- removed around yaml frontmatter

Originally created by @mnaoumov on GitHub (Dec 16, 2021). If I have a markdown file **my-awesome.md** ```markdown --- title: Hello world --- My awesome **markdown** ``` which I want to edit programatically ```csharp var pipeline = new MarkdownPipelineBuilder() .UseYamlFrontMatter() .EnableTrackTrivia() .Build(); var md = File.ReadAllText("my-awesome-md"); var document = Markdown.Parse(md, pipeline); var sw = new StringWriter(); var rr = new RoundtripRenderer(sw); rr.ObjectRenderers.Add(new YamlFrontMatterRenderer()); // this line doesn't change anything rr.Write(document); Console.WriteLine(sw.ToString()); ``` it outputs ``` title: Hello world My awesome **markdown** ``` with **---** removed around yaml frontmatter
claunia added the bugPR Welcome! labels 2026-01-29 14:37:57 +00:00
Author
Owner

@mnaoumov commented on GitHub (Dec 16, 2021):

Got it fixed via

rr.ObjectRenderers.Insert(0, new MyYamlFrontMatterRenderer()); // it's important to insert it before CodeBlockRenderer
public class MyYamlFrontMatterRenderer : MarkdownObjectRenderer<RoundtripRenderer, YamlFrontMatterBlock>
{
    private readonly CodeBlockRenderer _codeBlockRenderer;

    public MyYamlFrontMatterRenderer()
    {
        _codeBlockRenderer = new CodeBlockRenderer();
    }

    protected override void Write(RoundtripRenderer renderer, YamlFrontMatterBlock obj)
    {
        renderer.Writer.WriteLine("---");
        _codeBlockRenderer.Write(renderer, obj);
        renderer.Writer.WriteLine("---");
    }
}
@mnaoumov commented on GitHub (Dec 16, 2021): Got it fixed via ```csharp rr.ObjectRenderers.Insert(0, new MyYamlFrontMatterRenderer()); // it's important to insert it before CodeBlockRenderer ```` ```csharp public class MyYamlFrontMatterRenderer : MarkdownObjectRenderer<RoundtripRenderer, YamlFrontMatterBlock> { private readonly CodeBlockRenderer _codeBlockRenderer; public MyYamlFrontMatterRenderer() { _codeBlockRenderer = new CodeBlockRenderer(); } protected override void Write(RoundtripRenderer renderer, YamlFrontMatterBlock obj) { renderer.Writer.WriteLine("---"); _codeBlockRenderer.Write(renderer, obj); renderer.Writer.WriteLine("---"); } } ```
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/markdig#488