Markdown 如何在docpad plugin marked下覆盖已标记编译器的呈现方法?
我想在docpad插件标记包中扩展Markdown 如何在docpad plugin marked下覆盖已标记编译器的呈现方法?,markdown,docpad,Markdown,Docpad,我想在docpad插件标记包中扩展标记的标记编译器,并寻求如何最优雅地完成此操作的建议 例如,marked的文档说明了如何重新定义编译头: var marked = require('marked'); var renderer = new marked.Renderer(); renderer.heading = function (text, level) { var escapedText = text.toLowerCase().replace(/[^\w]+/g, '-');
标记的标记编译器,并寻求如何最优雅地完成此操作的建议
例如,marked的文档说明了如何重新定义编译头:
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 }));
var-marked=require('marked');
var renderer=new marked.renderer();
renderer.heading=函数(文本,级别){
var escapedText=text.toLowerCase().replace(/[^\w]+/g,'-');
返回“”+
文本+“”;
},
log(标记为(“#heading+”,{renderer:renderer}));
预期结果:
<h1>
<a name="heading-" class="anchor" href="#heading-">
<span class="header-link"></span>
</a>
heading+
</h1>
标题+
但是docpad插件marked有它自己的marked实例,所以我想我需要在那里注入,而不是创建自己的实例。它的文件没有解释这一情况
有人知道怎么处理吗?谢谢 现在无法执行此操作,因为插件不接受自定义渲染器
您必须修改插件以接受一个选项,该选项允许您创建自定义渲染器
警告伪代码:
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 + '>';
}
}
},
已标记:{
MarkedRender:{
标题:功能(文本、级别){
var escapedText=text.toLowerCase().replace(/[^\w]+/g,'-');
返回“”+
文本+“”;
}
}
},
如果你让它正常工作,它将为这个插件提出一个伟大的拉请求
更新:我实际上需要这个功能,所以你可以在这里看到我的叉子:
插件:{
标记:{
MarkedRender:{
标题:功能(文本、级别){
var escapedText=text.toLowerCase().replace(/[^\w]+/g,'-');
返回“”+
文本+“”;
}
}
},
非常感谢!我曾经在events.renderDocument中使用regexps。但是您的解决方案看起来更加优雅和可扩展。此外,您是否愿意将您的fork插入原始插件源代码?我认为这对许多情况都很有用,不仅仅是头:-)
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 + '>';
}
}
},