I would now like to take this output and render it, via a function call, as a graph. Is there a way to have a function emit Mermaid markdown and then get that rendered somehow?
For example, I would have a function RuleBasedGrammar.render_as_mermad/1 that would internally take the above output, convert it to the Mermaid markdown:
Kino.Markdown.new() is likely what you want. It emits new markdown as a control but is not like a markdown cell. I assume you care about the output and not editing the markdown, correct? If that’s the case, Kino.Markdown is perfect. If you want to edit output around it you could always just use a separate markdown cell. It’d be clunky to mix them.
The only caveat is I don’t know if Mermaid works that way exactly. I remember there being some gotchas but memory is hazy.
The added bonus of using Kino is that’s how apps display output.
Good call! You caused me to realize that I haven’t recently inspected Kino’s modules, and there’s a lot of stuff there. I should have done so before, but upon looking up Kino.Markdown, I happened to notice Kino.Mermaid. Kino.Mermaid.new/1 does exactly what I needed with zero changes:
So now I just need to translate my graph to the Mermaid markdown, which should be straightforward enough.
I’m unfortunately not using Elixir for work at the moment, and so I get to my Livebook projects in spurts. So this is a good time to go through all the updates that have been added in Kino (unless these have been there a while, and I missed them the past few times. Haha.)
I had tried with Kino.Markdown.new/1, but I just realized that I didn’t surround the Mermaid markdown with triple backticks and the mermaid designation. Upon doing so, it works as well: