@jiangtj/hexo-renderer-marked
v2.0.1
Published
Markdown renderer plugin for Hexo
Downloads
4
Readme
hexo-renderer-marked
Add support for Markdown. This plugin uses marked as its render engine.
Installation
$ npm install hexo-renderer-marked --save
- Hexo 4: >= 2.0
- Hexo 3: >= 0.2
- Hexo 2: 0.1.x
Options
You can configure this plugin in _config.yml
.
marked:
gfm: true
pedantic: false
breaks: true
smartLists: true
smartypants: true
modifyAnchors: 0
autolink: true
sanitizeUrl: false
headerIds: true
prependRoot: false
external_link:
enable: false
exclude: []
nofollow: false
- gfm - Enables GitHub flavored markdown
- pedantic - Conform to obscure parts of
markdown.pl
as much as possible. Don't fix any of the original markdown bugs or poor behavior. - breaks - Enable GFM line breaks. This option requires the
gfm
option to be true. - smartLists - Use smarter list behavior than the original markdown.
- smartypants - Use "smart" typograhic punctuation for things like quotes and dashes.
- modifyAnchors - Transform the anchorIds into lower case (
1
) or upper case (2
). - autolink - Enable autolink for URLs. E.g.
https://hexo.io
will become<a href="https://hexo.io">https://hexo.io</a>
. - sanitizeUrl - Remove URLs that start with
javascript:
,vbscript:
anddata:
. - headerIds - Insert header id, e.g.
<h1 id="value">text</h1>
. Useful for inserting anchor link to each paragraph with a heading. - prependRoot - Prepend root value to (internal) image path.
- Example
_config.yml
:
root: /blog/
![text](/path/to/image.jpg)
becomes<img src="/blog/path/to/image.jpg" alt="text">
- Example
- external_link
- enable - Open external links in a new tab.
- exclude - Exclude hostname. Specify subdomain when applicable, including
www
.- Example:
[foo](http://bar.com)
becomes<a href="http://bar.com" target="_blank" rel="noopener">foo</a>
- Example:
- nofollow - Add
rel="noopener external nofollow noreferrer"
to all external links for security, privacy and SEO. Read more. This can be enabled regardless ofexternal_link.enable
- Example:
[foo](http://bar.com)
becomes<a href="http://bar.com" rel="noopener external nofollow noreferrer">foo</a>
- Example:
Extras
Definition/Description Lists
hexo-renderer-marked
also implements description/definition lists using the same syntax as PHP Markdown Extra.
This Markdown:
Definition Term
: This is the definition for the term
will generate this HTML:
<dl>
<dt>Definition Term</dt>
<dd>This is the definition for the term</dd>
</dl>
Note: There is currently a limitation in this implementation. If multiple definitions are provided, the rendered HTML will be incorrect.
For example, this Markdown:
Definition Term
: Definition 1
: Definition 2
will generate this HTML:
<dl>
<dt>Definition Term<br>: Definition 1</dt>
<dd>Definition 2</dd>
</dl>
If you've got ideas on how to support multiple definitions, please provide a pull request. We'd love to support it.
Extensibility
This plugin overrides some default behaviours of how marked plugin renders the markdown into html, to integrate with the Hexo ecosystem. It is possible to override this plugin too, without resorting to forking the whole thing.
For example, to override how heading like # heading text
is rendered:
hexo.extend.filter.register('marked:renderer', function(renderer) {
const { config } = this; // Skip this line if you don't need user config from _config.yml
renderer.heading = function(text, level) {
// Default behaviour
// return `<h${level}>${text}</h${level}>`;
// outputs <h1>heading text</h1>
// If you want to insert custom class name
return `<h${level} class="headerlink">${text}</h${level}>`;
// outputs <h1 class="headerlink">heading text</h1>
}
})
Save the file in "scripts/" folder and run Hexo as usual.
Notice renderer.heading = function (text, level) {
corresponds to this line. Refer to renderer.js on how this plugin overrides the default methods. For other methods not covered by this plugin, refer to marked's documentation.