markdown-styles
Version:
Markdown to HTML generator and multiple CSS themes for Markdown
96 lines (86 loc) • 2.89 kB
JavaScript
var fs = require('fs'),
path = require('path'),
pi = require('pipe-iterators'),
glob = require('wildglob'),
pipeline = require('./pipeline'),
stream = require('./stream');
module.exports = function(argv, onDone) {
var finalDone = onDone || function() {};
var doneCount = 0;
var expectedDoneCount = 2;
onDone = function() {
if (++doneCount == expectedDoneCount) {
finalDone();
}
};
// --export
if (argv['export']) {
pi.fromArray(
glob.sync(path.normalize(argv['export']).replace(/\/$/, '') + '/**')
).pipe(pi.filter(function(filename) {
var stat = fs.statSync(filename);
return stat.isFile();
}))
.pipe(stream.copy(function(filename) {
var target = path.normalize(filename.replace(argv['export'], argv.output + '/'));
console.log('Copy layout file', filename, '=>', target);
return target;
}))
.pipe(pi.devnull().once('finish', finalDone));
return;
}
var files = argv.isSingleFile ? [argv.input] : glob.sync(argv.input.replace(new RegExp(path.sep + '$'), '') + '/**');
pi.fromArray(files).pipe(pi.head([
pi.filter(function(filename) {
var stat = fs.statSync(filename);
return stat.isFile();
}),
pi.match(
// for non-markdown files: copy the file.
function(filename) {
var ext = path.extname(filename);
if (ext === '.markdown' ||
ext === '.mdown' ||
ext === '.mkd' ||
ext === '.mkdn' ||
ext === '.md') {
return false;
}
return true;
},
stream.copy(function(filename) {
if (path.basename(filename) === 'meta.json') {
return false;
}
var target = path.normalize(filename.replace(argv.input, argv.output));
console.log('Copy non-markdown file', filename, '=>', target);
return target;
}),
// rest:
pi.head([
stream.read(),
pipeline(argv),
stream.write().once('finish', onDone)
])
)
]));
// copy assets
var assetDir = path.normalize(argv.layout + '/assets').replace(/\/$/, '');
if (fs.existsSync(assetDir)) {
pi.fromArray(glob.sync(assetDir + '/**'))
.pipe(pi.filter(function(filename) {
var stat = fs.statSync(filename);
return stat.isFile();
}))
.pipe(stream.copy(function(filename) {
var target = path.normalize(filename.replace(assetDir, argv.output + '/assets/'));
console.log('Copy asset file', filename, '=>', target);
return target;
}))
.pipe(pi.devnull().once('finish', onDone));
} else {
console.log('Assets path does not exist: ' + assetDir + ', so no assets were copied.');
// always call onDone to increment the number of completed tasks
onDone();
}
};