markd
forked from icyleaf/markdmarkd
Yet another markdown parser built for speed, written in Crystal, Compliant to CommonMark specification (v0.27
). Copy from commonmark.js.
Installation
Add this to your application's shard.yml
:
dependencies:
markd:
github: icyleaf/markd
Quick start
require "markd"
markdown = <<-MD
# Hello Markd
> Yet another markdown parser built for speed, written in Crystal, Compliant to CommonMark specification.
MD
html = Markd.to_html(markdown)
Also here are options to configure the parse and render.
options = Markd::Options.new(smart: true, safe: true)
Markd.to_html(markdown, options)
Options
Name | Type | Default value | Description |
---|---|---|---|
time | Bool |
false | render parse cost time during read source, parse blocks, parse inline. |
smart | Bool |
false | if true, straight quotes will be made curly,-- will be changed to an en dash,--- will be changed to an em dash, and... will be changed to ellipses. |
source_pos | Bool |
false | if true, source position information for block-level elements will be rendered in the data-sourcepos attribute (for HTML) |
safe | Bool |
false | if true, raw HTML will not be passed through to HTML output (it will be replaced by comments) |
prettyprint | Bool |
false | if true, code tags generated by code blocks will have a prettyprint class added to them, to be used by Google code-prettify. |
gfm | Bool |
false | Not supported for now |
toc | Bool |
false | Not supported for now |
base_url | URI? |
nil | if not nil, relative URLs of links are resolved against this URI . It act's like HTML's <base href="base_url"> in the context of a Markdown document. |
Advanced
If you want to use a custom renderer, it can!
class CustomRenderer < Markd::Renderer
def strong(node, entering)
end
# more methods following in render.
end
options = Markd::Options.new(time: true)
document = Markd::Parser.parse(markdown, options)
renderer = CustomRenderer.new(options)
html = renderer.render(document)
Performance
First of all, Markd is slower than Crystal Built-in Markdown which it is a lite version, only apply for generte Cystal documents (#4496, #4613).
Here is the result of a sample markdown file parse at MacBook Pro Retina 2015 (2.2 GHz):
Crystal Markdown 3.28k (305.29µs) (± 0.92%) fastest
Markd 305.36 ( 3.27ms) (± 5.52%) 10.73× slower
Recently, I'm working to compare the other popular commonmark parser, the code is stored in benchmarks.
Donate
Markd is an open source, collaboratively funded project. If you run a business and are using Markd in a revenue-generating product, it would make business sense to sponsor Markd development. Individual users are also welcome to make a one time donation if Markd has helped you in your work or personal projects.
You can donate via Paypal.
How to Contribute
Your contributions are always welcome! Please submit a pull request or create an issue to add a new question, bug or feature to the list.
All Contributors are on the wall.
You may also like
- halite - HTTP Requests Client with a chainable REST API, built-in sessions and middlewares.
- totem - Load and parse a configuration file or string in JSON, YAML, dotenv formats.
- poncho - A .env parser/loader improved for performance.
- popcorn - Easy and Safe casting from one type to another.
- fast-crystal - 💨 Writing Fast Crystal 😍 -- Collect Common Crystal idioms.
License
MIT License © icyleaf
markd
- 0
- 0
- 0
- 1
- 0
- about 3 years ago
- October 9, 2021
MIT License
Thu, 07 Nov 2024 17:14:51 GMT