我想在docpad-plugin-marked包中扩展marked
markdown编译器,并询问如何最优雅地执行此操作的建议。
例如,这就是标记的文档如何重新定义编译标题:
var marked = require('marked');
var renderer = new marked.Renderer();
renderer.heading = function (text, level) {
var escapedText = text.toLowerCase().replace(/[^\w]+/g, '-');
return '<h' + level + '><a name="' +
escapedText +
'" class="anchor" href="#' +
escapedText +
'"><span class="header-link"></span></a>' +
text + '</h' + level + '>';
},
console.log(marked('# heading+', { renderer: renderer }));
预期结果:
<h1>
<a name="heading-" class="anchor" href="#heading-">
<span class="header-link"></span>
</a>
heading+
</h1>
但是docpad-plugin-marked有自己的标记实例,所以我想我需要注入而不是创建自己的实例。它的文档没有解释这个案例https://github.com/docpad/docpad-plugin-marked
有谁知道如何处理它?谢谢!
答案 0 :(得分:2)
现在无法执行此操作,因为插件不接受自定义渲染器 https://github.com/docpad/docpad-plugin-marked/blob/master/src/marked.plugin.coffee#L26
您必须修改插件才能接受允许您制作自定义渲染器的选项。
警告伪码:
if (config.markedRenderer) {
// make a new renderer
renderer = new marked.Renderer();
Object.keys(config.markedRenderer).forEach(function(key) {
return renderer[key] = config.markedRenderer[key];
});
}
// set the new renderer
return marked(opts.content, { renderer: renderer }, function(err, result) {
opts.content = result;
return next(err);
});
在您的配置文件中:
marked: {
markedRenderer: {
heading: function (text, level) {
var escapedText = text.toLowerCase().replace(/[^\w]+/g, '-');
return '<h' + level + '><a name="' +
escapedText +
'" class="anchor" href="#' +
escapedText +
'"><span class="header-link"></span></a>' +
text + '</h' + level + '>';
}
}
},
如果你正常工作,它会对这个插件提出很好的拉动请求!
更新:我实际上需要此功能,因此您可以在此处查看我的分叉:https://github.com/vladikoff/docpad-plugin-marked/commit/39cc54a0856c5ee0bc784920a6156acf1e1e5568#diff-c25561cb097f02c31ba4fa2cf5dce74eR34
plugins: {
marked: {
markedRenderer: {
heading: function (text, level) {
var escapedText = text.toLowerCase().replace(/[^\w]+/g, '-');
return '<h' + level + '>' +
text + ' <a name="' +
escapedText +
'" class="anchor" href="#' +
escapedText +
'"><span class="header-link"># </span></a></h' + level + '>';
}
}
},