assemble-utils
Version:
Utilities built for the Assemble project.
76 lines (61 loc) • 2.04 kB
JavaScript
/*
* Assemble
* https://github.com/assemble/
*
* Copyright (c) 2013 Upstage
* Licensed under the MIT license.
*/
(function(exports) {
var _ = require('lodash'),
frontMatter = require('../frontMatter').FrontMatter;
var frontMatterOptions = ['fromFile', 'filename', 'strict', 'schema'];
var Preprocessor = function(engine) {
this.init(engine);
this.preprocessers = {};
};
Preprocessor.prototype.init = function(engine) {
this.engine = engine;
};
Preprocessor.prototype.compile = function(string, options) {
var opts = options || {};
if(opts.preprocessers) {
if(toString.call(opts.preprocessers) !== '[object Array]') {
opts.preprocessers = [opts.preprocessers];
}
var i = 0, l = opts.preprocessers.length;
var that = this;
return opts.preprocessers[i++](string, options, function recurse(string, options) {
if(i<l) {
return opts.preprocessers[i++](string, options, recurse);
} else {
return that.engine.compile(string, options);
}
});
}
return this.engine.compile(string, options);
};
var YamlPreprocessor = function(name, callback) {
return function(string, options, next) {
var opts = _.extend({fromFile: false}, _.pick(options, frontMatterOptions));
var output = frontMatter(opts).extract(string);
var rtn = {name: name, output: output};
if(callback) {
callback(rtn);
}
return next(output.content, options);
};
};
Preprocessor.prototype.getPreprocessor = function(name) {
for(var k in this.preprocessers) {
if(k === name) {
return this.preprocessers[k];
}
}
return null;
};
exports.init = function(engine) {
var preprocessor = new Preprocessor(engine);
preprocessor.preprocessers.YamlPreprocessor = YamlPreprocessor;
return preprocessor;
};
}(typeof exports === 'object' && exports || this));