1

我喜欢 Markdown。这个概念是我作为程序员的几年中遇到的最优雅和最有用的概念之一。所以我很高兴看到 Meteor 实现了 Showdown 包并让我将它与{{#markdown}}块助手一起使用。

然而,当我开始使用它时,突然出现了我最不喜欢的 markdown 问题:缩进代码块。

写这个:

<template name="home">
    {{#markdown}}
        Hello!!! Welcome to *My Site*!!
    {{/markdown}}
</template>

结果如下:

My Hello!!! Welcome to *My Site*!!

格式化为代码!!!!

我讨厌缩进的代码块。他们完全搞砸了在编程环境中实际使用Markdown 的尝试。代码大量缩进,这是有充分理由的。它使事情井井有条,并使行为清晰。因此,Markdown 规范多年来一直忽略这一点的事实让我大吃一惊。Github 的围栏代码块是一种无限智能的方式来执行此操作,因为它不需要重复敲击制表符或空格键,使其更容易编辑,并且更清楚文本中发生了什么。

无论如何,</rant>

我想自定义流星使用的降价。如何??我浏览了Atmosphere并搜索了降价,但没有发现任何适用的。另外,我不确定如何在流星环境中使用 Showdown 扩展。

欢迎任何解决方案!我真正想要的是一个没有缩进代码块的降价实现。他们很愚蠢。

4

2 回答 2

3

为什么不实现你自己的markdown助手:

// this is based on showdown package in spark branch
Handlebars.registerHelper('markdown', function (options) {
  return UI.block(function () {
    var self = this;
    return function () {
      var renderer = new marked.Renderer();
      var text = UI.toRawText(self.__content, self /* parentComponent */);
      return HTML.Raw(marked(trimIndentation(text), { renderer: renderer }));
    };
  });
});

wheretrimIndentation或多或少看起来像这样:

function trimIndentation(text) {
  var regexp = null,
      result = "";
  return text.split('\n').map(function (line) {
    var match = (regexp || /(\s*)(\s*[^\s]+.*)/).exec(line);
    if (match) {
      !regexp && (regexp = new RegExp("(\\s{" + match[1].length + "})(.*)"));
      return match[2];
    }
    return line;
  }).join('\n');
}

在上面的示例中,我使用了新模板引擎的语法以及使用标记库而不是旧的摊牌(或者我应该说pagedown?),但是您当然可以使用自己的设置来做同样的事情选择。

于 2014-02-14T00:19:58.123 回答
0

Markdown似乎已被弃用。您可以用markdown-it替换本机降价:

安装依赖,npm install markdown-it markdown-it-attrs. 并将 markdown-it 设置为新的默认降价空格键。

var md = require('markdown-it')();
var markdownItAttrs = require('markdown-it-attrs');
md.use(markdownItAttrs);
// md.disable("code")

您可以决定要禁用或编辑哪些规则。就我而言,我禁用了代码块,但您可以查看自己案例的文档。

然后将markdown实现为空格键:

  Blaze.Template.registerHelper("markdown", new Template('markdown', function () {
    var view = this;
    var content = '';
    if (view.templateContentBlock) {
      content = Blaze._toText(view.templateContentBlock, HTML.TEXTMODE.STRING);
    }
    return HTML.Raw(md.render(content));
  }));

meteor remove markdown在实现您的版本之前,请务必删除 markdown ( )。

然后,您可以使用{{#markdown}}空格键调用它。

于 2021-04-16T11:30:09.930 回答