vapor-community/leaf-markdown
A Markdown renderer for Vapor and Leaf. This wraps swift-cmark, the Swift project's fork of cmark-gfm, so it understands CommonMark. A quick reference guide for CommonMark
Usage
Once set up, you can use it in your Leaf template files like any other tag:
#markdown(myMarkdown)Where you have passed myMarkdown into the view as something like:
# Hey #
Check out my *awesome* markdown! It is easy to use in `tags`Setup
Add as dependency
Add Leaf Markdown as a dependency in your Package.swift file:
dependencies: [
...,
.package(url: "https://github.com/vapor-community/leaf-markdown.git", .upToNextMajor(from: "4.0.0")),
]Then add the dependency to your target:
.target(
name: "App",
dependencies: [
// ...
.product(name: "LeafMarkdown", package: "leaf-markdown"),
],
// ...
)Register with Leaf
Register the tag with Leaf so Leaf knows about it:
app.leaf.tags["markdown"] = MarkdownTag()Don't forget to import LeafMarkdown in the file you register the tag with import LeafMarkdown.
Options
MarkdownTag accepts a MarkdownOptions set to control how markdown is parsed and rendered:
app.leaf.tags["markdown"] = MarkdownTag(options: [.smart, .footnotes])Rendering
| Option | Effect | | --- | --- | | .unsafe | Render raw HTML and unsafe links instead of stripping them. See the warning below. | | .sourcePos | Include a data-sourcepos attribute on all block elements. | | .hardBreaks | Render soft breaks as hard line breaks. | | .noBreaks | Render soft breaks as spaces. | | .githubPreLang | Use GitHub-style <pre lang="x"> for code blocks instead of <pre><code class="language-x">. | | .tablePreferStyleAttributes | Align table cells with style attributes instead of align attributes. |
Parsing
| Option | Effect | | --- | --- | | .smart | Convert straight quotes to curly, --- to em dashes and -- to en dashes. | | .footnotes | Parse footnotes. | | .validateUTF8 | Replace illegal UTF-8 sequences with U+FFFD before parsing. | | .liberalHTMLTag | Be liberal in interpreting inline HTML tags. | | .strikethroughDoubleTilde | Only parse strikethroughs surrounded by exactly two tildes. | | .fullInfoString | Include a code block's full info string in a data-meta attribute. |
Rendering untrusted markdown
By default, raw HTML in the markdown source is replaced with an <!-- raw HTML omitted --> comment, and links using javascript:, vbscript:, file: and most data: schemes are replaced with an empty destination. Text and attribute values are escaped.
// "<br>" -> "<!-- raw HTML omitted -->"
// "[click](javascript:x())" -> "<a href=\"\">click</a>"
MarkdownTag()Passing .unsafe turns all of that off:
// "<br>" -> "<br>"
MarkdownTag(options: [.unsafe])Only use .unsafe for markdown you control. If you are rendering markdown submitted by your users, leave it off.
Package Metadata
Repository: vapor-community/leaf-markdown
Default branch: main
README: README.md