Yaml 标记到标记的模板语言

Yaml 标记到标记的模板语言,yaml,markdown,template-engine,pandoc,Yaml,Markdown,Template Engine,Pandoc,我正在寻找一个简单的模板引擎,它将一个YAML剪接作为上下文,并且可以很好地读取Markdown加上一些标记来生成Markdown。我试过杰基尔的液体,它很有效,除了空格,这在降价中非常重要 例如,使用此输入 --- samples: - name: one samplecode: | function sample() { return 1; } - name: two samplecode: | function sample() {

我正在寻找一个简单的模板引擎,它将一个YAML剪接作为上下文,并且可以很好地读取Markdown加上一些标记来生成Markdown。我试过杰基尔的液体,它很有效,除了空格,这在降价中非常重要

例如,使用此输入

---
samples:
- name: one
  samplecode: |
    function sample() {
      return 1;
    }
- name: two
  samplecode: |
    function sample() {
      return 2;
    }
---

{% for s in page.samples %}
- {{s.name}}

        {{s.samplecode}}

{% endfor %}
输出为:

- one

        function sample() {
  return 1;
}

- two

        function sample() {
  return 2;
}
而不是以下与Pandoc实际协同工作的内容:

- one

        function sample() {
          return 1;
        }

- two

        function sample() {
          return 2;
        }
事实上,这是一个错误


所以我的问题是:有没有适合我需要的简单模板引擎?

我想你可以使用pandoc内置的模板引擎来做你想做的事情

t.tpl

$for(samples)$
-   $samples.name$

    $samples.samplecode$

$endfor$
t.md

---
samples:
- name: one
  samplecode: |
    ```
    function sample() {
      return 1;
    }
    ```
- name: two
  samplecode: |
    ```
    function sample() {
      return 2;
    }
    ```
---
注意:我们将代码示例放在代码围栏中,因为pandoc将元数据值解释为标记

然后:


哦,哇,潘多克总是让我惊讶不已!(我很快在自述文件中搜索了“循环”,但没有找到,所以我认为这是不可能的…)我的用例唯一的缺点是它的方式有点错误(嵌入模板中的文本,而不是用于生成文本的循环)。我正在写一篇文章,在文章的某一点上,我需要生成这篇文章。但是我想我可以把所有的东西都颠倒过来,它会起作用的……如果你知道任何Haskell(哪怕只是一点点),你可以使用Pandoc类型中的
Text.Pandoc.Builder
模块从数据中编程生成Pandoc文档,然后使用Pandoc的markdown writer将其转换为markdown。如果你正在做的事情很复杂,那可能是一个更好的解决方案。
% pandoc --template t.tpl -f markdown -t markdown t.md
-   one

        function sample() {
          return 1;
        }

-   two

        function sample() {
          return 2;
        }