fsprojects / FSharp.Formatting

F# tools for generating documentation (Markdown processor and F# code formatter)
https://fsprojects.github.io/FSharp.Formatting/
Other
463 stars 157 forks source link

Is it possible to generate an HTML AST from Markdown? #926

Open njlr opened 4 months ago

njlr commented 4 months ago

I would like to parse some Markdown, convert it to HTML, embed that in some other HTML and render it all to an HTML string.

Something like this:

// Not real code

let markdown = Markdown.Parse(content)
let markdownHtml = Markdown.toHtmlElement markdown

let page = 
  html
    []
    [
      div [] [ str "This is my header" ]
      markdownHtml
      div [] [ str "This is my footer" ]
    ]

printfn "%s" (Html.toString html)

From the docs, I can see that FSharp.Formatting supports the markdown parsing bit, and can convert to an HTML string, but does it allow one to work with the HTML AST?

The HTML model appears to be internal.

nhirschey commented 4 months ago

No, not the HTML model. But you can use FSharp.Formatting's internal representation, the literate document type. Once you have the literate document you can manipulate it as you see fit (as you could with an HTML AST).

See https://fsprojects.github.io/FSharp.Formatting/markdown.html

F# has other purpose-built HTML libraries and my recollection from old issues about it is that dsyme wanted this library to have an HTML model that a) didn't depend on anybody else and b) didn't have anybody else depending on it. That's why it's internal.