1 | var basename = require('path').basename;
|
2 | var debug = require('debug')('metalsmith-markdown');
|
3 | var dirname = require('path').dirname;
|
4 | var extname = require('path').extname;
|
5 | var join = require('path').join;
|
6 | var marked = require('marked');
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 | var markdown = function(file) {
|
15 | return /\.md$|\.markdown$/.test(extname(file));
|
16 | };
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 | var plugin = function(options) {
|
26 | options = options || {};
|
27 | var keys = options.keys || [];
|
28 |
|
29 | return function(files, metalsmith, done) {
|
30 | setImmediate(done);
|
31 | Object.keys(files).forEach(function(file) {
|
32 | debug('checking file: %s', file);
|
33 | if (!markdown(file)) return;
|
34 | var data = files[file];
|
35 | var dir = dirname(file);
|
36 | var html = basename(file, extname(file)) + '.html';
|
37 | if ('.' != dir) html = join(dir, html);
|
38 |
|
39 | debug('converting file: %s', file);
|
40 | var str = marked(data.contents.toString(), options);
|
41 | try {
|
42 |
|
43 | data.contents = Buffer.from(str);
|
44 | } catch (err) {
|
45 |
|
46 | data.contents = new Buffer(str);
|
47 | }
|
48 | keys.forEach(function(key) {
|
49 | if (data[key]) {
|
50 | data[key] = marked(data[key].toString(), options);
|
51 | }
|
52 | });
|
53 |
|
54 | delete files[file];
|
55 | files[html] = data;
|
56 | });
|
57 | };
|
58 | };
|
59 |
|
60 |
|
61 | module.exports = plugin;
|