Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Markdown 如何在docpad plugin marked下覆盖已标记编译器的呈现方法?_Markdown_Docpad - Fatal编程技术网

Markdown 如何在docpad plugin marked下覆盖已标记编译器的呈现方法?

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, '-');

我想在docpad插件标记包中扩展
标记的
标记编译器,并寻求如何最优雅地完成此操作的建议

例如,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 + '>';
    }
  }
},