从模板生成Markdown

时间:2013-08-08 22:59:01

标签: node.js markdown pandoc

我想使用node-pandoc模块从Markdown生成PDF。但我需要在飞行中创建那些降价。是否有任何可以生成明文/降价的node.js的模板引擎?

2 个答案:

答案 0 :(得分:0)

我最近使用underscoretemplate使用rho编写的纯文本文件(也是纯文本到HTML工具,如Markdown)来生成带有动态数据的纯文本文档:

这是我的模块的代码(如果你不需要它,省略缓存):

// compiler.js
'use strict';

var fs = require('fs')
  , path = require('path')
  , _ = require('underscore');

var cache = {};

exports.getTemplate = function(templateId, cb) {
  // Use your extension here
  var file = path.join(__dirname, templateId + ".rho");
  fs.stat(file, function(err, stat) {
    if (err) return cb(err);
    // Try to get it from cache
    var cached = cache[templateId];
    if (cached && cached.mtime >= stat.mtime)
      return cb(null, cached.template);
    // Read it from file
    fs.readFile(file, { encoding: 'utf-8' }, function(err, data) {
      if (err) return cb(err);
      // Compile it
      var template = _.template(data);
      // Cache it
      cache[templateId] = {
        mtime: stat.mtime,
        template: template
      };
      // Return it
      return cb(null, template);
    });
  });
};

exports.compile = function(templateId, data, cb) {
  exports.getTemplate(templateId, function(err, template) {
    if (err) return cb(err);
    try {
      return cb(null, template(data));
    } catch (e) {
      return cb(e);
    }
  });
}

现在用法。假设您hello.rho包含以下内容:

# Hello, <%= name %>!

We are happy to have you here, <%= name %>!

您可以这样编译:

require('./compiler').compile('hello', { name: 'World' }, function(err, text) {
  if (err) // Handle the error somehow
    return console.log(err);
  console.log(text);
  // You'll get "# Hello, World!\n\nWe're happy to have you here, World!"
  // Now chain the compilation to rho, markdown, pandoc or whatever else.
});

如果您不喜欢下划线,那么我猜ejs也可以正常工作。

答案 1 :(得分:0)

看一下grunt-readme,它虽然专注于从模板生成README文档,但它是如何从模板生成降价文档的一个很好的例子。